> ## 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.

# Retrieve an order

> Fetches an order by the UUID `orderId` returned on placement or by your `externalOrderCode`.

Redemption codes are returned when status is `completed` (all units) or `partially_completed` (delivered units only). While `processing` you receive `estimatedReadyAt` and a status message; `failed` returns a reason.

**partially_completed** includes `delivered`, `total`, and `products[].codes` for every code that was delivered (see the **Partial delivery with codes** response example).



## OpenAPI

````yaml /openapi.json get /orders/{reference}
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:
  /orders/{reference}:
    get:
      tags:
        - Orders
      summary: Retrieve an order
      description: >-
        Fetches an order by the UUID `orderId` returned on placement or by your
        `externalOrderCode`.


        Redemption codes are returned when status is `completed` (all units) or
        `partially_completed` (delivered units only). While `processing` you
        receive `estimatedReadyAt` and a status message; `failed` returns a
        reason.


        **partially_completed** includes `delivered`, `total`, and
        `products[].codes` for every code that was delivered (see the **Partial
        delivery with codes** response example).
      operationId: getOrder
      parameters:
        - name: reference
          in: path
          required: true
          description: The UUID orderId returned on placement, or your externalOrderCode.
          schema:
            type: string
            example: O-12345
      responses:
        '200':
          description: The order and its current status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderStatus'
              examples:
                processing:
                  summary: Still processing
                  value:
                    orderId: b9f6f9a2-4d0a-4f5c-9a1e-7c2d8f3b6e10
                    externalOrderCode: O-12345
                    status: processing
                    estimatedReadyAt: '2026-06-02T11:05:00Z'
                    message: Order is still processing
                completed:
                  summary: Completed with codes
                  value:
                    orderId: b9f6f9a2-4d0a-4f5c-9a1e-7c2d8f3b6e10
                    externalOrderCode: O-12345
                    status: completed
                    products:
                      - productCode: '10020000213575'
                        price: 10000
                        quantity: 1
                        codes:
                          - code: ABCDE-FGHIJ-KLMNO-PQRST-UVWXY
                    wallet:
                      balances:
                        GBP: 196.01
                      lowBalance: false
                partially_completed:
                  $ref: '#/components/examples/OrderPartiallyCompleted'
                failed:
                  summary: Failed
                  value:
                    orderId: b9f6f9a2-4d0a-4f5c-9a1e-7c2d8f3b6e10
                    externalOrderCode: O-12345
                    status: failed
                    reason: The order could not be completed.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/OrderNotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  schemas:
    OrderStatus:
      type: object
      properties:
        orderId:
          type: string
          format: uuid
          example: b9f6f9a2-4d0a-4f5c-9a1e-7c2d8f3b6e10
        externalOrderCode:
          type: string
          example: O-12345
        status:
          type: string
          enum:
            - processing
            - completed
            - partially_completed
            - failed
          example: completed
        estimatedReadyAt:
          type: string
          format: date-time
          nullable: true
        message:
          type: string
          nullable: true
          example: Order is still processing
        reason:
          type: string
          nullable: true
        delivered:
          type: integer
          nullable: true
          description: Codes delivered so far (partial deliveries).
        total:
          type: integer
          nullable: true
          description: Total codes in the order.
        products:
          type: array
          description: >-
            Present when status is `completed` or `partially_completed`. Each
            line includes `codes` for delivered units only.
          items:
            $ref: '#/components/schemas/OrderProductResult'
        wallet:
          $ref: '#/components/schemas/WalletSnapshot'
    OrderProductResult:
      type: object
      properties:
        productCode:
          type: string
          example: '10020000213575'
        price:
          type: integer
          example: 10000
        quantity:
          type: integer
          example: 1
        codes:
          type: array
          description: One entry per delivered unit.
          items:
            $ref: '#/components/schemas/RedemptionCode'
    WalletSnapshot:
      type: object
      properties:
        balances:
          type: object
          additionalProperties:
            type: number
          example:
            GBP: 196.01
            EUR: 1234.56
        lowBalance:
          type: boolean
          example: false
    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'
    RedemptionCode:
      type: object
      properties:
        code:
          type: string
          example: ABCDE-FGHIJ-KLMNO-PQRST-UVWXY
  examples:
    OrderPartiallyCompleted:
      summary: Partial delivery with codes
      description: >-
        Three of five codes delivered. `products[].codes` contains every code
        received so far.
      value:
        orderId: b9f6f9a2-4d0a-4f5c-9a1e-7c2d8f3b6e10
        externalOrderCode: O-12345
        status: partially_completed
        delivered: 3
        total: 5
        products:
          - productCode: '10020000213575'
            price: 10000
            quantity: 5
            codes:
              - code: AAAAA-BBBBB-CCCCC-DDDDD-EEEEE
              - code: FFFFF-GGGGG-HHHHH-IIIII-JJJJJ
              - code: KKKKK-LLLLL-MMMMM-NNNNN-OOOOO
        wallet:
          balances:
            GBP: 196.01
          lowBalance: false
    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
    ErrorOrderNotFound:
      summary: Order not found
      value:
        statusCode: 404
        error: Not Found
        message: Order O-12345 not found
    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'
    OrderNotFound:
      description: Order not found for the supplied reference.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            orderNotFound:
              $ref: '#/components/examples/ErrorOrderNotFound'
    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

````