One integration. Four checks on every swipe.
Government ID verification
Your customer submits a government ID. The identity provider matches the document to a live capture and returns a verified name and a status.
Bank ownership, confirmed by the institution
Your customer signs in to the receiving bank. The institution confirms the account belongs to that person before the swipe is authorized.
Card bound to person, person bound to bank
The card, the verified person, and the receiving account are written as one record. A swipe that does not match the binding is refused.
An evidence package per swipe
Every authorized swipe carries a package you can hand to your acquirer the day the chargeback arrives.
Authentication is not identity.
3-D Secure, in money transfer
The card networks carve money transfer merchant categories out of the US liability shift. You can run the authentication step and still absorb the chargeback. Passing a challenge proves a device held the card. It does not prove who held the device, and it does not name the person who received the money.
The swipe answers back
Every swipe contradicts the claim. The claimant passed a government ID check. Their own bank confirmed the receiving account. The card was bound to that person before the money moved. You file a record, not a screenshot.
Swipe to Bank is designed to help you defend a dispute. Issuers and networks decide outcomes. Results vary.
What you hand over when the chargeback lands.
We keep the proof, not the documents.
The identity provider holds the document image, the ID number, and the date of birth. Swipe to Bank stores the verified name, the status, and a provider reference. We never store the document. Your records are scoped to your account, and no account can read another account's rows. API keys are hashed at rest, and a new key is shown once at creation.
Named providers, and a refusal when one is missing.
Stripe Identity verifies the person
Document capture, liveness, and the verified name come back from Stripe Identity. You never handle the document.
Plaid confirms the bank
Your customer signs in to the institution. Plaid returns the account and the owner on it.
Both providers sit behind adapters. When an adapter is not configured, the endpoint refuses the request and says so. Verification is never simulated, and evidence is never fabricated.
Bind the identity before the first dispute lands.
Get startedFive calls from signup to filed evidence.
You hold an account and a pair of API keys. Every record you write carries your account, and nothing crosses between accounts. The shapes below are the request and response bodies your integration handles.
Create your keys
You create a live key in your dashboard. The plaintext key is shown once, then stored as a hash. Rotate it whenever you want, and the old key stops working on the next request.
Start a verification for your customer
You post the person who is about to make the swipe. You get back a hosted link. Your customer completes the government ID check there, and the document never touches your servers or ours.
POST /v1/verifications
Authorization: Bearer stb_live_9f2c...
Content-Type: application/json
{
"reference": "mv_8841",
"person": { "email": "member@example.com" },
"return_url": "https://youroperation.com/verify/done"
}201 Created
{
"id": "ver_01J9XQ4M",
"status": "requires_input",
"hosted_url": "https://verify.swipetobank.com/s/01J9XQ4M",
"expires_at": "2026-09-13T18:04:11Z"
}Link the receiving bank
Your customer signs in to the institution. You post the resulting token. We confirm the account owner matches the verified name and return a bank link you can reuse.
POST /v1/bank-links
{
"verification_id": "ver_01J9XQ4M",
"public_token": "public-production-4c1d..."
}201 Created
{
"id": "bnk_01J9XR70",
"institution": "Chase",
"account_mask": "4821",
"owner_match": true
}Authorize the swipe
You post the card fingerprint with the verification and the bank link. We write the binding and return a decision. A card that does not match the binding comes back refused, with the reason named.
POST /v1/swipes
{
"verification_id": "ver_01J9XQ4M",
"bank_link_id": "bnk_01J9XR70",
"card_fingerprint": "cfp_7d2c91b4",
"amount_cents": 48000,
"currency": "usd"
}200 OK
{
"id": "swp_01J9XS22",
"decision": "authorized",
"binding": {
"verified_name": "Dana Whitfield",
"owner_match": true,
"card_first_seen": "2026-08-02T14:21:05Z"
},
"evidence_url": "/v1/swipes/swp_01J9XS22/evidence"
}Pull the evidence when a dispute arrives
One call returns the package for that swipe as JSON and as a PDF your acquirer accepts. You file it against the chargeback. Issuers and networks decide the outcome, and results vary.
GET /v1/swipes/swp_01J9XS22/evidence Authorization: Bearer stb_live_9f2c...
200 OK
{
"swipe_id": "swp_01J9XS22",
"verified_name": "Dana Whitfield",
"verification_status": "verified",
"verified_at": "2026-09-12T16:40:02Z",
"provider_refs": {
"identity": "vs_1P9k...",
"bank": "item_8Qd2..."
},
"authorization": { "decision": "authorized", "amount_cents": 48000 },
"pdf_url": "https://api.swipetobank.com/evidence/01J9XS22.pdf"
}A missing provider refuses. It does not pretend.
If the identity adapter or the bank adapter is not configured, the endpoint returns an error instead of a result. You will never receive a verified status that no provider produced.
503 Service Unavailable
{
"error": "provider_unavailable",
"capability": "identity",
"message": "Identity verification is not configured for this account."
}Read the plans and pick your volume.
Get startedTwo plans. One price each month.
Both plans carry the whole product: government ID verification, institution-confirmed bank ownership, the binding between card, person, and account, and an evidence package on every swipe. You pick the plan that matches your volume, and you are never charged per swipe.
One price. Nothing added at the end of the month.
One line on your invoice
Your plan, billed in advance. There is no usage bill and no charge per swipe.
Evidence costs nothing extra
Pull the package on any swipe you already paid for, as often as a dispute needs it.
A failed check is not billed
A verification that comes back unverified does not count against your plan.
Pay twelve months up front and you pay for eleven. Prices are in US dollars and billed in advance. Swipe to Bank is designed to help you defend disputes, and results vary.
What the price covers.
What if I go past 1,000 swipes on Growth?
Nothing breaks and nothing is metered. Pass 1,000 two months running and we move you to Scale, and we tell you before we do it.
Do you charge for a verification that fails?
No. A check that comes back unverified does not count against your plan and does not add to your bill.
Do provider costs pass through?
No. Identity and bank provider costs sit inside the price on both plans. Your invoice carries one line.
Can I change plans mid month?
Yes. You move up or down at any time, and the difference is prorated on your next invoice.
Am I tied into a contract?
No. Both plans run month to month. The twelve month option is there if you want it, and it is your call.
What happens if I stop?
You keep read access to your evidence packages for 90 days after your last paid day, long enough to close open disputes.
Start on the plan that fits this month.
Get startedTerms, privacy, and security.
Terms of service
These terms govern your use of Swipe to Bank. You accept them when you create an account or call the API with a key issued to you.
What the service is
Swipe to Bank verifies the identity of the person making the swipe, confirms through the institution that the receiving bank account belongs to that person, records the binding between the card, the person, and the account, and returns an evidence package for each authorized swipe.
Swipe to Bank is a technology company. We are not a bank, we do not hold your money, and we do not move funds on your behalf. Your processor and your acquirer handle the movement itself.
What we do not promise
The service is designed to help you defend a card dispute with verified facts. Issuers and card networks decide dispute outcomes, and we do not control that decision. We make no promise about the result of any filing, about revenue, or about loss reduction. Results vary.
Your account
You are responsible for your API keys and for the activity that runs under them. Keys are shown once at creation and stored as hashes. Rotate a key as soon as you believe it is exposed.
Acceptable use
You may use the service only for swipes you are legally permitted to run. You may not submit another person's documents without their consent, resell the raw provider results, or use the service to build a competing identity dataset.
Fees
Plans are billed in advance at one price each month. There is no charge per swipe and no usage bill at the end of the month. Plan changes are prorated. Fees are stated in US dollars.
Ending the agreement
You may close your account at any time. We may suspend an account for non-payment or for use that breaks these terms. After your last paid day you keep read access to your evidence packages for 90 days.
Changes
We may update these terms. We will post the new version here with a new date, and material changes take effect 30 days after posting.
Contact
Write to hello@swipetobank.com with any question about these terms.
Privacy
This notice explains what Swipe to Bank holds, what our providers hold, and how long anything is kept.
What we store
For each verification we store the verified name, the verification status, the timestamps, and a reference to the provider record. For each bank link we store the institution, a masked account number, and whether the owner matched. For each swipe we store your reference, the amount, the currency, the decision, and the binding.
What we never store
We never store the identity document, the document image, the government ID number, or the date of birth. Those stay with the identity provider. We never store full card numbers or bank account numbers.
Providers
Stripe Identity performs document verification. Plaid confirms bank ownership through the institution. Cloudflare hosts the service and stores the records. Each provider processes data under its own agreement with us.
Why we hold it
We hold this data to deliver the service you bought, to produce evidence packages, to bill you, and to meet legal obligations. We do not sell personal data, and we do not use your customers' data to train models.
How long
Records are retained for seven years to cover dispute and audit windows, then deleted. You can request earlier deletion of a record where no dispute window remains open.
Your customers' rights
Your customers may ask you for access to, correction of, or deletion of their data. You are the controller of that relationship, and we act on your instruction. Write to hello@swipetobank.com and we will respond within 30 days.
Contact
Write to hello@swipetobank.com with any privacy question.
Security
This page states how the service is built and what you can verify yourself.
Account isolation
Every record carries the account that created it. Every query is scoped to that account. One account cannot read another account's rows, and there is no cross-account view in the product.
Keys
API keys are hashed at rest. The plaintext value is shown once at creation and never again. Rotation takes effect on the next request, and a revoked key stops working immediately.
Data in transit and at rest
All traffic runs over TLS. Records are stored on Cloudflare infrastructure with encryption at rest. Sensitive provider references are encrypted with a key held as a platform secret, never in the repository.
Provider posture
Identity documents stay with the identity provider. Bank credentials stay with the institution and the bank provider. Neither passes through our systems, so neither can leak from them.
Refusal over invention
When a provider adapter is absent or failing, the endpoint returns an error. The service never returns a verified status that no provider produced, and it never fabricates evidence.
Reporting a vulnerability
Write to hello@swipetobank.com with the details and a way to reproduce. We acknowledge within two business days and keep you updated until it is closed.
That page is not here.
The link may be old or mistyped. Start from the overview and you will find every page from there.
Go to the overview