How to start, how it works and how it is billed, followed by the complete API reference and terms. Everything a travel company or reseller needs to issue eSIMs from its own product.
The Num API lets your product issue prepaid travel eSIMs. Your system asks for a plan; the response is the eSIM: an activation code, a ready-made QR image and links that open the phone's own installer. Num can also email it to your customer under your brand name.
Why partners choose it: there is no contract to negotiate before you can start, no minimum volume, and nothing to build around the API. The sandbox is yours the moment you sign up.
| 1 | Sign up Create an account at numesim.uk/business with your work email and agree to the API terms. Your sandbox exists at once, with $100 of test credit. There is no approval for sandbox. | You · 1 minute |
| 2 | Build in sandbox Create a test key (numk_test_…) and integrate. Sandbox orders return demo eSIMs and cost nothing. Test credit refills itself. | You |
| 3 | Prove it is production-ready Simulate a short balance, a failed order and a delayed eSIM. Connect a webhook. The go-live checklist in your console ticks itself as your integration exercises each case. | You |
| 4 | Set your live webhook Save your live endpoint under Webhooks, so the activation event and your first credit.added reach you. | You |
| 5 | Top up, and you are live With the checklist complete and your login email confirmed, top up by card from the console: choose an amount from $50 and pay it plus the card processing fee on Stripe. When the payment is confirmed, the credit is posted, live is switched on and account.live fires. There is no approval step. Invoice billing and volume pricing are available by arrangement. | You · 1 minute |
| 6 | Change one string Create a live key (numk_live_…) and change it in your configuration. Nothing else in your integration changes. | You |
| 7 | Top up when you need to Add credit whenever you like. A low-balance webhook warns you before orders are refused, and credit.added confirms each top-up. | You |
| Sandbox | Live | |
|---|---|---|
| Available | Immediately on sign-up | At your first confirmed top-up, once the checklist is complete |
| Credit | $100 of test credit, refilled automatically | Real prepaid credit, topped up by card (minimum $50) |
| eSIMs | Demo eSIMs. Not real. | Real eSIMs on real networks |
| Cost to you | Nothing | The wholesale price of each order |
| Behaviour | Identical: the same endpoints, responses, prices, errors and webhooks | |
"demo": true. Never give a sandbox code to a traveller.You choose how the eSIM reaches your customer. Both options install the same eSIM.
| Option | How it works |
|---|---|
| Num emails it for you | Pass the customer's email address on the order. Num sends the eSIM with your brand name as the sender name and heading, the QR code, the activation code, install buttons and install steps. Replies go to your support address. |
| You deliver it yourself | Every order returns a hosted QR image link you can place in your own email or confirmation page, the activation code, and install links for iPhone and Android. |
Num also emails you whenever an eSIM is issued on your account, with the plan, the charge and your balance. Brand name, reply-to address and notification address are set in the console under Branding & email. In sandbox, the customer email is never sent to the traveller: a preview goes to your own verified login address instead.
| Currency | US dollars, for every price, charge and balance, whatever the destination. |
| Model | Prepaid credit. You top up by card from the console, minimum $50 and maximum $10,000 per top-up; the credit lands within seconds. Invoice billing by arrangement for larger accounts. |
| What an eSIM costs | The wholesale price shown for that plan in the catalogue when you order it, less any discount agreed for your account. |
| Fees | The card processing fee on each top-up: 2.9% + 30¢ of the amount charged, shown before you pay. A $100 top-up charges $103.30 and credits $100.00. No setup fee, no monthly fee, no minimum spend. |
| If your balance is short | The order is refused and nothing is issued. Nothing is provided on credit you have not paid for. |
| Refunds | Credit is prepaid and non-refundable, and an issued eSIM is not refunded. |
| Cancelling an eSIM | You can cancel an eSIM at any time. It stops working. Cancelling does not return credit. |
| If an eSIM cannot be issued | That charge is reversed to your balance automatically. |
| Num's rights | Num may cancel or suspend an eSIM or an account at any time, as set out in the API Terms (Part 3). |
| Your records | A full statement in the console and by API: every credit, order and reversal, with a running balance. |
An integration that passes in sandbox is ready for live, because sandbox can produce every outcome live can. Your console keeps this checklist and ticks each item the first time your integration does it.
| Check | How it is completed |
|---|---|
| Create a test API key | Console → API keys |
| Fetch the catalogue | GET /v1/catalog |
| Place a sandbox order | POST /v1/orders returns active |
| Read an order back | GET /v1/orders/{id} |
| Retry an order safely | The same Idempotency-Key sent twice |
| Handle insufficient credit | Header Num-Simulate: insufficient_credit |
| Handle a failed order | Header Num-Simulate: provisioning_failed |
| Handle a delayed eSIM | Header Num-Simulate: pending |
| Set a webhook endpoint | Console → Webhooks |
| Receive a signed webhook | Your endpoint answers 2xx |
| Check your balance or statement | GET /v1/balance or GET /v1/ledger |
Issue travel eSIMs from your own product. One call returns an activation code, a hosted QR image and one-tap install links for your customer.
This page is the complete reference, and it is written so that an integration which passes in sandbox is ready for production. Section 10 lists the cases your code must handle, how to trigger each one in sandbox, and a checklist we track for you automatically.
Base URL:
https://numesim.uk/v1
JSON in, JSON out, UTF-8. All money is USD, always, whatever country the plan is for.
numk_test_.curl "https://numesim.uk/v1/catalog?country=JP" \
-H "Authorization: Bearer numk_test_…"
curl -X POST https://numesim.uk/v1/orders \
-H "Authorization: Bearer numk_test_…" \
-H "Idempotency-Key: booking-48213" \
-H "Content-Type: application/json" \
-d '{"planId":"np_3f9a61c0d2e47b18aa","country":"JP","funding":"credit"}'
The response is the eSIM: an activationCode, a qrUrl you can put straight into an email, and its iccid.
There are two environments. The key prefix chooses between them, and they never mix.
| Sandbox | Live | |
|---|---|---|
| Key prefix | numk_test_ | numk_live_ |
| Available | Immediately, on sign-up | The moment your first card top-up is confirmed, once the sandbox checklist is complete |
| Credit | $100 of test credit, refilled automatically | Real prepaid credit you top up by card in the console (minimum $50) |
| eSIMs | Demo eSIMs. Not real. | Real eSIMs on real networks |
| Cost to you | Nothing, ever | The wholesale price of each order |
| Behaviour | Identical to live | — |
Sandbox eSIMs are not real. A sandbox order never contacts a mobile network. Its activation code looks like LPA:1$demo.esim.test$…, its ICCID starts 8900000000, and every sandbox order carries "demo": true. A demo code will scan as a QR but will not install on a phone. Never show a sandbox code to a traveller; branch on demo if your test and production systems share code.
Sandbox is always usable. Test credit refills itself when an order would run it dry, so an integration is never stopped by a balance that was never real. To rehearse an empty balance, use the simulation header in section 10.
Everything else is the same in both: the endpoints, the response shapes, the prices, the errors and the webhooks. Going live is a change of key, not a change of code.
A bearer key on every request:
Authorization: Bearer numk_test_9f2c…
Keys are created in the business console and shown once. We store only a SHA-256 hash, so a lost key cannot be recovered, only replaced. Create one key per system so you can revoke one without stopping the others. Revocation takes effect within a minute.
There is no CORS. These endpoints are server-to-server. A key that reaches browser or mobile-app code is a public key, and anyone reading the page can spend your credit. Call the API from your backend.
GET /v1/catalog?country=JPcountry is an ISO 3166-1 alpha-2 code, or one of the regional bundles: GLOBAL, EUROPE, ASIA, MIDDLE-EAST, AFRICA, CARIBBEAN. With no country at all you get the Global eSIM catalogue.
Lead with the Global eSIM. It is one plan that works in 130+ countries, from a week to a year, so for a booking that crosses borders, a stopover, a cruise, or a customer who travels often, it is the product to offer first: one SKU to integrate, nothing to pick per country, and a customer who never needs a second eSIM mid-trip. A single-country plan is cheaper per gigabyte for one destination; offer both and let the itinerary decide.
GET /v1/catalog?country=GLOBAL
GET /v1/catalog
{
"country": "JP",
"currency": "USD",
"plans": [
{
"planId": "np_3f9a61c0d2e47b18aa",
"name": "Japan 1GB 7Days",
"country": "JP",
"dataMb": 1024,
"days": 7,
"topUp": true,
"wholesale": { "amountMinor": 155, "amount": "1.55", "currency": "USD" },
"retail": { "amountMinor": 186, "amount": "1.86", "currency": "USD" }
}
]
}
| Field | Meaning |
|---|---|
planId | Num's identifier for the plan. Stable: the same plan always has the same id. Send it back when ordering |
wholesale | What an order of this plan costs you |
retail | A suggested price for your customer, from the markup you set in the console. Yours to use or ignore |
dataMb, days | Data allowance and validity |
Rules that keep an integration correct in production:
155 is $1.55. Never parse amount as a float for arithmetic; it is there for display.planId you stored last month may no longer be sold; ordering it returns 404. Refresh from the catalogue.POST /v1/ordersRequires an Idempotency-Key header (section 7).
{ "planId": "np_3f9a61c0d2e47b18aa", "country": "JP", "funding": "credit" }
country is the code or region name you fetched the catalogue with; for the Global eSIM send "country": "GLOBAL":
{ "planId": "np_7c1e22b0f9a84d6e11", "country": "GLOBAL", "funding": "credit" }
201 Created:
{
"id": "NAH9XIRi4HjCaQwsrfc5",
"status": "active",
"funding": "credit",
"mode": "sandbox",
"demo": true,
"country": "JP",
"planId": "np_3f9a61c0d2e47b18aa",
"planName": "Japan 1GB 7Days",
"charged": { "amountMinor": 155, "amount": "1.55", "currency": "USD" },
"activationCode": "LPA:1$demo.esim.test$NAH9XIRI4HJCAQWSRFC5",
"iccid": "8900000000NAH9XIRi4",
"qrUrl": "https://numesim.uk/v1/qr/…png",
"install": null,
"customerEmail": null,
"email": { "customer": null, "partner": "sent", "note": null },
"createdAt": "2026-10-04T09:12:44.000Z"
}
Optional request fields: customerEmail, customerName and sendEmail, to have Num email the eSIM to your traveller. See section 6.
| Status | Meaning | What you do |
|---|---|---|
active | The eSIM is issued. activationCode and qrUrl are present | Give it to your customer |
pending | Paid for, and the network has not released the profile yet. Usually seconds, occasionally minutes | Wait for the order.active webhook, or poll GET /v1/orders/{id} |
failed | It could not be issued. The charge has been reversed to your balance | Tell your customer; order again if you wish |
cancelling | A cancellation is being carried out | Nothing; it becomes cancelled |
cancelled | The eSIM has been stopped. Credit is not returned | — |
Always handle pending. Most orders are active in the response. Some are not, and code that assumes an activation code is always present will break on the day it matters. Section 10 shows how to trigger a pending order in sandbox.
GET /v1/orders and GET /v1/orders/{id}GET /v1/orders?limit=50 returns your newest orders first (maximum 100). GET /v1/orders/{id} returns one, and is how you poll a pending order. Poll no more often than every five seconds; prefer the webhook.
POST /v1/orders/{id}/cancelStops an eSIM. Returns the order, with status cancelled (sandbox) or cancelling then cancelled (live).
Cancelling does not return credit. Credit is prepaid and non-refundable; a cancellation ends the eSIM, it does not undo the purchase. Cancelling an order that is already cancelled is not an error.
An active order gives you three ways to deliver it. Use whichever fits your product; they all install the same eSIM.
| Field | What it is | Use it for |
|---|---|---|
qrUrl | A hosted PNG of the activation QR code. Needs no API key; the link itself is unguessable | Emails, confirmation pages, PDFs: put it in an <img> tag |
activationCode | The LPA:1$… string the QR encodes | Rendering your own QR, or manual entry on the phone |
install.ios, install.android | A link that opens the phone's own eSIM installer | A button shown on the phone that will use the eSIM |
GET /v1/orders/{id}/qr returns the same PNG with your bearer key, if you would rather fetch the image yourself and serve it from your own domain.
Notes:
install link or the activation code as well.install is null in sandbox: a demo code would open the installer and then fail in front of the user.qrUrl like the eSIM itself and send it only to the customer it belongs to.Pass the traveller's address on the order and Num sends the eSIM to them, under your brand name:
{ "planId": "np_3f9a61c0d2e47b18aa", "country": "JP", "funding": "credit",
"customerEmail": "[email protected]", "customerName": "Alex" }
The email carries your brand name as its heading and sender name, the QR code, the activation code, install buttons and install steps. Replies go to the support address you set. Set your brand name and addresses in the console under Branding & email, and send yourself a preview from there.
| Field | Meaning |
|---|---|
customerEmail | Optional. Where to send the eSIM |
customerName | Optional. Used in the greeting |
sendEmail | Optional, default true. Send false to store the address without emailing |
The order reports what happened:
"customerEmail": "[email protected]",
"email": { "customer": "sent", "partner": "sent", "note": null }
email.customer | Meaning |
|---|---|
sent | Emailed to the traveller (live) |
preview_sent | Sandbox: a preview went to your login email, not to the traveller |
skipped | Not sent; note says why |
null | No customerEmail was given |
active. For a pending order that is when the eSIM is released, not when you placed the order.POST /v1/orders/{id}/email sends it again. Put a customerEmail in the body to correct a mistyped address first.You are told about every purchase too. Each time an eSIM is issued on your account, Num emails your notification address with the plan, the charge and your balance. Turn this off in the console if you would rather rely on the order.active webhook.
Installation, for your help pages: Settings → Mobile Service → Add eSIM → Use QR Code, then turn on Data Roaming for the new line.
POST /v1/orders requires an Idempotency-Key header: any string that is unique to the purchase you are making, such as your own booking reference.
Send the same key again and you get the original order back with 200, not a second eSIM and not a second charge. This is what makes a retry safe: if a request times out and you do not know whether it worked, send it again with the same key.
Set one https endpoint per environment in the console under Webhooks. We send a POST with a JSON body whenever something happens that you would otherwise have to poll for.
| Event | When | data |
|---|---|---|
order.active | An eSIM is issued, straight away or after being pending | { order } |
order.failed | An order could not be issued; the charge was reversed | { order } |
order.cancelled | An eSIM was cancelled, by you or by Num | { order, cancelledBy } |
credit.added | Credit landed on your balance: a card top-up, or credit posted by Num | { amount, balance, reference, source } |
account.live | Live was switched on for your account, by your first top-up once the checklist was complete. Sent to each endpoint you have configured, sandbox and live, since you may only have one at that moment | { account, activatedAt, trigger, reference, balance } |
balance.low | An order took your balance below your threshold (default $20) | { balance, threshold } |
ping | You pressed "Send test event" | { message } |
{
"id": "evt_8tQ2mWc1YbN4",
"type": "order.active",
"mode": "live",
"createdAt": "2026-10-04T09:12:46.000Z",
"data": { "order": { "id": "NAH9XIRi4HjCaQwsrfc5", "status": "active", "…": "…" } }
}
order is exactly the object GET /v1/orders/{id} returns.
Every delivery carries:
Num-Signature: t=1791112366,v1=5f2b…e9
Num-Event: order.active
Num-Delivery: 8tQ2mWc1YbN4
v1 is the HMAC-SHA256, in hex, of the string {t}.{raw request body} using your endpoint's signing secret (shown once when you save the endpoint; saving again rotates it). Verify it before trusting anything in the body, compare in constant time, and reject a timestamp more than five minutes old.
Node:
const crypto = require("crypto");
function verify(rawBody, header, secret) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
if (Math.abs(Date.now() / 1000 - Number(parts.t)) > 300) return false;
const expected = crypto.createHmac("sha256", secret)
.update(parts.t + "." + rawBody).digest("hex");
const a = Buffer.from(expected), b = Buffer.from(parts.v1 || "");
return a.length === b.length && crypto.timingSafeEqual(a, b);
}
Python:
import hashlib, hmac, time
def verify(raw_body: bytes, header: str, secret: str) -> bool:
parts = dict(p.split("=", 1) for p in header.split(","))
if abs(time.time() - int(parts["t"])) > 300:
return False
signed = parts["t"].encode() + b"." + raw_body
expected = hmac.new(secret.encode(), signed, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, parts.get("v1", ""))
PHP:
function verify(string $rawBody, string $header, string $secret): bool {
parse_str(str_replace(',', '&', $header), $parts);
if (abs(time() - (int) $parts['t']) > 300) return false;
$expected = hash_hmac('sha256', $parts['t'] . '.' . $rawBody, $secret);
return hash_equals($expected, $parts['v1'] ?? '');
}
Use the raw request body, byte for byte. Parsing the JSON and re-serialising it changes the bytes and the signature will not match.
2xx within 5 seconds. Do the real work after you have answered; a slow handler is treated as a failure.id and make your handler safe to run twice.status in the payload, or fetch the order, rather than the order in which events reached you.Webhooks are a convenience, not the record. GET /v1/orders/{id} is always authoritative, and an integration should still work, more slowly, with the endpoint switched off.
Standard HTTP status with a JSON body:
{ "error": "Insufficient credit.", "detail": { "balanceMinor": 40, "requiredMinor": 155, "shortfallMinor": 115 } }
| Status | Meaning | Retry? |
|---|---|---|
400 | The request is malformed: a missing header, a bad country code | No. Fix the request |
401 | Missing, unknown or revoked key | No |
402 | Not enough credit for this order. Nothing was issued | After credit is added |
403 | The key may not do this: live is not enabled, the account is suspended, the country is switched off | No |
404 | No such order, or the plan is not sold | No. Refresh the catalogue |
409 | The order is in a state that does not allow this | No |
429 | Rate limit reached | Yes, after a short wait |
500 | Something went wrong on our side | Yes, with the same Idempotency-Key |
424 | The eSIM could not be issued. The charge has been reversed | Yes, with a new Idempotency-Key |
Retry with exponential backoff, starting at one second. Any other 5xx, including an HTML error page from the network in front of the API, means the same as 500. On a timeout or a 5xx you do not know whether the order exists, which is exactly what the idempotency key is for.
Sandbox lets you rehearse every outcome production can produce. Send the Num-Simulate header on POST /v1/orders with a test key:
Num-Simulate | What happens | What your code must do |
|---|---|---|
insufficient_credit | 402, nothing issued, nothing charged | Stop selling, alert whoever tops up, tell the customer plainly |
provisioning_failed | The order is charged, fails, and is reversed. 424, then order.failed | Not deliver anything; retry with a new key or offer another plan |
pending | The order returns pending with no activation code, and becomes active about 15 seconds later with order.active | Wait for the webhook or poll, then deliver |
The header is rejected with 400 on a live key. Nothing a client sends can make a real order fail.
We tick each of these the first time your account does it in sandbox. See it in the console under Go live, or fetch it:
curl https://numesim.uk/v1/readiness -H "Authorization: Bearer numk_test_…"
{ "liveEnabled": false, "done": 7, "total": 11,
"items": [ { "key": "catalog", "label": "Fetch the catalogue", "done": true, "at": "2026-10-04T09:10:02.000Z" } ] }
| Check | How it is completed |
|---|---|
| Create a test API key | Console → API keys |
| Fetch the catalogue | GET /v1/catalog |
| Place a sandbox order | POST /v1/orders returns active |
| Read an order back | GET /v1/orders/{id} |
| Retry an order safely | The same Idempotency-Key sent twice |
| Handle insufficient credit | Num-Simulate: insufficient_credit |
| Handle a failed order | Num-Simulate: provisioning_failed |
| Handle a delayed eSIM | Num-Simulate: pending, then the order reaches active |
| Set a webhook endpoint | Console → Webhooks |
| Receive a signed webhook | Your endpoint answers 2xx |
| Check your balance or statement | GET /v1/balance or GET /v1/ledger |
The checklist records that each path was exercised. It cannot see whether your handler did the right thing, so also confirm for yourself:
id against your own booking."demo": true) can never reach a real customer.id.402.There is no approval step. Live is switched on by your first verified top-up.
GET /v1/readiness tells you when it is complete.credit.added reach you.account.live fires to each endpoint you have configured, then credit.added fires. You receive an email saying you are live.numk_live_ key and change the key in your configuration. Nothing else changes.Activation is idempotent: a retried Stripe event, a second top-up, or an account already switched on by Num never fires account.live twice. If your checklist is not complete, the console will not let you start a live top-up, and a top-up that somehow arrived early would be credited without switching live on; the next top-up after the checklist is complete switches it on.
Want volume pricing or invoice billing before you go live? Press Contact us about going live in the console; it does not hold anything up.
GET /v1/me{ "companyName": "Northwind Travel", "mode": "sandbox", "liveEnabled": false,
"discountPercent": 10, "currency": "USD",
"balance": { "amountMinor": 9845, "amount": "98.45", "currency": "USD" } }
GET /v1/balance{ "mode": "live", "balance": { "amountMinor": 48210, "amount": "482.10", "currency": "USD" } }
GET /v1/ledger?limit=50Your statement, newest first: every credit, order and reversal with the balance after it.
{ "mode": "live", "entries": [
{ "id": "9dK…", "type": "order", "amountMinor": -155, "amount": "-1.55", "currency": "USD",
"balanceAfter": "482.10", "ref": "NAH9XIRi4HjCaQwsrfc5", "note": "Japan 1GB 7Days · JP",
"createdAt": "2026-10-04T09:12:44.000Z" } ] }
type | Meaning |
|---|---|
topup | Credit added. ref is the top-up reference (NUMT-…) for a card top-up, or the invoice number when Num posted it |
order | An eSIM you ordered. ref is the order id |
refund | A charge reversed because an eSIM could not be issued |
adjustment | A correction by Num, or sandbox test credit |
| Currency | USD. Every price, charge and balance |
| Model | Prepaid credit. You top up; orders draw on the balance. Nothing is issued on credit you have not paid for |
| Topping up | By card, in the console, once your sandbox checklist is complete. Minimum $50 per top-up, maximum $10,000; the credit arrives within seconds and credit.added fires. Your first top-up also switches live on |
| Card processing fee | Added at checkout: 2.9% + 30¢ of the amount charged, so the credit you receive is exactly the amount you chose. For a $100 top-up the card is charged $103.30 |
| Invoice billing | By arrangement, for larger accounts: we invoice you, and credit is added when the invoice is paid. An invoiced account does not top up by card |
| What an order costs | The wholesale price in the catalogue when the order is placed |
| Other fees | None. No setup fee, no monthly fee, no minimum volume |
| If the balance is short | The order is refused with 402 and nothing is issued |
| If an eSIM cannot be issued | The charge is reversed to your balance automatically |
| Refunds | Credit is non-refundable, and an issued eSIM is not refunded |
| Cancelling | You can cancel an eSIM at any time. Cancelling does not return credit |
| Num's rights | Num may cancel or suspend an eSIM or an account at any time, as set out in the API Terms |
By creating an account you agree to the Num API Terms.
120 requests per minute, per key. Over that returns 429; wait and retry. The catalogue changes slowly, so cache it rather than fetching it per page view.
funding: "checkout", a payment page for your traveller, can be rehearsed in sandbox and is not available in live. Live orders use funding: "credit".cancelling while the eSIM is stopped, then to cancelled. Sandbox cancels at once.topUp tells you whether a plan supports them.Version 2026-10-09.
These terms apply to every business that creates an account to use the Num API or the Num business console. By creating an account you agree to them on behalf of your company. They are written to be read; if anything is unclear, ask us before you rely on it.
"Num", "we" and "us" mean WorkersLab LLC, 30 N Gould St Ste R, Sheridan, WY 82801-6317, United States. "You" means the company whose account it is.
An account with a sandbox environment for building and testing, and, once we switch it on for you, a live environment in which orders issue real travel eSIMs.
Sandbox is not real. Sandbox eSIMs are demonstration data. They do not connect to any network and must not be given, sold or shown to a customer as a working eSIM. Sandbox credit has no monetary value.
We may cancel or suspend any eSIM, any order, any API key or your account, at any time and without notice, including where we believe there is fraud, misuse, a breach of these terms, a risk to a network or to other customers, an unpaid invoice, or a legal or regulatory reason to do so. Where we reasonably can, we will tell you what we have done and why. A cancellation under this section does not entitle you to a refund or a credit.
You are the seller to your customers. You are responsible for telling them what they are buying, for their support in the first instance, and for complying with the consumer, telecommunications and data-protection law that applies to you. Give us only the personal data we need to provide the service; an order requires none.
We aim for the API to be available at all times and for eSIMs to be issued within seconds, but we do not guarantee either. Mobile networks are operated by third parties: coverage, speed and availability vary by place and time and are outside our control. Plans and destinations may be withdrawn.
To the extent the law allows, the service is provided as is. We are not liable for indirect or consequential loss, lost profit, or loss arising from a network being unavailable. Our total liability to you in any twelve-month period is limited to the amount you paid us for orders in that period.
We may change these terms. When a change is material we will tell the contact on your account, and continuing to use the API after that is acceptance of the new terms. You may stop using the API at any time. Sections 3, 4, 6, 7 and 9 continue to apply afterwards.
These terms are governed by the laws of the State of Wyoming, United States, and its courts have jurisdiction, unless a law that applies to you cannot be excluded by agreement.
Questions: [email protected].