Added
- Every entry from
GET /v3/customers/{customerId}/capabilities/supportedincludesunavailableInstitutions. It lists the banks that offer the capability variant but do not accept this customer, each with anid, aname, andreasonsinstatusReasonshape. Current reason codes arejurisdiction_unsupported,legal_form_unsupported, andcustomer_type_unsupported. The field is[]on pooled and non-bank entries, and a bank never appears in bothinstitutionsandunavailableInstitutions. Naming an unavailable bank in a capability request still returns422 capability_institutions_unsupported. See Capabilities and requirements.
Added
- Authenticated requests are rate-limited per API key, per integrating business and per client IP address. A request over a limit returns
429 rate_limitedwithretryable: trueand aRetry-Afterheader that gives the seconds to wait before retrying. Integrating businesses that are not yet approved have lower limits. Every authenticated operation in the API reference lists the429response. Repeated failed authentications from one IP address also return429once over their limit, while valid API keys sent from that address keep working.
Added
- Webhook endpoints include
disabled, which istruewhile deliveries to the endpoint are paused. Swipelux also pauses an endpoint after repeated delivery failures. Senddisabled: trueinPATCH /v3/webhooks/{webhookId}to pause deliveries anddisabled: falseto resume them. Resuming checks the destination URL again and returns400if it no longer passes, so the endpoint stays paused.
Changed
POST /v3/customers/{customerId}/exportwithformat: sumsub_share_tokenreturns422 kyc_provider_rejectedwithretryable: falsewhen the identity verification provider refuses to create the share token, for example for an unknownforClientId, instead of502 request_failed. The response carries a fixed Swipelux message and never repeats the provider’s error text, so check the request before retrying. Other provider failures still return502 request_failed, which is retryable.- The portal from
GET /v3/webhooks/portalno longer creates, edits, pauses, or deletes endpoints. With an API key that haswebhooks:write, it still shows and rotates the endpoint signing secret, retries deliveries, and replays them. Create endpoints withPOST /v3/webhooks, change or pause them withPATCH /v3/webhooks/{webhookId}, and delete them withDELETE /v3/webhooks/{webhookId}. See Webhooks.
Changed
- Until your integrating business KYB is approved, you can make 20 webhook URL changes per hour in total, across all endpoints in your live spaces that require KYB. Changes in sandbox spaces do not count. Exceeding the webhook URL limit returns
422 merchant_kyb_not_approved. Changing only an endpoint’seventsor saving its current URL does not count as a URL change. In the dashboard, Swipelux refuses more than 10 active API keys per live space that requires KYB with a plain422response. Swipelux also refuses more than 5 spaces per merchant with a plain422response while you have at least one live space, all your live spaces require KYB, and none is approved. The space limit counts sandbox and live spaces; it does not apply if any live space does not require KYB. Sandbox spaces are exempt from the write block, webhook URL limit, and key limit. See Go live.
Fixed
POST /v3/quotesfor a wallet move returns404 not_foundwithDestination was not found.when the destination account belongs to another merchant. See Errors and retries.
Added
- Capabilities can report
statusReason.code: offer_unavailablewith statusrestrictedandresolution: contact_support. Swipelux returns it when an approved application covers the capability but no current offer permits it. It replacesrelated_application_action_requiredwithresolution: waitin this case, because waiting on the approved application changes nothing. Contact Swipelux support instead of waiting. See Capabilities and requirements.
Changed
- In a live space that requires business KYB, every write request outside business verification and webhook management returns
422 merchant_kyb_not_approveduntil your integrating business KYB is approved. Before, onlyPOST /v3/customersreturned this error. Blocked requests include customer writes, capability, application, and account requests, recipients and destinations, rules, quotes, and transfers.GETandHEADrequests and your business verification (profile, related parties, documents, and task submissions for your business’s KYB customer) remain available. You can manage webhook endpoints through the API, and manage secret keys, spaces, and rail fees in the dashboard. Sandbox spaces and live spaces that do not require KYB are unchanged. See Go live and Errors and retries.
Added
POST /v3/customers/{customerId}/tasks/{taskId}/verification-sessions/{verificationSessionId}/share-tokenimports an individual’s verification from your own account with Swipelux’s identity verification provider into the intake task’sidentity_verificationsession. Send{ "shareToken": "..." }with anIdempotency-Key. The session moves toin_review, or staysaction_requiredwhen steps are missing. When the checks finish, Swipelux settles the covered requirements the same way as for a hosted session. The import covers the requirements listed incoveredRequirementIds: the ID document, selfie, and, where the task requires it, proof of address. Swipelux never stores or logs share tokens. The endpoint returns409 verification_already_startedwhen the customer already has a verification with Swipelux or an import is running,422 share_token_rejectedwhen the identity verification provider refuses the token, and503 kyc_provider_unavailable, which is retryable only when the token was not yet sent. See Capabilities and requirements.- Every
verificationSessions[]entry in task reads and customer task detail includescoveredRequirementIds, the IDs of the live requirements the session can fill.
Changed
- New individual intake tasks no longer collect proof of funds in the hosted identity session. The
proof_of_funds,source_of_funds_document,named_source_of_funds_document, andsole_proprietor_documentrequirements are ordinary document requirements. Upload the document, submit it with the task, and wait for Swipelux to review it. The hosted session covers only the ID document, selfie, and proof of address. Existing tasks and sessions keep working as before. See Capabilities and requirements.
Added
- Recipient destinations accept the
pixandpix_safetypes for BRL payouts in Brazil. A Pix destination pays a Pix key. A Pix Safe destination pays a bank account identified by the holder’s CPF or CNPJ, the bank’s ISPB code, the branch, and the account number. Both need the customer’s ready Pix capability (pix_pooled), and their payouts are funded with USDC and carry no developer fee. See Recipients and Send funds. GET /v3/customers/{customerId}/tasks/{taskId}acceptsdocumentCandidatesForwith a document requirement ID, plusdocumentAlternativeKeyfor a requirement with alternatives. The response then lists, indata.documentCandidates, files the customer already uploaded that can answer that requirement, with anymissingMetadataorconflictingMetadata. Submit a candidate’sdocumentIdwith the missingdocumentMetadatainstead of uploading the file again. The query needsaccounts:readandcustomers:read, and an invalid selection returns400 validation_error.
Changed
GET /v3/webhooks/portalreturns a portal URL that expires after one hour, withCache-Control: no-store. With an API key that haswebhooks:write, the portal shows the endpoint signing secret and can manage endpoints, retry deliveries, and replay them. With onlywebhooks:read, the portal shows deliveries only. See Webhooks.- Citi (
citibank) is offered only to business customers. Every business keeps pooled Citi, and named Citi is offered only to businesses registered outside the US. When a customer is not offered Citi, the supported list omits it, naming it returns422 capability_institutions_unsupported, and a method that only Citi offers is listed asdisabled. A request withoutinstitutionsselects among the remaining banks. Existing applications and accounts are unchanged. - Named CFSB (
cfsb) capabilities are offered only to US customers: businesses registered in the US and individuals who reside there. For other customers, the supported list omits named CFSB, and naming it returns422 capability_institutions_unsupported. A request withoutinstitutionsselects among the remaining banks. Pooled CFSB, customers whose country is unknown, and existing applications are unchanged. - Lead Bank (
lead_bank) named ACH, Wire, and SWIFT capabilities are offered only to customers that Lead Bank can onboard, based on their legal form and countries. For other customers, the supported list omitslead_bank, and naming it returns422 capability_institutions_unsupported. Customers that Lead Bank already onboarded, and capabilities whose open request already nameslead_bank, keep it. Existing applications and accounts are unchanged. - RTP is pooled only. No bank offers
rtp_namedto new requests, so the supported list shows it asdisabled. For a customer that does not holdrtp_named, a capability request or task preview for it that names a bank returns422 capability_institutions_unsupported, and one withoutinstitutionsreturns422 capability_variant_unavailable. Pooled RTP (rtp_pooled) is offered at Citi, so only business customers can request it. - New identity document requests for individuals and beneficial owners can set
constraints.identityMetadataRequired: true, so each file needs its ID number and issuing country indocumentMetadata. New business proof-of-address and owner proof-of-residence requests can setconstraints.maxIssueAgeDays: 90, so each file needs its issue date. Existing tasks keep their requirements, so read the constraints on each task request. - A task answer to a business registration request, whose
profilePointeris/business/registration, needs the jurisdiction country, the registration number, and a formation date before the submission date, all together. The request’svalueSchemapublishes this rule, and a partial answer returns400 validation_error. - After a hosted verification, Swipelux accepts a hosted answer to a profile requirement for a structured value, such as an address or tax identifiers, only when it passes the same schema and constraint checks as a direct answer. Otherwise the requirement stays open, and you submit that value with
POST /v3/customers/{customerId}/tasks/{taskId}/submissions. A requirement that Swipelux returns toaction_requiredfor this reason carriesreviewFeedback.code: hosted_profile_direct_submission_required. Tasks that are alreadysatisfiedkeep their status. See Capabilities and requirements. - A task rejected by a hosted verification can leave
rejectedwhen that verification decision is later reversed. It then becomessatisfied, oraction_requiredunder a newrevisionwith the requirements the new decision does not answer reopened. Earlier submissions for those requirements stayrejected, so submit those answers again. See Migrate to v3. - Recipient destination
typeis now an open enum. Earlier versions of this reference described it as closed, so update any client that rejects or drops unknown types. Destination responses anddestination.status_changedevents can now carrypixandpix_safe, and more types can be added. - Recipient create and update requests, including the nested
address, ignore fields they do not define instead of returning400 validation_error. In a create request, a name or industry field for the other recipient type still returns400, and so dotypeandexternalIdinPATCH /v3/customers/{customerId}/recipients/{recipientId}. APATCHwith no field it recognizes returns400 validation_errorinstead of200. - A verification link for an eligible session that only asks for documents now opens a Swipelux-hosted document upload page. The link itself is unchanged, and other sessions still open the hosted verification flow.
employment.occupationon individual customers and related-party persons accepts at most 255 characters.POST /v3/customers,PATCH /v3/customers/{customerId},POST /v3/customers/{customerId}/related-parties,PATCH /v3/customers/{customerId}/related-parties/{relatedPartyId}, andPOST /v3/customers/{customerId}/tasks/{taskId}/submissionsreturn400 validation_errorwhen a profile value or task answer contains a Swipelux form link, such as an RFI, customer request, or transfer tracking link. This does not apply toexternalIdormetadata. Each rejected value appears inerrors[]withcode: public_form_linkand its JSON Pointer, and the response never repeats the link. Send the information itself instead. See Errors and retries.
Fixed
- Payout quote and transfer responses keep a USDC or USDT source amount to six decimal places, for example
4009.711365instead of4009.71. Fiat amounts keep two decimals. Creating or reading a payout whose stablecoin source amount has more than two decimals no longer returns500. - The
POST /v3/customers/{customerId}/capabilities/{capabilityId}/cancelreference now describes cancellation as it works. You can cancel areadycapability, thestablecoin_transferscapability cannot be canceled, and canceling ends only that capability while its applications keep their status, tasks, and approvals. - A capability request or task preview that lists a bank code in
institutionsinstead of a public institution ID, such ascitiforcitibank, returns422 capability_institutions_unsupportednaming the available IDs instead of503 kyc_configuration_unavailable. - A capability request or task preview for a method that no bank offers to the customer, which the supported list shows as
disabled, returns422 capability_variant_unavailablewithretryable: falseinstead of503 kyc_configuration_unavailable, unless the customer already holds that capability. documentCandidatesno longer lists files that Swipelux keeps from a completed hosted verification, which you cannot read or download. A task answer that cites one returns400 invalid_document_reference, as an unknown document does.
Added
GET /v3/customersacceptsinclude=documentRequirements. Each customer summary then reports how many mandatory documents are still outstanding, independent of capability readiness. Combine it asinclude=capabilities,documentRequirements. See Customers.- The merchant panel’s Webhooks page adds Replay missed events to the endpoint menu. It resends events from the last 13 days that the endpoint never received, and never sends the same event twice. See Webhooks.
- The merchant panel’s Settings page has a Compliance section. Owners and admins can set the compliance email and choose whether to receive emails when Swipelux requests more information about a customer.
- Merchants can answer their own KYB compliance requests inline on the merchant panel’s KYB page.
Changed
- Customer and related-party updates no longer return
409 field_conflicts_with_completed_intakeafter a bank intake is completed. The update saves, and each new bank application checks the latest profile against its own requirements. - Capability requests return
409 capability_route_header_conflictwhen a capability’s existing bank routing cannot be updated safely. Contact Swipelux support before retrying. GET /v3/customers/{customerId}/capabilities/{capabilityId}/tasks-previewreturns422 capability_institutions_unsupportedwheninstitutionsnames a bank the capability does not offer, as capability requests already do.- In the sandbox, ACH, Wire, and SWIFT capabilities are served at JPMorgan Chase only. Requests that omit
institutionsselectjpmorgan, and naming another bank returns422 capability_institutions_unsupported. Live routing is unchanged. See Test in the sandbox. - Forcing a sandbox capability status returns
409 capability_status_blockedwith astatusReasonwhen the simulated case cannot reach the requested status. Repeating a force that already applied returns200unchanged. See Test in the sandbox. POST /v3/sandbox/tasks/{taskId}/reviewreturns409 task_not_sandbox_reviewablefor a task that Operations or another workflow owns. Tasks fromPOST /v3/sandbox/tasksand the capability intake tasks that Swipelux collects remain reviewable. See Test in the sandbox.PATCH /v3/customers/{customerId}/accounts/{accountId}returns409 account_provisioning_unresolvedwhen you change settlement while the account is still being provisioned at the bank. Retry after provisioning settles. See Errors and retries.POST /v3/transferscan return409 quote_execution_evidence_conflict. Create a new quote and execute it. See Errors and retries.- The merchant panel’s Pay out drawer shows the full destination details, masks account numbers and wallet addresses behind a toggle, and shows an estimated arrival time for each payment method.
- The merchant panel folds bank accounts into the customer’s Payment access tab, with a tasks card that names each bank. The Documents tab moved into Profile.
- Opening a named bank account in the merchant panel is now a single step that lists each bank’s currency, methods, and onboarding time. See Accounts.
- Bank accounts held for review show as On hold in the merchant panel, with the account ID and a Contact support action.
- A
pendingcapability now reportsstatusReason.code: preparing_submissioninstead ofreview_in_progresswhile Swipelux prepares an application for submission and no review is underway. Both codes useresolution: wait. A change between them keeps the statuspending, so it sends nocapability.status_changedevent. Existing capabilities pick up the new code at their next reevaluation. See Capabilities and requirements. - The Shared methods table on the customer’s Payment access tab in the merchant panel shows In preparation instead of In review for a pooled method whose capability reports
preparing_submission. - A capability’s
applicationslist now shows only its current applications, in capability reads (includingGET /v3/customers/{customerId}/capabilities/{capabilityId}/applications), capability request responses, andcapability.status_changedevents. An application that a newer one replaced still appears inGET /v3/customers/{customerId}/applications, wheresupersededByApplicationIdnames its successor. A replaced application’s open tasks still count in the capability’sopenTaskIds. The capability’s status andopenTaskIdsdo not change, so the change itself sends no webhook event. See Capabilities and requirements.
Fixed
- A second
allowPendingrequest for the same issued account, sent before the bank approves, returns409naming the waiting account inholder.accountIdinstead of500. See Issue a bank account. - Canceling a capability now closes issued account requests that were still waiting for bank approval, so a later request at the same bank starts fresh.
- Re-requesting a canceled capability whose bank cases were all rejected publishes a single
capability.status_changedevent fromcanceled. - Re-requesting a bank after its earlier application was archived now submits the new application.
- Recipient destinations can be added as soon as the matching capability reads
ready, instead of returning409 rail_not_ready. See Recipients. - Webhook events sent before you first open the merchant panel’s Webhooks page are now kept, so you can replay them to a new endpoint.
- Task due dates in the merchant panel show in your own timezone, and bank review drawers show All requirements submitted once nothing is left open.
Added
POST /v3/quotesaccepts an optionalinstitutionIdto pick an approved bank route for a crypto-to-fiat payout quote. Omit it to keep automatic routing. A bank that is not available for the payout returns422 bank_not_supported_for_customer, and sendinginstitutionIdwith any other quote type returns400 validation_error. See Send funds.- Issued bank account requests on
POST /v3/customers/{customerId}/accountsacceptinstitutionto pin the account to one bank without fallback, andallowPending: trueto save the request while that bank’s application is still awaiting approval.allowPendingrequiresinstitution. Saved requests report the governingapplicationId. See Issue a bank account. - The merchant panel has a native Webhooks page for managing endpoints. See Webhooks.
- The merchant panel adds a Pay in drawer with named bank accounts, crypto deposits, and a review step.
- The merchant panel’s Pay out flow shows wallet balances in the source picker, adds a Max amount option, and includes a review step.
- Customer profiles in the merchant panel have a Recipients & destinations tab.
- Task requirements can include a short
titleheading. The requestpromptstill carries the guidance. See Capabilities and requirements.
Changed
- Wire pay-in quotes on pooled Wire routes now require at least $20. Quotes below a route’s minimum, or too small to cover transfer fees, return
422 amount_not_deliverableinstead of a generic quote failure. See Receive funds. - The webhook portal now groups v3 event types by resource and shows each event’s payload schema and an example. Legacy event types appear in a separate Legacy group and are marked deprecated. Endpoints that already subscribe to them keep receiving them; use v3 event types for new subscriptions. See Webhooks.
- Sandbox top-ups now emit
transfer.createdandtransfer.state_changedwebhook events. See Test in the sandbox. accountProvisioningnow reportsissuedwhen the customer already has an active issued account. See Capabilities and requirements.- Bank account details in the merchant panel open in a drawer with bank logos. See Accounts.
- The merchant panel labels money movement as Pay in and Pay out, keeps you signed in for six hours, and sends help requests to Swipelux support by email.
- In intake tasks that accept direct submission, eligible requirements already backed by the customer profile or uploaded documents move to
in_reviewautomatically. See Capabilities and requirements.
Fixed
- Re-requesting a canceled capability no longer fails because of superseded application records or outdated requirements.
- Capabilities stored under the retired Fedwire ID now read as
wireinstead of returning500.
Added
GET /v3/customers/{customerId}/applicationslists a customer’s application cases, with the capabilities requested against each case and the capabilities its approval covers. One approval at a bank can cover several capabilities. Retained historical cases point to their successor throughsupersededByApplicationId. The list supports cursor pagination andupdatedAfter. See Capabilities and requirements.POST /v3/customers/{customerId}/capabilities/{capabilityId}responses includeselectedApplicationIdfor case-backed capabilities. It identifies the existing application case the request reused, or the case it opened. See Capabilities and requirements.- Institutions returned by
GET /v3/institutionsand by the supported-capabilities list include a nullablelogoUrl. Use it to show bank branding when available, and fall back to the institution name when it isnull. See Capabilities and requirements. - USD SWIFT payouts are now available. SWIFT payouts require at least 100 USD. The merchant panel collects SWIFT bank instructions for recipients. See Send funds.
- Issued bank accounts can receive over SWIFT with named receiving details. See Issue a bank account.
- USDT is now supported as a source for ACH and Wire payouts. See Send funds.
- Issued bank accounts accept
settlement.currencyofUSDCorUSDTto choose the stablecoin delivered to the settlement wallet, independent of the wallet account currency. Omit it to keep settling in the wallet’s currency. See Issue a bank account. - SWIFT bank accounts and recipient destinations accept
bankCity,bankState,bankPostalCode, andbankAddressLine2, plus optionalbeneficiaryTaxId,beneficiaryPhoneNumber,ifscBranchCode,paymentCode, and intermediary bank details. See Send funds. - Issued bank account details include
achRoutingNumberandwireRoutingNumberwhen the bank supplies separate ACH and Wire routing numbers, andbankLogoUrlfor the receiving bank. See Issue a bank account. capability.createdwebhook events includeapplicationIdand anoriginofrequestedorapproval, so you can tell capabilities you requested from ones an approval covered. See Webhooks.- Requirement requests can declare a validation
constraints.format, such ashttp_url,us_ssn,us_ein, orbank_industry_classification. See Capabilities and requirements.
Changed
- The merchant panel’s bank account creation now starts from bank selection, and bank accounts show separate ACH and Wire routing numbers. See Accounts.
- The
networkenum now includessolana. It is an open enum, so tolerate network values you do not recognize. See Accounts. - Opening a hosted verification link for a task whose remaining requirements need direct submission returns
409 verification_session_not_allowed. Submit those requirements as a task submission instead. See Errors and retries. - Archiving an issued account whose provisioning has not settled returns
409 account_provisioning_unresolved. Retry after provisioning settles. See Errors and retries. - New named bank account requests are queued for provisioning as soon as the account is created, instead of waiting for the next customer refresh. See Issue a bank account.
Removed
- Pooled SWIFT receiving details are no longer offered for new accounts. Use named SWIFT receiving details instead. See Issue a bank account.
Fixed
- Payout transfer reads now return the quoted recipient.
- Creating an ACH account after archiving an existing one no longer returns
409, and archived pending account requests no longer hold an account slot. - Bank fees on local-currency pay-in quotes are reported in the correct fiat currency.
Added
GET /v3/webhooks/{webhookId}reads a single webhook endpoint and itseventsselection. See Webhooks.- Task requirements now publish
allowedValuesand a JSON SchemavalueSchemafor profile fields, including required address fields. Country fields report avalueTypeoritemValueTypeofcountry, an ISO 3166-1 alpha-2 code. You can render inputs and choices without hardcoding them. See Capabilities and requirements. - Existing Tron wallets can now send USDT to the customer’s external wallet accounts, and transfer reads include a block explorer link for Tron transactions. New wallets can’t be issued on Tron. See Send funds.
- Task requirements can declare
requiredWhen(answer only when a named yes/no answer matches),profileAssertion(us_person), andownershipPolicy, and document requests can setidentityMetadataRequiredandmaxIssueAgeDays. Task answers acceptdocumentMetadata(idNumber,issuingCountry,issuedOn) for referenced documents, and task reads return reviewed controlling answers inconditionValues. See Capabilities and requirements. - Document requirements can list
acceptedDocumentSets, and related-party requirements can ask for anassociated_personorcontrol_personqualification in addition tobeneficial_owner. See Capabilities and requirements. - Transfer
correctionobjects now also cover failed funded payouts:kind: funding_failurewith arecover_source_fundingcompensating action, arecoveryStatusofunknownorreported, andUSDTcredited outputs. See Quotes and transfers.
Changed
PATCH /v3/webhooks/{webhookId}now accepts legacy event types that the endpoint already subscribes to, so you can keep them while you add v3 event types.eventsreplaces the full selection, so include every event type you want to keep. Adding a legacy event type that the endpoint did not already have returns400 validation_error. See Webhooks.- Bank identifiers on recipients and accounts are validated before they are saved. See Recipients.
- Capability requests, task submissions, and sandbox status changes now return
409 capability_application_staleinstead of500when a capability was created under an earlier onboarding model. See Errors and retries. - The public RFI page is now one continuous form. It supports related people and collects one tax ID per person. See Document requirements.
- Quotes and transfers return
409 customer_bank_limit_exceededwhen a payment exceeds the customer’s remaining daily or monthly allowance at the bank, and503 customer_bank_limits_unavailablewhen that allowance cannot be checked. Transfers return409 payout_execution_unavailablewhen a payout cannot start from its quote. See Errors and retries. - Customer and related-party updates that conflict with a completed bank intake return
409 field_conflicts_with_completed_intakewith thetaskIdandfields.
Fixed
- Canceled capability history remains readable.
- Wire payouts display and filter correctly in the merchant panel’s transaction list.
Changed
POST /v3/transfersand transfer reads usecheckoutMethodinstead ofpaymentMethodfor the card checkout pre-selection, and acceptcard,apple_pay,google_pay,cash_app,sepa, andblik. The list is open and can grow.paymentMethodis no longer recognized; requests that still send it are treated as if it were omitted.sepaandblikare funding options inside the card checkout, not Swipelux capabilities. See Receive funds.
Added
POST /v3/transfersaccepts an optionalpaymentMethodofcard,apple_pay, orgoogle_payfor card quotes. The hosted checkout opens on the requested method when it is available for the customer and their device, transfer reads echo the request, and the quote’s amounts and fees are unchanged. See Receive funds.GET /v3/customers/{customerId}/capabilities/{capabilityId}/tasks-previewacceptsinstitutionsto preview the tasks for specific banks returned by the supported-capabilities list. See Capabilities and requirements.
Changed
- Card quotes now reflect checkout fees and the net USDC delivered. See Receive funds.
- Rejected payout quotes return a specific problem code instead of a generic failure:
quote_amount_out_of_range,quote_volume_limit_exceeded,quote_source_network_unsupported, orquote_failed, and503 quote_temporarily_unavailablewhen the quote can be retried later. See Errors and retries.
Fixed
- Card quotes no longer fail because of fee rounding.
- Reopening a hosted KYC link no longer returns
409 kyc_process_conflictwhen questionnaire answers include extra spaces. - Stalled passkey withdrawal confirmations in the merchant panel now recover.
Added
POST /v3/customers/{customerId}/documentsnow also accepts anapplication/jsonbody withstorageKey,fileName, andtype. ThestorageKeymust be a fresh customer-scoped reference parked through the earlier direct-upload flow, and the upload passes the same size and file-signature validation as multipart uploads. See Migrate to v3.GET /v3/customers/{customerId}/documents/{documentId}/downloadreturns a downloadurlfor an active customer document. The URL expires after one hour and serves the file as an attachment. Archived, unknown, and cross-customer documents return404. See Capabilities and requirements.- Requesting a capability for a business with no beneficial owner now creates an intake task to add one instead of failing with a
503. Requests that cannot proceed return422 beneficial_owner_requiredwith instructions to add an individual related party with declared or at least 25% ownership. See Shareholders, UBOs, and control persons. - The merchant panel’s task table now shows each request’s subject and capability scope, so you can see who and what a compliance request covers. See Capabilities and requirements.
- Industry classification fields in the merchant panel now offer searchable NAICS codes on customer profiles and requirement tasks. See KYB workflow.
- Bank pay-in instructions can include
bankName,bankAddress,accountHolderName, andaccountHolderAddress. Show them with the other bank coordinates. See Receive funds. POST /v3/transfersaccepts an optionalredirectUrlthat returns the customer to your app after a card or Apple Pay hosted checkout. Reaching the URL does not confirm completion; use transfer reads or webhooks. See Receive funds.- Transfers created by a v3 Rule appear in transfer reads and lists with
origin: ruleand emittransfer.state_changedevents like other transfers. Filter them withGET /v3/transfers?origin=rule. See Quotes and transfers. - Identity documents on customers and related parties accept
sideApplicability(front_only,front_and_back, orunknown), and tasks can collect identity-document details such astype,number,issuingCountry,issuingRegion,issuedOn,expiresOn, anddoesNotExpireas answers. See Capabilities and requirements.
Changed
- Bank-detail submissions that conflict with an in-progress bank setup now return
409 ops_rail_handoff_conflict. Keep your uploaded document IDs and retry the same submission after the conflict is resolved instead of re-uploading documents. See Errors and retries. - The minimum for unannounced stablecoin deposits into customer wallets is now 1 unit instead of 10. Smaller deposits are still treated as dust. See Receive funds.
- Webhook configuration is now isolated per environment. The webhook portal opens scoped to the environment you request it from, so sandbox and production endpoints no longer share settings. See Webhooks.
- The merchant panel now derives available pay-in methods from the customer’s v3 capabilities, so account setup only offers methods the customer is entitled to. See Accounts.
- RFI forms now collect qualifying beneficial owners with shorter, clearer prompts, and RFI history displays as lifecycle milestones. See Document requirements.
- Open tasks without an explicit due date now default
dueAtto 31 days after creation. See Capabilities and requirements.
Removed
- The merchant panel no longer offers Fedwire when adding new pay-in methods. Existing Fedwire accounts remain readable. See Accounts.
Fixed
- Unannounced USDT deposits into customer wallets are now recognized and settled instead of being ignored.
- Evidence you have already submitted now carries over to other tasks that require the same item, so customers are not asked for the same document twice.
- Re-requesting a capability no longer discards bank routes that are already ready, so issued account details stay stable.
- Bank instruction views in the merchant panel now show complete details, including SWIFT addresses and the target wallet address.
- RFI forms now surface submission validation errors, validate legal form descriptions before submission, and accept multiple business websites.
- You can now edit related-person drafts in RFI forms before submitting.
- Canceled compliance requests no longer appear in the merchant panel task list.
- Document review statuses display correctly again in the merchant panel.
Added
- Customer-scoped hosted verification and Terms of Service sessions now include an authoritative
actionobject. Follow itsavailableorunavailablekind; the flaturlandexpiresAtfields remain compatibility mirrors for available actions. See Capabilities and requirements. - Sandbox wallet top-ups now return transfer IDs that you can read with
GET /v3/transfers/{transferId}or list withGET /v3/transfers. They appear as completed inbound stablecoin deposits. See Test in the sandbox. - Transfer reads include a
correctionobject when a transfer’s funds are returned or reversed after it completes. It reports the correctionkind, the normalizedproviderStatus, anyproviderShortfall, and thecompensatingIntentSwipelux applies. See Quotes and transfers.
Changed
- The merchant panel’s First pay-in walkthrough for card and Apple Pay now requires a Polygon wallet under the customer. Create that wallet before you start the walkthrough. See Accounts.
- New requests and public responses use
sepaas the canonical method and capability name. Thesepa_instantinput alias and previously stored resources remain compatible, but public responses usesepa. See Accounts. - New Faster Payments capability, issued-account, and quote requests are unavailable. Existing accounts, quotes, and transfers remain readable. See Accounts.
- The first KYB page no longer collects the representative’s birth date. Shareholder birth dates remain a separate requirement. See KYB workflow.
- RFI document references now accept the
image/jpgMIME alias in addition toimage/jpeg. See Document requirements. - Task history in the merchant panel now presents a human-readable audit trail without revision counters. See Capabilities and requirements.
- Quotes and transfers now check the capability’s supported directions before any money moves. Using a capability in a direction it does not support returns
422 capability_direction_unsupported, and moves between wallets require astablecoin_transferscapability. See Errors and retries.
Removed
- The merchant panel no longer offers new UAEFTS account setup. Existing UAEFTS accounts remain readable. See Accounts.
Fixed
- RFI forms preserve existing entries when a reviewer adds a new document drop, so previously supplied answers are no longer lost on resubmission.
- The merchant panel resumes hosted compliance sessions from available actions without discarding valid links.
- Hosted Terms of Service links now work for every task scope returned by the API.
- After you request Payment Access in the merchant panel, it opens the intake task returned by that request instead of a task from an earlier request.
- The merchant panel’s KYB demo now asks for the current required fields.
- A quote that reuses its source wallet as
destinationIdnow returns actionable422 quote_direction_invaliddetails before any provider work starts. See Quotes and transfers. - The API rejects malformed query-string encoding with a
400error instead of silently normalizing the request, so invalid inputs surface earlier. See Errors and retries. POST /v3/customers/{customerId}/documentsnow rejects empty, non-multipart, or malformed request bodies with a400error.
Added
- Published the v3 Problem Details catalog in the OpenAPI spec so integrators can map error responses directly from the schema. See Errors.
- Added
customerIdto v3 account webhook events, letting you correlate account activity to the owning customer without a follow-up read. See Webhooks. - The merchant panel now exposes every v3 individual-profile field, so onboarding operators can review and edit all KYC data collected through the API. See Onboard customers.
- Published a developer migration guide for v3. See Migrate to v3.
Changed
- Customer and account country codes are now validated as assigned ISO 3166-1 alpha-2 values at write time. Reads tolerate legacy stored values so existing records keep resolving. See Accounts.
- USDC availability is now scoped by destination network, so quotes and transfers offer USDC only on networks that the destination supports.
- Every onboarding flow now requires the Swipelux Terms of Service. Existing sessions remain resumable. See Onboard customers.
Capability.readycontinues to report entitlement approval. UseaccountProvisioningto track account issuance asnot_applicable,not_started,in_progress,issued, orfailed. See Capabilities and requirements.- HEIC uploads from iPhone are now accepted as identity and address documents.
- Clearing a customer or related-party field that an open task still requires now returns
409 field_required_by_open_taskwith the blockingtaskIdandfields, instead of a retryable conflict. Complete or cancel the task before you change those fields. See Errors and retries.
Fixed
- Re-executing a consumed quote now returns
409 quote_execution_consumedinstead of a generic error. See Quotes and transfers. - Transfer list and quote amount reads no longer return
500for large historical result sets. - Concurrent KYC redirects now return a conflict instead of
404, so retries resolve cleanly. Hosted redirects no longer roll back midway, and KYC links remain resumable. - Related-party reads for individual customers no longer return
404. - KYB submissions with invalid wallet fields are rejected before submission, and failed synchronization is no longer reported as success in the merchant panel.
- Requirement tasks in the merchant panel now show submitted responses as complete, track terms actions separately, remove duplicate document text, keep started KYC sessions pending until completion, and handle stale tasks without breaking the requirements view.
- Verification-link rows in the merchant panel now show an Open action on every row, and every task link renders in the requirements view.