Concepts
Payments
Payments are the core entity in the Tesser platform, representing a transfer of stablecoins from one address to another. Each payment goes through a structured lifecycle with multiple steps.
Payment Lifecycle
Payments in Tesser follow a two-phase process:
- Payment Intent Creation (
/sendPaymentIntent) - Payment Execution (
/sendPayment)
This separation enables validation and approvals before any funds move.
- Intent Creation
- Performs balance checks, route planning, and compliance screening
- May reserve available balance according to policy
- No funds are moved and nothing is committed on the network at this stage
- Execution
- Uses the signing keys configured for the organization to authorize transfers
- Requires explicit initiation/approval by the customer (or their configured signing automation) — Tesser cannot execute unilaterally
- Results in funds actually moving on the network
- Triggers any required post-steps (e.g., off-ramp fulfillment)
Note: Payment intent creation requires the entity to have completed KYB. You can create accounts prior to KYB for integration and testing, but they cannot be used to create payment intents until KYB is complete.
Payment Steps
Each payment consists of multiple steps that track the money movement through the system:
- On-Network Transfer: Transfer stablecoins on the underlying network
- Fiat Conversion: Convert stablecoins to/from fiat currency (for on-ramp/off-ramp payments)
- Cross-Network Bridge: Move assets between different networks (when needed)
- Token Swap: Convert between different stablecoins or tokens (when needed)
Steps are tracked individually, allowing you to monitor the exact progress of each money movement operation.
Payment Properties
| Field | Type | Description |
|---|---|---|
id | string | Unique payment identifier |
idempotency_key | string | Idempotency key for safe retries |
externalId | string | Your internal reference |
payment_type | string (enum) | Payment type: onchain (wallet-to-wallet) or offramp (stablecoin-to-fiat) |
toAccount | string | Destination: wallet address for onchain; fiat account UUID for offramp |
toAmount | integer (int64) | Amount to send to destination in smallest unit (e.g., 1000000 = $1.00 USDC) |
fromCurrency | string | Source currency code |
toCurrency | string | Destination currency code |
lastStepToCurrency | string | Currency used in the final step |
originatorName | string | Originator business name |
originatorAddress | string | Originator address |
originatorCity | string | Originator city |
originatorZipCode | string | Originator zip code |
originatorState | string | Originator state |
originatorCountry | string | Originator country |
createdAt | string | Payment creation timestamp |
updatedAt | string | Payment last updated timestamp |
status | string (enum) | Current processing status |
riskScore | number (nullable) | Compliance risk score (0-15, null if not screened) |
screenedAt | string (nullable) | When compliance screening was performed |
numRiskIndicators | number (nullable) | Number of risk indicators found |
numTransactions | number (nullable) | Number of transactions associated with the address |
complianceReviewedByUserId | string (nullable) | User ID for manual compliance review |
complianceReviewedAt | string (nullable) | When manual compliance review occurred |
complianceIsApproved | boolean (nullable) | Whether manual review approved the payment |
confirmedAt | string (nullable) | When the transfer was confirmed on-network |
sourceWalletAddress | string | Funding wallet address |
blockchain | string | Network identifier |
exchangeRate | string (nullable) | Quote exchange rate (offramp) |
localAmount | string (nullable) | Local fiat amount (offramp) |
localCurrency | string (nullable) | Local fiat currency (offramp) |
beneficiaryCountry | string (nullable) | Beneficiary country (offramp) |
beneficiaryBankName | string (nullable) | Beneficiary bank name (offramp) |
beneficiaryAccountNumber | string (nullable) | Beneficiary account number (offramp) |
recipientName | string | Recipient business name |
accountNumber | string | Bank account number (offramp) |
accountType | string | Bank account type (offramp) |
financialInstitutionId | string | Financial institution ID (offramp) |
accountCountry | string | Bank account country (offramp) |
bankName | string | Bank name (offramp) |
txHash | string | Network transaction hash (when available) |
reviewer | object (nullable) | Reviewer user information (manual review) |
Last modified on