How to check a wholesale digital-goods API before you integrate
Integrating a wholesale API takes an afternoon. Choosing which one to integrate takes weeks, because most of the answers sit behind a sales call. Here is the protocol instead: twelve questions in four groups, answerable in one evening without talking to anybody. Our answers are at the end, including three things we do not have.
A wholesale API and a reward API are two different products
Search for “gift card API” and most of the first page is corporate reward platforms: tools for HR and marketing teams that send $25 e-gifts to staff and survey respondents. They invoice monthly, carry a few dozen major brands in rich regions, and charge face value plus a platform fee. A reseller needs the mirror image — hundreds of regional SKUs, a prepaid balance, live stock per denomination and a price below face value, because that gap is the entire business. Both are sold with the same three words, so work out which one you are reading about first.
Twelve questions, four groups
They are ordered by how fast they end an evaluation: money first, because if you cannot see prices, nothing else matters. Each has a factual answer that fits in a sentence.
Money: questions 1 to 4
- 1. Are real prices visible before registration — the actual table for your brand, region and denomination, on a public page?
- 2. What is the minimum deposit, and, separately, is there a minimum order?
- 3. What can you pay with, and what does paying cost — top-up fees, monthly fees, setup fees, a commission at checkout?
- 4. What happens to money you do not spend: does the balance expire, and by what procedure does it come back?
Catalogue: questions 5 to 7
- 5. How many categories, in which regions? A count you can verify beats “thousands of products worldwide”.
- 6. Is stock live and per item? A real catalogue says how many $10 codes exist right now; a spreadsheet emailed each morning is yesterday's stock.
- 7. Does the API return your price, or a list price settled at a negotiated rate later? A storefront needs a final number.
Integration: questions 8 to 10
- 8. How is the key issued — instantly in the dashboard, or by a manager after a call? That answer predicts everything else.
- 9. Requests per minute and per day, where the remaining budget is reported, and how money is represented in JSON: fixed-decimal strings or floats?
- 10. Webhooks, idempotency keys, sandbox — which of the three exist? A missing one is rarely disqualifying; discovering it after launch is.
The bad day: questions 11 and 12
- 11. What happens to your money when an order cannot be fulfilled, and what is the policy on an invalid item? You want a mechanism and a window in hours.
- 12. Which support channels answer, and how fast? Test every channel a platform lists before you integrate, not during your first outage.
How to run the whole check in one evening
None of it needs a meeting. Where prices are public and the key is automatic, the loop from catalogue page to delivered code costs one minimum deposit and about an hour.
- Open a category page in a private window and compare five SKUs you actually buy with what you pay today. No prices, no evaluation.
- Register, and time it. Email, nickname, password and straight into a dashboard is a good sign.
- Find the API key without asking anyone, call the account endpoint and read the response headers — the rate-limit budget usually lives there.
- Deposit the minimum and watch it credit. Note how long it took and whether anyone asked you for documents.
- Buy the cheapest item through the API rather than the web interface, poll the order to its final status and read the delivered code.
- Break something on purpose: order an item that is out of stock, or one that costs more than your balance. That error body is what you will debug at 3 a.m.
- Ask support one specific question in every channel they publish and write down the reply times.
Tip
The failure test is the step everyone skips and the one that decides: a platform that returns a clean typed error for an out-of-stock item, and refunds an unfulfillable order without a ticket, has thought about the bad day.
Our answers to all twelve
Checked against the live site on 8 September 2026. Prices and stock move constantly, so the catalogue pages linked below are the source and this is a snapshot.
- 1. Prices are public. On 8 September 2026 the Roblox (US) page showed 12 denominations with a vs-face-value column: $10 at $9.10 (−9.0%), $5 at $4.99, $3 at $3.02 — above face value, which we print rather than hide. Check resell.codes/en/gift-cards/c/roblox_us.
- 2. Minimum deposit $3, maximum $10,000 per payment, no minimum order — one code is a valid order. The same day PUBG Mobile (Auto) listed 29 packs from $0.87, and a Steam wallet top-up starts at $0.15, so $3 covers a full cycle.
- 3. Payment is USDT only, on TRC-20, BEP-20, TON or Aptos. No cards, no bank transfers, no subscription, no setup fee, no commission at checkout: you pay the number in the table.
- 4. Unspent balance does not expire and is not tied to a product line; support can send it back in USDT, handled individually through a ticket.
- 5. On 8 September 2026 the catalogue held 559 gift card categories and 316 game top-up categories — both numbers are printed on the public catalogue pages.
- 6. Stock is live, per denomination: the Roblox (US) table shows how many of each exist at that second, and the count moves between reloads.
- 7. The API returns your price: the gift card, game key, top-up and Steam Gift endpoints return price_usd with your markup applied — the number the order charges.
- 8. The key is generated at registration, with no call and no approval queue. It sits on the API page of the dashboard next to your two limits, and you regenerate it yourself.
- 9. A new account starts at 30 requests per minute and 5,000 per day. Your own budget comes back on every response in X-RateLimit-Limit-Minute, X-RateLimit-Remaining-Minute, X-RateLimit-Limit-Day and X-RateLimit-Remaining-Day; a 429 carries Retry-After in seconds. Money is always a string with four decimals.
- 10. Errors are JSON of a stable shape — an object with a type and a message — typed unauthorized, forbidden, not_found, invalid_request or rate_limited. Lists are cursor-paginated: limit 1–100, has_more, next_cursor. The surface is 31 documented paths in resell.codes/api/v1/openapi.json; the guide is at resell.codes/docs and the interactive reference at resell.codes/docs/reference.
- 11. An order that cannot be fulfilled refunds itself: the charge returns to the balance, the order is marked refunded and a separate ledger line appears with its number — no ticket, no decision to wait for. For an invalid code the window is 24 hours from delivery and the code must be unredeemed; we verify and either replace it or credit the balance. Not covered: a top-up sent to a mistyped player ID or Steam login.
- 12. Support is a ticket in the dashboard and Telegram at @supportresellcodes, around the clock. There is no support email address at all, and we would rather say so.
Three things we do not have
These are the questions where our answer is no. Each gap costs a few lines of code to work around.
- No webhooks. Keep the number from the create response and poll the order endpoint until it reads completed, failed or refund. Most orders resolve within seconds, so a short backoff loop inside your per-minute limit is enough.
- No idempotency key. If a POST times out you do not know whether the order exists, and repeating it can create a second one. Write the intended order to your own database before sending, and on a timeout reconcile against the orders list rather than retrying blind.
- No player-ID validation endpoint for top-ups. Each category declares the fields it needs — player_id, server — and a malformed field is rejected, but a well-formed ID belonging to a stranger is topped up successfully. Steam is the exception: check-login verifies an account can receive a wallet top-up before anything is charged. Elsewhere, validate on your own storefront.
Red flags
- Pricing on request — the price depends on who is asking.
- A minimum deposit in the hundreds, quoted before you have seen one API response.
- A setup, integration or monthly platform fee named before the cost of the goods.
- No written policy for an invalid item: no window, no evidence requirement, nobody named as deciding.
- A key issued by a manager after a call, and a rate limit “discussed individually”.
- A price list as a spreadsheet or PDF “updated daily” instead of a catalogue endpoint with stock.
- A sandbox of invented data while the real catalogue stays behind a login.
- Money as JSON numbers instead of fixed-decimal strings.
The one-page version
- Prices visible without an account.
- Minimum deposit.
- Minimum order.
- Payment methods and every charge on top.
- What happens to unspent balance.
- Category count and regions.
- Live per-item stock.
- Whether the API returns the price actually charged.
- Minutes from registration to a working key.
- Requests per minute and per day, and where the remaining budget shows.
- Webhooks, idempotency, sandbox: which exist.
- Refund mechanism, invalid-item window in hours, and the channels that answer.
Run this on us. Registration takes a minute, the key is in the dashboard immediately and the minimum deposit is $3, so the cycle from a public price table to a delivered code fits in one evening. If a question on your list is not answered above, ask it on Telegram at @supportresellcodes.
Check us against your own checklist
Registration takes a minute, the API key is waiting in the dashboard, and $3 is enough to run a full order from catalogue to delivered code.
