Complete account verification
Taking real payments and receiving payouts requires account verification. Submit your details under Settings, where Clink reviews your payment entity and settlement eligibility. Status is one of not started, under review, rejected, or approved. For merchants going through onboarding, the rest of Settings unlocks once business verification (KYB) or personal verification (KYC) is approved. Creating a product or completing a first payment is not required.Some production accounts see only the first step, Complete account verification, with nothing after it. For those accounts that step unlocks payouts.
Verify in four layers
Work through these in order. Do not move up a layer until the one below passes.1
Local logic
No real payments. Verify amount calculation, product snapshots, idempotency keys, state transitions, and fulfillment deduplication. Unit tests cover this layer.
2
Simulated webhooks
Send signed requests to your own webhook endpoint and verify: the raw body is read correctly, the HMAC matches, repeated events do not fulfill twice, out-of-order events do not overwrite newer state, and bad signatures are rejected.
3
Real sandbox Session
Have your backend create a real sandbox Checkout Session and confirm the frontend redirects or mounts correctly.
4
Real sandbox payment
Pay with a test card end to end. Confirm your local order becomes paid and that shipping, top-up, or entitlement actually ran.
Scenario checklist
Also verify these if you have subscriptions
Also verify these if you offer discounts
The only sandbox test data published today is the success card
4242 4242 4242 4242. There is no public test data for failed, 3DS, or pending.Those three rows therefore cannot currently be reproduced in the sandbox, so cover them with code review and unit tests instead. Read the pending path carefully: confirm your code does not treat it as a failure and start a second charge, which is the most common cause of double billing.What to change for production
Everything above is environment-specific configuration. The account itself does not change — sandbox and production share one login, and you switch with Enter production in the top right of the sandbox dashboard. There is no second registration.
After launch, run one small real transaction end to end and confirm payment, webhook, fulfillment, and reconciliation all work before opening the traffic.
Debugging
The customer says they paid, but the order did not change
Work down this list:- Look for the transaction on the Transactions page — in the dashboard for the matching environment, since sandbox and production are separate
- If it is not there, call
GET /checkout/session/{id}with thesessionIdand readstatusandorderId - If there is an
orderId, callGET /order/{id}and check whether Orderstatusissuccess - If the Order is
successbut your order did not update, the problem is in the webhook path — keep reading
Webhooks never arrive
Signature verification always fails
The three usual causes:- The parsed body was used instead of the raw one (
express.json()in Express) - The signing key does not belong to the current endpoint — it was rotated, or copied from the sandbox
- The
.between timestamp and body is missing, or a self-generated timestamp was used instead of the header value
A customer was charged twice
Check these:- Whether your create-order endpoint guards against double submission, and whether one cart can produce two orders
- Whether
pendingwas treated as failure and triggered an automatic retry - Whether webhooks are deduplicated by
event.id
merchantReferenceId is not an idempotency key. Creating two Sessions with the same value gives you two Sessions, and both can be paid.
Account verification was rejected
Settings shows the specific reason. Correct the details and resubmit. Integration work is unaffected — keep building in the sandbox.After launch
Balance & payouts
When money becomes withdrawable and how fees are calculated.
Refunds
The refund flow and status synchronization.