Skip to main content
Not enabled yet. Neither payment rail is configured on api.kealinks.com today, so GET /api/pricing returns empty protocols and prices, and an unauthenticated POST /api/links returns 401, not the 402 described below. That is deliberate: we would rather refuse you outright than quote a price nothing can pay.Everything on this page is implemented and tested — it is waiting on payment provisioning, not on code. protocols in /api/pricing is the authoritative answer to whether a deployment can take your money. Read it first, and treat an empty array as “not yet”.
You do not need to sign up, verify an email, or have a human present. Ask for a link, get a price, pay it, get the link.

One payment, one permanent link

$2.00. One-time. It buys one code that never stops resolving — including after you have stopped paying us anything at all, which for a one-time purchase is immediately. There is no renewal and nothing to cancel.

Discover the price first

This is the authoritative price. Read it rather than hard-coding the number from this page — and note protocols, which tells you which of the two rails below this deployment actually speaks.

The flow

1

Ask, without credentials

2

Get a 402 carrying both offers

3

Pay whichever you support, and retry the same request

Send the identical body again with your payment credential attached.
4

Get the link, a receipt, and a key

api_key is shown exactly once, on the response to the payment that created your account. Store it. The link resolves forever whether or not you keep the key — but without it you can never repoint the code, and repointing is the reason to use a dynamic code at all.It appears only on the first purchase of a new machine account. Later purchases by the same payer top up the same account and return no key.

MPP (Stripe + Tempo)

MPP settles to a card via a Shared Payment Token, or in stablecoin. Send the credential in the Authorization header:
The credential is base64url JSON:
Echo the challenge back unmodified. Its id is an HMAC over its own parameters, so an edited amount, recipient or expiry produces an id we cannot re-derive and the payment is refused with a 400. On success you get Payment-Receipt, base64url JSON:
Most clients handle all of this for you:

x402

x402 v2 settles stablecoin on-chain — USDC on Base by default. Decode PAYMENT-REQUIRED for the requirements:
amount is atomic units: 2000000 is $2.00 of a six-decimal USDC. Sign an EIP-3009 or Permit2 authorisation and retry with PAYMENT-SIGNATURE:
You get PAYMENT-RESPONSE back with the settlement, including the transaction hash.
We compare the accepted block you echo against the requirements we compute fresh for your request, and forward only ours to the facilitator. A payment for the wrong amount, asset or recipient is refused with a 400 before anything is settled. Fetch a new 402 rather than adjusting the numbers yourself.

Topping up an account you already have

Send both schemes in one Authorization header, or an Authorization: Bearer alongside PAYMENT-SIGNATURE. The credit lands on the account the key belongs to and no new key is issued.
A key that does not resolve is refused outright rather than ignored — your credit will never silently land on a stranger’s account because you mistyped it.

Rules worth knowing before you build

Replaying one returns 409. Permanent links cannot be un-issued, so a double spend is not something we could correct afterwards. For MPP the key is the challenge id; for x402 it is the transfer authorisation nonce.
An expired one returns 402. Retry with no credential to get a fresh challenge — do not edit the expires field, which is covered by the HMAC.
No free links on top. The free tier’s cost of entry is a verified email address, and a machine account has never had one. When your credits are spent, POST /api/links returns 402 telling you to buy another.
If settlement fails the claim is released, so you can retry with a working instrument. No link, no account, no charge.