Skip to main content
Accept is in early access and subject to change. To request Accept access, contact hi@natural.com.
A payment intent (pmi_*) is a card payment to collect. Funds settle into your wallet like every other payment. Payment intents can be charged via API, through a checkout link, or via voice session.

Lifecycle

An intent starts open. It moves to processing while a card payment is in flight and to completed when one succeeds. Declined cards leave the intent open so the payer can try again; after five declined attempts it ends declined. It ends canceled when you cancel it, or expired once the expiresAt you set has passed. The amount is final once the intent exists. There is no update: to change the total, cancel the intent and create a new one.

Card payments

Every attempt to pay an intent is a card payment (cpy_*). The intent embeds its latest attempt as cardPayment, including a failed one. paymentId is set only while an attempt is in flight or once one has succeeded, so it is the field to check for the payment that counts. A card payment moves processing to succeeded, or ends failed. When it fails, failureReason says whether the issuer declined it, the processor errored, or Natural refused it before it reached the processor. Creating an intent returns a meta.payUrl checkout link exactly once. The link is single use and Natural never regenerates it, so store it with your payment intent. The page it opens is hosted by Natural: the payer enters their card, or pays with Apple Pay where it is available, and returning payers can pay with a saved card after verifying their email. 3-D Secure runs on the page when the issuer asks for it. The payer gets a receipt by email, and the charge appears on their statement under the merchant descriptor set during enrollment.

Line items and tax

Line items are optional. When you include them, every line’s subtotalMinor must equal quantity times unitAmountMinor, and the line totals must add up to amountMinor. In exclusive tax mode each line’s total is its subtotal plus its tax; in inclusive mode the tax is already inside the total. taxAmountMinor must equal the sum of line tax either way. Lines are immutable once the intent exists.

Collecting for a customer

An agent authorized by a customer can create intents that settle into the customer’s wallet. Invite the customer through Connect and request payment_intents.create, which covers Accept alone, or payments.create, which covers Accept along with sending payments. The customer enrolls as a merchant in their own dashboard. Then pass their party ID as customerPartyId on every Accept call, the same way you move money for a customer.