KeysenderhomeSupport help center home
IntegrationsPricingDemoSubmit a ticketTicket statusLog inStart free
KeysenderSupport home

The Keysender help center. Setup, connected channels, orders, and delivery, for digital product vendors.

Product

  • Integrations
  • Pricing
  • Demo
  • API

Resources

  • Help Center
  • Submit a ticket
  • Ticket status
  • Request an integration
  • Connect a supplier
  • Insights
  • Refer & earn
  • Contact sales

Legal

  • Privacy Policy
  • Terms & Conditions
  • Violation Report

Bought from a seller?

Keysender is the delivery platform, not the seller. If your order has not arrived or is not as described, contact the seller directly. They can help fastest.

Get help with your order →
© 2026 Keysender. Made in the USA.
Keysender is the delivery system, not the seller.
Back
Help CenterDevelopers and APIBuying from the Supply catalog with the API

Buying from the Supply catalog with the API

Last updated Aug 26, 2026Developers and API

Reading this in another language? Use your browser's built-in translate option. Button and field names stay in English on purpose, to match what you see in Keysender.

Overview

Keysender Supply is a wholesale catalog of game keys, gift cards, and eSIMs you can source without holding stock. The Catalog endpoints let your software browse products with prices and quantities, reserve the items you want, convert the reservation into an order, and collect the delivered codes when the order completes, all against your account's wallet.

TL;DR

  • Browse Keysender Supply's wholesale catalog with GET /catalog/products, filtered and paged.
  • Reserve stock with POST /catalog/reserve, then confirm it with POST /catalog/order to charge your wallet.
  • Poll GET /catalog/order for the delivered codes, and cancel a line before it ships with /catalog/order/cancel-item.

Before you start

Make sure you have:

  • A bearer token from POST /login (see Getting started with the Keysender API) and the base URL https://panel.keysender.com/api/v1.0.
  • Supply access on your account. It is enabled by Keysender; without it every catalog call answers 403 with a message that names the address to write to. Request it through Connect a supplier or a ticket.
  • A wallet balance to pay for orders. Confirmed orders are charged to it.

Catalog errors use their own shape: {"status": "...", "error_code": "...", "message": "..."}, and dates are UTC with a Z suffix.

Steps

Browse products

  1. Send GET /catalog/products. Filter with sku, name, categories, regions, price_min, price_max, qty_min, type (esim, game, wock), since (a date), updated_at (a UTC timestamp, for polling changes), and sort with sort_by (price, qty, name, updated_at) and sort_order. Page with page and per_page.
  2. The response carries total, page, items_per_page, and docs, the product list. Each product has sku, name, type, qty, purchase_price, regular_price, currency, updated_at, and, where known, release_date, developer, publisher, and description.
  3. Send GET /catalog/products/EXAMPLE-SKU for one product. Add additional_information=1 to include the extra fields.

Reserve, then order

  1. Send POST /catalog/reserve with your own order_id and the lines:
curl -X POST "https://panel.keysender.com/api/v1.0/catalog/reserve" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"order_id": "SHOP-10422", "order_items": [{"sku": "EXAMPLE-SKU", "quantity": 2}]}'
  1. Keep the returned reservation_id. A reservation holds the stock but does not charge you.
  2. Send POST /catalog/order with {"reservation_id": "..."}. The response is status: "Processing"; the order is fulfilled in the background and your wallet is charged.

Collect the codes

  1. Poll GET /catalog/order?order_id=SHOP-10422 every few seconds. While it still says Processing there are no products in the body yet.
  2. When complete, products lists each line with sku, quantity, and assigned_codes, each {"code", "type"}. Add additional_information=1 to receive activation details for dynamic products.

Cancel a line

  1. Send POST /catalog/order/cancel-item with increment_id (the order) and line_item_id. Success is HTTP 204 with no body; 403, 422, and 502 carry the error shape above.

Top up an eSIM

  1. Send POST /catalog/order/top-up with order_id, iccid, and top_up_sku. The response confirms the ICCID and status: "Complete".

Confirm it works

GET /catalog/order returns the codes for every line you reserved, the order appears under Supply in the panel, and the wallet balance has dropped by the purchase price. To sell those codes on, load them into a database with Uploading and managing codes with the API.

Troubleshooting

Symptom Cause Action
403 on every catalog call Supply access is not enabled on the account yet Request it through Connect a supplier or a ticket
409 on reserve The quantity is no longer available Re-read the product's qty and try a smaller line
Processing for a long time The order is still fulfilling in the background Keep polling GET /catalog/order; do not create a second order for the same order_id

If it still is not working

Submit a ticket with the order_id, the reservation_id, and the response.

Frequently asked questions

Why do catalog calls return 403?

Supply access is enabled per account by Keysender. Until it is switched on, every catalog endpoint answers 403 with a message naming the address to write to. Request access through Connect a supplier or a ticket.

When am I charged for a Supply order?

A reservation holds stock without charging you. The charge to your wallet happens when you convert the reservation with POST /catalog/order and the order is fulfilled.

Why does GET /catalog/order have no products yet?

The order is still Processing. Fulfilment runs in the background; keep polling every few seconds, and do not create a second order for the same order_id.

Related articles

Getting started with the Keysender APIConnecting your own app to KeysenderCreating transactions with the APIUploading and managing codes with the API
Back to Help Center
If this still is not workingSubmit a Ticket