> ## Documentation Index
> Fetch the complete documentation index at: https://developer.kalixo.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a single product

> Returns a single catalog product by its `productCode`.



## OpenAPI

````yaml /openapi.json get /catalog/products/{productCode}
openapi: 3.1.0
info:
  title: Kalixo Distribution API
  version: 2.1.3
  description: >-
    The Kalixo Distribution API lets partners browse their product catalog,
    place and track digital gift-card orders (single or bulk), and monitor their
    wallet balance. All v2 ordering is asynchronous: place an order, then poll
    it until the codes are delivered.
  contact:
    name: Kalixo Integrations
    email: integrations@kalixo.io
servers:
  - url: https://api.kalixo.io/v2
    description: Production (pre-release placeholder)
  - url: https://sandbox.kalixo.io/v2
    description: Sandbox
security:
  - apiKey: []
tags:
  - name: Ping
    description: >-
      Verify API connectivity once your API key is issued and your IP is
      whitelisted.
  - name: Catalog
    description: >-
      Browse the products available in your catalog, including pricing, your
      discount amount and percentage, and open-denomination ranges.
  - name: Orders
    description: >-
      Place orders and poll them until codes are delivered. Single and bulk
      orders share the same asynchronous lifecycle.
  - name: Wallet
    description: Check your current wallet balances per currency.
paths:
  /catalog/products/{productCode}:
    get:
      tags:
        - Catalog
      summary: Get a single product
      description: Returns a single catalog product by its `productCode`.
      operationId: getCatalogProduct
      parameters:
        - name: productCode
          in: path
          required: true
          description: >-
            The product code from the catalog. Stable and identical across
            sandbox and production.
          schema:
            type: string
            example: '10020000213575'
      responses:
        '200':
          description: The requested product.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Product'
              examples:
                playstationTopUp:
                  $ref: '#/components/examples/CatalogProductExample'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/CatalogProductNotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  schemas:
    Product:
      type: object
      properties:
        productCode:
          type: string
          description: >-
            The product code you order with - a stable 14-digit catalog
            identifier, identical across sandbox and production.
          example: '10020000213575'
        name:
          type: string
          example: Sony PlayStation®Network Wallet Top-Up £100
        shortName:
          type: string
          description: Short display name or abbreviation for the product.
          example: PSN
        image:
          type: string
          format: uri
          example: https://cdn.kalixo.io/static-images/GB-EN-10020000213575.png
        price:
          type: integer
          description: Selling price in minor units (e.g. pennies).
          example: 10000
        currencyCode:
          type: string
          example: GBP
        buyingPrice:
          type: number
          description: Your buying price in minor units.
          example: 9500
        buyingCurrencyCode:
          type: string
          example: GBP
        discountAmount:
          type: number
          description: >-
            Your discount amount in minor units (sell price minus your buying
            price, or the monetary equivalent of your commission rate).
          example: 500
        discountPercentage:
          type: number
          description: Your commission rate as a percentage of the sell price.
          example: 5
        currencyMismatch:
          type: boolean
          description: >-
            True when your buying currency differs from the product's selling
            currency.
          example: false
        denominationType:
          $ref: '#/components/schemas/DenominationType'
        denominationMinValue:
          type: number
          nullable: true
          example: null
        denominationMaxValue:
          type: number
          nullable: true
          example: null
        denominationStep:
          type: number
          nullable: true
          example: null
        denominationDefaultValue:
          type: number
          nullable: true
          example: null
        brand:
          type: string
          example: PlayStation
        publisher:
          type: string
          example: Sony
        countryCode:
          type: string
          example: GB
        mainCategory:
          type: string
          example: Gaming
        subCategory:
          type: string
          example: PlayStation
        productCategory:
          type: string
          example: PlayStation
        productType:
          type: string
          example: credit
        platform:
          type: string
          example: PlayStation
        redeemable:
          type: string
          description: >-
            Country or market where the product can be redeemed (derived from
            `countryCode`).
          example: United Kingdom
        preorder:
          type: boolean
          example: true
        preorderCode:
          type: boolean
          example: true
        firstSale:
          type: string
          format: date
          example: '2026-06-01'
        playableOn:
          type: string
          format: date
          example: '2026-06-15'
        expires:
          type: boolean
          example: true
        expiryPolicy:
          type: string
          example: 3 years
        tags:
          type: array
          items:
            type: string
          example:
            - bestseller
            - gaming
        status:
          type: string
          description: >-
            Product availability in the catalog (e.g. active, inactive,
            preorder).
          example: active
        promotion:
          type: boolean
          description: True when a promotion applies to this product.
          example: true
        promotionType:
          type: string
          enum:
            - Discount
            - Value Off
            - Added Value
          description: Kind of promotional offer.
          example: Discount
        promotionDetails:
          type: string
          description: >-
            Offer detail (e.g. percentage, amount off, or bonus item
            description).
          example: '5'
        promotionStartDate:
          type: string
          format: date
          description: First day the promotion applies.
          example: '2026-07-20'
        promotionEndDate:
          type: string
          format: date
          description: Last day the promotion applies.
          example: '2026-07-30'
        serviceFee:
          type: boolean
          description: True when a service fee applies to this product.
          example: true
        serviceFeeType:
          type: string
          enum:
            - Percentage
            - Amount
          description: How the service fee is calculated.
          example: Amount
        serviceFeeValue:
          type: string
          description: >-
            Fee rate or amount. For `Percentage`, the percentage of sell price
            (e.g. `"2.5"` for 2.5%). For `Amount`, the fixed fee in minor units
            (e.g. `"250"` for £2.50).
          example: '250'
        type:
          type: string
          example: digital
        languages:
          type: array
          items:
            $ref: '#/components/schemas/ProductLanguage'
    DenominationType:
      type: string
      enum:
        - fixed
        - open
      description: >-
        `fixed` products have a set price; `open` products accept any amount
        within a range.
    ProductLanguage:
      type: object
      properties:
        languageCode:
          type: string
          example: en
        name:
          type: string
          example: Sony PlayStation®Network Wallet Top-Up £100
        sku:
          type: string
          description: >-
            Locale SKU in the form `{CC}-{LL}-{productCode}` (e.g.
            GB-EN-10020000213575).
          example: GB-EN-10020000213575
        image:
          type: string
          format: uri
          example: https://cdn.kalixo.io/static-images/GB-EN-10020000213575.png
        description:
          type: string
        tnc:
          type: string
        redemptionInstructions:
          type: string
    Error:
      type: object
      description: >-
        Standard error response. See the Errors concept page for the complete
        message catalogue.
      required:
        - statusCode
        - message
      properties:
        statusCode:
          type: integer
          example: 400
        error:
          type: string
          description: >-
            Short label for the status (for example `Bad Request`, `Not Found`).
            Omitted on some `500` responses.
          example: Bad Request
        message:
          type: string
          description: Human-readable explanation. May include the productCode you sent.
          example: 'Product 10020000213575 price mismatch: expected 10000'
  examples:
    CatalogProductExample:
      summary: PlayStation wallet top-up
      value:
        productCode: '10020000213575'
        name: Sony PlayStation®Network Wallet Top-Up £100
        shortName: PSN
        image: https://cdn.kalixo.io/static-images/GB-EN-10020000213575.png
        price: 10000
        currencyCode: GBP
        buyingPrice: 9500
        buyingCurrencyCode: GBP
        discountAmount: 500
        discountPercentage: 5
        currencyMismatch: false
        denominationType: fixed
        denominationMinValue: null
        denominationMaxValue: null
        denominationStep: null
        denominationDefaultValue: null
        brand: PlayStation
        publisher: Sony
        countryCode: GB
        mainCategory: Gaming
        subCategory: PlayStation
        productCategory: PlayStation
        productType: credit
        platform: PlayStation
        redeemable: United Kingdom
        preorder: true
        preorderCode: true
        firstSale: '2026-06-01'
        playableOn: '2026-06-15'
        expires: true
        expiryPolicy: 3 years
        tags:
          - bestseller
          - gaming
        status: active
        promotion: true
        promotionType: Discount
        promotionDetails: '5'
        promotionStartDate: '2026-07-20'
        promotionEndDate: '2026-07-30'
        serviceFee: true
        serviceFeeType: Amount
        serviceFeeValue: '250'
        type: digital
        languages:
          - languageCode: en
            name: Sony PlayStation®Network Wallet Top-Up £100
            sku: GB-EN-10020000213575
            image: https://cdn.kalixo.io/static-images/GB-EN-10020000213575.png
    ErrorMissingApiKey:
      summary: Missing API key
      value:
        statusCode: 401
        error: Unauthorized
        message: Missing API key
    ErrorInvalidApiKey:
      summary: Invalid API key
      value:
        statusCode: 401
        error: Unauthorized
        message: Invalid API key
    ErrorCatalogProductNotFound:
      summary: Catalog product not found
      value:
        statusCode: 404
        error: Not Found
        message: Product 10001000000999 was not found in your catalog
    ErrorInternalServerError:
      summary: Unexpected server error
      value:
        statusCode: 500
        message: Internal server error
  responses:
    Unauthorized:
      description: Missing or invalid `x-api-key`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            missingApiKey:
              $ref: '#/components/examples/ErrorMissingApiKey'
            invalidApiKey:
              $ref: '#/components/examples/ErrorInvalidApiKey'
    CatalogProductNotFound:
      description: Product not found in your active catalog.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            productNotFound:
              $ref: '#/components/examples/ErrorCatalogProductNotFound'
    InternalServerError:
      description: Unexpected server error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            internalServerError:
              $ref: '#/components/examples/ErrorInternalServerError'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: x-api-key
      description: Your Kalixo API key. Send it in the `x-api-key` header on every request.
      x-default: kal_live_xxxxxxxxxxxxxxxxxxxxxxxx

````