- Payment card. The current wallet response’s
agent_pay_supportindicates card eligibility. The merchant or issuer may still decline the payment. - Merchant checkout. Your Agent can read the final total, fill the card form including embedded payment fields, submit payment, and inspect the merchant’s payment or order result.
- User verification. The user can complete any required bank verification, such as 3-D Secure or a one-time code.
The payment flow
- Payment flow
- When user action is required
When a valid purchase authorization covers the payment,
get_credential can return the credential directly. Use credential.card as provided; decrypt only when the response contains key and payload.NOT_SUBMITTED; if submission occurred but its result is unknown, report UNKNOWN.
1. Read the final checkout amount
Use the merchant checkout page’s final total, including shipping and tax. Do not use the product list price or treat the user’s maximum budget as the amount to charge. Obtain contact and delivery details from the user or their merchant account. Select the website’s card payment option and leave any option to save payment details disabled. If the user named a specific wallet card, obtain itspaymentInstrumentId from a fresh get_account_state response and check agent_pay_support: true. Otherwise, omit the selector to use the default card.
2. Request a credential
The following is atools/call request. For a checkout total of USD 12.50, send amount: 1250:
wallet:read, payment:execute, instruction:read, and instruction:write.
Clink checks the chosen card and matches an active purchase authorization. If one covers the payment, the call can return the credential immediately. Otherwise, it can start a one-time authorization for this checkout. You do not need to list or create purchase authorizations before every Browser Pay call.
Handle the actual response:
When a redirect has
actor: "USER_DEVICE_ONLY", the user opens it on their own device. Do not open or preview it in the Agent’s browser. After presenting a Passkey or card setup link, wait for the same setup Operation:
get_credential with the checkout facts. Do not pass the setup operationId. Preserve paymentInstrumentId on each call if the user selected a card for this checkout. If the user chose a new default instead, call set_default_card before repeating the request without that selector.
Opening a link is not proof that authorization is complete. If the response still requires action, follow the current next_action.
3. Read or decrypt the credential
Inspect the returned shape rather than assuming every client receives the same form:
Cloud platforms arrange their public key with Clink through an offline contact. See platform integration.
How payment credentials are protected

key and payload, the credential is additionally encrypted for its public key. Decrypt with the matching private key to read the card fields. This protects credential delivery; the purchase authorization confirmed with a passkey defines the permitted spending. A response containing credential.card is also subject to the authorization limits and credential expiry.
Keep payment identifiers
Keep these identifiers for reporting:orderId identifies Clink’s payment order; it is not the merchant’s order number. Keep the merchant’s order number separately if the merchant returns one.
A
get_credential Operation with status: "SUCCEEDED" means the credential was issued. It does not mean the merchant was paid. get_operation never returns the credential and cannot independently verify the merchant’s payment result.get_credential.amount and confirm_result.paidAmount use minor currency units. The credential payload’s amount uses major units: for USD 12.50, these are 1250 and 12.50 respectively. Convert according to the currency’s precision; do not multiply every currency by 100.
4. Fill and submit the merchant payment
Fill the returned card number, expiry, and security code into the card fields on this checkout, including payment provider fields embedded in the page. Match the expiry format expected by the form. Use the returnedcardholderName and billingAddress when available; ask for missing billing information instead of inventing it.
Use the credential within its validity period. The decrypted expiry information and ttlMinutes, when present, take precedence over the outer credential.expires_at estimate.
Recheck the total immediately before submission:
- If unchanged, submit and inspect the merchant’s result. The user completes any required 3-D Secure or one-time code step.
- If changed, do not submit the old credential. Report
NOT_SUBMITTEDwithfailureReason: "AMOUNT_CHANGED", then request a credential for the new total within the user’s authorization.
credential.display to describe the card to the user.
5. Report the observed result
Callconfirm_result for the Browser Pay payment using the identifiers from step 3. For an observed successful payment:
Supply
paidAmount and currency together when the success page shows the paid amount. Add failureReason only with FAILED or NOT_SUBMITTED. See the full parameter reference.
For UNKNOWN, keep the payment identifiers and inspect the merchant’s existing order or payment result. Do not submit another payment. Report the final result before the returned report_deadline. A repeated report with the same outcome is safe; a conflicting final outcome is refused.
Clink records the Agent’s report and returns an agent_reported_result message. The report is not independent confirmation from the merchant. Refunds for this flow are handled with the merchant.
Give the user a brief result using only details observed on the merchant page. For example, when the page confirms these details:
Example Store confirmed payment of USD 12.50. Merchant order: EX-1042.If no merchant order number was shown, omit it. Do not invent one or substitute Clink’s
orderId.
Recovery without a duplicate purchase
confirm_result belongs only to Browser Pay. UCP Checkout and direct payments obtain their results through their own tools; do not report those payments through this endpoint.
For field constraints and error codes, see Browser Pay tools and Operations and recovery.