Environment variables
Discover supported capabilities
Read the customer’s current options withGET /v3/customers/{customerId}/capabilities/supported:
List supported capabilities
directions, method, and accountType. Continue only when availability is available or beta and eligibility.eligible is true. If institutions are returned, select only an ID from that response.
Each institution entry includes a logoUrl and an isDefault flag. Use logoUrl to show the bank’s logo in a bank selection UI, and render your own generic bank icon when it is null. isDefault applies to this customer and capability only, not to the institution globally. GET /v3/institutions returns the same nullable logoUrl. Institution IDs are opaque, so handle new IDs without code changes.
Institution entry
data[].id as CAPABILITY_ID. Never copy a capability ID from another customer or environment.
Show why a bank is unavailable
Every entry also includesunavailableInstitutions. It lists the banks that offer this capability variant but do not accept this customer. Each entry has an id, a name, and a non-empty reasons array. Each reason uses the same shape as statusReason, with actor: "provider" and retryable: false. Use unavailableInstitutions to show customers why a bank is missing from your bank selection UI, for example by rendering the bank as disabled with the reason’s message.
Unavailable institution entry
Handle unknown codes without code changes, because Swipelux can add new codes. A bank never appears in both
institutions and unavailableInstitutions. unavailableInstitutions is always present and is [] on pooled and non-bank entries. A bank that is in neither list is left out for a reason unrelated to this customer. Naming an unavailable bank in a capability request still returns 422 capability_institutions_unsupported.
Pooled vs named account types
Bank capabilities come in two variants, encoded as theaccountType field and the capability ID suffix (for example ach_pooled, wire_named):
pooled: shared Swipelux bank account. Each pay-in uses a unique reference to route funds. Pick this for one-time transfers.named: dedicated bank details for the customer (virtual IBAN, dedicated ACH account). Reusable and shareable with any payer. Required for issued bank accounts.
pooled. Use named only when the customer needs reusable bank details. Check the supported response for which variants are available.
To receive SWIFT deposits or issue SWIFT bank details, use swift_named. swift_pooled supports payouts only, so check each option’s directions in the supported-capability response. A named SWIFT account returns reusable receiving details, including the bank’s BIC, a reference when one is required, and the beneficiary address when the bank supplies it.
For issued ACH, Wire, and SWIFT accounts, you can pick an exact bank with institution and save the account request before the bank approves the customer. See Issue a bank account.
Request the capability
Request the selected option withPOST /v3/customers/{customerId}/capabilities/{capabilityId}:
Request capability
institutions array only when you need to select from IDs returned by the supported-capability response.
Store data.status as CAPABILITY_STATUS, data.accountProvisioning as ACCOUNT_PROVISIONING_STATUS, data.openTaskIds as OPEN_TASK_IDS, and each data.applications[].id in APPLICATION_IDS.
Shared applications per bank
For named bank capabilities, each customer has one application case per bank. Pooled and platform capabilities use cases without a bank. Swipelux shares a case across every compatible capability you request:- One approval can cover several capabilities. For example, an approved case at one bank can make both an ACH and a wire capability
ready. - A later request that matches an existing case reuses it. Swipelux opens no second application and adds no duplicate tasks.
- Cases at different banks are independent. A rejection at one bank does not affect a case at another bank.
201means the request opened a new application case.200means the request resolved to an application case the customer already had, for example a repeated request for a bank capability the customer already holds, or a request for a canceled capability. A repeated request forcardorstablecoin_transfersstill returns409 capability_already_exists.selectedApplicationIdis a top-level field next todatawith the ID of the case the request selected or opened. Swipelux omits it when the request did not select a case. An idempotent replay returns the same value.
Response (abbreviated)
institutions list again to select the same case, or send one institution ID to target that bank. A bank that terminally rejected the customer is skipped. When you name only that bank, or every eligible bank has rejected the customer, the request returns 409 capability_terminally_rejected. To try another bank after a rejection, request the capability again with that bank’s institution ID.
A capability’s status reflects all of the customer’s related cases. For a named capability, one ready case whose approval covers it is enough to make it ready, whatever other banks report. A pooled capability also waits for its method check, reported in probes on the customer applications list.
List the customer’s applications
List every application case for the customer withGET /v3/customers/{customerId}/applications. Results are paginated with nextCursor and hasMore, and accept updatedAfter:
List applications
applications[], plus:
scope:namedfor a case at one bank,provider_pooledorplatformfor cases without a bank, ornullfor an unclassified historical case.institutionis absent forprovider_pooledandplatformcases.requestedScope[]: the capability keys requested against the case, each with its firstrequestedAt. Entries are never removed.coverage[]: the capability keys the case’s approval covers, each withgrantedAtandsource. Coverage records scope, not authorization. Read the capability for its current status.probes[]: method checks for the pooled capability keys the case covers, each withcapabilityKey,status, andreason. Named keys never require a probe.generation,predecessorApplicationId, andsupersededByApplicationId: succession links. WhensupersededByApplicationIdis set, the case was replaced. Follow that ID to the current case. A capability’sapplications[]lists only current cases, so a replaced case appears only in this list.
Response (abbreviated)
Complete current tasks
List tasks withGET /v3/customers/{customerId}/tasks, select IDs from OPEN_TASK_IDS, then read each current task with GET /v3/customers/{customerId}/tasks/{taskId}:
List open tasks
data.revision and data.requirements. Refetch the task immediately before submitting if either may have changed.
Reused profile evidence
For application intake tasks that accept direct API submission, Swipelux reuses information the customer already provided. When such a task is created or reconciled, Swipelux checks the customer profile and the customer’s own uploaded documents. Eligible requirements already backed by a usable profile value or document move toin_review instead of staying actionable. Profile updates and new document uploads trigger the same check for existing tasks.
Only missing or incompatible values stay actionable. Reuse does not approve the evidence. Swipelux still reviews it. Explicit correction requests and previously answered requirements stay actionable. Owner and related-party documents are not reused, and requirements collected only through a hosted session keep their normal flow.
Render requirements
Build forms from the metadata each requirement returns rather than from requirement keys. A requirement can include an optional shorttitle, and every request includes a prompt to show beneath the heading.
Requirements with request.type: "profile" identify the profile field with profilePointer and add input metadata:
allowedValues: the permitted values for a scalar field, or for each item of an array field. Submit these values, not translated display labels.valueSchema: a self-contained JSON Schema Draft 7 document that describes the input shape, nested properties, required fields, and structural constraints. Enums on objects appear on the relevant property, for examplevalueSchema.items.properties.type.enumfor tax identifiers. Swipelux still applies cross-field and review validation after submission, so a value that passes the schema can still be rejected.valueType: "country", oritemValueType: "country"for arrays: the field takes uppercase ISO 3166-1 alpha-2 codes. Nested country properties invalueSchemauseformat: "iso-3166-1-alpha-2". Use a standard country list for localized labels.
Requirement
valueSchema and allowedValues. Render those from prompt and valueType.
Every open task includes a dueAt timestamp. When Swipelux authors a task without an explicit due date, dueAt defaults to exactly 31 days after the task’s createdAt. Treat dueAt as informational: you cannot set it through the API, and it does not trigger an automatic lifecycle transition. Only the separate deadline field, when present, causes an automatic transition.
Hosted actions
In the task-detail response, each entry inverificationSessions and tosSessions includes an action object. Task-list responses do not include these action links. Store each session id, then read action.kind before dispatching the customer; do not infer link availability from session status.
action.kind: "available"includesaction.urlandaction.expiresAt(currently alwaysnull). Storeaction.url, send the customer to it, then read the task again. The session-levelurlandexpiresAtfields contain the same values.action.kind: "unavailable"means no link should be presented. The session-levelurlandexpiresAtfields are absent. A session’sstatusalone does not determine which action kind you receive.
Verification session
verificationSessions[] entry in task reads and customer task detail includes coveredRequirementIds. It lists the IDs of the task’s live requirements that the session can fill. Use it to see which requirements a hosted session or an imported verification can settle. Fill every other requirement through API answers.
For new individual intake tasks, the hosted identity session covers only the ID document, selfie, and proof of address. Proof-of-funds requirements, such as proof_of_funds, source_of_funds_document, named_source_of_funds_document, and sole_proprietor_document, are not part of the hosted session. Upload and submit those documents directly. Swipelux reviews them, and the task stays open until they are accepted.
A hosted answer to a profile requirement for a structured value, such as an address or tax identifiers, must pass the same schema and constraint checks as a direct answer. When it does not, the requirement stays open. A requirement that Swipelux returns to action_required for this reason carries reviewFeedback.code: hosted_profile_direct_submission_required. Collect that value from the customer and submit it as an API answer.
Import an existing identity verification
If you already verify individuals in your own account with Swipelux’s identity verification provider, you can import that verification into the identity session of the customer’s intake task instead of sending the customer through the hosted flow. This option is for API integrations with individual customers only. Businesses and related parties are not supported. Before you import, set up sharing with your identity verification provider:- Ask Swipelux for its partner token, then add Swipelux as a sharing partner in your identity verification provider account.
- For live verifications, generate a share token for Swipelux with recipient client ID (
forClientId)swipelux.com_21030. - Send the token to Swipelux before it expires. Share tokens are opaque, single-use, at most 1,024 UTF-8 bytes, and expire after 20 minutes by default. Treat each token as a credential.
type: "identity_verification" and status: "action_required". The customer must not already have a verification in progress or completed with Swipelux, and an import must not already be running. Opening the hosted link starts verification, but reading the task does not. Then call POST /v3/customers/{customerId}/tasks/{taskId}/verification-sessions/{verificationSessionId}/share-token. The request needs the same accounts:write, customers:read, and customers:write permissions as task submissions, plus an Idempotency-Key:
Request body
Response
status: "in_review"means the checks are pending. When the checks finish, Swipelux settles the covered requirements the same way as for a hosted session.status: "action_required"means steps are missing. The customer can finish them through the session’s existing hosted link, or you can submit the covered requirements directly.
coveredRequirementIds: the ID document, selfie, and, where the task requires it, proof of address. Submit profile answers, proof of funds, and other requirements as API answers. To replay a request, send it again with the same Idempotency-Key.
Upload documents
When a requirement requests a document, upload it withPOST /v3/customers/{customerId}/documents:
Upload document
data.id as DOCUMENT_ID before submitting the answer that references it.
To retrieve a stored file later, call GET /v3/customers/{customerId}/documents/{documentId}/download. Swipelux returns a url that downloads the file as an attachment and expires after one hour. Archived documents return 404.
API answers
Submit one complete answer set for the current revision withPOST /v3/customers/{customerId}/tasks/{taskId}/submissions:
Submit task answers
Beneficial-owner prerequisite for businesses
Requesting a business capability that needs beneficial-owner evidence succeeds even when the customer has no qualifying owner yet. The capability is created asrestricted with statusReason.code: tasks_due, and the business intake task requests the missing ownership facts, including the ownership structure.
The same task carries a resource_reference requirement whose request includes qualification: "beneficial_owner":
Beneficial owner requirement
person party of the same customer with a supplied ownership percentage of at least 25, or with ownership.declared: true and no percentage.
The requirement is derived from the current related-party roster, so you usually do not answer it directly:
- Creating or updating a qualifying related party meets the requirement in the same reevaluation and opens that owner’s own profile and document work. See Add business related parties.
- You can also reference a qualifying party explicitly with a
resource_referenceanswer that carries itsrelatedPartyId. - The requirement stays listed in the current task after it is met. When no other obligation remains open, the task becomes
satisfied. - Archiving the last qualifying party, or removing the facts that qualified it, reopens the requirement, even after the task was
satisfied.
Continue when the capability is ready
Read the capability again withGET /v3/customers/{customerId}/capabilities/{capabilityId}:
Refetch capability
status reports whether the entitlement is approved. For a capability that issues an account, accountProvisioning separately reports whether that account is not_started, in_progress, issued, or failed; a capability that does not issue an account returns not_applicable.
While the capability is pending, two of the statusReason.code values it can report show whether a review is underway. preparing_submission means Swipelux is still preparing an application for submission and no review is underway, even if another bank’s application is rejected or needs attention. review_in_progress means a review is underway, for example while an application is in_review or a hosted verification is open. Both use resolution: wait. A change between these codes keeps the status pending, so it sends no capability.status_changed event. Read the capability to see the current code.
A capability can also be restricted with statusReason.code: offer_unavailable and resolution: contact_support. Swipelux returns this code when an approved application covers the capability but no current offer permits it. The application is already approved, so waiting does not change the capability. Contact Swipelux support instead of polling. This code replaces related_application_action_required and resolution: wait in this case. Open customer tasks still take precedence, so complete any current tasks first.
Capability restricted by offer availability
accountProvisioning to become issued.
Next, choose the matching journey in Common flows.