Skip to main content

Your first routed payment

This is the path the product is built around: a stranger goes from a link to a routed test payment without talking to anyone. Each step below names the screen, what to do on it, and what can refuse you.

Click any step to read what happens there and what can refuse it.

What each step needs​

StepNeedsRefuses when
Enrol a second factorYour passwordThe code is wrong or replayed within its 30-second step
Connect a providerconnections:write (owner, admin, developer) and a fresh second factorThe key is live-shaped, a secret key, unrecognized, rejected by the provider, or under-scoped
Create a paymentpayments:writeAmount is not a positive integer
Confirm and routepayments:writeAn attempt is already in flight; no eligible connection (the trace still says why)
Mint a keyapi_keys:manage and a fresh second factorA scope outside the fourteen key-grantable ones

The overview keeps score​

The four steps on the overview are read from the database each time. Watch them turn green as you go. If one stays grey after you did the thing, the thing did not happen: reload, then look at the screen the step links to for the refusal.

Where people get stuck​

  • "Validate and connect" asks for a code. Your second-factor verification is older than five minutes. Enter the code; the request is retried for you.
  • SECRET_KEY_NOT_ALLOWED_USE_RESTRICTED. You pasted sk_test_…. In Stripe: Developers → API keys → Create restricted key → Write on PaymentIntents, Charges, Refunds, Webhook Endpoints.
  • The connection is DEGRADED with WEBHOOK_REGISTRATION_SCOPE_MISSING. The key lacks Webhook Endpoints: Write. It still routes. Either recreate the key with the permission and re-validate, or create the endpoint in Stripe at the URL the connection shows and paste the whsec_ secret through the API.
  • Confirm says no_eligible_route. Open the trace: the matrix shows which filter stopped each connection. Usually PayNow with Manual capture, or no PAYIN connection on this merchant account.
  • The payment stays PROCESSING. The connector worker is dispatching it to the provider sandbox. The outcome arrives by webhook or by the query loop; on a real Stripe sandbox that is seconds.