The two checkpoints
New organizations start with these limits: 100 a day, and owner approval
above 15 purchase below fits under the cap and goes to the owner for approval. See
starter guardrails.
When the owner must approve
When the agent’s rules require approval,begin() returns the stage AWAITING_APPROVAL with
nextAction: WAIT_FOR_APPROVAL. Conto holds the spend against the agent’s limits and sends the
owner an approval request in Alerts & Approvals. The organization’s
approval workflow sets who can approve it. Do not open the payment
method while the checkpoint waits.
The checkpoint carries the request:
approval.status is PENDING, APPROVED, DENIED, EXPIRED, or CANCELLED. While the
checkpoint waits, expiresAt is when the owner’s decision window closes. The request expires when
its approval workflow does, and no later than 24 hours after begin().
waitForApproval(checkpoint, options) reads the checkpoint until the owner decides. It returns the
approved checkpoint, with stage APPROVED. The 30 minutes to confirm start at the approval.
Errors
Each error has acheckpoint property with the checkpoint as Conto last returned it.
CheckoutApprovalDeniedError and CheckoutApprovalExpiredError extend
CheckoutCheckpointClosedError. begin() throws CheckoutCheckpointClosedError when you retry it
with the key of a checkpoint that already closed.
Reject, expire, or cancel
- The owner rejects the purchase. The stage becomes
DENIED, and Conto releases the spend. - The request expires. The stage becomes
EXPIRED, and Conto releases the spend. - The agent cancels while it waits. Conto withdraws the approval request and releases the
spend. The stage becomes
CANCELLED.
409 APPROVAL_REQUIRED and the SDK’s
confirm() throws CheckoutApprovalPendingError. Retrying begin() with the same key returns the
same waiting checkpoint.
The merchant is the checkout domain
Conto names the merchant by the registrable domain ofcheckoutUrl. Case and a leading www. do
not matter. https://WWW.Example.com/cart and https://shop.example.com/checkout are both the
merchant example.com. Stores on a shared store platform’s domain each count as their own
merchant.
- Allow and block lists, payee status, and velocity rules with
RECIPIENTscope use that domain. - A list entry for
example.comalso coversshop.example.com. - Store rules match the host of
checkoutUrlthe same way. merchant.idandmerchant.nameare labels the owner sees. Write list entries as domains.checkoutUrlmust use the store’s domain name.begin()refuses an IP address or a single-word host such aslocalhostwith400.
HTTP endpoints
If your integration calls the HTTP API directly, use an agent SDK key with the scope for each step. All paths below begin with/api/sdk and return { "checkpoint": { ... } } with an id, stage,
nextAction, and expiresAt.
Begin with a stable
idempotencyKey, merchant ID, name and HTTPS checkout URL, amount in USD cents,
purpose, and a cart with line items and totals. Continue only after APPROVED with
CONFIRM_BEFORE_PAYING.
When begin returns 200 with AWAITING_APPROVAL and WAIT_FOR_APPROVAL, read the checkpoint
every few seconds until the stage changes. Continue after APPROVED. Stop after DENIED,
CANCELLED, or EXPIRED.
Confirm with the final amountMinor, currency, and, when available, the final cart and
pageUrl. The raw HTTP confirm refuses a changed total. Cancel the old checkpoint, begin a new one
at the final total with a new idempotency key, and confirm that one. The SDK checkout.confirm()
helper performs that replacement automatically. Submit payment only after CONFIRMED with
PAY_THEN_REPORT_OUTCOME.
Confirm and report outcome also accept an optional paymentReference, such as
{ "provider": "LINK", "id": "lsrq_..." } for the Link request behind a
Stripe Link card. The checkpoint keeps the first reference it receives and
returns 409 for a different one. Conto refuses a reference that contains a card number with 400.
After submission, report PAID, NOT_PAID, or UNKNOWN on the same checkpoint. An outcome sent
before CONFIRMED returns 409. Read its status before retrying after a timeout. Never submit the
payment twice. A reported outcome has settlementVerified: false and is not proof of settlement.
If Conto returns 503 PAYMENTS_PAUSED, stop checkout and ask the owner to check payment
availability. See error handling.
When the total changes
Tax and shipping often appear only after the buyer signs in and enters an address. The final total still has to pass the agent’s rules. If it differs from the approved total,confirm() replaces the
approval with one for the final total before it confirms. If the final total breaks a rule, the
payment stops there.
If the final total needs the owner’s approval, the owner gets a new request for it. confirm()
throws CheckoutApprovalPendingError:
pageUrl to confirm() to check that the payment is submitted on the merchant’s site or the
payment method’s own pages.
Report the outcome
PAIDkeeps the amount counted toward the agent’s limits.NOT_PAIDreleases it.UNKNOWNkeeps it counted until you report again or the owner records what happened.
confirm() succeeds. To stop before that, cancel the checkpoint.
Checkout spend counts toward the agent’s daily, weekly, and monthly limits at agent or organization
scope, together with its wallet and card spend.
An approved checkpoint that is never confirmed is released when its approval expires, 30 minutes
after begin() or after the owner’s approval. When a confirmed checkpoint has no outcome, the owner
gets an alert to check the order with the merchant.
What the owner sees
Each checkout appears in Transactions, with its status, amount, payment method, agent, purpose, order number, and steps. A checkout that waits for approval links to its request in Alerts & Approvals. When a confirmed checkout has no outcome, or the agent reportedUNKNOWN, its page shows
Mark as paid and Mark as not paid. Owners, Admins, and Managers can use them. Mark as paid
keeps the amount counted toward the agent’s limits. Mark as not paid releases it.
MCP tools
An MCP agent uses the same flow with five tools:checkout_checkpoint_begin,
checkout_checkpoint_confirm, checkout_checkpoint_report_outcome, checkout_checkpoint_cancel,
and checkout_checkpoint_status.
When checkout_checkpoint_begin returns AWAITING_APPROVAL, its result tells the agent not to
open the payment method. The agent calls checkout_checkpoint_status every few seconds until the
stage is APPROVED, then continues. It stops if the stage becomes DENIED, CANCELLED, or
EXPIRED. checkout_checkpoint_confirm can return AWAITING_APPROVAL for a changed total. The
agent waits the same way, then calls confirm again. See MCP tools.