Skip to main content
POST
Create a payment link

Authorizations

x-juno-jwt
string
header
required

JWT issued by Dynamic Labs or Privy. Sent in the x-juno-jwt header on every authenticated request.

Headers

x-juno-orgid
string | null

Tenant org ID for multi-tenant auth

x-sumvin-token
string | null
x-sumvin-pat
string | null
x-juno-jwt
string | null
X-Timestamp-Format
string

Controls how timestamp fields are serialized in JSON response bodies.

Default (header omitted or any other value): epoch milliseconds as integers. iso8601: UTC ISO 8601 strings of the form YYYY-MM-DDTHH:MM:SSZ.

Example: with X-Timestamp-Format: iso8601, the field value 1704067200000 becomes "2024-01-01T00:00:00Z".

Affected fields (recursively, in dicts and arrays): any field whose name ends in _at, plus the literal field names timestamp, period_start, and period_end. All other fields are passed through unchanged.

Only iso8601 is recognized. Any other value (or omitting the header) yields the default epoch-ms representation; the server does not reject unknown values, so this is documented as an example rather than an enum to keep generated clients permissive.

Example:

"iso8601"

Body

application/json

Body for POST /v0/payment-links.

pint
PurchaseIntentPayload · object
required

EIP-712 PurchaseIntent payload that the requester signed.

signature
string
required

0x-prefixed hex ECDSA signature (130 hex chars) over the PurchaseIntent.

Pattern: ^0x[0-9a-fA-F]{130}$
accepted_chains
enum<integer>[]
required

Chain IDs on which the requester will accept settlement.

Minimum array length: 1

EVM-compatible blockchain networks the codebase knows about.

This is a vocabulary enum — the set of chain IDs the code can talk about for asset metadata, off-ramp routing (Meld), payment-link acceptance, and agent data lookups. It is NOT an acceptance enum: typing a request-model field as chain_id: KnownChains does NOT gate input to operational chains.

For write-boundary acceptance (onboarding, wallet creation, workflow contracts), use DeployableChain from sumvin/model/enums/chain.py.

Chain ID values follow the EIP-155 standard.

  • 1 - Ethereum Mainnet
  • 10 - Optimism
  • 137 - Polygon (formerly Matic)
  • 42161 - Arbitrum One
  • 8453 - Base
  • 43114 - Avalanche C-Chain
  • 56 - BNB Smart Chain (BSC)
  • 1328 - Sei Testnet
  • 1329 - Sei
Available options:
1,
10,
137,
42161,
8453,
43114,
56,
1328,
1329
expires_at
integer
required

Payment link expiry (epoch milliseconds). Must be in the future and within 90 days. The link stops working at whichever comes first, this or the signed payload's own expiry.

max_uses
integer | null

Maximum times this link can be settled. Null = unlimited.

Required range: x >= 1
fee_policy
Fee Policy · object | null

Opaque JSON object describing settlement fees. Shape is not yet stable — do not depend on specific keys.

description
string | null

Optional requester-supplied copy shown to the payer.

Maximum string length: 280

Response

Successful Response

Owner-view single payment link response.

HAL-style hypermedia links for navigation and available actions.

Payment link resource.

Example: