@spritz-finance/mcp-server 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/openapi.json ADDED
@@ -0,0 +1 @@
1
+ {"openapi":"3.0.3","info":{"title":"Spritz Finance API","description":"API for the Spritz Finance platform with RFC 9457 error handling","version":"1.0.0"},"tags":[{"name":"Users","description":"User management endpoints"},{"name":"Bank Accounts","description":"Manage bank accounts for off-ramp destinations"},{"name":"Cards","description":"Spritz-issued debit cards"},{"name":"Auto-Ramp Accounts","description":"Virtual bank accounts that automatically convert fiat deposits to crypto"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Cognito JWT token for regular user authentication"},"integratorJwt":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Integrator JWT token (prefix: spr_) for frontend integrator authentication. Obtained via token exchange endpoint."},"hmacAuth":{"type":"apiKey","in":"header","name":"X-Signature","description":"HMAC signature authentication for backend integrators.\n\n**Required Headers:**\n- X-Integrator-Key: Integrator API key (format: int_...)\n- X-Signature: HMAC signature (format: sha256={hex})\n- X-Timestamp: Unix timestamp in milliseconds\n- Authorization: Bearer {user-api-key}\n\n**Signature Algorithm:** HMAC-SHA256\n\n**Signature Format:** {timestamp}.{METHOD}.{path}.{bodyHash}\n- timestamp: Unix timestamp in milliseconds\n- METHOD: HTTP method in UPPERCASE (GET, POST, etc.)\n- path: Request path (e.g., /v1/transactions)\n- bodyHash: SHA256 hex digest of request body (empty string if no body)\n\n**Timestamp Tolerance:** ±5 minutes (300 seconds)\n\n**Example:**\nFor POST /v1/transactions with body {\"amount\":100} and timestamp 1234567890000:\nPayload: 1234567890000.POST./v1/transactions.{sha256(body)}\nSignature: sha256=abc123..."},"integratorKey":{"type":"apiKey","in":"header","name":"X-Integrator-Key","description":"Integrator API key (format: int_...) used with HMAC authentication"},"timestamp":{"type":"apiKey","in":"header","name":"X-Timestamp","description":"Unix timestamp in milliseconds for replay attack prevention. Must be within 5 minutes of server time."}},"schemas":{}},"paths":{"/v1/auto-ramp-accounts/":{"get":{"tags":["Auto-Ramp Accounts"],"security":[{"bearerAuth":[]},{"integratorJwt":[]},{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"List auto-ramp accounts","description":"Returns all auto-ramp accounts for the authenticated user. Each account is a virtual bank account that automatically converts fiat deposits to crypto.","responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"array","items":{"description":"A virtual bank account that automatically converts fiat deposits to crypto. The account is opened in the user's name - funds deposited are converted to the specified token and sent to the destination wallet address. Important: Always confirm the account status is 'active' before initiating a deposit.","type":"object","properties":{"id":{"description":"Unique identifier for this auto-ramp account","examples":["507f1f77bcf86cd799439011"],"type":"string"},"depositInstructions":{"description":"Bank account details for depositing fiat funds. Use these instructions to initiate ACH or wire transfers.","type":"object","properties":{"bankName":{"description":"Name of the bank holding the virtual account","examples":["Lead Bank"],"type":"string"},"bankAddress":{"description":"Physical address of the bank","examples":["1801 Main St, Kansas City, MO 64108"],"type":"string"},"bankRoutingNumber":{"description":"ABA routing number for the bank (9 digits). Used for ACH and wire transfers.","examples":["101019644"],"type":"string"},"bankAccountNumber":{"description":"Account number for deposits. This is the full account number required to initiate transfers to this virtual account.","examples":["1234567890"],"type":"string"},"paymentRails":{"description":"Supported payment rails for depositing funds","examples":[["ach","wire"]],"type":"array","items":{"type":"string"}}},"required":["bankName","bankAddress","bankRoutingNumber","bankAccountNumber","paymentRails"]},"network":{"description":"Blockchain network where converted crypto will be sent. Lowercase network identifier.","examples":["ethereum","polygon","base"],"type":"string"},"address":{"description":"Destination wallet address. Fiat deposits are converted and sent to this address.","examples":["0x1234567890abcdef1234567890abcdef12345678"],"type":"string"},"token":{"description":"Token that fiat deposits will be converted to","examples":["USDC","USDT"],"type":"string"},"currency":{"description":"Fiat currency accepted for deposits","examples":["USD"],"type":"string"},"status":{"type":"string","enum":["active","inactive"]},"createdAt":{"description":"Timestamp when this auto-ramp account was created (ISO 8601)","format":"date-time","examples":["2025-01-15T10:30:00.000Z"],"type":"string"}},"required":["id","depositInstructions","network","address","token","currency","status","createdAt"]}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1Auto-ramp-accounts"},"post":{"tags":["Auto-Ramp Accounts"],"security":[{"bearerAuth":[]},{"integratorJwt":[]},{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Create an auto-ramp account","description":"Creates a new auto-ramp account for the authenticated user. The account is a virtual bank account that automatically converts fiat deposits to crypto. The address must be valid for the specified network, and the network/token combination must be supported for your region.","requestBody":{"description":"Request body for creating a new auto-ramp account. The address format must be valid for the specified network, and the network/token combination must be supported for your region.","required":true,"content":{"application/json":{"schema":{"description":"Request body for creating a new auto-ramp account. The address format must be valid for the specified network, and the network/token combination must be supported for your region.","type":"object","properties":{"address":{"description":"Destination wallet address for crypto payouts","examples":["0x742d35Cc6634C0532925a3b844Bc9e7595f2a3b8"],"type":"string"},"network":{"type":"string","enum":["ethereum","polygon","base","arbitrum","avalanche","optimism","solana","tron","bitcoin"]},"token":{"description":"Token to receive (must be valid for network)","examples":["USDC"],"type":"string"}},"required":["address","network","token"]}},"application/x-www-form-urlencoded":{"schema":{"description":"Request body for creating a new auto-ramp account. The address format must be valid for the specified network, and the network/token combination must be supported for your region.","type":"object","properties":{"address":{"description":"Destination wallet address for crypto payouts","examples":["0x742d35Cc6634C0532925a3b844Bc9e7595f2a3b8"],"type":"string"},"network":{"type":"string","enum":["ethereum","polygon","base","arbitrum","avalanche","optimism","solana","tron","bitcoin"]},"token":{"description":"Token to receive (must be valid for network)","examples":["USDC"],"type":"string"}},"required":["address","network","token"]}},"multipart/form-data":{"schema":{"description":"Request body for creating a new auto-ramp account. The address format must be valid for the specified network, and the network/token combination must be supported for your region.","type":"object","properties":{"address":{"description":"Destination wallet address for crypto payouts","examples":["0x742d35Cc6634C0532925a3b844Bc9e7595f2a3b8"],"type":"string"},"network":{"type":"string","enum":["ethereum","polygon","base","arbitrum","avalanche","optimism","solana","tron","bitcoin"]},"token":{"description":"Token to receive (must be valid for network)","examples":["USDC"],"type":"string"}},"required":["address","network","token"]}}}},"responses":{"201":{"description":"A virtual bank account that automatically converts fiat deposits to crypto. The account is opened in the user's name - funds deposited are converted to the specified token and sent to the destination wallet address. Important: Always confirm the account status is 'active' before initiating a deposit.","content":{"application/json":{"schema":{"description":"A virtual bank account that automatically converts fiat deposits to crypto. The account is opened in the user's name - funds deposited are converted to the specified token and sent to the destination wallet address. Important: Always confirm the account status is 'active' before initiating a deposit.","type":"object","properties":{"id":{"description":"Unique identifier for this auto-ramp account","examples":["507f1f77bcf86cd799439011"],"type":"string"},"depositInstructions":{"description":"Bank account details for depositing fiat funds. Use these instructions to initiate ACH or wire transfers.","type":"object","properties":{"bankName":{"description":"Name of the bank holding the virtual account","examples":["Lead Bank"],"type":"string"},"bankAddress":{"description":"Physical address of the bank","examples":["1801 Main St, Kansas City, MO 64108"],"type":"string"},"bankRoutingNumber":{"description":"ABA routing number for the bank (9 digits). Used for ACH and wire transfers.","examples":["101019644"],"type":"string"},"bankAccountNumber":{"description":"Account number for deposits. This is the full account number required to initiate transfers to this virtual account.","examples":["1234567890"],"type":"string"},"paymentRails":{"description":"Supported payment rails for depositing funds","examples":[["ach","wire"]],"type":"array","items":{"type":"string"}}},"required":["bankName","bankAddress","bankRoutingNumber","bankAccountNumber","paymentRails"]},"network":{"description":"Blockchain network where converted crypto will be sent. Lowercase network identifier.","examples":["ethereum","polygon","base"],"type":"string"},"address":{"description":"Destination wallet address. Fiat deposits are converted and sent to this address.","examples":["0x1234567890abcdef1234567890abcdef12345678"],"type":"string"},"token":{"description":"Token that fiat deposits will be converted to","examples":["USDC","USDT"],"type":"string"},"currency":{"description":"Fiat currency accepted for deposits","examples":["USD"],"type":"string"},"status":{"type":"string","enum":["active","inactive"]},"createdAt":{"description":"Timestamp when this auto-ramp account was created (ISO 8601)","format":"date-time","examples":["2025-01-15T10:30:00.000Z"],"type":"string"}},"required":["id","depositInstructions","network","address","token","currency","status","createdAt"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"postV1Auto-ramp-accounts"}},"/v1/auto-ramp-accounts/{id}":{"get":{"tags":["Auto-Ramp Accounts"],"security":[{"bearerAuth":[]},{"integratorJwt":[]},{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Get an auto-ramp account","description":"Returns a single auto-ramp account by ID for the authenticated user.","parameters":[{"name":"id","in":"path","required":true,"schema":{"minLength":1,"description":"The auto-ramp account ID","type":"string"}}],"responses":{"200":{"description":"A virtual bank account that automatically converts fiat deposits to crypto. The account is opened in the user's name - funds deposited are converted to the specified token and sent to the destination wallet address. Important: Always confirm the account status is 'active' before initiating a deposit.","content":{"application/json":{"schema":{"description":"A virtual bank account that automatically converts fiat deposits to crypto. The account is opened in the user's name - funds deposited are converted to the specified token and sent to the destination wallet address. Important: Always confirm the account status is 'active' before initiating a deposit.","type":"object","properties":{"id":{"description":"Unique identifier for this auto-ramp account","examples":["507f1f77bcf86cd799439011"],"type":"string"},"depositInstructions":{"description":"Bank account details for depositing fiat funds. Use these instructions to initiate ACH or wire transfers.","type":"object","properties":{"bankName":{"description":"Name of the bank holding the virtual account","examples":["Lead Bank"],"type":"string"},"bankAddress":{"description":"Physical address of the bank","examples":["1801 Main St, Kansas City, MO 64108"],"type":"string"},"bankRoutingNumber":{"description":"ABA routing number for the bank (9 digits). Used for ACH and wire transfers.","examples":["101019644"],"type":"string"},"bankAccountNumber":{"description":"Account number for deposits. This is the full account number required to initiate transfers to this virtual account.","examples":["1234567890"],"type":"string"},"paymentRails":{"description":"Supported payment rails for depositing funds","examples":[["ach","wire"]],"type":"array","items":{"type":"string"}}},"required":["bankName","bankAddress","bankRoutingNumber","bankAccountNumber","paymentRails"]},"network":{"description":"Blockchain network where converted crypto will be sent. Lowercase network identifier.","examples":["ethereum","polygon","base"],"type":"string"},"address":{"description":"Destination wallet address. Fiat deposits are converted and sent to this address.","examples":["0x1234567890abcdef1234567890abcdef12345678"],"type":"string"},"token":{"description":"Token that fiat deposits will be converted to","examples":["USDC","USDT"],"type":"string"},"currency":{"description":"Fiat currency accepted for deposits","examples":["USD"],"type":"string"},"status":{"type":"string","enum":["active","inactive"]},"createdAt":{"description":"Timestamp when this auto-ramp account was created (ISO 8601)","format":"date-time","examples":["2025-01-15T10:30:00.000Z"],"type":"string"}},"required":["id","depositInstructions","network","address","token","currency","status","createdAt"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1Auto-ramp-accountsById"}},"/v1/on-ramps/":{"get":{"tags":["On-Ramps"],"security":[{"bearerAuth":[]},{"integratorJwt":[]},{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"List on-ramps","description":"Returns a paginated list of on-ramps for the authenticated user.\n\nOn-ramps represent fiat-to-crypto conversion transactions where fiat\nwas sent and crypto was or will be received at a destination address.\n\n**Filtering:**\n- `network`: Filter by blockchain network (ethereum, polygon, etc.)\n- `token`: Filter by output token (case-insensitive, e.g., \"usdc\")\n- `address`: Filter by payout address\n\n**Sorting:**\n- `sort=desc` (default): Newest first\n- `sort=asc`: Oldest first\n\n**Pagination:**\nUse cursor-based pagination with the `cursor` parameter.","parameters":[{"name":"limit","in":"query","required":false,"schema":{"description":"Maximum number of results to return","default":50,"minimum":1,"maximum":100,"anyOf":[{"format":"numeric","default":0,"type":"string"},{"description":"Maximum number of results to return","default":50,"minimum":1,"maximum":100,"type":"number"}]}},{"name":"cursor","in":"query","required":false,"schema":{"description":"Opaque cursor for pagination. Use the `nextCursor` value from the previous response.","type":"string"}},{"name":"network","in":"query","required":false,"schema":{"type":"string","enum":["ethereum","polygon","base","arbitrum","avalanche","optimism","solana","tron","bitcoin"]}},{"name":"token","in":"query","required":false,"schema":{"maxLength":10,"description":"Filter by output token. Case-insensitive (transformed to uppercase).","examples":["USDC"],"type":"string"}},{"name":"address","in":"query","required":false,"schema":{"maxLength":256,"description":"Filter by payout address","examples":["0x742d35Cc6634C0532925a3b844Bc9e7595f..."],"type":"string"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["desc","asc"]}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"description":"Unique on-ramp identifier","examples":["onramp_xyz789"],"type":"string"},"status":{"type":"string","enum":["awaiting_payment","processing","completed","cancelled","refunded","in_review"]},"createdAt":{"format":"date-time","type":"string"},"input":{"type":"object","properties":{"amount":{"description":"Fiat amount sent (after fees)","examples":["5130.43"],"type":"string"},"currency":{"type":"string","enum":["USD","CAD","EUR","GBP"]},"rail":{"type":"string","enum":["ach_push","wire_push","sepa_push"]}},"required":["amount","currency","rail"]},"fees":{"type":"object","properties":{"amount":{"description":"Fee in source currency","examples":["57.07"],"type":"string"},"currency":{"description":"Currency of the fee paid","examples":["USD, EUR"],"type":"string"}},"required":["amount","currency"]},"output":{"type":"object","properties":{"amount":{"description":"Crypto amount received","examples":["5130.43"],"type":"string"},"token":{"description":"Token received","examples":["USDC"],"type":"string"},"network":{"type":"string","enum":["ethereum","polygon","base","arbitrum","avalanche","optimism","solana","tron","bitcoin"]},"address":{"description":"Destination wallet address","examples":["0x742d35Cc..."],"type":"string"},"txHash":{"description":"Blockchain transaction hash","examples":["0xabc..."],"type":"string"}},"required":["amount","token","network","address"]},"completedAt":{"format":"date-time","type":"string"}},"required":["id","status","createdAt","input","fees"]}},"hasMore":{"description":"Whether there are more results","examples":[true],"type":"boolean"},"nextCursor":{"description":"Cursor for fetching the next page","examples":["eyJpZCI6Im9ucmFtcF94eXo3ODkifQ=="],"type":"string"}},"required":["data","hasMore"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1On-ramps"}},"/v1/on-ramps/supported-pairs":{"get":{"tags":["On-Ramps"],"security":[{"bearerAuth":[]},{"integratorJwt":[]},{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"List supported on-ramp pairs","description":"Returns supported rail/network/token pairs along with the minimum transaction\namount in the source currency.","responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"rail":{"type":"string","enum":["ach_push","wire_push","sepa_push"]},"currency":{"type":"string","enum":["USD","CAD","EUR","GBP"]},"network":{"type":"string","enum":["ethereum","polygon","base","arbitrum","avalanche","optimism","solana","tron","bitcoin"]},"token":{"description":"Token symbol","examples":["USDC"],"type":"string"},"minAmount":{"description":"Minimum transaction amount in source currency","examples":["1.00"],"type":"string"}},"required":["rail","currency","network","token","minAmount"]}}},"required":["data"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1On-rampsSupported-pairs"}},"/v1/on-ramps/exchange-rates":{"get":{"tags":["On-Ramps"],"security":[{"bearerAuth":[]},{"integratorJwt":[]},{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Get exchange rates","description":"Returns the current on-ramp exchange rate from fiat to crypto.\n\nRates are updated approximately every 30 seconds. This endpoint provides\nan estimate only — rates are not locked in and may differ at transaction time.\n\n**Fiat (from):** EUR, GBP, USD\n**Crypto (to):** BTC, ETH, USDC, USDT","parameters":[{"name":"from","in":"query","required":true,"schema":{"description":"Fiat currency to convert from (case-insensitive). Supported: EUR, GBP, USD","examples":["USD"],"type":"string"}},{"name":"to","in":"query","required":true,"schema":{"description":"Crypto currency to convert to (case-insensitive). Supported: BTC, ETH, USDC, USDT","examples":["USDT"],"type":"string"}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"rate":{"description":"Current exchange rate from fiat to crypto","examples":["1.0012"],"type":"string"}},"required":["rate"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1On-rampsExchange-rates"}},"/v1/on-ramps/{onRampId}":{"get":{"tags":["On-Ramps"],"security":[{"bearerAuth":[]},{"integratorJwt":[]},{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Get an on-ramp","description":"Returns details for a specific on-ramp transaction.","parameters":[{"name":"onRampId","in":"path","required":true,"schema":{"description":"The on-ramp ID","examples":["onramp_xyz789"],"type":"string"}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"description":"Unique on-ramp identifier","examples":["onramp_xyz789"],"type":"string"},"status":{"type":"string","enum":["awaiting_payment","processing","completed","cancelled","refunded","in_review"]},"createdAt":{"format":"date-time","type":"string"},"input":{"type":"object","properties":{"amount":{"description":"Fiat amount sent (after fees)","examples":["5130.43"],"type":"string"},"currency":{"type":"string","enum":["USD","CAD","EUR","GBP"]},"rail":{"type":"string","enum":["ach_push","wire_push","sepa_push"]}},"required":["amount","currency","rail"]},"fees":{"type":"object","properties":{"amount":{"description":"Fee in source currency","examples":["57.07"],"type":"string"},"currency":{"description":"Currency of the fee paid","examples":["USD, EUR"],"type":"string"}},"required":["amount","currency"]},"output":{"type":"object","properties":{"amount":{"description":"Crypto amount received","examples":["5130.43"],"type":"string"},"token":{"description":"Token received","examples":["USDC"],"type":"string"},"network":{"type":"string","enum":["ethereum","polygon","base","arbitrum","avalanche","optimism","solana","tron","bitcoin"]},"address":{"description":"Destination wallet address","examples":["0x742d35Cc..."],"type":"string"},"txHash":{"description":"Blockchain transaction hash","examples":["0xabc..."],"type":"string"}},"required":["amount","token","network","address"]},"completedAt":{"format":"date-time","type":"string"}},"required":["id","status","createdAt","input","fees"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1On-rampsByOnRampId"}},"/v1/bank-accounts/":{"post":{"tags":["Bank Accounts"],"security":[{"bearerAuth":[]},{"integratorJwt":[]},{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Add a bank account","description":"Adds a new bank account as an off-ramp destination. The `type` field determines the required fields.\n\n## Account Types\n\n| Type | Region | Required Fields | Supported Rails |\n|------|--------|-----------------|-----------------|\n| `us` | United States | `routing_number`, `account_number` | ACH, RTP, Wire |\n| `ca` | Canada | `institution_number`, `transit_number`, `account_number` | EFT |\n| `uk` | United Kingdom | `sort_code`, `account_number` | FPS |\n| `iban` | Europe / SEPA | `iban`, optionally `bic` | SEPA |\n\n## Examples\n\n**US Bank Account:**\n```json\n{\n \"type\": \"us\",\n \"account_holder_name\": \"John Doe\",\n \"routing_number\": \"021000021\",\n \"account_number\": \"123456789\",\n \"account_subtype\": \"checking\"\n}\n```\n\n**Canadian Bank Account:**\n```json\n{\n \"type\": \"ca\",\n \"account_holder_name\": \"Jane Smith\",\n \"institution_number\": \"001\",\n \"transit_number\": \"12345\",\n \"account_number\": \"1234567\"\n}\n```\n\n**IBAN (SEPA) Bank Account:**\n```json\n{\n \"type\": \"iban\",\n \"account_holder_name\": \"Hans Müller\",\n \"iban\": \"DE89370400440532013000\"\n}\n```\n\nThe account will be verified before becoming active.","requestBody":{"description":"Create a bank account. The `type` field determines the required fields.","required":true,"content":{"application/json":{"schema":{"description":"Create a bank account. The `type` field determines the required fields.","anyOf":[{"description":"US bank account (ACH/Wire)","examples":[{"type":"us","account_holder_name":"John Doe","routing_number":"021000021","account_number":"123456789","account_subtype":"checking"}],"type":"object","properties":{"type":{"description":"US bank account type","const":"us","type":"string"},"account_holder_name":{"description":"Name of the account holder","examples":["John Doe"],"type":"string"},"routing_number":{"description":"9-digit ABA routing number","examples":["021000021"],"pattern":"^[0-9]{9}$","type":"string"},"account_number":{"description":"Bank account number","examples":["123456789"],"type":"string"},"account_subtype":{"description":"Type of bank account (checking or savings)","examples":["checking"],"anyOf":[{"const":"checking","type":"string"},{"const":"savings","type":"string"}]},"label":{"description":"Friendly name for the account","examples":["Primary Checking"],"type":"string"}},"required":["type","account_holder_name","routing_number","account_number"]},{"description":"Canadian bank account (EFT)","examples":[{"type":"ca","account_holder_name":"Jane Smith","institution_number":"001","transit_number":"12345","account_number":"1234567","account_subtype":"checking"}],"type":"object","properties":{"type":{"description":"Canadian bank account type","const":"ca","type":"string"},"account_holder_name":{"description":"Name of the account holder","examples":["Jane Smith"],"type":"string"},"institution_number":{"description":"3-digit financial institution number","examples":["001"],"pattern":"^[0-9]{3}$","type":"string"},"transit_number":{"description":"5-digit branch transit number","examples":["12345"],"pattern":"^[0-9]{5}$","type":"string"},"account_number":{"description":"Bank account number (7-12 digits)","examples":["1234567"],"type":"string"},"account_subtype":{"description":"Type of bank account (checking or savings)","examples":["checking"],"anyOf":[{"const":"checking","type":"string"},{"const":"savings","type":"string"}]},"label":{"description":"Friendly name for the account","examples":["TD Chequing"],"type":"string"}},"required":["type","account_holder_name","institution_number","transit_number","account_number"]},{"description":"UK bank account (BACS/FPS)","examples":[{"type":"uk","account_holder_name":"James Bond","sort_code":"108800","account_number":"00012345"}],"type":"object","properties":{"type":{"description":"UK bank account type","const":"uk","type":"string"},"account_holder_name":{"description":"Name of the account holder","examples":["James Bond"],"type":"string"},"sort_code":{"description":"6-digit sort code","examples":["108800"],"pattern":"^[0-9]{6}$","type":"string"},"account_number":{"description":"8-digit account number","examples":["00012345"],"pattern":"^[0-9]{8}$","type":"string"},"label":{"description":"Friendly name for the account","examples":["Barclays Current"],"type":"string"}},"required":["type","account_holder_name","sort_code","account_number"]},{"description":"IBAN bank account (SEPA)","examples":[{"type":"iban","account_holder_name":"Hans Müller","iban":"DE89370400440532013000","bic":"COBADEFFXXX"}],"type":"object","properties":{"type":{"description":"IBAN bank account type (SEPA)","const":"iban","type":"string"},"account_holder_name":{"description":"Name of the account holder","examples":["Hans Müller"],"type":"string"},"iban":{"description":"International Bank Account Number","examples":["DE89370400440532013000"],"pattern":"^[A-Z]{2}[0-9]{2}[A-Z0-9]{4,30}$","type":"string"},"bic":{"description":"Bank Identifier Code (SWIFT). Can often be derived from IBAN.","examples":["COBADEFFXXX"],"pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$","type":"string"},"label":{"description":"Friendly name for the account","examples":["Commerzbank EUR"],"type":"string"}},"required":["type","account_holder_name","iban"]}]}},"application/x-www-form-urlencoded":{"schema":{"description":"Create a bank account. The `type` field determines the required fields.","anyOf":[{"description":"US bank account (ACH/Wire)","examples":[{"type":"us","account_holder_name":"John Doe","routing_number":"021000021","account_number":"123456789","account_subtype":"checking"}],"type":"object","properties":{"type":{"description":"US bank account type","const":"us","type":"string"},"account_holder_name":{"description":"Name of the account holder","examples":["John Doe"],"type":"string"},"routing_number":{"description":"9-digit ABA routing number","examples":["021000021"],"pattern":"^[0-9]{9}$","type":"string"},"account_number":{"description":"Bank account number","examples":["123456789"],"type":"string"},"account_subtype":{"description":"Type of bank account (checking or savings)","examples":["checking"],"anyOf":[{"const":"checking","type":"string"},{"const":"savings","type":"string"}]},"label":{"description":"Friendly name for the account","examples":["Primary Checking"],"type":"string"}},"required":["type","account_holder_name","routing_number","account_number"]},{"description":"Canadian bank account (EFT)","examples":[{"type":"ca","account_holder_name":"Jane Smith","institution_number":"001","transit_number":"12345","account_number":"1234567","account_subtype":"checking"}],"type":"object","properties":{"type":{"description":"Canadian bank account type","const":"ca","type":"string"},"account_holder_name":{"description":"Name of the account holder","examples":["Jane Smith"],"type":"string"},"institution_number":{"description":"3-digit financial institution number","examples":["001"],"pattern":"^[0-9]{3}$","type":"string"},"transit_number":{"description":"5-digit branch transit number","examples":["12345"],"pattern":"^[0-9]{5}$","type":"string"},"account_number":{"description":"Bank account number (7-12 digits)","examples":["1234567"],"type":"string"},"account_subtype":{"description":"Type of bank account (checking or savings)","examples":["checking"],"anyOf":[{"const":"checking","type":"string"},{"const":"savings","type":"string"}]},"label":{"description":"Friendly name for the account","examples":["TD Chequing"],"type":"string"}},"required":["type","account_holder_name","institution_number","transit_number","account_number"]},{"description":"UK bank account (BACS/FPS)","examples":[{"type":"uk","account_holder_name":"James Bond","sort_code":"108800","account_number":"00012345"}],"type":"object","properties":{"type":{"description":"UK bank account type","const":"uk","type":"string"},"account_holder_name":{"description":"Name of the account holder","examples":["James Bond"],"type":"string"},"sort_code":{"description":"6-digit sort code","examples":["108800"],"pattern":"^[0-9]{6}$","type":"string"},"account_number":{"description":"8-digit account number","examples":["00012345"],"pattern":"^[0-9]{8}$","type":"string"},"label":{"description":"Friendly name for the account","examples":["Barclays Current"],"type":"string"}},"required":["type","account_holder_name","sort_code","account_number"]},{"description":"IBAN bank account (SEPA)","examples":[{"type":"iban","account_holder_name":"Hans Müller","iban":"DE89370400440532013000","bic":"COBADEFFXXX"}],"type":"object","properties":{"type":{"description":"IBAN bank account type (SEPA)","const":"iban","type":"string"},"account_holder_name":{"description":"Name of the account holder","examples":["Hans Müller"],"type":"string"},"iban":{"description":"International Bank Account Number","examples":["DE89370400440532013000"],"pattern":"^[A-Z]{2}[0-9]{2}[A-Z0-9]{4,30}$","type":"string"},"bic":{"description":"Bank Identifier Code (SWIFT). Can often be derived from IBAN.","examples":["COBADEFFXXX"],"pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$","type":"string"},"label":{"description":"Friendly name for the account","examples":["Commerzbank EUR"],"type":"string"}},"required":["type","account_holder_name","iban"]}]}},"multipart/form-data":{"schema":{"description":"Create a bank account. The `type` field determines the required fields.","anyOf":[{"description":"US bank account (ACH/Wire)","examples":[{"type":"us","account_holder_name":"John Doe","routing_number":"021000021","account_number":"123456789","account_subtype":"checking"}],"type":"object","properties":{"type":{"description":"US bank account type","const":"us","type":"string"},"account_holder_name":{"description":"Name of the account holder","examples":["John Doe"],"type":"string"},"routing_number":{"description":"9-digit ABA routing number","examples":["021000021"],"pattern":"^[0-9]{9}$","type":"string"},"account_number":{"description":"Bank account number","examples":["123456789"],"type":"string"},"account_subtype":{"description":"Type of bank account (checking or savings)","examples":["checking"],"anyOf":[{"const":"checking","type":"string"},{"const":"savings","type":"string"}]},"label":{"description":"Friendly name for the account","examples":["Primary Checking"],"type":"string"}},"required":["type","account_holder_name","routing_number","account_number"]},{"description":"Canadian bank account (EFT)","examples":[{"type":"ca","account_holder_name":"Jane Smith","institution_number":"001","transit_number":"12345","account_number":"1234567","account_subtype":"checking"}],"type":"object","properties":{"type":{"description":"Canadian bank account type","const":"ca","type":"string"},"account_holder_name":{"description":"Name of the account holder","examples":["Jane Smith"],"type":"string"},"institution_number":{"description":"3-digit financial institution number","examples":["001"],"pattern":"^[0-9]{3}$","type":"string"},"transit_number":{"description":"5-digit branch transit number","examples":["12345"],"pattern":"^[0-9]{5}$","type":"string"},"account_number":{"description":"Bank account number (7-12 digits)","examples":["1234567"],"type":"string"},"account_subtype":{"description":"Type of bank account (checking or savings)","examples":["checking"],"anyOf":[{"const":"checking","type":"string"},{"const":"savings","type":"string"}]},"label":{"description":"Friendly name for the account","examples":["TD Chequing"],"type":"string"}},"required":["type","account_holder_name","institution_number","transit_number","account_number"]},{"description":"UK bank account (BACS/FPS)","examples":[{"type":"uk","account_holder_name":"James Bond","sort_code":"108800","account_number":"00012345"}],"type":"object","properties":{"type":{"description":"UK bank account type","const":"uk","type":"string"},"account_holder_name":{"description":"Name of the account holder","examples":["James Bond"],"type":"string"},"sort_code":{"description":"6-digit sort code","examples":["108800"],"pattern":"^[0-9]{6}$","type":"string"},"account_number":{"description":"8-digit account number","examples":["00012345"],"pattern":"^[0-9]{8}$","type":"string"},"label":{"description":"Friendly name for the account","examples":["Barclays Current"],"type":"string"}},"required":["type","account_holder_name","sort_code","account_number"]},{"description":"IBAN bank account (SEPA)","examples":[{"type":"iban","account_holder_name":"Hans Müller","iban":"DE89370400440532013000","bic":"COBADEFFXXX"}],"type":"object","properties":{"type":{"description":"IBAN bank account type (SEPA)","const":"iban","type":"string"},"account_holder_name":{"description":"Name of the account holder","examples":["Hans Müller"],"type":"string"},"iban":{"description":"International Bank Account Number","examples":["DE89370400440532013000"],"pattern":"^[A-Z]{2}[0-9]{2}[A-Z0-9]{4,30}$","type":"string"},"bic":{"description":"Bank Identifier Code (SWIFT). Can often be derived from IBAN.","examples":["COBADEFFXXX"],"pattern":"^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$","type":"string"},"label":{"description":"Friendly name for the account","examples":["Commerzbank EUR"],"type":"string"}},"required":["type","account_holder_name","iban"]}]}}}},"responses":{"201":{"description":"Bank account details. The `type` field indicates the account variant.","content":{"application/json":{"schema":{"description":"Bank account details. The `type` field indicates the account variant.","anyOf":[{"description":"US bank account response","type":"object","properties":{"id":{"description":"Unique identifier for the bank account","examples":["ba_abc123"],"type":"string"},"status":{"description":"Current status of the account","examples":["active"],"anyOf":[{"const":"active","type":"string"},{"const":"pending","type":"string"},{"const":"inactive","type":"string"},{"const":"rejected","type":"string"}]},"account_holder_name":{"description":"Name of the account holder","examples":["John Doe"],"type":"string"},"institution":{"description":"Financial institution details","type":"object","properties":{"name":{"description":"Name of the financial institution","examples":["Chase"],"type":"string"},"logo":{"description":"URL to institution logo","examples":["https://example.com/chase-logo.png"],"type":"string"}},"required":["name"]},"supported_rails":{"description":"Payment rails available for this account","examples":[["ach_standard","rtp"]],"type":"array","items":{"description":"Payment rail for fiat delivery.\n\nAvailable rails:\n- `ach_standard`: Standard ACH bank transfer. Payments sent before 7:45 PM ET are sent overnight and arrive the next business day. Payments sent after 7:45 PM ET are sent the following business day at 8 PM ET and arrive the next business day after that.\n- `rtp`: Real-Time Payments. Instant delivery, typically within seconds. Available 24/7/365.\n- `wire`: Wire transfer. Same-day or next-day delivery depending on cutoff times.\n- `eft`: Canadian Electronic Funds Transfer. Standard Canadian bank transfer (1-2 business days).\n- `sepa`: SEPA bank transfer for European accounts (1-2 business days).\n- `push_to_debit`: Instant push to debit card. Funds available within minutes.\n- `bill_pay`: Bill payment rail for paying bills and invoices.","examples":["ach_standard"],"anyOf":[{"const":"ach_standard","type":"string"},{"const":"rtp","type":"string"},{"const":"wire","type":"string"},{"const":"eft","type":"string"},{"const":"sepa","type":"string"},{"const":"push_to_debit","type":"string"},{"const":"bill_pay","type":"string"}]}},"label":{"description":"Friendly name for the account","examples":["Primary Checking"],"type":"string"},"created_at":{"description":"When the account was created","format":"date-time","type":"string"},"type":{"const":"us","type":"string"},"country":{"const":"US","type":"string"},"currency":{"const":"USD","type":"string"},"account_number_last4":{"description":"Last 4 digits of account number","examples":["6789"],"type":"string"},"routing_number_last4":{"description":"Last 4 digits of routing number","examples":["0021"],"type":"string"},"account_subtype":{"description":"Type of bank account (checking or savings)","examples":["checking"],"anyOf":[{"const":"checking","type":"string"},{"const":"savings","type":"string"}]}},"required":["id","status","account_holder_name","supported_rails","created_at","type","country","currency","account_number_last4","routing_number_last4"]},{"description":"Canadian bank account response","type":"object","properties":{"id":{"description":"Unique identifier for the bank account","examples":["ba_abc123"],"type":"string"},"status":{"description":"Current status of the account","examples":["active"],"anyOf":[{"const":"active","type":"string"},{"const":"pending","type":"string"},{"const":"inactive","type":"string"},{"const":"rejected","type":"string"}]},"account_holder_name":{"description":"Name of the account holder","examples":["John Doe"],"type":"string"},"institution":{"description":"Financial institution details","type":"object","properties":{"name":{"description":"Name of the financial institution","examples":["Chase"],"type":"string"},"logo":{"description":"URL to institution logo","examples":["https://example.com/chase-logo.png"],"type":"string"}},"required":["name"]},"supported_rails":{"description":"Payment rails available for this account","examples":[["ach_standard","rtp"]],"type":"array","items":{"description":"Payment rail for fiat delivery.\n\nAvailable rails:\n- `ach_standard`: Standard ACH bank transfer. Payments sent before 7:45 PM ET are sent overnight and arrive the next business day. Payments sent after 7:45 PM ET are sent the following business day at 8 PM ET and arrive the next business day after that.\n- `rtp`: Real-Time Payments. Instant delivery, typically within seconds. Available 24/7/365.\n- `wire`: Wire transfer. Same-day or next-day delivery depending on cutoff times.\n- `eft`: Canadian Electronic Funds Transfer. Standard Canadian bank transfer (1-2 business days).\n- `sepa`: SEPA bank transfer for European accounts (1-2 business days).\n- `push_to_debit`: Instant push to debit card. Funds available within minutes.\n- `bill_pay`: Bill payment rail for paying bills and invoices.","examples":["ach_standard"],"anyOf":[{"const":"ach_standard","type":"string"},{"const":"rtp","type":"string"},{"const":"wire","type":"string"},{"const":"eft","type":"string"},{"const":"sepa","type":"string"},{"const":"push_to_debit","type":"string"},{"const":"bill_pay","type":"string"}]}},"label":{"description":"Friendly name for the account","examples":["Primary Checking"],"type":"string"},"created_at":{"description":"When the account was created","format":"date-time","type":"string"},"type":{"const":"ca","type":"string"},"country":{"const":"CA","type":"string"},"currency":{"const":"CAD","type":"string"},"account_number_last4":{"description":"Last 4 digits of account number","examples":["4567"],"type":"string"},"institution_number":{"description":"3-digit institution number","examples":["001"],"type":"string"},"transit_number_last3":{"description":"Last 3 digits of transit number","examples":["345"],"type":"string"},"account_subtype":{"description":"Type of bank account (checking or savings)","examples":["checking"],"anyOf":[{"const":"checking","type":"string"},{"const":"savings","type":"string"}]}},"required":["id","status","account_holder_name","supported_rails","created_at","type","country","currency","account_number_last4","institution_number","transit_number_last3"]},{"description":"UK bank account response","type":"object","properties":{"id":{"description":"Unique identifier for the bank account","examples":["ba_abc123"],"type":"string"},"status":{"description":"Current status of the account","examples":["active"],"anyOf":[{"const":"active","type":"string"},{"const":"pending","type":"string"},{"const":"inactive","type":"string"},{"const":"rejected","type":"string"}]},"account_holder_name":{"description":"Name of the account holder","examples":["John Doe"],"type":"string"},"institution":{"description":"Financial institution details","type":"object","properties":{"name":{"description":"Name of the financial institution","examples":["Chase"],"type":"string"},"logo":{"description":"URL to institution logo","examples":["https://example.com/chase-logo.png"],"type":"string"}},"required":["name"]},"supported_rails":{"description":"Payment rails available for this account","examples":[["ach_standard","rtp"]],"type":"array","items":{"description":"Payment rail for fiat delivery.\n\nAvailable rails:\n- `ach_standard`: Standard ACH bank transfer. Payments sent before 7:45 PM ET are sent overnight and arrive the next business day. Payments sent after 7:45 PM ET are sent the following business day at 8 PM ET and arrive the next business day after that.\n- `rtp`: Real-Time Payments. Instant delivery, typically within seconds. Available 24/7/365.\n- `wire`: Wire transfer. Same-day or next-day delivery depending on cutoff times.\n- `eft`: Canadian Electronic Funds Transfer. Standard Canadian bank transfer (1-2 business days).\n- `sepa`: SEPA bank transfer for European accounts (1-2 business days).\n- `push_to_debit`: Instant push to debit card. Funds available within minutes.\n- `bill_pay`: Bill payment rail for paying bills and invoices.","examples":["ach_standard"],"anyOf":[{"const":"ach_standard","type":"string"},{"const":"rtp","type":"string"},{"const":"wire","type":"string"},{"const":"eft","type":"string"},{"const":"sepa","type":"string"},{"const":"push_to_debit","type":"string"},{"const":"bill_pay","type":"string"}]}},"label":{"description":"Friendly name for the account","examples":["Primary Checking"],"type":"string"},"created_at":{"description":"When the account was created","format":"date-time","type":"string"},"type":{"const":"uk","type":"string"},"country":{"const":"GB","type":"string"},"currency":{"const":"GBP","type":"string"},"account_number_last4":{"description":"Last 4 digits of account number","examples":["2345"],"type":"string"},"sort_code":{"description":"6-digit sort code (not sensitive)","examples":["108800"],"type":"string"}},"required":["id","status","account_holder_name","supported_rails","created_at","type","country","currency","account_number_last4","sort_code"]},{"description":"IBAN bank account response","type":"object","properties":{"id":{"description":"Unique identifier for the bank account","examples":["ba_abc123"],"type":"string"},"status":{"description":"Current status of the account","examples":["active"],"anyOf":[{"const":"active","type":"string"},{"const":"pending","type":"string"},{"const":"inactive","type":"string"},{"const":"rejected","type":"string"}]},"account_holder_name":{"description":"Name of the account holder","examples":["John Doe"],"type":"string"},"institution":{"description":"Financial institution details","type":"object","properties":{"name":{"description":"Name of the financial institution","examples":["Chase"],"type":"string"},"logo":{"description":"URL to institution logo","examples":["https://example.com/chase-logo.png"],"type":"string"}},"required":["name"]},"supported_rails":{"description":"Payment rails available for this account","examples":[["ach_standard","rtp"]],"type":"array","items":{"description":"Payment rail for fiat delivery.\n\nAvailable rails:\n- `ach_standard`: Standard ACH bank transfer. Payments sent before 7:45 PM ET are sent overnight and arrive the next business day. Payments sent after 7:45 PM ET are sent the following business day at 8 PM ET and arrive the next business day after that.\n- `rtp`: Real-Time Payments. Instant delivery, typically within seconds. Available 24/7/365.\n- `wire`: Wire transfer. Same-day or next-day delivery depending on cutoff times.\n- `eft`: Canadian Electronic Funds Transfer. Standard Canadian bank transfer (1-2 business days).\n- `sepa`: SEPA bank transfer for European accounts (1-2 business days).\n- `push_to_debit`: Instant push to debit card. Funds available within minutes.\n- `bill_pay`: Bill payment rail for paying bills and invoices.","examples":["ach_standard"],"anyOf":[{"const":"ach_standard","type":"string"},{"const":"rtp","type":"string"},{"const":"wire","type":"string"},{"const":"eft","type":"string"},{"const":"sepa","type":"string"},{"const":"push_to_debit","type":"string"},{"const":"bill_pay","type":"string"}]}},"label":{"description":"Friendly name for the account","examples":["Primary Checking"],"type":"string"},"created_at":{"description":"When the account was created","format":"date-time","type":"string"},"type":{"const":"iban","type":"string"},"country":{"description":"ISO country code (derived from IBAN)","examples":["DE"],"type":"string"},"currency":{"description":"Fiat currency code","examples":["USD"],"anyOf":[{"const":"USD","type":"string"},{"const":"CAD","type":"string"},{"const":"EUR","type":"string"},{"const":"GBP","type":"string"}]},"iban_last4":{"description":"Last 4 characters of IBAN","examples":["3000"],"type":"string"},"bic":{"description":"Bank Identifier Code","examples":["COBADEFFXXX"],"type":"string"}},"required":["id","status","account_holder_name","supported_rails","created_at","type","country","currency","iban_last4"]}]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"postV1Bank-accounts"},"get":{"tags":["Bank Accounts"],"security":[{"bearerAuth":[]},{"integratorJwt":[]},{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"List bank accounts","description":"Returns all bank accounts for the authenticated user.","responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"array","items":{"description":"Bank account details. The `type` field indicates the account variant.","anyOf":[{"description":"US bank account response","type":"object","properties":{"id":{"description":"Unique identifier for the bank account","examples":["ba_abc123"],"type":"string"},"status":{"description":"Current status of the account","examples":["active"],"anyOf":[{"const":"active","type":"string"},{"const":"pending","type":"string"},{"const":"inactive","type":"string"},{"const":"rejected","type":"string"}]},"account_holder_name":{"description":"Name of the account holder","examples":["John Doe"],"type":"string"},"institution":{"description":"Financial institution details","type":"object","properties":{"name":{"description":"Name of the financial institution","examples":["Chase"],"type":"string"},"logo":{"description":"URL to institution logo","examples":["https://example.com/chase-logo.png"],"type":"string"}},"required":["name"]},"supported_rails":{"description":"Payment rails available for this account","examples":[["ach_standard","rtp"]],"type":"array","items":{"description":"Payment rail for fiat delivery.\n\nAvailable rails:\n- `ach_standard`: Standard ACH bank transfer. Payments sent before 7:45 PM ET are sent overnight and arrive the next business day. Payments sent after 7:45 PM ET are sent the following business day at 8 PM ET and arrive the next business day after that.\n- `rtp`: Real-Time Payments. Instant delivery, typically within seconds. Available 24/7/365.\n- `wire`: Wire transfer. Same-day or next-day delivery depending on cutoff times.\n- `eft`: Canadian Electronic Funds Transfer. Standard Canadian bank transfer (1-2 business days).\n- `sepa`: SEPA bank transfer for European accounts (1-2 business days).\n- `push_to_debit`: Instant push to debit card. Funds available within minutes.\n- `bill_pay`: Bill payment rail for paying bills and invoices.","examples":["ach_standard"],"anyOf":[{"const":"ach_standard","type":"string"},{"const":"rtp","type":"string"},{"const":"wire","type":"string"},{"const":"eft","type":"string"},{"const":"sepa","type":"string"},{"const":"push_to_debit","type":"string"},{"const":"bill_pay","type":"string"}]}},"label":{"description":"Friendly name for the account","examples":["Primary Checking"],"type":"string"},"created_at":{"description":"When the account was created","format":"date-time","type":"string"},"type":{"const":"us","type":"string"},"country":{"const":"US","type":"string"},"currency":{"const":"USD","type":"string"},"account_number_last4":{"description":"Last 4 digits of account number","examples":["6789"],"type":"string"},"routing_number_last4":{"description":"Last 4 digits of routing number","examples":["0021"],"type":"string"},"account_subtype":{"description":"Type of bank account (checking or savings)","examples":["checking"],"anyOf":[{"const":"checking","type":"string"},{"const":"savings","type":"string"}]}},"required":["id","status","account_holder_name","supported_rails","created_at","type","country","currency","account_number_last4","routing_number_last4"]},{"description":"Canadian bank account response","type":"object","properties":{"id":{"description":"Unique identifier for the bank account","examples":["ba_abc123"],"type":"string"},"status":{"description":"Current status of the account","examples":["active"],"anyOf":[{"const":"active","type":"string"},{"const":"pending","type":"string"},{"const":"inactive","type":"string"},{"const":"rejected","type":"string"}]},"account_holder_name":{"description":"Name of the account holder","examples":["John Doe"],"type":"string"},"institution":{"description":"Financial institution details","type":"object","properties":{"name":{"description":"Name of the financial institution","examples":["Chase"],"type":"string"},"logo":{"description":"URL to institution logo","examples":["https://example.com/chase-logo.png"],"type":"string"}},"required":["name"]},"supported_rails":{"description":"Payment rails available for this account","examples":[["ach_standard","rtp"]],"type":"array","items":{"description":"Payment rail for fiat delivery.\n\nAvailable rails:\n- `ach_standard`: Standard ACH bank transfer. Payments sent before 7:45 PM ET are sent overnight and arrive the next business day. Payments sent after 7:45 PM ET are sent the following business day at 8 PM ET and arrive the next business day after that.\n- `rtp`: Real-Time Payments. Instant delivery, typically within seconds. Available 24/7/365.\n- `wire`: Wire transfer. Same-day or next-day delivery depending on cutoff times.\n- `eft`: Canadian Electronic Funds Transfer. Standard Canadian bank transfer (1-2 business days).\n- `sepa`: SEPA bank transfer for European accounts (1-2 business days).\n- `push_to_debit`: Instant push to debit card. Funds available within minutes.\n- `bill_pay`: Bill payment rail for paying bills and invoices.","examples":["ach_standard"],"anyOf":[{"const":"ach_standard","type":"string"},{"const":"rtp","type":"string"},{"const":"wire","type":"string"},{"const":"eft","type":"string"},{"const":"sepa","type":"string"},{"const":"push_to_debit","type":"string"},{"const":"bill_pay","type":"string"}]}},"label":{"description":"Friendly name for the account","examples":["Primary Checking"],"type":"string"},"created_at":{"description":"When the account was created","format":"date-time","type":"string"},"type":{"const":"ca","type":"string"},"country":{"const":"CA","type":"string"},"currency":{"const":"CAD","type":"string"},"account_number_last4":{"description":"Last 4 digits of account number","examples":["4567"],"type":"string"},"institution_number":{"description":"3-digit institution number","examples":["001"],"type":"string"},"transit_number_last3":{"description":"Last 3 digits of transit number","examples":["345"],"type":"string"},"account_subtype":{"description":"Type of bank account (checking or savings)","examples":["checking"],"anyOf":[{"const":"checking","type":"string"},{"const":"savings","type":"string"}]}},"required":["id","status","account_holder_name","supported_rails","created_at","type","country","currency","account_number_last4","institution_number","transit_number_last3"]},{"description":"UK bank account response","type":"object","properties":{"id":{"description":"Unique identifier for the bank account","examples":["ba_abc123"],"type":"string"},"status":{"description":"Current status of the account","examples":["active"],"anyOf":[{"const":"active","type":"string"},{"const":"pending","type":"string"},{"const":"inactive","type":"string"},{"const":"rejected","type":"string"}]},"account_holder_name":{"description":"Name of the account holder","examples":["John Doe"],"type":"string"},"institution":{"description":"Financial institution details","type":"object","properties":{"name":{"description":"Name of the financial institution","examples":["Chase"],"type":"string"},"logo":{"description":"URL to institution logo","examples":["https://example.com/chase-logo.png"],"type":"string"}},"required":["name"]},"supported_rails":{"description":"Payment rails available for this account","examples":[["ach_standard","rtp"]],"type":"array","items":{"description":"Payment rail for fiat delivery.\n\nAvailable rails:\n- `ach_standard`: Standard ACH bank transfer. Payments sent before 7:45 PM ET are sent overnight and arrive the next business day. Payments sent after 7:45 PM ET are sent the following business day at 8 PM ET and arrive the next business day after that.\n- `rtp`: Real-Time Payments. Instant delivery, typically within seconds. Available 24/7/365.\n- `wire`: Wire transfer. Same-day or next-day delivery depending on cutoff times.\n- `eft`: Canadian Electronic Funds Transfer. Standard Canadian bank transfer (1-2 business days).\n- `sepa`: SEPA bank transfer for European accounts (1-2 business days).\n- `push_to_debit`: Instant push to debit card. Funds available within minutes.\n- `bill_pay`: Bill payment rail for paying bills and invoices.","examples":["ach_standard"],"anyOf":[{"const":"ach_standard","type":"string"},{"const":"rtp","type":"string"},{"const":"wire","type":"string"},{"const":"eft","type":"string"},{"const":"sepa","type":"string"},{"const":"push_to_debit","type":"string"},{"const":"bill_pay","type":"string"}]}},"label":{"description":"Friendly name for the account","examples":["Primary Checking"],"type":"string"},"created_at":{"description":"When the account was created","format":"date-time","type":"string"},"type":{"const":"uk","type":"string"},"country":{"const":"GB","type":"string"},"currency":{"const":"GBP","type":"string"},"account_number_last4":{"description":"Last 4 digits of account number","examples":["2345"],"type":"string"},"sort_code":{"description":"6-digit sort code (not sensitive)","examples":["108800"],"type":"string"}},"required":["id","status","account_holder_name","supported_rails","created_at","type","country","currency","account_number_last4","sort_code"]},{"description":"IBAN bank account response","type":"object","properties":{"id":{"description":"Unique identifier for the bank account","examples":["ba_abc123"],"type":"string"},"status":{"description":"Current status of the account","examples":["active"],"anyOf":[{"const":"active","type":"string"},{"const":"pending","type":"string"},{"const":"inactive","type":"string"},{"const":"rejected","type":"string"}]},"account_holder_name":{"description":"Name of the account holder","examples":["John Doe"],"type":"string"},"institution":{"description":"Financial institution details","type":"object","properties":{"name":{"description":"Name of the financial institution","examples":["Chase"],"type":"string"},"logo":{"description":"URL to institution logo","examples":["https://example.com/chase-logo.png"],"type":"string"}},"required":["name"]},"supported_rails":{"description":"Payment rails available for this account","examples":[["ach_standard","rtp"]],"type":"array","items":{"description":"Payment rail for fiat delivery.\n\nAvailable rails:\n- `ach_standard`: Standard ACH bank transfer. Payments sent before 7:45 PM ET are sent overnight and arrive the next business day. Payments sent after 7:45 PM ET are sent the following business day at 8 PM ET and arrive the next business day after that.\n- `rtp`: Real-Time Payments. Instant delivery, typically within seconds. Available 24/7/365.\n- `wire`: Wire transfer. Same-day or next-day delivery depending on cutoff times.\n- `eft`: Canadian Electronic Funds Transfer. Standard Canadian bank transfer (1-2 business days).\n- `sepa`: SEPA bank transfer for European accounts (1-2 business days).\n- `push_to_debit`: Instant push to debit card. Funds available within minutes.\n- `bill_pay`: Bill payment rail for paying bills and invoices.","examples":["ach_standard"],"anyOf":[{"const":"ach_standard","type":"string"},{"const":"rtp","type":"string"},{"const":"wire","type":"string"},{"const":"eft","type":"string"},{"const":"sepa","type":"string"},{"const":"push_to_debit","type":"string"},{"const":"bill_pay","type":"string"}]}},"label":{"description":"Friendly name for the account","examples":["Primary Checking"],"type":"string"},"created_at":{"description":"When the account was created","format":"date-time","type":"string"},"type":{"const":"iban","type":"string"},"country":{"description":"ISO country code (derived from IBAN)","examples":["DE"],"type":"string"},"currency":{"description":"Fiat currency code","examples":["USD"],"anyOf":[{"const":"USD","type":"string"},{"const":"CAD","type":"string"},{"const":"EUR","type":"string"},{"const":"GBP","type":"string"}]},"iban_last4":{"description":"Last 4 characters of IBAN","examples":["3000"],"type":"string"},"bic":{"description":"Bank Identifier Code","examples":["COBADEFFXXX"],"type":"string"}},"required":["id","status","account_holder_name","supported_rails","created_at","type","country","currency","iban_last4"]}]}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1Bank-accounts"}},"/v1/bank-accounts/{accountId}":{"get":{"tags":["Bank Accounts"],"security":[{"bearerAuth":[]},{"integratorJwt":[]},{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Get a bank account","description":"Returns details for a specific bank account.","parameters":[{"name":"accountId","in":"path","required":true,"schema":{"description":"The bank account ID","type":"string"}}],"responses":{"200":{"description":"Bank account details. The `type` field indicates the account variant.","content":{"application/json":{"schema":{"description":"Bank account details. The `type` field indicates the account variant.","anyOf":[{"description":"US bank account response","type":"object","properties":{"id":{"description":"Unique identifier for the bank account","examples":["ba_abc123"],"type":"string"},"status":{"description":"Current status of the account","examples":["active"],"anyOf":[{"const":"active","type":"string"},{"const":"pending","type":"string"},{"const":"inactive","type":"string"},{"const":"rejected","type":"string"}]},"account_holder_name":{"description":"Name of the account holder","examples":["John Doe"],"type":"string"},"institution":{"description":"Financial institution details","type":"object","properties":{"name":{"description":"Name of the financial institution","examples":["Chase"],"type":"string"},"logo":{"description":"URL to institution logo","examples":["https://example.com/chase-logo.png"],"type":"string"}},"required":["name"]},"supported_rails":{"description":"Payment rails available for this account","examples":[["ach_standard","rtp"]],"type":"array","items":{"description":"Payment rail for fiat delivery.\n\nAvailable rails:\n- `ach_standard`: Standard ACH bank transfer. Payments sent before 7:45 PM ET are sent overnight and arrive the next business day. Payments sent after 7:45 PM ET are sent the following business day at 8 PM ET and arrive the next business day after that.\n- `rtp`: Real-Time Payments. Instant delivery, typically within seconds. Available 24/7/365.\n- `wire`: Wire transfer. Same-day or next-day delivery depending on cutoff times.\n- `eft`: Canadian Electronic Funds Transfer. Standard Canadian bank transfer (1-2 business days).\n- `sepa`: SEPA bank transfer for European accounts (1-2 business days).\n- `push_to_debit`: Instant push to debit card. Funds available within minutes.\n- `bill_pay`: Bill payment rail for paying bills and invoices.","examples":["ach_standard"],"anyOf":[{"const":"ach_standard","type":"string"},{"const":"rtp","type":"string"},{"const":"wire","type":"string"},{"const":"eft","type":"string"},{"const":"sepa","type":"string"},{"const":"push_to_debit","type":"string"},{"const":"bill_pay","type":"string"}]}},"label":{"description":"Friendly name for the account","examples":["Primary Checking"],"type":"string"},"created_at":{"description":"When the account was created","format":"date-time","type":"string"},"type":{"const":"us","type":"string"},"country":{"const":"US","type":"string"},"currency":{"const":"USD","type":"string"},"account_number_last4":{"description":"Last 4 digits of account number","examples":["6789"],"type":"string"},"routing_number_last4":{"description":"Last 4 digits of routing number","examples":["0021"],"type":"string"},"account_subtype":{"description":"Type of bank account (checking or savings)","examples":["checking"],"anyOf":[{"const":"checking","type":"string"},{"const":"savings","type":"string"}]}},"required":["id","status","account_holder_name","supported_rails","created_at","type","country","currency","account_number_last4","routing_number_last4"]},{"description":"Canadian bank account response","type":"object","properties":{"id":{"description":"Unique identifier for the bank account","examples":["ba_abc123"],"type":"string"},"status":{"description":"Current status of the account","examples":["active"],"anyOf":[{"const":"active","type":"string"},{"const":"pending","type":"string"},{"const":"inactive","type":"string"},{"const":"rejected","type":"string"}]},"account_holder_name":{"description":"Name of the account holder","examples":["John Doe"],"type":"string"},"institution":{"description":"Financial institution details","type":"object","properties":{"name":{"description":"Name of the financial institution","examples":["Chase"],"type":"string"},"logo":{"description":"URL to institution logo","examples":["https://example.com/chase-logo.png"],"type":"string"}},"required":["name"]},"supported_rails":{"description":"Payment rails available for this account","examples":[["ach_standard","rtp"]],"type":"array","items":{"description":"Payment rail for fiat delivery.\n\nAvailable rails:\n- `ach_standard`: Standard ACH bank transfer. Payments sent before 7:45 PM ET are sent overnight and arrive the next business day. Payments sent after 7:45 PM ET are sent the following business day at 8 PM ET and arrive the next business day after that.\n- `rtp`: Real-Time Payments. Instant delivery, typically within seconds. Available 24/7/365.\n- `wire`: Wire transfer. Same-day or next-day delivery depending on cutoff times.\n- `eft`: Canadian Electronic Funds Transfer. Standard Canadian bank transfer (1-2 business days).\n- `sepa`: SEPA bank transfer for European accounts (1-2 business days).\n- `push_to_debit`: Instant push to debit card. Funds available within minutes.\n- `bill_pay`: Bill payment rail for paying bills and invoices.","examples":["ach_standard"],"anyOf":[{"const":"ach_standard","type":"string"},{"const":"rtp","type":"string"},{"const":"wire","type":"string"},{"const":"eft","type":"string"},{"const":"sepa","type":"string"},{"const":"push_to_debit","type":"string"},{"const":"bill_pay","type":"string"}]}},"label":{"description":"Friendly name for the account","examples":["Primary Checking"],"type":"string"},"created_at":{"description":"When the account was created","format":"date-time","type":"string"},"type":{"const":"ca","type":"string"},"country":{"const":"CA","type":"string"},"currency":{"const":"CAD","type":"string"},"account_number_last4":{"description":"Last 4 digits of account number","examples":["4567"],"type":"string"},"institution_number":{"description":"3-digit institution number","examples":["001"],"type":"string"},"transit_number_last3":{"description":"Last 3 digits of transit number","examples":["345"],"type":"string"},"account_subtype":{"description":"Type of bank account (checking or savings)","examples":["checking"],"anyOf":[{"const":"checking","type":"string"},{"const":"savings","type":"string"}]}},"required":["id","status","account_holder_name","supported_rails","created_at","type","country","currency","account_number_last4","institution_number","transit_number_last3"]},{"description":"UK bank account response","type":"object","properties":{"id":{"description":"Unique identifier for the bank account","examples":["ba_abc123"],"type":"string"},"status":{"description":"Current status of the account","examples":["active"],"anyOf":[{"const":"active","type":"string"},{"const":"pending","type":"string"},{"const":"inactive","type":"string"},{"const":"rejected","type":"string"}]},"account_holder_name":{"description":"Name of the account holder","examples":["John Doe"],"type":"string"},"institution":{"description":"Financial institution details","type":"object","properties":{"name":{"description":"Name of the financial institution","examples":["Chase"],"type":"string"},"logo":{"description":"URL to institution logo","examples":["https://example.com/chase-logo.png"],"type":"string"}},"required":["name"]},"supported_rails":{"description":"Payment rails available for this account","examples":[["ach_standard","rtp"]],"type":"array","items":{"description":"Payment rail for fiat delivery.\n\nAvailable rails:\n- `ach_standard`: Standard ACH bank transfer. Payments sent before 7:45 PM ET are sent overnight and arrive the next business day. Payments sent after 7:45 PM ET are sent the following business day at 8 PM ET and arrive the next business day after that.\n- `rtp`: Real-Time Payments. Instant delivery, typically within seconds. Available 24/7/365.\n- `wire`: Wire transfer. Same-day or next-day delivery depending on cutoff times.\n- `eft`: Canadian Electronic Funds Transfer. Standard Canadian bank transfer (1-2 business days).\n- `sepa`: SEPA bank transfer for European accounts (1-2 business days).\n- `push_to_debit`: Instant push to debit card. Funds available within minutes.\n- `bill_pay`: Bill payment rail for paying bills and invoices.","examples":["ach_standard"],"anyOf":[{"const":"ach_standard","type":"string"},{"const":"rtp","type":"string"},{"const":"wire","type":"string"},{"const":"eft","type":"string"},{"const":"sepa","type":"string"},{"const":"push_to_debit","type":"string"},{"const":"bill_pay","type":"string"}]}},"label":{"description":"Friendly name for the account","examples":["Primary Checking"],"type":"string"},"created_at":{"description":"When the account was created","format":"date-time","type":"string"},"type":{"const":"uk","type":"string"},"country":{"const":"GB","type":"string"},"currency":{"const":"GBP","type":"string"},"account_number_last4":{"description":"Last 4 digits of account number","examples":["2345"],"type":"string"},"sort_code":{"description":"6-digit sort code (not sensitive)","examples":["108800"],"type":"string"}},"required":["id","status","account_holder_name","supported_rails","created_at","type","country","currency","account_number_last4","sort_code"]},{"description":"IBAN bank account response","type":"object","properties":{"id":{"description":"Unique identifier for the bank account","examples":["ba_abc123"],"type":"string"},"status":{"description":"Current status of the account","examples":["active"],"anyOf":[{"const":"active","type":"string"},{"const":"pending","type":"string"},{"const":"inactive","type":"string"},{"const":"rejected","type":"string"}]},"account_holder_name":{"description":"Name of the account holder","examples":["John Doe"],"type":"string"},"institution":{"description":"Financial institution details","type":"object","properties":{"name":{"description":"Name of the financial institution","examples":["Chase"],"type":"string"},"logo":{"description":"URL to institution logo","examples":["https://example.com/chase-logo.png"],"type":"string"}},"required":["name"]},"supported_rails":{"description":"Payment rails available for this account","examples":[["ach_standard","rtp"]],"type":"array","items":{"description":"Payment rail for fiat delivery.\n\nAvailable rails:\n- `ach_standard`: Standard ACH bank transfer. Payments sent before 7:45 PM ET are sent overnight and arrive the next business day. Payments sent after 7:45 PM ET are sent the following business day at 8 PM ET and arrive the next business day after that.\n- `rtp`: Real-Time Payments. Instant delivery, typically within seconds. Available 24/7/365.\n- `wire`: Wire transfer. Same-day or next-day delivery depending on cutoff times.\n- `eft`: Canadian Electronic Funds Transfer. Standard Canadian bank transfer (1-2 business days).\n- `sepa`: SEPA bank transfer for European accounts (1-2 business days).\n- `push_to_debit`: Instant push to debit card. Funds available within minutes.\n- `bill_pay`: Bill payment rail for paying bills and invoices.","examples":["ach_standard"],"anyOf":[{"const":"ach_standard","type":"string"},{"const":"rtp","type":"string"},{"const":"wire","type":"string"},{"const":"eft","type":"string"},{"const":"sepa","type":"string"},{"const":"push_to_debit","type":"string"},{"const":"bill_pay","type":"string"}]}},"label":{"description":"Friendly name for the account","examples":["Primary Checking"],"type":"string"},"created_at":{"description":"When the account was created","format":"date-time","type":"string"},"type":{"const":"iban","type":"string"},"country":{"description":"ISO country code (derived from IBAN)","examples":["DE"],"type":"string"},"currency":{"description":"Fiat currency code","examples":["USD"],"anyOf":[{"const":"USD","type":"string"},{"const":"CAD","type":"string"},{"const":"EUR","type":"string"},{"const":"GBP","type":"string"}]},"iban_last4":{"description":"Last 4 characters of IBAN","examples":["3000"],"type":"string"},"bic":{"description":"Bank Identifier Code","examples":["COBADEFFXXX"],"type":"string"}},"required":["id","status","account_holder_name","supported_rails","created_at","type","country","currency","iban_last4"]}]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1Bank-accountsByAccountId"},"delete":{"tags":["Bank Accounts"],"security":[{"bearerAuth":[]},{"integratorJwt":[]},{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Remove a bank account","description":"Removes a bank account. Any pending off-ramps will still be processed.","parameters":[{"name":"accountId","in":"path","required":true,"schema":{"description":"The bank account ID","type":"string"}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"deleteV1Bank-accountsByAccountId"}},"/v1/billers/":{"get":{"tags":["Billers"],"security":[{"bearerAuth":[]}],"summary":"Search billers","description":"Search the RPPS biller directory by name or alias. Minimum 2 characters required.","parameters":[{"name":"q","in":"query","required":true,"schema":{"minLength":2,"description":"Search query (min 2 characters)","type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"minimum":1,"maximum":100,"default":20,"description":"Maximum number of results","type":"number"}},{"name":"offset","in":"query","required":false,"schema":{"minimum":0,"default":0,"description":"Number of results to skip","type":"number"}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"industry":{"type":"string"},"address":{"type":"object","properties":{"line1":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"postal_code":{"type":"string"}}},"account_format":{"type":"object","properties":{"min_length":{"type":"number"},"max_length":{"type":"number"},"description":{"type":"string"}}}},"required":["id","name"]}},"has_more":{"type":"boolean"},"total":{"type":"number"}},"required":["data","has_more","total"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1Billers"}},"/v1/billers/{billerId}":{"get":{"tags":["Billers"],"security":[{"bearerAuth":[]}],"summary":"Get biller details","description":"Get details for a specific biller including account format requirements.","parameters":[{"name":"billerId","in":"path","required":true,"schema":{"description":"The biller ID","type":"string"}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"industry":{"type":"string"},"address":{"type":"object","properties":{"line1":{"type":"string"},"city":{"type":"string"},"state":{"type":"string"},"postal_code":{"type":"string"}}},"account_format":{"type":"object","properties":{"min_length":{"type":"number"},"max_length":{"type":"number"},"description":{"type":"string"}}}},"required":["id","name"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1BillersByBillerId"}},"/v1/bills/token":{"post":{"tags":["Bills"],"security":[{"bearerAuth":[]}],"summary":"Add a bill via token","description":"Link a card to your account using an encrypted token from the Tabapay Browser SDK.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"description":"Encrypted card token from Tabapay Browser SDK","type":"string"},"nickname":{"maxLength":100,"description":"Optional nickname for this card","type":"string"}},"required":["token"]}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"token":{"description":"Encrypted card token from Tabapay Browser SDK","type":"string"},"nickname":{"maxLength":100,"description":"Optional nickname for this card","type":"string"}},"required":["token"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"token":{"description":"Encrypted card token from Tabapay Browser SDK","type":"string"},"nickname":{"maxLength":100,"description":"Optional nickname for this card","type":"string"}},"required":["token"]}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"description":"Internal account ID","type":"string"},"last4":{"description":"Last 4 digits of card","type":"string"},"expiry_month":{"nullable":true,"anyOf":[{"description":"Card expiry month (MM)","type":"string"},{"type":"null"}]},"expiry_year":{"nullable":true,"anyOf":[{"description":"Card expiry year (YYYY)","type":"string"},{"type":"null"}]},"nickname":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"description":"Account status","type":"string"},"created_at":{"format":"date-time","type":"string"},"tabapay_account_id":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"payable_account":{"nullable":true,"anyOf":[{"type":"object","patternProperties":{"^(.*)$":{}}},{"type":"null"}]},"payable_account_error":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","last4","status","created_at"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"postV1BillsToken"}},"/v1/bills/link-token":{"post":{"tags":["Bills"],"security":[{"bearerAuth":[]}],"summary":"Get bill linking token","description":"Get a token to initialize the bill linking widget.","responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"token":{"description":"Token for widget initialization","type":"string"},"session_id":{"description":"Session ID for the linking session","type":"string"},"expires_at":{"format":"date-time","description":"Token expiration time (ISO 8601)","type":"string"}},"required":["token","session_id","expires_at"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"postV1BillsLink-token"}},"/v1/bills/{billId}/authorize":{"post":{"tags":["Bills"],"security":[{"bearerAuth":[]}],"summary":"Authorize bill for payments","description":"Record user authorization for bill payments (Proof of Authorization).","parameters":[{"name":"billId","in":"path","required":true,"schema":{"description":"The bill ID to authorize","type":"string"}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"authorization_id":{"type":"string"},"bill_id":{"type":"string"},"authorized_at":{"format":"date-time","type":"string"}},"required":["authorization_id","bill_id","authorized_at"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"postV1BillsByBillIdAuthorize"}},"/v1/bills/admin/sync-billers":{"post":{"tags":["Bills"],"security":[{"bearerAuth":[]}],"summary":"Sync biller directory","description":"Trigger RPPS biller directory sync. Dev only.","responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"synced":{"type":"boolean"},"billers_processed":{"type":"number"},"billers_added":{"type":"number"},"billers_updated":{"type":"number"},"aliases_synced":{"type":"number"},"skip_reason":{"type":"string"},"duration_ms":{"type":"number"}},"required":["synced","billers_processed","billers_added","billers_updated","aliases_synced","skip_reason","duration_ms"]}}}}},"operationId":"postV1BillsAdminSync-billers"}},"/v1/cards/":{"get":{"tags":["Cards"],"security":[{"bearerAuth":[]}],"summary":"List cards","description":"Retrieves all cards for the authenticated user.","responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"description":"The unique identifier for the card","type":"string"},"status":{"type":"string","enum":["active","frozen","not_activated","cancelled"]},"type":{"type":"string","enum":["physical","virtual"]},"country":{"description":"The country code (e.g., US)","type":"string"},"currency":{"description":"The currency code (e.g., USD)","type":"string"},"last4":{"description":"The last 4 digits of the card number","type":"string"},"limit":{"description":"The spend limit for the card, or null if not set","anyOf":[{"type":"object","properties":{"amount":{"minimum":0,"description":"The spend limit amount in USD","type":"number"},"interval":{"description":"The interval for the spend limit","examples":["weekly","monthly"],"anyOf":[{"const":"daily","type":"string"},{"const":"weekly","type":"string"},{"const":"monthly","type":"string"},{"const":"yearly","type":"string"},{"const":"all_time","type":"string"},{"const":"per_transaction","type":"string"}]}},"required":["amount","interval"]},{"type":"null"}]},"payable":{"description":"Whether the card can be used for payments","type":"boolean"},"renderSecret":{"description":"The secret used for rendering sensitive card details","type":"string"},"createdAt":{"description":"ISO 8601 timestamp of card creation","type":"string"},"updatedAt":{"description":"ISO 8601 timestamp of last card update","type":"string"}},"required":["id","status","type","country","currency","last4","limit","payable","renderSecret","createdAt","updatedAt"]}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1Cards"}},"/v1/cards/balance":{"get":{"tags":["Cards"],"security":[{"bearerAuth":[]}],"summary":"Get card program balance","description":"Retrieves the card program balance for the authenticated user.","responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"balance":{"description":"Card program balance in USD","examples":["100.00","0.00","1234.56"],"type":"string"}},"required":["balance"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1CardsBalance"}},"/v1/cards/{cardId}":{"get":{"tags":["Cards"],"security":[{"bearerAuth":[]}],"summary":"Get card","description":"Retrieves a single card by ID for the authenticated user.","parameters":[{"name":"cardId","in":"path","required":true,"schema":{"minLength":1,"description":"The id of the card to retrieve","type":"string"}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"description":"The unique identifier for the card","type":"string"},"status":{"type":"string","enum":["active","frozen","not_activated","cancelled"]},"type":{"type":"string","enum":["physical","virtual"]},"country":{"description":"The country code (e.g., US)","type":"string"},"currency":{"description":"The currency code (e.g., USD)","type":"string"},"last4":{"description":"The last 4 digits of the card number","type":"string"},"limit":{"description":"The spend limit for the card, or null if not set","anyOf":[{"type":"object","properties":{"amount":{"minimum":0,"description":"The spend limit amount in USD","type":"number"},"interval":{"description":"The interval for the spend limit","examples":["weekly","monthly"],"anyOf":[{"const":"daily","type":"string"},{"const":"weekly","type":"string"},{"const":"monthly","type":"string"},{"const":"yearly","type":"string"},{"const":"all_time","type":"string"},{"const":"per_transaction","type":"string"}]}},"required":["amount","interval"]},{"type":"null"}]},"payable":{"description":"Whether the card can be used for payments","type":"boolean"},"renderSecret":{"description":"The secret used for rendering sensitive card details","type":"string"},"createdAt":{"description":"ISO 8601 timestamp of card creation","type":"string"},"updatedAt":{"description":"ISO 8601 timestamp of last card update","type":"string"}},"required":["id","status","type","country","currency","last4","limit","payable","renderSecret","createdAt","updatedAt"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1CardsByCardId"}},"/v1/cards/{cardId}/transactions":{"get":{"tags":["Cards"],"security":[{"bearerAuth":[]}],"summary":"List card transactions","description":"Retrieves a paginated list of transactions for a specific card.","parameters":[{"name":"cardId","in":"path","required":true,"schema":{"minLength":1,"description":"The id of the card to list transactions for","type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"description":"Maximum number of results to return","default":50,"minimum":1,"maximum":100,"anyOf":[{"format":"numeric","default":0,"type":"string"},{"description":"Maximum number of results to return","default":50,"minimum":1,"maximum":100,"type":"number"}]}},{"name":"cursor","in":"query","required":false,"schema":{"description":"Opaque cursor for pagination. Use the `nextCursor` value from the previous response.","type":"string"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["desc","asc"]}},{"name":"status","in":"query","required":false,"schema":{"type":"string","enum":["pending","posted","declined","reversed","expired"]}},{"name":"fromDate","in":"query","required":false,"schema":{"description":"Filter start date (ISO 8601)","type":"string"}},{"name":"toDate","in":"query","required":false,"schema":{"description":"Filter end date (ISO 8601)","type":"string"}},{"name":"search","in":"query","required":false,"schema":{"description":"Search by merchant name or description","type":"string"}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"description":"Transaction ID","type":"string"},"cardId":{"description":"Card ID","type":"string"},"merchantName":{"description":"Merchant name","type":"string"},"amount":{"description":"Transaction amount in USD","examples":["12.34"],"type":"string"},"currency":{"description":"Currency code (e.g., USD)","type":"string"},"localAmount":{"description":"Transaction amount in local currency","examples":["12.34"],"type":"string"},"localCurrency":{"description":"Local currency code (e.g., EUR)","type":"string"},"mccCode":{"description":"Merchant category code (e.g., 5411)","type":"string"},"status":{"type":"string","enum":["pending","posted","declined","reversed","expired"]},"disputeId":{"description":"Associated dispute ID, if any","anyOf":[{"type":"string"},{"type":"null"}]},"createdAt":{"description":"ISO 8601 timestamp","type":"string"}},"required":["id","cardId","merchantName","amount","currency","status","disputeId","createdAt"]}},"hasMore":{"description":"Whether there are more results","type":"boolean"},"nextCursor":{"description":"Cursor for fetching the next page","type":"string"}},"required":["data","hasMore"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1CardsByCardIdTransactions"}},"/v1/cards/{cardId}/pin":{"post":{"tags":["Cards"],"security":[{"bearerAuth":[]}],"summary":"Get card PIN","description":"Retrieves the encrypted card PIN.\n\n**Encryption:**\nThe PIN is returned as an AES-128-GCM encrypted payload. Use the session's AES key to decrypt it.\n\n**PIN Block Format (ISO 9564-1 Format 2):**\nAfter decryption, the plaintext is a 16-character PIN block with the following structure:\n- Byte 0: Control field (`2` indicates Format 2)\n- Byte 1: PIN length in hexadecimal (4-12)\n- Bytes 2-(1+N): The actual PIN digits\n- Remaining bytes: Padding (`F`)\n\n**Example:**\nA 4-digit PIN \"1234\" would be encoded as: `241234FFFFFFFFFF`\n\n**Parsing the PIN block:**\n```\nconst pinLength = parseInt(pinBlock[1], 16);\nconst pin = pinBlock.slice(2, 2 + pinLength);\n```","parameters":[{"name":"cardId","in":"path","required":true,"schema":{"minLength":1,"description":"The id of the card whose pin is being requested","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"encryptedKey":{"minLength":1,"description":"Base64-encoded RSA-encrypted AES-128 key used for PIN decryption","type":"string"}},"required":["encryptedKey"]}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"encryptedKey":{"minLength":1,"description":"Base64-encoded RSA-encrypted AES-128 key used for PIN decryption","type":"string"}},"required":["encryptedKey"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"encryptedKey":{"minLength":1,"description":"Base64-encoded RSA-encrypted AES-128 key used for PIN decryption","type":"string"}},"required":["encryptedKey"]}}}},"responses":{"200":{"description":"The encrypted PIN block for the card. When decrypted, the plaintext is an ISO 9564-1 Format 2 PIN block.","content":{"application/json":{"schema":{"description":"The encrypted PIN block for the card. When decrypted, the plaintext is an ISO 9564-1 Format 2 PIN block.","type":"object","properties":{"encryptedPin":{"type":"object","properties":{"iv":{"minLength":1,"description":"Base64-encoded initialization vector for AES-GCM decryption","type":"string"},"data":{"minLength":1,"description":"Base64-encoded AES-GCM encrypted PIN block","type":"string"}},"required":["iv","data"]}},"required":["encryptedPin"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"postV1CardsByCardIdPin"},"put":{"tags":["Cards"],"security":[{"bearerAuth":[]}],"summary":"Update card PIN","description":"Updates the card PIN.\n\n**PIN Block Format (ISO 9564-1 Format 2):**\nThe PIN must be formatted as a 16-character PIN block before encryption:\n- Byte 0: Control field (`2` indicates Format 2)\n- Byte 1: PIN length in hexadecimal (4-12)\n- Bytes 2-(1+N): The actual PIN digits\n- Remaining bytes: Padding (`F`)\n\n**Example:**\nA 4-digit PIN \"5678\" would be encoded as: `245678FFFFFFFFFF`\n\n**Formatting the PIN block:**\n```\nconst pinBlock = `2${pinLength.toString(16)}${pin}${'F'.repeat(14 - pinLength)}`;\n```\n\n**Encryption:**\n1. Generate a random AES-128 key\n2. Encrypt the PIN block using AES-128-GCM with the random key\n3. RSA-encrypt the AES key using the server's public key\n4. Send the RSA-encrypted key as `encryptedKey` and the AES-encrypted PIN block as `encryptedPin`\n\n**Validation:**\n- PIN must be 4-12 digits\n- Weak PINs (repeating like 1111, sequential like 1234) are rejected","parameters":[{"name":"cardId","in":"path","required":true,"schema":{"minLength":1,"description":"The id of the card whose pin is being updated","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"encryptedKey":{"minLength":1,"description":"Base64-encoded RSA-encrypted AES-128 key used for PIN encryption","type":"string"},"encryptedPin":{"description":"AES-128-GCM encrypted PIN block. The plaintext must be an ISO 9564-1 Format 2 PIN block.","type":"object","properties":{"iv":{"minLength":1,"description":"Base64-encoded initialization vector for AES-GCM decryption","type":"string"},"data":{"minLength":1,"description":"Base64-encoded AES-GCM encrypted PIN block","type":"string"}},"required":["iv","data"]}},"required":["encryptedKey","encryptedPin"]}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"encryptedKey":{"minLength":1,"description":"Base64-encoded RSA-encrypted AES-128 key used for PIN encryption","type":"string"},"encryptedPin":{"description":"AES-128-GCM encrypted PIN block. The plaintext must be an ISO 9564-1 Format 2 PIN block.","type":"object","properties":{"iv":{"minLength":1,"description":"Base64-encoded initialization vector for AES-GCM decryption","type":"string"},"data":{"minLength":1,"description":"Base64-encoded AES-GCM encrypted PIN block","type":"string"}},"required":["iv","data"]}},"required":["encryptedKey","encryptedPin"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"encryptedKey":{"minLength":1,"description":"Base64-encoded RSA-encrypted AES-128 key used for PIN encryption","type":"string"},"encryptedPin":{"description":"AES-128-GCM encrypted PIN block. The plaintext must be an ISO 9564-1 Format 2 PIN block.","type":"object","properties":{"iv":{"minLength":1,"description":"Base64-encoded initialization vector for AES-GCM decryption","type":"string"},"data":{"minLength":1,"description":"Base64-encoded AES-GCM encrypted PIN block","type":"string"}},"required":["iv","data"]}},"required":["encryptedKey","encryptedPin"]}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"putV1CardsByCardIdPin"}},"/v1/cards/{cardId}/status":{"patch":{"tags":["Cards"],"security":[{"bearerAuth":[]}],"summary":"Update card status","description":"Updates the card status. Valid statuses are: active, locked, canceled.","parameters":[{"name":"cardId","in":"path","required":true,"schema":{"minLength":1,"description":"The id of the card whose status is being updated","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["active","locked","canceled"]}},"required":["status"]}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["active","locked","canceled"]}},"required":["status"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"status":{"type":"string","enum":["active","locked","canceled"]}},"required":["status"]}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"description":"The unique identifier for the card","type":"string"},"status":{"type":"string","enum":["active","frozen","not_activated","cancelled"]},"type":{"type":"string","enum":["physical","virtual"]},"country":{"description":"The country code (e.g., US)","type":"string"},"currency":{"description":"The currency code (e.g., USD)","type":"string"},"last4":{"description":"The last 4 digits of the card number","type":"string"},"limit":{"description":"The spend limit for the card, or null if not set","anyOf":[{"type":"object","properties":{"amount":{"minimum":0,"description":"The spend limit amount in USD","type":"number"},"interval":{"description":"The interval for the spend limit","examples":["weekly","monthly"],"anyOf":[{"const":"daily","type":"string"},{"const":"weekly","type":"string"},{"const":"monthly","type":"string"},{"const":"yearly","type":"string"},{"const":"all_time","type":"string"},{"const":"per_transaction","type":"string"}]}},"required":["amount","interval"]},{"type":"null"}]},"payable":{"description":"Whether the card can be used for payments","type":"boolean"},"renderSecret":{"description":"The secret used for rendering sensitive card details","type":"string"},"createdAt":{"description":"ISO 8601 timestamp of card creation","type":"string"},"updatedAt":{"description":"ISO 8601 timestamp of last card update","type":"string"}},"required":["id","status","type","country","currency","last4","limit","payable","renderSecret","createdAt","updatedAt"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"patchV1CardsByCardIdStatus"}},"/v1/cards/{cardId}/limit":{"patch":{"tags":["Cards"],"security":[{"bearerAuth":[]}],"summary":"Update card spend limit","description":"Updates the card spend limit with a specified amount and interval (daily, weekly, monthly, yearly, all_time, per_transaction).","parameters":[{"name":"cardId","in":"path","required":true,"schema":{"minLength":1,"description":"The id of the card whose limit is being updated","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"spendLimit":{"type":"object","properties":{"amount":{"minimum":0,"description":"The spend limit amount in USD","examples":[200.56,100,1,99.99],"type":"number"},"interval":{"type":"string","enum":["daily","weekly","monthly","yearly","all_time","per_transaction"]}},"required":["amount","interval"]}},"required":["spendLimit"]}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"spendLimit":{"type":"object","properties":{"amount":{"minimum":0,"description":"The spend limit amount in USD","examples":[200.56,100,1,99.99],"type":"number"},"interval":{"type":"string","enum":["daily","weekly","monthly","yearly","all_time","per_transaction"]}},"required":["amount","interval"]}},"required":["spendLimit"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"spendLimit":{"type":"object","properties":{"amount":{"minimum":0,"description":"The spend limit amount in USD","examples":[200.56,100,1,99.99],"type":"number"},"interval":{"type":"string","enum":["daily","weekly","monthly","yearly","all_time","per_transaction"]}},"required":["amount","interval"]}},"required":["spendLimit"]}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"description":"The unique identifier for the card","type":"string"},"status":{"type":"string","enum":["active","frozen","not_activated","cancelled"]},"type":{"type":"string","enum":["physical","virtual"]},"country":{"description":"The country code (e.g., US)","type":"string"},"currency":{"description":"The currency code (e.g., USD)","type":"string"},"last4":{"description":"The last 4 digits of the card number","type":"string"},"limit":{"description":"The spend limit for the card, or null if not set","anyOf":[{"type":"object","properties":{"amount":{"minimum":0,"description":"The spend limit amount in USD","type":"number"},"interval":{"description":"The interval for the spend limit","examples":["weekly","monthly"],"anyOf":[{"const":"daily","type":"string"},{"const":"weekly","type":"string"},{"const":"monthly","type":"string"},{"const":"yearly","type":"string"},{"const":"all_time","type":"string"},{"const":"per_transaction","type":"string"}]}},"required":["amount","interval"]},{"type":"null"}]},"payable":{"description":"Whether the card can be used for payments","type":"boolean"},"renderSecret":{"description":"The secret used for rendering sensitive card details","type":"string"},"createdAt":{"description":"ISO 8601 timestamp of card creation","type":"string"},"updatedAt":{"description":"ISO 8601 timestamp of last card update","type":"string"}},"required":["id","status","type","country","currency","last4","limit","payable","renderSecret","createdAt","updatedAt"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"patchV1CardsByCardIdLimit"}},"/v1/integrator/tokens":{"post":{"tags":["Integrator"],"security":[{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Exchange credentials for JWT token","description":"Exchange HMAC-signed request for a short-lived JWT token.\n\n**Authentication**: Requires HMAC signature authentication with integrator credentials.\n\n**Use Case**: Backend integrators can exchange their HMAC credentials for a JWT token that can be used from frontend applications.\n\n**Token Lifetime**: Maximum 3600 seconds (60 minutes), default 3600 seconds.\n\n**Rate Limiting**: 100 token exchanges per minute per integrator.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"userApiKey":{"description":"User API key for token exchange","minLength":1,"examples":["ak_N2FjZTk3ZjMtsTWiZF00MGU0LWIxYTMtMTY0ZmM3MzJiNTdm"],"type":"string"},"expiresIn":{"description":"Token lifetime in seconds (default: 3600, max: 3600)","minimum":1,"maximum":3600,"default":3600,"examples":[3600,1800,600],"type":"number"}},"required":["userApiKey"]}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"userApiKey":{"description":"User API key for token exchange","minLength":1,"examples":["ak_N2FjZTk3ZjMtsTWiZF00MGU0LWIxYTMtMTY0ZmM3MzJiNTdm"],"type":"string"},"expiresIn":{"description":"Token lifetime in seconds (default: 3600, max: 3600)","minimum":1,"maximum":3600,"default":3600,"examples":[3600,1800,600],"type":"number"}},"required":["userApiKey"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"userApiKey":{"description":"User API key for token exchange","minLength":1,"examples":["ak_N2FjZTk3ZjMtsTWiZF00MGU0LWIxYTMtMTY0ZmM3MzJiNTdm"],"type":"string"},"expiresIn":{"description":"Token lifetime in seconds (default: 3600, max: 3600)","minimum":1,"maximum":3600,"default":3600,"examples":[3600,1800,600],"type":"number"}},"required":["userApiKey"]}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"description":"JWT access token with spr_ prefix","examples":["spr_eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."],"type":"string"},"userId":{"description":"The internal ID of the authorized user","examples":["699d4e0396a547d423a7cb43"],"type":"string"},"tokenType":{"description":"Token type (always 'Bearer')","const":"Bearer","type":"string"},"expiresIn":{"description":"Token lifetime in seconds","examples":[3600],"type":"number"},"expiresAt":{"description":"ISO 8601 timestamp when token expires","format":"date-time","examples":["2026-02-24T08:06:43.515Z"],"type":"string"}},"required":["accessToken","userId","tokenType","expiresIn","expiresAt"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"postV1IntegratorTokens"}},"/v1/integrator/":{"get":{"tags":["Integrator"],"security":[{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Get integrator profile","description":"Returns the authenticated integrator's profile information.","operationId":"getV1Integrator"}},"/v1/integrator/webhooks":{"get":{"tags":["Integrator"],"security":[{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Get webhooks","description":"Returns all webhooks configured for the integrator.","responses":{"200":{"description":"List of webhooks configured for the integrator","content":{"application/json":{"schema":{"description":"List of webhooks configured for the integrator","type":"array","items":{"type":"object","properties":{"id":{"description":"Unique identifier for the webhook","examples":["699d4e0396a547d423a7cb44"],"type":"string"},"events":{"description":"List of event types this webhook is subscribed to","type":"array","items":{"type":"string","enum":["account.created","account.updated","account.deleted","payment.created","payment.updated","payment.completed","payment.refunded","verification.status.updated","capabilities.updated"]}},"url":{"description":"URL to which webhook payloads are delivered","format":"uri","examples":["https://api.example.com/webhooks"],"type":"string"},"failureCount":{"description":"Number of consecutive delivery failures","minimum":0,"examples":[0],"type":"number"},"disabled":{"description":"Whether the webhook is currently disabled","examples":[false],"type":"boolean"}},"required":["id","events","url","failureCount","disabled"]}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1IntegratorWebhooks"},"post":{"tags":["Integrator"],"security":[{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Create webhook","description":"Creates a new webhook for the integrator.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"description":"URL to which webhook payloads will be delivered","format":"uri","examples":["https://api.example.com/webhooks"],"type":"string"},"events":{"description":"List of event types to subscribe to. Defaults to empty array.","default":[],"type":"array","items":{"type":"string","enum":["account.created","account.updated","account.deleted","payment.created","payment.updated","payment.completed","payment.refunded","verification.status.updated","capabilities.updated"]}}},"required":["url"]}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"url":{"description":"URL to which webhook payloads will be delivered","format":"uri","examples":["https://api.example.com/webhooks"],"type":"string"},"events":{"description":"List of event types to subscribe to. Defaults to empty array.","default":[],"type":"array","items":{"type":"string","enum":["account.created","account.updated","account.deleted","payment.created","payment.updated","payment.completed","payment.refunded","verification.status.updated","capabilities.updated"]}}},"required":["url"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"url":{"description":"URL to which webhook payloads will be delivered","format":"uri","examples":["https://api.example.com/webhooks"],"type":"string"},"events":{"description":"List of event types to subscribe to. Defaults to empty array.","default":[],"type":"array","items":{"type":"string","enum":["account.created","account.updated","account.deleted","payment.created","payment.updated","payment.completed","payment.refunded","verification.status.updated","capabilities.updated"]}}},"required":["url"]}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"description":"Unique identifier for the webhook","examples":["699d4e0396a547d423a7cb44"],"type":"string"},"events":{"description":"List of event types this webhook is subscribed to","type":"array","items":{"type":"string","enum":["account.created","account.updated","account.deleted","payment.created","payment.updated","payment.completed","payment.refunded","verification.status.updated","capabilities.updated"]}},"url":{"description":"URL to which webhook payloads are delivered","format":"uri","examples":["https://api.example.com/webhooks"],"type":"string"},"failureCount":{"description":"Number of consecutive delivery failures","minimum":0,"examples":[0],"type":"number"},"disabled":{"description":"Whether the webhook is currently disabled","examples":[false],"type":"boolean"}},"required":["id","events","url","failureCount","disabled"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"postV1IntegratorWebhooks"}},"/v1/integrator/webhooks/{webhookId}":{"delete":{"tags":["Integrator"],"security":[{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Delete webhook","description":"Deletes a webhook by ID.","parameters":[{"name":"webhookId","in":"path","required":true,"schema":{"description":"Unique identifier for the webhook to delete","type":"string"}}],"responses":{"200":{"description":"Response for status 200","content":{"type":"void"}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"deleteV1IntegratorWebhooksByWebhookId"}},"/v1/integrator/webhook-secret":{"put":{"tags":["Integrator"],"security":[{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Update webhook secret","description":"Updates the webhook secret used for signing webhook payloads.\n\n**Webhook Security**: Each webhook request is signed using HMAC SHA256. The signature is computed from the exact JSON payload and included in the `Signature` HTTP header.\n\n**Verification**: Compute the HMAC signature using your secret and the raw request body, then compare it to the `Signature` header before processing.\n\nIf no webhook secret is set, webhook requests will not include a `Signature` header.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"secret":{"description":"The secret key used to compute HMAC SHA256 signatures for webhook payloads. The signature is included in the `Signature` HTTP header of each webhook request.","minLength":1,"examples":["whsec_abc123def456"],"type":"string"}},"required":["secret"]}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"secret":{"description":"The secret key used to compute HMAC SHA256 signatures for webhook payloads. The signature is included in the `Signature` HTTP header of each webhook request.","minLength":1,"examples":["whsec_abc123def456"],"type":"string"}},"required":["secret"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"secret":{"description":"The secret key used to compute HMAC SHA256 signatures for webhook payloads. The signature is included in the `Signature` HTTP header of each webhook request.","minLength":1,"examples":["whsec_abc123def456"],"type":"string"}},"required":["secret"]}}}},"responses":{"200":{"description":"Response for status 200","content":{"type":"void"}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"putV1IntegratorWebhook-secret"}},"/v1/integrator/regenerate-secret":{"post":{"tags":["Integrator"],"security":[{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Regenerate API secret","description":"Regenerates the integrator's API secret. The new secret is returned in the response - this is the only time it will be exposed.\n\n**Grace Period**: Optionally specify `oldSecretValidForSeconds` (0-3600) to keep the old secret valid during rotation. This prevents service disruption while updating your systems.\n\n**Warning**: Without a grace period, the old secret is invalidated immediately. Any requests signed with the old secret will fail.\n\nStore the new secret securely - it cannot be retrieved again.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"oldSecretValidForSeconds":{"description":"Grace period in seconds during which the old secret remains valid. Allows for safe rotation without service disruption. Default: 0 (immediate invalidation), Maximum: 3600 (1 hour).","minimum":0,"maximum":3600,"default":0,"examples":[300,600,3600],"type":"number"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"oldSecretValidForSeconds":{"description":"Grace period in seconds during which the old secret remains valid. Allows for safe rotation without service disruption. Default: 0 (immediate invalidation), Maximum: 3600 (1 hour).","minimum":0,"maximum":3600,"default":0,"examples":[300,600,3600],"type":"number"}}}},"multipart/form-data":{"schema":{"type":"object","properties":{"oldSecretValidForSeconds":{"description":"Grace period in seconds during which the old secret remains valid. Allows for safe rotation without service disruption. Default: 0 (immediate invalidation), Maximum: 3600 (1 hour).","minimum":0,"maximum":3600,"default":0,"examples":[300,600,3600],"type":"number"}}}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"secret":{"description":"The newly generated API secret. This is the only time the secret will be exposed - store it securely.","examples":["sk_live_abc123def456ghi789"],"type":"string"},"oldSecretExpiresAt":{"description":"ISO 8601 timestamp when the old secret will expire. Only present if a grace period was specified.","format":"date-time","examples":["2026-02-24T07:11:43.515Z"],"type":"string"}},"required":["secret"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"postV1IntegratorRegenerate-secret"}},"/v1/payment-requests/":{"post":{"tags":["Payment Requests"],"security":[{"bearerAuth":[]},{"integratorJwt":[]},{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Create a new payment request","description":"Creates a new payment request with the specified amount.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"description":"ID of the account the payment request is for","examples":["699d4e0396a547d423a7cb45"],"pattern":"^[0-9a-fA-F]{24}$","type":"string"},"amount":{"description":"The amount for the payment request","examples":[100.5,25],"minimum":0,"type":"number"}},"required":["accountId","amount"]}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"accountId":{"description":"ID of the account the payment request is for","examples":["699d4e0396a547d423a7cb45"],"pattern":"^[0-9a-fA-F]{24}$","type":"string"},"amount":{"description":"The amount for the payment request","examples":[100.5,25],"minimum":0,"type":"number"}},"required":["accountId","amount"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"accountId":{"description":"ID of the account the payment request is for","examples":["699d4e0396a547d423a7cb45"],"pattern":"^[0-9a-fA-F]{24}$","type":"string"},"amount":{"description":"The amount for the payment request","examples":[100.5,25],"minimum":0,"type":"number"}},"required":["accountId","amount"]}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"description":"Unique identifier for the payment request","examples":["699d4e0396a547d423a7cb46"],"type":"string"}},"required":["id"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"postV1Payment-requests"}},"/v1/users/me":{"get":{"tags":["Users"],"security":[{"bearerAuth":[]},{"integratorJwt":[]},{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Get the current authenticated user","description":"Returns the authenticated user's profile information.","responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"description":"Unique identifier for the user","examples":["699d4e0396a547d423a7cb47"],"type":"string"},"email":{"nullable":true,"anyOf":[{"description":"User's email address","format":"email","examples":["user@example.com"],"type":"string"},{"type":"null"}]},"firstName":{"nullable":true,"anyOf":[{"description":"User's first name","examples":["John"],"type":"string"},{"type":"null"}]},"signedUpAt":{"description":"ISO 8601 timestamp of when the user was created","format":"date-time","examples":["2026-02-24T07:06:43.522Z"],"type":"string"},"timezone":{"nullable":true,"anyOf":[{"description":"User's timezone in IANA format","examples":["America/New_York","Europe/London"],"type":"string"},{"type":"null"}]},"notificationPreferences":{"description":"User's notification preferences by type","type":"array","items":{"description":"A notification preference for a specific notification type","type":"object","properties":{"type":{"type":"string","enum":["cardTransaction.approved","cardTransaction.declined","credit.added"]},"email":{"description":"Whether email notifications are enabled for this type","default":true,"type":"boolean"},"mobile":{"description":"Whether mobile notifications are enabled for this type","default":false,"type":"boolean"}},"required":["type","email","mobile"]}},"verification":{"description":"User's identity verification status and any pending requirements","type":"object","properties":{"status":{"type":"string","enum":["not_started","verified","failed","disabled","retry"]},"country":{"nullable":true,"anyOf":[{"description":"ISO 3166-1 alpha-2 country code where user was verified","examples":["US","GB","CA"],"type":"string"},{"type":"null"}]},"requirement":{"description":"A requirement that must be fulfilled to access certain features","type":"object","properties":{"type":{"type":"string","enum":["identity_verification","terms_acceptance","additional_verification","document_submission"]},"description":{"description":"Human-readable description of what needs to be done","examples":["Verify your identity to unlock payment features"],"type":"string"},"actionUrl":{"nullable":true,"anyOf":[{"description":"URL where the user can complete this requirement","format":"uri","examples":["https://verify.example.com/start"],"type":"string"},{"type":"null"}]},"retryable":{"description":"Whether this requirement can be retried after failure","examples":[true],"type":"boolean"},"status":{"type":"string","enum":["not_started","pending","completed","failed"]}},"required":["type","status"]}},"required":["status","country"]},"capabilities":{"description":"User's available capabilities and their requirements","type":"array","items":{"description":"Individual capability with its own requirements and status","type":"object","properties":{"type":{"type":"string","enum":["ach_push","wire_push","sepa_push","ach_payout","rtp_payout","wire_payout","push_to_debit","ca_eft_payout","us_bill_pay","crypto_card"]},"name":{"description":"Human-readable name for this capability","examples":["ACH Bank Transfer","Instant Bank Transfer"],"type":"string"},"description":{"description":"Description of what this capability enables","examples":["Buy crypto using ACH bank transfer"],"type":"string"},"direction":{"type":"string","enum":["fiat_to_crypto","crypto_to_fiat"]},"status":{"type":"string","enum":["active","requirements_needed","not_available","pending"]},"nextRequirement":{"type":"string","enum":["identity_verification","terms_acceptance","additional_verification","document_submission"]},"requirements":{"description":"List of requirements that must be met to activate this capability","examples":[[]],"type":"array","items":{"description":"A requirement that must be fulfilled to access certain features","type":"object","properties":{"type":{"type":"string","enum":["identity_verification","terms_acceptance","additional_verification","document_submission"]},"description":{"description":"Human-readable description of what needs to be done","examples":["Verify your identity to unlock payment features"],"type":"string"},"actionUrl":{"nullable":true,"anyOf":[{"description":"URL where the user can complete this requirement","format":"uri","examples":["https://verify.example.com/start"],"type":"string"},{"type":"null"}]},"retryable":{"description":"Whether this requirement can be retried after failure","examples":[true],"type":"boolean"},"status":{"type":"string","enum":["not_started","pending","completed","failed"]}},"required":["type","status"]}}},"required":["type","name","description","direction","status","requirements"]}}},"required":["id","email","firstName","signedUpAt","timezone","notificationPreferences","verification","capabilities"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1UsersMe"},"patch":{"tags":["Users"],"security":[{"bearerAuth":[]},{"integratorJwt":[]},{"hmacAuth":[],"integratorKey":[],"timestamp":[]}],"summary":"Update the current authenticated user","description":"Updates the authenticated user's profile. Both fields are optional - include only what you want to change.\n\n**Updatable fields:**\n- `timezone`: User's timezone in IANA format (e.g., \"America/New_York\")\n- `notificationPreferences`: Array of notification preference updates\n\n**Partial updates for notification preferences:**\nThe `notificationPreferences` array supports partial updates at two levels:\n\n1. **Type-level**: Only include notification types you want to modify. Types not included will keep their existing settings.\n2. **Field-level**: For each type included, you must provide both `email` and `mobile` fields, but only the values you provide will be applied.\n\n**Example - Update just one notification type:**\n```json\n{\n \"notificationPreferences\": [\n { \"type\": \"cardTransaction.approved\", \"email\": false, \"mobile\": true }\n ]\n}\n```\nThis updates only \"cardTransaction.approved\" preferences; all other notification types remain unchanged.\n\n**Example - Update only timezone:**\n```json\n{\n \"timezone\": \"Europe/London\"\n}\n```","requestBody":{"description":"Request body for updating user profile. All fields are optional - include only the fields you want to update.","required":true,"content":{"application/json":{"schema":{"description":"Request body for updating user profile. All fields are optional - include only the fields you want to update.","type":"object","properties":{"timezone":{"description":"User's timezone in IANA format","examples":["America/New_York","Europe/London"],"type":"string"},"notificationPreferences":{"description":"Notification preferences to update. Supports partial updates: only include the notification types you want to change. For each type included, you can update just 'email', just 'mobile', or both fields. Notification types not included in this array will retain their existing settings.","examples":[[{"type":"cardTransaction.approved","email":false,"mobile":true}]],"type":"array","items":{"description":"A notification preference for a specific notification type","type":"object","properties":{"type":{"type":"string","enum":["cardTransaction.approved","cardTransaction.declined","credit.added"]},"email":{"description":"Whether email notifications are enabled for this type","default":true,"type":"boolean"},"mobile":{"description":"Whether mobile notifications are enabled for this type","default":false,"type":"boolean"}},"required":["type","email","mobile"]}}}}},"application/x-www-form-urlencoded":{"schema":{"description":"Request body for updating user profile. All fields are optional - include only the fields you want to update.","type":"object","properties":{"timezone":{"description":"User's timezone in IANA format","examples":["America/New_York","Europe/London"],"type":"string"},"notificationPreferences":{"description":"Notification preferences to update. Supports partial updates: only include the notification types you want to change. For each type included, you can update just 'email', just 'mobile', or both fields. Notification types not included in this array will retain their existing settings.","examples":[[{"type":"cardTransaction.approved","email":false,"mobile":true}]],"type":"array","items":{"description":"A notification preference for a specific notification type","type":"object","properties":{"type":{"type":"string","enum":["cardTransaction.approved","cardTransaction.declined","credit.added"]},"email":{"description":"Whether email notifications are enabled for this type","default":true,"type":"boolean"},"mobile":{"description":"Whether mobile notifications are enabled for this type","default":false,"type":"boolean"}},"required":["type","email","mobile"]}}}}},"multipart/form-data":{"schema":{"description":"Request body for updating user profile. All fields are optional - include only the fields you want to update.","type":"object","properties":{"timezone":{"description":"User's timezone in IANA format","examples":["America/New_York","Europe/London"],"type":"string"},"notificationPreferences":{"description":"Notification preferences to update. Supports partial updates: only include the notification types you want to change. For each type included, you can update just 'email', just 'mobile', or both fields. Notification types not included in this array will retain their existing settings.","examples":[[{"type":"cardTransaction.approved","email":false,"mobile":true}]],"type":"array","items":{"description":"A notification preference for a specific notification type","type":"object","properties":{"type":{"type":"string","enum":["cardTransaction.approved","cardTransaction.declined","credit.added"]},"email":{"description":"Whether email notifications are enabled for this type","default":true,"type":"boolean"},"mobile":{"description":"Whether mobile notifications are enabled for this type","default":false,"type":"boolean"}},"required":["type","email","mobile"]}}}}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"description":"Unique identifier for the user","examples":["699d4e0396a547d423a7cb47"],"type":"string"},"email":{"nullable":true,"anyOf":[{"description":"User's email address","format":"email","examples":["user@example.com"],"type":"string"},{"type":"null"}]},"firstName":{"nullable":true,"anyOf":[{"description":"User's first name","examples":["John"],"type":"string"},{"type":"null"}]},"signedUpAt":{"description":"ISO 8601 timestamp of when the user was created","format":"date-time","examples":["2026-02-24T07:06:43.522Z"],"type":"string"},"timezone":{"nullable":true,"anyOf":[{"description":"User's timezone in IANA format","examples":["America/New_York","Europe/London"],"type":"string"},{"type":"null"}]},"notificationPreferences":{"description":"User's notification preferences by type","type":"array","items":{"description":"A notification preference for a specific notification type","type":"object","properties":{"type":{"type":"string","enum":["cardTransaction.approved","cardTransaction.declined","credit.added"]},"email":{"description":"Whether email notifications are enabled for this type","default":true,"type":"boolean"},"mobile":{"description":"Whether mobile notifications are enabled for this type","default":false,"type":"boolean"}},"required":["type","email","mobile"]}},"verification":{"description":"User's identity verification status and any pending requirements","type":"object","properties":{"status":{"type":"string","enum":["not_started","verified","failed","disabled","retry"]},"country":{"nullable":true,"anyOf":[{"description":"ISO 3166-1 alpha-2 country code where user was verified","examples":["US","GB","CA"],"type":"string"},{"type":"null"}]},"requirement":{"description":"A requirement that must be fulfilled to access certain features","type":"object","properties":{"type":{"type":"string","enum":["identity_verification","terms_acceptance","additional_verification","document_submission"]},"description":{"description":"Human-readable description of what needs to be done","examples":["Verify your identity to unlock payment features"],"type":"string"},"actionUrl":{"nullable":true,"anyOf":[{"description":"URL where the user can complete this requirement","format":"uri","examples":["https://verify.example.com/start"],"type":"string"},{"type":"null"}]},"retryable":{"description":"Whether this requirement can be retried after failure","examples":[true],"type":"boolean"},"status":{"type":"string","enum":["not_started","pending","completed","failed"]}},"required":["type","status"]}},"required":["status","country"]},"capabilities":{"description":"User's available capabilities and their requirements","type":"array","items":{"description":"Individual capability with its own requirements and status","type":"object","properties":{"type":{"type":"string","enum":["ach_push","wire_push","sepa_push","ach_payout","rtp_payout","wire_payout","push_to_debit","ca_eft_payout","us_bill_pay","crypto_card"]},"name":{"description":"Human-readable name for this capability","examples":["ACH Bank Transfer","Instant Bank Transfer"],"type":"string"},"description":{"description":"Description of what this capability enables","examples":["Buy crypto using ACH bank transfer"],"type":"string"},"direction":{"type":"string","enum":["fiat_to_crypto","crypto_to_fiat"]},"status":{"type":"string","enum":["active","requirements_needed","not_available","pending"]},"nextRequirement":{"type":"string","enum":["identity_verification","terms_acceptance","additional_verification","document_submission"]},"requirements":{"description":"List of requirements that must be met to activate this capability","examples":[[]],"type":"array","items":{"description":"A requirement that must be fulfilled to access certain features","type":"object","properties":{"type":{"type":"string","enum":["identity_verification","terms_acceptance","additional_verification","document_submission"]},"description":{"description":"Human-readable description of what needs to be done","examples":["Verify your identity to unlock payment features"],"type":"string"},"actionUrl":{"nullable":true,"anyOf":[{"description":"URL where the user can complete this requirement","format":"uri","examples":["https://verify.example.com/start"],"type":"string"},{"type":"null"}]},"retryable":{"description":"Whether this requirement can be retried after failure","examples":[true],"type":"boolean"},"status":{"type":"string","enum":["not_started","pending","completed","failed"]}},"required":["type","status"]}}},"required":["type","name","description","direction","status","requirements"]}}},"required":["id","email","firstName","signedUpAt","timezone","notificationPreferences","verification","capabilities"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"patchV1UsersMe"}},"/v1/api-keys/":{"post":{"tags":["API Keys"],"security":[{"bearerAuth":[]}],"summary":"Create an API key","description":"Creates a new API key for the authenticated user. The raw key is returned once and cannot be retrieved again.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"permissions":{"minItems":1,"type":"array","items":{"type":"string","enum":["wallets:read","wallets:write","transactions:write","policies:read","policies:write","audit:read"]}},"expiresAt":{"format":"date-time","description":"ISO 8601 expiration timestamp","type":"string"},"name":{"minLength":1,"maxLength":255,"type":"string"}},"required":["permissions"]}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"permissions":{"minItems":1,"type":"array","items":{"type":"string","enum":["wallets:read","wallets:write","transactions:write","policies:read","policies:write","audit:read"]}},"expiresAt":{"format":"date-time","description":"ISO 8601 expiration timestamp","type":"string"},"name":{"minLength":1,"maxLength":255,"type":"string"}},"required":["permissions"]}},"multipart/form-data":{"schema":{"type":"object","properties":{"permissions":{"minItems":1,"type":"array","items":{"type":"string","enum":["wallets:read","wallets:write","transactions:write","policies:read","policies:write","audit:read"]}},"expiresAt":{"format":"date-time","description":"ISO 8601 expiration timestamp","type":"string"},"name":{"minLength":1,"maxLength":255,"type":"string"}},"required":["permissions"]}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"keyPrefix":{"type":"string"},"rawKey":{"description":"The raw API key. Store securely — it will not be shown again.","type":"string"},"permissions":{"type":"array","items":{"type":"string"}},"name":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"expiresAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"warning":{"type":"string"}},"required":["id","keyPrefix","rawKey","permissions","name","expiresAt","createdAt","warning"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"postV1Api-keys"},"get":{"tags":["API Keys"],"security":[{"bearerAuth":[]}],"summary":"List API keys","description":"Lists all API keys for the authenticated user. Only key prefixes are returned, never the full key or hash.","responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"keyPrefix":{"type":"string"},"permissions":{"type":"array","items":{"type":"string"}},"status":{"type":"string"},"expiresAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"lastUsedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]}},"required":["id","name","keyPrefix","permissions","status","expiresAt","createdAt","lastUsedAt"]}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"getV1Api-keys"}},"/v1/api-keys/{keyId}":{"delete":{"tags":["API Keys"],"security":[{"bearerAuth":[]}],"summary":"Revoke an API key","description":"Revokes an API key. This action is irreversible.","parameters":[{"name":"keyId","in":"path","required":true,"schema":{"minLength":1,"type":"string"}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"}},"required":["success"]}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:auth:token-expired"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Token Expired"],"type":"string"},"status":{"description":"The HTTP status code","examples":[401,403],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","examples":["Bearer token required","Invalid token"],"type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"realm":{"description":"The authentication realm","examples":["API"],"type":"string"},"scope":{"description":"The required scope for this resource","examples":["read:users","write:orders"],"type":"string"}},"required":["title","status"]}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","type":"string"},"title":{"description":"A short, human-readable summary of the problem type","type":"string"},"status":{"description":"The HTTP status code","examples":[404],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","type":"string"},"resourceType":{"description":"The type of resource that was not found","examples":["user","account","transaction"],"type":"string"},"resourceId":{"description":"The identifier of the resource that was not found","type":"string"}},"required":["title","status","resourceType","resourceId"]}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","properties":{"type":{"default":"about:blank","description":"A URI reference that identifies the problem type","examples":["urn:problem-type:auth:unauthorized","urn:problem-type:system:internal-error"],"type":"string"},"title":{"description":"A short, human-readable summary of the problem type","examples":["Unauthorized","Internal Server Error"],"type":"string"},"status":{"description":"The HTTP status code","examples":[400,401,404,500],"type":"number"},"detail":{"description":"A human-readable explanation specific to this occurrence","type":"string"},"instance":{"description":"A URI reference that identifies the specific occurrence","examples":["/errors/1234567890"],"type":"string"}},"required":["title","status"]}}}}},"operationId":"deleteV1Api-keysByKeyId"}}}}