adi_*) or a shareable invitation link (ivl_*). Either way, the customer chooses what to allow and which wallet the agent can use, and nothing moves until they accept. For the connection model, read the Customers overview.
Send the invitation
Invite a customer by email or phone withPOST /customers/invitations. Natural emails the invitation; for a phone recipient, deliver attributes.url yourself. Each request takes up to 100 recipients and 50 agents. Invitations expire after 30 days unless you set expiresAt (up to 90 days).
In the sandbox, email and phone recipients return
customer_invitation_recipient_unsupported_in_sandbox. Use POST /simulations/invite-customer, which creates a
test customer and a pending invitation for each agent you name.adi_*) per recipient and agent, each with attributes.url, the same URL Natural emails the customer. You can also surface it inside your own product; either path lands on the same acceptance page. Check meta.failedRecipients; a recipient can fail while others succeed.
Send the customer back to your product
SetredirectUrl on the invitation to bring the customer back once they are connected. A customer new to Natural is sent there after they accept and finish setup; a customer who already has an account is sent there right after they accept. Nothing happens if they decline, or while their account is still under review.
redirectUrl accepts an https URL (including universal links), an app deep link such as acme://connected, or an sms: link that reopens a Messages or iMessage thread. Natural rejects http, javascript:, data: and similar schemes. The redirect is a convenience for the customer; use the agent_delegation_invitation.accepted webhook to trigger your own follow-up, such as texting the customer their next steps.
Share an invitation link
An invitation link is the same offer with no recipient: create it once, share the URL anywhere, and any customer who opens it can accept. Create one withPOST /customers/invitation-links, naming the agents it offers and what each one asks for. name is required and at most 32 characters. The create response is the only place the API returns the shareable url, so store it then. expiresAt is optional; a link without one stays open until you revoke it.
GET /customers/invitation-links returns each link’s offer and status with a masked token and no URL. GET /customers/invitation-links/{linkId} returns one link the same way. status is ACTIVE or REVOKED; a link past expiresAt stays ACTIVE in the list but no longer connects anyone. If you lose a link’s URL, revoke the link and create a new one.
POST /customers/invitation-links/{linkId}/revoke closes the offer. It stops accepting new customers immediately; customers it already connected are untouched, because a link only ever offers, it never grants.
Every connection made through a link records its source: the delegation.activated webhook carries sourceType: "link" and, when known, sourceId set to the link’s ID. Run one link per channel and count acceptances by sourceId to measure per-channel conversion.
Redeeming the same offer again for an already-connected customer and agent is a no-op: Natural
returns the existing connection and does not widen its permissions or limits. Disconnecting first
does not revive the old acceptance; reconnect with a fresh invitation or offer.
What the customer does
1
Opens the link
They see who is requesting and which agents act. A revoked or expired invitation link shows only
that it is no longer available.
2
Onboards if new
A customer new to Natural creates an account and verifies as part of accepting. Natural handles
the compliance.
3
Picks a wallet and accepts
They choose which wallet the agent may use.
ACCEPTED and the customer shows up on GET /customers. An invitation link keeps working for the next customer; one link can onboard any number of them. Their id is the party ID (pty_*) you pass to act as them. From there the agent moves money for them within the permissions and limit they granted.
A new customer answers the invitation during signup, but the connection is created only once
Natural approves their account.
agent_delegation_invitation.accepted and delegation.activated
arrive at approval, so the invitation stays PENDING while the customer is under review. A
customer who skips the invitation during signup, or whose application is rejected, is not
connected; a skipped invitation stays PENDING until they accept it from their dashboard or it
expires.