API ReferenceVouchers

Products

Browse the voucher catalogue, look up denominations, and check availability

Voucher products are digital gift cards available through Octopus Cards. Each product represents a brand and country (e.g. Steam US, Google Play UK) with one or more denominations and a discount schedule.

For gaming top-ups and mobile recharges, see Topup Products. For eSIM data plans, see eSIM Products.

Product Structure

Every voucher product has a fixed country and currency. Within a product, one or more denominations are available - either a fixed face value (e.g. $50 Steam card) or a range (e.g. $10–$500 Amazon card).

Product: Steam Wallet Card (US)
├── Country:  United States (US)
├── Currency: USD
├── Category: Gaming
├── Delivery: Code with PIN - Instant
└── Denominations:
    ├── $10.00  (fixed)  - discount: 3.0%
    ├── $25.00  (fixed)  - discount: 3.0%
    ├── $50.00  (fixed)  - discount: 3.5%
    └── $100.00 (fixed)  - discount: 3.5%

Denominations

Each denomination defines a value range and a discount:

FieldDescription
min_valueMinimum face value
max_valueMaximum face value
discountDiscount percentage off face value
  • Fixed denominations: min_value equals max_value (e.g. a $50 card)
  • Range denominations: min_value < max_value (e.g. $10–$500, you choose the exact amount)

Pricing & Discounts

The discount you see on a product is the best available rate for your client account. Discounts come from two sources:

  1. Default discount - the standard discount for the product
  2. Client-specific discount - a custom rate negotiated for your account (overrides the default when higher)

The actual cost of an order is calculated by the Charges API, which factors in quantity, discounts, and any FX conversion.

Product Visibility

Not all products in the catalog are visible to every client:

  • Products can be blacklisted per client (hidden from your catalog)
  • Only active products with available inventory are returned

Delivery

ModeDescription
Code with PINA voucher code and PIN are delivered
URLA claim URL is provided for redemption
TimeDescription
InstantDelivered in the API response or within seconds
DelayedProcessed asynchronously - delivered via webhook

GET /api/v1/products

Browse the product catalog. Returns a paginated list of products available to your client account, filtered by country, currency, category, or search term.

Request

curl "https://api.octopuscards.io/api/v1/products?country_id=1&category=Gaming&page=1&limit=25" \
  -H "Authorization: Bearer <token>"

Query Parameters

KeyTypeDefaultDescription
pageinteger1Page number (1-based)
limitinteger10Items per page (1–500)
categorystring-Filter by category name (exact match)
country_idinteger-Filter by country ID
currency_idinteger-Filter by currency ID
searchstring-Search by product name (case-insensitive)
sort_bystringnameSort field: name, category
sort_dirstringascSort direction: asc or desc

Response

[
  {
    "id": 123,
    "name": "Steam Wallet Card",
    "category": "Gaming",
    "sub_category": "PC Gaming",
    "country_code": "USA",
    "currency_code": "USD",
    "image_url": "https://cdn.example.com/steam.png",
    "delivery_mode": "Code with PIN",
    "delivery_time": "Instant",
    "validity": "12 months",
    "available_denominations": [
      {
        "min_value": 50.00,
        "max_value": 50.00,
        "discount": 3.5
      },
      {
        "min_value": 100.00,
        "max_value": 100.00,
        "discount": 3.5
      }
    ]
  }
]

Response Headers

HeaderDescription
X-PageCurrent page number
X-Per-PageItems per page
X-Total-CountTotal matching products
X-Total-PagesTotal pages
X-Page-SizeItems in current page
X-Has-Moretrue if more pages exist

Response Fields

KeyTypeDescription
idintegerUnique product identifier
namestringProduct name (e.g. "Steam Wallet Card")
categorystringPrimary category (e.g. "Gaming", "Gift Cards")
sub_categorystring or nullSecondary category (e.g. "PC Gaming")
country_codestringISO 3166-1 alpha-3 country code (e.g. USA)
currency_codestringISO 4217 currency code (e.g. USD)
image_urlstring or nullProduct image URL
delivery_modestring or nullCode with PIN or URL
delivery_timestring or nullInstant or Delayed
validitystring or nullVoucher validity period (e.g. "12 months")
available_denominationsarrayList of available denominations with pricing
available_denominations[].min_valuenumberMinimum face value
available_denominations[].max_valuenumberMaximum face value (equals min_value for fixed denominations)
available_denominations[].discountnumberDiscount percentage off face value

Errors

400 Bad Request - Invalid query parameters.

{
  "error": {
    "name": "BadRequestError",
    "code": "BAD_REQUEST",
    "message": "Invalid query parameters"
  }
}

GET /api/v1/products/:id

Returns full details for a single product, including all available denominations and their discounts.

Request

curl "https://api.octopuscards.io/api/v1/products/123" \
  -H "Authorization: Bearer <token>"

Request Parameters

KeyTypeRequiredDescription
idintegerYesProduct ID (path parameter). Must be greater than 0.

Response

{
  "id": 123,
  "name": "Steam Wallet Card",
  "category": "Gaming",
  "sub_category": "PC Gaming",
  "country_code": "USA",
  "currency_code": "USD",
  "image_url": "https://cdn.example.com/steam.png",
  "terms": "Non-refundable. Redeemable on Steam only.",
  "details": "Add funds to your Steam wallet for games, DLC, and in-game items.",
  "how_to_use": "Open Steam client → Account Details → Add Funds → Redeem code",
  "delivery_mode": "Code with PIN",
  "delivery_time": "Instant",
  "validity": "12 months",
  "available_denominations": [
    {
      "min_value": 10.00,
      "max_value": 10.00,
      "discount": 3.0
    },
    {
      "min_value": 50.00,
      "max_value": 50.00,
      "discount": 3.5
    },
    {
      "min_value": 100.00,
      "max_value": 100.00,
      "discount": 3.5
    }
  ]
}

Response Fields

All fields from the list endpoint, plus:

KeyTypeDescription
termsstring or nullRedemption terms and conditions
detailsstring or nullProduct description
how_to_usestring or nullStep-by-step redemption instructions

Errors

400 Bad Request - ID is not a valid integer.

{
  "error": {
    "name": "BadRequestError",
    "code": "BAD_REQUEST",
    "message": "Invalid product ID"
  }
}

On this page