Docs / Start

Core concepts

Tenants, customers, Digital Accounts, hosted screens, result tokens, webhooks and statuses.

The three parts of an integration#

PartWhat it doesTalks to
Your serverHolds your credentials, calls the Tenant API, exchanges result tokens and receives webhooksThe Tenant API at https://sandbox.a2ainstapay.com
Your appYour customer experience. Opens A2A InstaPay's hosted screens with the A2A Link SDK, and Plaid Link for bank linkingYour server, and the hosted screens
WebhooksTell your server about every changeYour webhook endpoint

Your app never calls the Tenant API directly, and it never holds your client secret.

Tenants and workspaces#

You are a Tenant: a company that offers A2A InstaPay to its own customers under its own brand. In the sandbox, each workspace is a separate Tenant configuration with its own credentials, settings, records and clock. Create as many workspaces as you need, for example one per developer or per test suite.

Customers and Digital Accounts#

A customer is a consumer (type: individual) or a merchant (type: business). Your own identifier goes in external_ref. Once A2A InstaPay approves the customer, it opens a Digital Account: consumer or merchant. Balances are held in an FBO (for benefit of) structure at the Sponsor Bank, either a dedicated FBO account for your program or your scheme inside the program FBO.

Hosted screens, sessions and result tokens#

Steps that need the customer's own consent or credentials happen on A2A InstaPay's hosted screens, never in your app: onboarding, confirming money movement with a PIN or passkey, PIN reset, contact changes and accepting updated documents.

  1. Your server creates a record (for example a payment) or a session. The response carries a single-use session token.
  2. Your app opens the hosted screen with the token. The customer completes the step.
  3. Your app receives a result token and sends it to your server.
  4. Your server exchanges it once with POST /v1/sessions/exchange and gets the outcome.
FlowUsed forExpires after
onboardingOpening a Digital Account30 minutes
payment_confirmConfirming a load, payment, withdrawal or refund5 minutes
pin_resetChoosing a new PIN15 minutes
contact_changeChanging e-mail, mobile number or address15 minutes
terms_acceptanceAccepting updated customer documents30 minutes

Statuses and webhooks#

Every record has a status and a version. Each change raises a signed webhook event with the object after the change and the previous values of the fields that changed. Webhooks are the source of truth: show the outcome of an exchange at once, then rely on the webhook. Every record type follows a published state machine; see the diagrams.

Money movement over RTP#

MovementHow it travels
Load (add funds)A Request for Payment to the customer's bank; the customer approves it in their banking app, and the bank sends the funds by RTP
Payment from balanceWithin A2A InstaPay, from the payer's Digital Account to the merchant's; final at once
Pay by bankA Request for Payment to the payer's bank; the funds go straight to the merchant's Digital Account
WithdrawalAn RTP credit transfer to the customer's linked bank account
RefundFrom the merchant's Digital Account back to the payer, to balance or by RTP

Amounts, time and identifiers#

  • Amounts are integers in cents, in USD. 2500 is $25.00.
  • Times are ISO 8601 in UTC. Business dates for statements and reconciliation use US Eastern Time.
  • Identifiers have a prefix that names the record, such as cus_, acct_, pay_ and evt_.

Environments#

EnvironmentPurposeBase URL
SandboxBuilding, testing and certificationhttps://sandbox.a2ainstapay.com
ProductionLive operation after go-liveIssued with production credentials

Questions about this page? Contact developer support.