Server integrations authenticate with a secret API key in the x-api-key header. Frontend-only integrations can use the public key (pk_...) for creating payments and polling status. Create keys in the dashboard, Settings → API Keys, not via a public API endpoint.
Need machine-readable request/response bodies for your AI or codebase? Download this page as plain Markdown.
You create a sandbox API key in the dashboard, store it as VIDEPAY_API_KEY, and call POST /checkout-links with x-api-key. When you go live, you create a new key on videpay.io and swap the env var, no application code changes.
Sign up on the dashboard that matches your target environment: https://sandbox.videpay.io for sandbox integration, https://videpay.io for live. Verify your email, complete onboarding, and create your business from the dashboard wizard.
API keys are created only in the dashboard. The key you create inherits the environment of the dashboard you signed into: sandbox keys on https://sandbox.videpay.io, live keys on https://videpay.io.
Treat the secret key like a password. Never commit it to git, never expose it in browser code, and load it from environment variables or a secrets manager. Future you (and your security reviewer) will send thanks.
Send your API key in the x-api-key header (or x-public-key for pk_ keys). Sandbox requests go to https://sandbox.api.videpay.io. Live requests go to https://api.videpay.io. Secret keys look like sk_<keyId>_<secret>; public keys look like pk_<keyId>_<public>.
/finance/balancesExample authenticated request using a secret key in x-api-key.
01x-api-key: sk_AbCdEfGhIj_XyZ1234567890abcdefghijklmnopqrstuvwxyz01234502Content-Type: application/jsonThe public key is safe to embed in browser or mobile apps. Use it when you want to create payments and poll status without running your own server. Refunds, settlement sync, treasury operations, and listing all payments still require the secret key.
/payments/deposit-sessionsCreate a deposit session from the browser using your public key.
01x-api-key: pk_AbCdEfGhIj_XyZ1234567890abcdefghij02Content-Type: application/json01{02 "asset": "USDC",03 "chain": "base",04 "amount": "10"05}/payments/deposit-sessions/ds_...Poll deposit session status (amounts.received, status, settlementPaymentId).
01x-api-key: pk_AbCdEfGhIj_XyZ1234567890abcdefghij02Content-Type: application/json/payments/settlements/pst_...Poll wallet direct/intent settlement status and tx hash.
01x-api-key: pk_AbCdEfGhIj_XyZ1234567890abcdefghij02Content-Type: application/jsonThe dashboard uses a logged-in browser session for UI actions. Your integration code uses API keys. Do not reuse dashboard session tokens for server automation: create a dedicated API key instead. Different tools, different quests.