Accept a payment in one request.
Base path https://crypto.emprise.app/v1. JSON in, JSON out. Create a session, hand the hosted URL to your customer, and let Emprise verify the transaction and notify your server.
/v1/payQuickstart
The entire integration in one call. Authorise with your API key, send the chain, token and amount, and receive a hosted URL to give your customer.
AuthenticationAuthentication
Merchant endpoints use a bearer API key in the Authorization header. The server hashes your key with SHA-256 and compares it to the stored hash using a constant-time compare. Keep the key on your server; the public endpoints used by the checkout page never require or reveal it.
Authorization: Bearer <api_key>. Invalid or missing returns 401. Public endpoints take only the session key and never return merchant secrets./v1/payCreate a session or a permanent link
Send chain and token (and amount for fixed mode). Add a slug to claim a permanent, reusable /pay/{slug} link instead of a one-shot session. Omit amount for open-amount mode, where the customer chooses how much to pay.
Request body
Responses
The server resolves chain + token to a family, chain id, token address and decimals, and converts the amount to atomic units with decimal.js. A slug must match ^[a-z0-9-]+$, is globally unique and immutable.
/v1/pay/{id}Retrieve, list and update
Fetch one session or link by id (merchant-scoped: 404 if it belongs to another merchant), page through all of them, or update a permanent link's config, amount or status.
/v1/pay/{id}/settleSubmit a payment for verification
The hosted page calls this with the customer's transaction hash. Emprise verifies it on-chain against the right recipient, token and amount, marks the session paid, records the payer and (for open mode) the actual amount, then fires the webhook. It is idempotent: re-settling a paid session returns 200.
Fixed mode requires on-chain value >= amount_atomic (overpayments accepted). Open mode records the actual value (must be >= min_amount in atomic units). Unconfirmed or not-found returns pending so the page keeps polling; wrong recipient, reverted, or under-min returns failed.
Webhook · server to merchantSigned webhooks
On a verified payment Emprise POSTs the event to your webhook_url with a Stripe-style HMAC signature. Verify the signature over the RAW body, reject stale timestamps, and dedupe by event_id.
Payload
Verify the signature (Node)
Always confirm server-side. The customer-facing redirect URL carries ?session=&status= for convenience only; a customer can edit those params. Treat the webhook (or GET /v1/pay/{id}) as the source of truth.
ErrorsErrors
Every error uses one safe shape. The status code is also on the response. No stack traces, queries or internals are ever exposed.
Build it with your AI agent
Copy the full API brief and paste it into Claude, Cursor or ChatGPT. It includes every endpoint, the webhook signature scheme, and a ready integration task.