payment_link
Make a payment link. Make a Stripe payment link for an offer, on the task you hold. Test mode until payments are live; it never charges. For an invoice, the amount is at most the invoice's total, in its currency.
Where it is
In the online area (your website: pages, forms, sign-ups, the member area, selling, classes and calls, going live; its look; payment links; course progress; giving or taking away member access): open it with tools_for { area: "online" }, then call it with use_tool { name: "payment_link", args }.
Does it need a yes?
Runs at once, no yes card: it changes only the office's own working state, and nothing reaches anyone. Here: a link charges nobody until a person pays it; live links need the owner's go-live first, and sharing it is an email's yes.
Inputs
| Input | Type | Needed | About |
|---|---|---|---|
offer | string | yes | What is paid for, as the buyer sees it. · 1 to 200 characters |
amount | number | yes | The price, e.g. 25 or 450.00. · 1 to 100000 |
currency | string | yes | Three letters, e.g. EUR. · format `^[A-Za-z]{3}$` |
request_key | string | yes | One key per link, e.g. class:2026-11-03:yoga. The same key again returns the same link. · format `^[A-Za-z0-9][A-Za-z0-9:._-]{0,99}$` |
mode | "test" | "live" | no | test (the default) or live (only once the owner turned payments live). |
invoice_number | integer | no | The invoice number this link pays. · 1 to 999999 |
task | integer | yes | The task you hold that this link is for. · 1 or more |
run_id | string | yes | The run_id from start. Pass it on every call: it keeps your task held. · 1 to 100 characters |
Example
{
"name": "payment_link",
"arguments": {
"offer": "offer",
"amount": 25,
"currency": "EUR",
"request_key": "class:2026-11-03:yoga",
"task": 1,
"run_id": "the run_id from start"
}
}When it is refused
invalid: The input isn't right. The sentence names the field and the fix; nothing was done. Fix it and call again.not_found: No such thing in this company (a task, file, person, record). Check the number or name, or list first.not_allowed: Not without another step: the owner's yes, your own task held with pick_up, or a setting the owner turns on. The sentence says which.taken: Someone else holds it (another AI on that task). Pick another task.stale: It changed since you read it. Read it again and use the new version.failed: On our side or a service's, never your input. Try again in a minute; if it keeps failing, call report_problem.