“How do I start a return?”
The return screen is there, three taps from the order. The question still lands with your support team, and each answer takes a person's time.
Rendel is the AI assistant inside your mobile app and website that does what customers ask through your own API: it starts the return, books the fitting, puts the shoe in the bag. Changes run as the customer, and nothing that can't be taken back happens until they tap Confirm.
Halden’s console, an invented store with Rendel running. Yours for two hours, no sign-up.
Changed on the card, done with one tap
Halden's shopper picks another size before she confirms.
Add the Court Low in 42 to my bag
Checking your app…
Size 42 is in stock. Confirm and the Court Low goes straight into your bag.
Returns, bookings and coupons each have a screen your team built and tested. People who can't find it ask a help widget that answers with a link, or open a ticket someone answers by hand.
The return screen is there, three taps from the order. The question still lands with your support team, and each answer takes a person's time.
A chatbot beside your app can say where the button is. The customer still has to find it and do the task, and some give up on the way.
Then engineering owns the hard parts: acting as each signed-in customer, a confirmation step, checking every value, retries that never send a change twice, and a record for audits. That is a project before launch and a system to run after it.
In a Gartner survey of 5,728 customers, published in August 2024, only 14% of service issues were fully resolved in self-service, and only 36% of the issues they called very simple. Gartner press release, 19 August 2024
Rendel uses what your app already does. Your team decides how careful each action is, and the customer decides each change.
Your coding agent lists the calls your app already makes, and the console reads an OpenAPI page, a PDF or a Postman file for the rest. You switch on the ones you trust.
list_ordersReadsAI setupstart_returnChanges somethingAI setupget_orderReadsImportbook_fittingChanges somethingManualReads run at once and changes show a card first. A change that is easy to take back can run at once with an Undo, and one that deletes or can't be undone always asks.
Runs immediately, no confirmation.
Renders a confirmation card before it runs.
Runs at once; the answer says what it did and offers Undo for ten minutes.
Ask before doing it
Needs an explicit yes, and the card expires if ignored.
Always on: a destructive action always asks first.
Rendel's server writes the card from the sentence you gave the action and the values it checked, so the model can't reword what the customer approves.
Written by your app, filled by the server
After the tap, the change goes through your API with the customer's own sign-in. Your team sees when, who, what and how it ended.
POST /v1/fittings201Authorization: Bearerthe customer's own tokenbook_fittingChanges somethingSucceededConfirmed by Emma Hughes at 15:41Rendel can only use what your app registers or your team connects. Every change runs with the customer's own session and your API's own rules.
Your actions are one list, from your app's code and from your server. Rendel uses an action only while it is on that list and switched on.
Actions
Halden's demo consolesearch_productsReadsget_productReadsget_productsReadslist_ordersReadsadd_to_cartChanges somethingstart_returnChanges somethingget_orderReadstrack_parcelReadscheck_stock_in_storeReadslist_storesReadsgift_card_balanceDisabled: Rendel cannot propose itReadsloyalty_pointsReadsapply_couponChanges somethingbook_fittingChanges somethingA Firebase call, a GraphQL client or the cart on the device: your app registers the action and its handler runs on the phone, with the app's own session. Rendel holds no credentials for it.
From your latest build (Mobile SDK 0.50.2). They run in the app, as the signed-in user.
add_to_cartChanges somethingPermissions
The signed-in user's own session
The handler runs inside your app, with the user's session. Rendel holds no credentials of its own.
Court Low$118add_to_cartBagPaste an address, link an OpenAPI page, or upload a PDF or a Postman file. Reads are tried once before they are offered; changes are never called while you connect them and come unticked.
Connect an API
Which endpoints should Rendel use?
The page to read
https://api.halden.example/openapi.json
Reading and calling…
GET /v1/orders/{order_id}as the signed-in userGET /v1/parcels/{tracking}openGET /v1/storesopenPOST /v1/cart/couponchanges data · as the signed-in user, asks firstPOST /v1/fittingschanges data · as the signed-in user, asks firstPOST /v1/auth/loginsign-in · would carry a password, not addedChanges in api.halden.example's document
Parameters changed for track_parcel: added lang
An endpoint on your server may change something only with the customer's own token, so each person reaches only their own data. A shared key can read, and goes only to its own host, over https.
book_fittingChanges somethingHow it is sent
Only an action that runs as the signed-in user can change something: a shared key does not say whose data it is. Choose the signed-in user’s token below to allow it.
Keys kept for api.halden.example under Provider credentials below. Sent only to api.halden.example, over https.
Before a change that asks first, the customer sees one card that says what will happen. Rendel's server builds it, records the tap, and runs the change once.
The sentence is the one you gave the action, filled with checked values, and the model can't word it. Every amount on the card is one your app returned; a line that isn't is dropped.
“Loopback Hoodie” comes from the order your app returned
No action returned $6.95, so the line is dropped
A tampered app can't fake a yes: Rendel's server writes down the tap, for that device and that person, before your handler runs or your endpoint is called. A result sent without that record counts as declined.
POST /v1/fittings201Account switched before the tap: not made, Rendel asks again
A confirmed change on your server is called once, however often the app retries, and a lost answer is reported as unknown instead of being sent again. On recent builds it is made at the tap itself.
POST /v1/fittings×1Answer lost: reported as unknown, not sent again
Done.
Your fitting is booked: Amsterdam studio, Saturday at 14:00. Booking F-3418.
POST /v1/fittings201A change that asks first is never bundled with another action, so the customer answers one question. It can share the answer with what it is about: here are your points, shall I apply the code?
Use my code SOCKS and tell me my points
Checking your app…
A card can be answered for ten minutes; after that it says nothing was done. If they left, Rendel tells them by push or in the app that something is waiting for their approval.
10 minutes to answer
Deleting or cancelling gets a card that says it can't be undone, with the button in the warning style. For the gravest, your app can ask the customer to type a value back, or to read a long text in full, before the button works.
Great leather and a sole that grips on wet pavement. Runs half a size small. 43 fits me. I wear them most days and they still look new after a month of rain.
Great leather and a sole that grips on wet pavement. Runs half a size small. 43 fits me. I wear them most days and they still look new after a month of rain.
Saving to a wishlist, adding to a cart, following: changes nobody wants to approve one by one. When an action names the action that takes it back, it runs straight away and the answer offers Undo for ten minutes.
The answer opens with one line saying what was done, with Undo beside it. Undo runs once however often it is tapped, and the conversation knows it was taken back.
Save the Field Boot for later
Field Boot$168Undo stays for ten minutes
Tapped twice, undone once
On each action's Safety tab, pick the action that undoes it, or keep the card. A destructive action always asks, and the console warns when an Undo would remove more than was added.
save_to_wishlistUndo instead of asking
Ask before doing it
On until you pick the action that undoes it below.
Undo with
remove_from_wishlistThe action that takes this one back. Undo stays in the answer for ten minutes.
Saved. The next question uses it.
add_to_cartUndo removes this whole line; an item the person already had in the cart goes too.
Undo only what was addedCustomers fix a value on the card instead of starting over, and forms arrive with what they already said filled in.
Mark a value changeable and the customer picks another time, size or quantity right on the card. The server checks it like the first one and redraws the card, so it always shows what will run.
book_fittingWhat each value can be
studioOne of a listdateTexttimeOne of a list11:00, 14:00, 16:30Changeable on the cardChecked again, then redrawn
Where the refund goes is the customer's choice: if they haven't said, the card leaves it empty and the button waits. What they already said is shown as said, not asked again.
She said it, so it isn't asked again
The button waits for her choice
Confirm works once she picks
A return form opens with the reason they gave already chosen. When they change their mind halfway, the open form is redrawn in place and everything they entered themselves stays.
As it arrives
Return the Loopback Hoodie from my last order, it's too small
After she talks
Her own choice stays
Return the Loopback Hoodie from my last order, it's too small
Actually, refund it to store credit
Try it in the demo console: change the size on an add-to-bag card
Some answers end on a page your app already has: the order, the bag. Rendel opens it through your own navigation, and only with values your app returned.
The answer offers the order or the bag as a card; a tap opens it with your app's own router, and a small bubble brings the answer back. An order number the model made up never opens a screen.
Orders
Order H-20391
Your last order, H-20391, was delivered on Oct 2.
orderOrders › Orderorder_idText, required, from an actionNot an order your app returned: sent as plain text
Each question carries the screen it was asked from and the few before it, so “does this run small?” is about the shoe in front of them.

Court Low
$118
Does this run small?
Yes: more than half of reviewers say the Court Low runs half a size small.
The Screens page counts opens and offers over 30 days. Turn a screen off and Rendel stops offering it on every build, with no release, while people can still open it themselves.
Screens
Halden's demo consoleRegistered
cartBagCan openOpened 214 times, from 180 of 260 replies that offered it, last 2h agoorderOrders › OrderCan openOpened 96 times, from 88 of 131 replies that offered it, last 40m ago 3 refusedproductShop › ProductCan openOpened 152 times, from 139 of 204 replies that offered it, last 25m agoordersOrdersCan openOpened 31 times, from 27 of 58 replies that offered it, last 5h agoTurn a screen off and Rendel stops offering it at once, with no release. Your app is unchanged: people can still open it themselves.
The console can make any action stricter or switch it off at once. The server checks every call and every answer before anything reaches your app or your customer.
Treat an action as destructive, or switch it off, and it applies on test and live straight away, with your reason in the audit log. Making it looser than your code declared takes a new build.
Safety rules for apply_coupon
Your app declared it write. You can make it stricter here. Making it looser than declared takes a new build of the app, so a console session can never quietly remove a confirmation.
Risk level
Why this needs a stricter rule
Support asked for it after a refund was issued without a confirmation.
It applies on test and live at once, and the change is recorded in the audit log under your name.
apply_couponDeletes or can’t be undoneStricter than declaredEvery proposed call is checked against its action before a card is drawn or your app sees it. Forms that ask for a password, a one-time code or a card number are held back, and calls go only to public https addresses.
Values match the action: types, allowed values, required fields, nothing extra
size: "47"Amounts, numbers to call and screen ids come from your app's own results
$118returned by get_productNo card is promised without a real action
A form is held back when a field's name, label or placeholder asks for a password, a one-time code, a card number, a CVV, a PIN, an IBAN or an ID number
Files only from this person, in this conversation
claim-photo.jpg · attached hereOnly public https addresses, and no redirects followed
http://10.0.0.4/adminLabel a person Read only and the assistant still answers them but offers nothing that changes anything; a card already on their screen can't be confirmed. Block stops answering them.
Noah Clarke
Label
e.g. Reseller accountDisputed payments
What changes
The assistant still answers, but offers no action that changes anything, and a card already on their screen can no longer be confirmed.
For
Until someone lifts it7 days
Save labelA timeout or an error becomes an honest sentence, and your app keeps running. A failed lookup is never “nothing found”, and a change that didn't go through says so first.
track_parcel → timed outI can't check where the parcel is right now. Want me to try again?track_parcel → 422, langtrack_parcel → 200Your Trail Runner 2 is out for delivery, today by 6 pm.apply_coupon → 409That didn't go through, so nothing has changed. Shall I try the code again?get_order → 401Your Halden session seems to have ended. Sign in again and ask me once more.book_fitting → 204Your fitting is booked: Amsterdam, Saturday at 14:00.I can't check where the parcel is right now. Want me to try again?
Your Trail Runner 2 is out for delivery, today by 6 pm.
That didn't go through, so nothing has changed. Shall I try the code again?
Your Halden session seems to have ended. Sign in again and ask me once more.
Your fitting is booked: Amsterdam, Saturday at 14:00.
See what customers had Rendel do, find the actions that fail, and try a change as a real customer before your customers do.
When, who, on which device, with what values, who confirmed it and how it ended. Owners and admins export it as CSV or JSON.
Action record
Halden's demo consoleEvery action your users had Rendel carry out: when, who, on which device, with what, who confirmed it and how it ended.
book_fittingAny actionAny outcomebook_fittingChanges somethingSucceededConfirmed by Emma Hughes on the same device at 15:41410 msstudio: Amsterdamdate: 2026-11-14time: 14:00booking_id: F-3418request 7c1e…apply_couponChanges somethingDeclinedDeclined by Noah Clarke on the same device at 15:12start_returnChanges somethingExpiredget_orderOnly looked something up220 mstrack_parcelFailedThe endpoint did not answer in time.Spot a failing action in two clicks: filter the list to Failing, Changes data, Off or Needs a key, then open it. Its page shows its calls in 7 days, how many failed, its median time, recent runs and every rule change.
get_ordertrack_parcel6% failedapply_coupontrack_parcelRecent runs
On the Test page, Talk as signs in to your API as a test user, so your team sees the real card and the real call before customers do.
Book me a fitting in Amsterdam on Saturday at 14:00
When Rendel changes something, or the customer undoes it, your app hears about it, so the bag on screen reloads instead of showing the old count.
Rendel.changeschangedundoneHalden is an invented shoe store with Rendel running for five weeks. This is the return its shopper Mira makes, as the demo plays it.
Six steps, one read, one form, one card.
Order H-20391
Return RT-3YVCOW started
Return the Loopback Hoodie from my last order, it's too small
Checking your app…
Here's the return for your Loopback Hoodie. Returns are free and the refund goes out as soon as it's scanned in.
list_orders2 / 6Open Halden's console, go to Test and ask to return the hoodie in your own words, then change the size on an add-to-bag card. Both land on the Action record, under Conversations.
A support agent beside your app, an app inside ChatGPT or a framework you build on can all call an API. Here is where they differ from Rendel, row by row.
| Topic | Rendel, inside your app | A separate tool |
|---|---|---|
| Where the task finishes | On your app's own screens and cards, where the customer already is | In a chat channel, a widget or another company's app; the customer goes back to yours to see it |
| Whose permission it runs with | The customer's own session in your app, or their own token on your server; a shared key can only read | Usually credentials set up for the tool, unless you build per-customer sign-in yourself |
| Before something changes | A card Rendel's server builds from your sentence, with the tap recorded on the server; or an Undo for what is easy to take back | An approval step you design, or the host's own rules, which some let the user switch off |
| Made-up values | Checked against each action before anything runs; amounts and screen ids must come from your own results | Whatever checks you write |
| Switching one action off | One switch in the console, on every build, with no release | Often a redeploy, or a setting in another product |
| When something fails | A plain sentence; a lost answer to a change is reported as unknown, never sent twice | Error handling you build and keep |
| Reaching people outside your app | Not what it does: Rendel works inside your mobile app and website | Stronger here: chat channels, phone and email, or an assistant people open outside your app |
| What people asked for and couldn't do | Counted for you in Requests to build, grouped across wordings and languages | Found by reading transcripts, if the tool keeps them |
If you need one agent across chat, phone and email, a support platform fits better. If you want to own every part, a framework does. Rendel is for the tasks your app already does, done where your customers already are.
Every console rule applies at once, every change waits for the customer's tap or comes with an Undo, and every run is on the record.
OWASP's 2025 Top 10 for LLM applications names “excessive agency” as a risk and lists ways to limit it. Here is where three of them sit in Rendel.
Changes that can't be taken back wait for a tap on a card Rendel's server builds, and the tap is recorded before anything runs. Easy-to-reverse ones run with an Undo, and destructive ones get the stricter card.
Actions in your app use its own session. Changes on your server need the signed-in customer's own token.
Your API's rules decide what each person may do, and the server checks every value before it reaches your API.
OWASP, LLM06:2025 Excessive Agency
| What they can do | Owner | Admin | Developer | Analyst | Conversation reviewer | Customer support |
|---|---|---|---|---|---|---|
| See the Actions and Screens pages | Yes | Yes | Yes | Read only | Yes | No |
| Connect, edit, switch on or off; keys; safety rules; Undo; screen switches | Yes | Yes | Yes | No | No | No |
| Record confirmations on the server (the switch) | Yes | No | No | No | No | No |
| Read the Action record | Yes | Yes | Yes | No | Yes | No |
| Export the Action record | Yes | Yes | No | No | No | No |
| Test page, including Talk as | Yes | Yes | Yes | No | Yes | No |
| Label a person Read only or Block | Yes | Yes | No | No | No | No |
Every rule change is recorded in the audit log under the name of the person who made it.
The customer's token is used for the one call it was handed for, then dropped: never stored, logged, shown in the console or given to the model.
Emails, phone numbers and card numbers that users type are masked before the model sees them. The card the customer reads and the value your action receives are the real ones.
Conversations and action runs are stored in Frankfurt (AWS eu-central-1). The model's traffic is not used for training.
Each run is kept with its conversation for your app's retention window, 365 days unless you change it, and erased with the person when you erase one user.
Shared keys are stored encrypted, sent only to their own host over https, and never shown again.
Owners and admins can also mask names and addresses in what your actions return, and refuse attachments, with strict masking.
The customer can always say no: Go back, let the card run out, or tap Undo within ten minutes.
Your coding agent does most of it from one prompt. What it needs from your app is who is signed in and the calls you already make.
Any version reads and runs actions. The newer parts below draw only on builds that have them, and an older build keeps the card.
Call identify after sign-in and reset on sign-out, and hand the SDK the customer's token before each question. Without it, changes on your server are not offered.
Your endpoints become actions on the server; register in your app's code only what a server can't call. An endpoint that needs a shared key waits, switched off, until you add the key.
Undo pairs, values changeable on the card, screens with registerRoute, the listener that refreshes your screens, and push so approval notices reach the lock screen.
On the Test page, Talk as a test user and ask for the action. You see the real card and the real call.
On every plan, Pilot included. An action belongs to the answer it is part of: the question and the follow-up that carries its result count as one message.
| Part | Mobile SDK | Web SDK |
|---|---|---|
| Actions, confirmation cards, forms | Any | Any |
| Changes on your server, as the signed-in customer | 0.27.0 | 0.5.0 |
| Forms that change as they talk | 0.28.0 | 0.6.0 |
| Opening your screens | 0.38.0 | 0.15.0 |
| Values changeable on the card | 0.46.4 | 0.23.5 |
| Screen opens counted | 0.46.5 | 0.23.6 |
| Type to confirm, Read all | 0.50.0 | 0.27.0 |
| The screen they asked from | 0.62.0 | 0.41.0 |
| Card words in the conversation's language (EN, TR, DE, FR, ES, AR) | 0.67.0 | 0.45.0 |
| Empty values the card asks for | 0.67.1 | 0.45.1 |
| Undo instead of a card | 0.69.0 | 0.46.0 |
| Your screens refresh after a change | 0.71.0 | 0.48.0 |
| Done at the tap; a dot on the button while a card waits | 0.73.0 | 0.50.0 |
Reads run at once. A change shows a card first and runs only after the customer taps Confirm; an unanswered card expires after ten minutes. If your team gives a change its undo, like saving to a wishlist, it runs at once and the answer offers Undo for ten minutes. A destructive action always asks.
For any change, the customer's own. An action in your app's code runs on the device with your app's session, and Rendel holds no credentials for it. An endpoint on your server may change something only with the signed-in customer's token, used for that call and never stored. A shared key can only read, and some reads need no key at all.
Every proposed call is checked against its action before a card is drawn: types, allowed values, bounds and required fields. Every amount on a card must be one your app returned, and an order number that opens a screen must come from your own results. The check proves where a value came from, not that it is right.
Yes, for values you mark changeable, like a size, a time or a quantity. The server checks the new value with the same rules and redraws the card, so it always shows what will run. Ids and amounts your app works out should never be changeable. It needs Mobile SDK 0.46.4 or Web SDK 0.23.5.
The customer gets a plain sentence and your app keeps running. A failed lookup is never reported as nothing found. A change that didn't go through says so first, and Rendel asks before trying again. If the answer to a confirmed change on your server is lost, Rendel says it can't tell whether it happened, instead of sending it twice.
No. Your coding agent lists the calls your app already makes, and the console reads an OpenAPI or Swagger page, a PDF reference or a Postman collection, so your team ticks the endpoints it wants. Only calls a server can't make, like an SDK on the device, are registered in your app's code.
Yes. Switch it off in the console and Rendel stops offering it on every build at once. You can also make it stricter, for example treat it as destructive, with your reason kept in the audit log. Making it looser than your code declared takes a new build.
Call anything your app didn't register or your team didn't connect, or open a screen you didn't register. It holds back a form that asks for a password, a one-time code, a card number, a CVV, a PIN, an IBAN or an ID number; the check reads field names, labels and placeholders, so a field called just “code” is not caught. It never calls private or internal addresses, and never follows a redirect.
Rendel's server records the tap itself before anything runs, and a result sent without that record counts as declined. A change on your server runs only for the person the card was drawn for. A confirmation proves a tap happened on that device, not who held it; turn on identity verification if that matters to you.
Yes. The Action record shows when, who, on which device, with what values, who confirmed it and how it ended. It is kept with its conversation for your app's retention window, 365 days unless you change it, and erased with the person when you erase one user. Owners and admins can export it.
Actions have no separate price, and every plan has them, Pilot included. You pay per message, one answer Rendel writes. A question and the follow-up that carries its action's result count as one message, plus one more for each started $0.02 of model cost.
Apps built with Flutter, on iOS and Android, through the Mobile SDK, and websites through the Web SDK. Any version reads and runs actions. Newer parts, like Undo or running at the tap, draw only on builds that have them, and an older build simply keeps the card.
Start free on your own, or tell us what your customers do most and we’ll show you that exact workflow, working, in a tailored demo.
Prefer email?
sales@rendel.aiTell us about your app and we’ll show the right workflow in a tailored demo.