Register the price server-side whenever you are charging one — via your backend (sk_) or a
payment link. Use the publishable key only when the destination is one the payer has proven they
own, or one you have registered (backend or dashboard).
Start with the money
These are payment sessions with the same lifecycle and reads. The mode is a
business decision, not an integration setting.
One fee rule for all three modes
Checkout, Deposit, and Withdrawal resolve the same two fees on the same payer input: Hypermid’s fee plus an optional developer fee. A partner-specific Hypermid override replaces the global rate outright. The developer fee defaults to 0, is limited to 0–100 basis points, and requires a configured recipient when it is positive. The quote’sfeeBreakdown reports hypermidBps, partnerBps, and their
totalBps. A same-token EVM transfer is the explicit zero fee exception: a
plain transfer has no fee-taking route. On the Near deposit-address rail, the
provider keeps half of each declared app fee, so it sees twice each net leg.
EVM developer earnings are held by Hypermid and settled periodically by manual
transfer; Near-rail developer earnings are paid directly by the provider.
Then choose how to integrate
Method 1 gives you full control over all three modes. It needs a backend that
can keep the secret key. Method 2 needs no merchant backend for its
candidateId path, but it needs origin configuration and a
server-authored destination-binding artifact. It cannot create Checkout or
Withdrawal.
Most readers in the last column should start there only if they are funding a
user’s balance and the publishable Deposit capability has been enabled. A
payment link is the no-backend path for a fixed-price Checkout.
A short decision path
- Are you selling something? Choose Checkout. If you have no backend, choose a payment link immediately.
- Are you funding a user’s own balance? Choose Deposit.
- Are you paying a user out? Choose Withdrawal.
- Can you keep a secret on a server? Use Method 1 for any mode. If not, the
only Method 2 choice is Deposit. You configure the key’s origin; ask
Hypermid to enable the partner. Its
candidateIdpath needs no payer signature and no merchant backend at runtime.
Method 1: server-created sessions
The server supplies the session’s destination, amount and mode using the secret key. The browser renders the returned session, while the server remains the authority for fulfilment.Checkout
See the Checkout guide and the@hypermid/sdk Payments reference.
Deposit
See the Deposit guide.Withdrawal
See the Withdrawal guide.Method 2: publishable-key Deposit
This method is browser-facing and accepts apk_ key. The browser never names
an arbitrary destination. It presents exactly one artifact, and Hypermid
resolves the destination from that artifact:
candidateId— an opaque, server-authored destination candidate. It needs no payer signature and no merchant backend at runtime.challenge— a payer signature over a server-issued SIWE message. It is EVM-only.grant— a single-use JWS minted by your server. This is not a no-backend path, even though creation is submitted from the browser.
createPublishableDeposit; the exact request union and
branchable errors are in the publishable-key SDK reference.
The publishable-key SDK reference has the exact
request types and branchable errors. It returns a session, not proof that money
arrived.
Payment links: no-backend Checkout
Payment links are a no-backend path for fixed-price Checkout. They are not a fourth mode and they are not Method 2: a merchant creates or manages the link through the Dashboard or the server SDK, then shares the hosted URL. Read the payment links guide and the payment-links SDK reference for the lifecycle and exact CRUD signatures.Never fulfil from the browser
Never fulfil fromonSuccess, a redirect, a session id, a requested amount, or
a payer-claimed transaction hash. Use a signed webhook as a prompt and a
server-side status read as the authority. A no-backend merchant uses the
Dashboard’s payment-confirmed view; an email is only a prompt to check it.
The exception states duplicate, late, and out-of-bounds can mean funds
moved, but none is a normal payment to fulfil automatically.
The SDK’s payments.* API sends a secret key and, when window exists, throws;
that runtime boundary is part of the method choice, not just a documentation
recommendation.