CDK Bot Orders API

The Orders API from CDK Bot — 2 operation(s) for orders.

Operations 2

GET /orders/{id} Get order status #
GET /orders/{id}/receipt Get purchase receipt #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/cdk-bot:cdk-bot-orders-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

cdk-bot-orders-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: CDK Bot — Digital Products Orders API
  version: 1.0.0
  termsOfService: https://api.cdk.bot/terms
  contact:
    name: CDK Bot
    email: info@cdk.bot
    url: https://cdk.bot
  description: 'Agent-native API for purchasing digital products (game keys, gift cards, and more) via USDC on Base chain.


    ## Quick Start

    **One-shot (wallet-native agents):** `POST /purchase {"game_id":"..."}` with an `X-PAYMENT` header — a signed EIP-3009 "exact" authorization for the accepts[] returned in the 402 — and a facilitator settles it gaslessly, returning the key in one call (no tx_hash/quote_id).


    **Two-step (any agent):**

    1. **Browse**: `GET /games?q=battlefield` — search products, filter by platform/region/product_type

    2. **Get price**: `POST /purchase {"game_id":"..."}` — returns 402 with exact USDC amount, wallet address, and standard x402 accepts[]

    3. **Pay & get key**: Send USDC onchain, then `POST /purchase {"game_id":"...","tx_hash":"0x...","quote_id":"..."}` — returns product key


    ## Key facts

    - All prices are in USD (USDC on Base chain)

    - Only in-stock products are returned (in_stock: true)

    - Payment address: `0x0b321A0F1294431347f98e10a2275F23B11BBfFb`

    - No authentication required for browsing or purchasing

    - Double-spend protection via unique tx_hash constraint

    - Agent discovery: `GET /.well-known/agent.json`

    - Liveness check: `GET /health`


    ## Sandbox Mode

    Test the full purchase flow without spending real money:

    1. Get free test USDC from Circle Faucet and Sepolia ETH from Alchemy Faucet

    2. Add `"chain": "base-sepolia"` to your `POST /purchase` request

    3. Pay with test USDC on Base Sepolia — receive a mock key (`SANDBOX-XXXXX-XXXXX-XXXXX`)


    Same API, same URL, same flow — just add the chain parameter. See `GET /.well-known/agent.json` for full sandbox docs.'
  x-guidance: 'CDK Bot sells game keys, gift cards, and digital products for AI agents. Flow: (1) GET /games?q=<query> to search the catalog. (2) POST /purchase {"game_id":"..."} to get an HTTP 402 with a price-locked USDC quote on Base. (3) Pay one-shot by retrying with an X-PAYMENT header (signed EIP-3009 authorization, gasless), or send USDC onchain and retry with tx_hash + quote_id. (4) The response contains the product key; poll GET /orders/{id} if delivery is pending. Sandbox: add "chain":"base-sepolia" to test without real money.'
servers:
- url: https://api.cdk.bot
tags:
- name: Orders
paths:
  /orders/{id}:
    get:
      tags:
      - Orders
      summary: Get order status
      description: Get order details. Provide wallet_address query param to retrieve the product key — without it, key_code is redacted. Pending orders are automatically checked for fulfillment.
      parameters:
      - schema:
          type: string
        required: true
        name: id
        in: path
      - schema:
          type: string
          description: Buyer wallet address. Required to retrieve key_code.
        required: false
        description: Buyer wallet address. Required to retrieve key_code.
        name: wallet_address
        in: query
      responses:
        '200':
          description: Order details
          content:
            application/json:
              schema:
                type: object
                properties:
                  id:
                    type: string
                    description: Order ID (UUID)
                    example: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                  game_id:
                    type: string
                    description: Purchased game ID
                  wallet_address:
                    type: string
                    nullable: true
                    description: Buyer wallet address (from onchain tx)
                  tx_hash:
                    type: string
                    nullable: true
                    description: USDC payment transaction hash
                  key_code:
                    type: string
                    nullable: true
                    description: Game activation key. Null if order is pending fulfillment.
                    example: XXXXX-XXXXX-XXXXX
                  status:
                    type: string
                    enum:
                    - completed
                    - pending
                    - failed
                    - fulfillment_timeout
                    description: Order status
                    example: completed
                  retry_after:
                    type: number
                    description: Seconds to wait before polling GET /orders/{id} again. Only present when status is "pending".
                    example: 5
                  estimated_delivery:
                    type: number
                    description: Estimated seconds until key is delivered (P95). Only present when status is "pending".
                    example: 30
                  refund_id:
                    type: string
                    nullable: true
                    description: Refund claim ID. Present when a refund has been auto-created (for failed/timed-out orders) or manually submitted.
                  refund_status:
                    type: string
                    nullable: true
                    description: 'Refund lifecycle: "pending" (awaiting review), "approved" (USDC payout pending), "refunded" (USDC sent back), "denied". Present when refund_id exists.'
                  refund_tx_hash:
                    type: string
                    nullable: true
                    description: Onchain tx hash proving USDC was returned to buyer. Present when refund_status is "refunded".
                  refund_amount:
                    type: number
                    nullable: true
                    description: USD amount refunded via USDC. Present when refund_status is "refunded".
                  sandbox:
                    type: boolean
                    description: True if this is a sandbox/testnet order. Sandbox orders receive mock keys (SANDBOX-XXXXX-...) and do not trigger real supplier orders.
                  created_at:
                    type: number
                    description: Order timestamp (Unix ms)
                required:
                - id
                - game_id
                - wallet_address
                - tx_hash
                - key_code
                - status
                - created_at
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Machine-readable error code
                    example: not_found
                  message:
                    type: string
                    description: Human-readable error description
                  diagnosis:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - tx_not_found
                        - tx_failed
                        - insufficient_confirmations
                        - wrong_contract
                        - wrong_recipient
                        - insufficient_amount
                        - no_transfer_logs
                        - no_erc20_logs
                        description: Machine-readable diagnosis code for payment verification failure
                      expected_chain:
                        type: string
                        description: Chain name we verified on
                        example: base
                      expected_chain_id:
                        type: number
                        description: Chain ID we verified on
                        example: 8453
                      expected_usdc_contract:
                        type: string
                        description: USDC contract address we looked for
                        example: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
                      expected_recipient:
                        type: string
                        description: Payment recipient address we looked for
                        example: '0x0b321A0F1294431347f98e10a2275F23B11BBfFb'
                      found:
                        type: object
                        properties:
                          contract:
                            type: string
                            description: Token contract found in tx (if different from expected)
                          recipient:
                            type: string
                            description: Recipient found in tx (if different from expected)
                          amount_usdc:
                            type: number
                            description: Amount transferred (if found)
                        description: What was actually found in the transaction
                      hint:
                        type: string
                        description: Actionable hint for the agent to fix the issue
                    required:
                    - code
                    - expected_chain
                    - expected_chain_id
                    - expected_usdc_contract
                    - expected_recipient
                    - hint
                    description: Structured payment diagnosis (only on 422 payment_verification_failed)
                  fields:
                    type: array
                    items:
                      type: object
                      properties:
                        path:
                          type: string
                          example: limit
                        message:
                          type: string
                          example: limit must be an integer between 1 and 100
                        code:
                          type: string
                          example: invalid_format
                      required:
                      - path
                      - message
                      - code
                    description: Per-field validation errors (only on 400 validation_error)
                required:
                - error
        '404':
          description: Not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Machine-readable error code
                    example: not_found
                  message:
                    type: string
                    description: Human-readable error description
                  diagnosis:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - tx_not_found
                        - tx_failed
                        - insufficient_confirmations
                        - wrong_contract
                        - wrong_recipient
                        - insufficient_amount
                        - no_transfer_logs
                        - no_erc20_logs
                        description: Machine-readable diagnosis code for payment verification failure
                      expected_chain:
                        type: string
                        description: Chain name we verified on
                        example: base
                      expected_chain_id:
                        type: number
                        description: Chain ID we verified on
                        example: 8453
                      expected_usdc_contract:
                        type: string
                        description: USDC contract address we looked for
                        example: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
                      expected_recipient:
                        type: string
                        description: Payment recipient address we looked for
                        example: '0x0b321A0F1294431347f98e10a2275F23B11BBfFb'
                      found:
                        type: object
                        properties:
                          contract:
                            type: string
                            description: Token contract found in tx (if different from expected)
                          recipient:
                            type: string
                            description: Recipient found in tx (if different from expected)
                          amount_usdc:
                            type: number
                            description: Amount transferred (if found)
                        description: What was actually found in the transaction
                      hint:
                        type: string
                        description: Actionable hint for the agent to fix the issue
                    required:
                    - code
                    - expected_chain
                    - expected_chain_id
                    - expected_usdc_contract
                    - expected_recipient
                    - hint
                    description: Structured payment diagnosis (only on 422 payment_verification_failed)
                  fields:
                    type: array
                    items:
                      type: object
                      properties:
                        path:
                          type: string
                          example: limit
                        message:
                          type: string
                          example: limit must be an integer between 1 and 100
                        code:
                          type: string
                          example: invalid_format
                      required:
                      - path
                      - message
                      - code
                    description: Per-field validation errors (only on 400 validation_error)
                required:
                - error
      security: []
      operationId: getOrdersById
      x-operation-id-source: derived
  /orders/{id}/receipt:
    get:
      tags:
      - Orders
      summary: Get purchase receipt
      description: Returns a structured receipt for a completed order. Requires wallet_address for authorization. Only available for completed orders.
      parameters:
      - schema:
          type: string
        required: true
        name: id
        in: path
      - schema:
          type: string
          description: Buyer wallet address. Required — must match the order.
        required: true
        description: Buyer wallet address. Required — must match the order.
        name: wallet_address
        in: query
      responses:
        '200':
          description: Purchase receipt
          content:
            application/json:
              schema:
                type: object
                properties:
                  receipt_id:
                    type: string
                    description: Receipt identifier (= transaction hash)
                    example: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef'
                  receipt_date:
                    type: string
                    description: Purchase date (ISO 8601)
                    example: '2025-01-15T12:30:00.000Z'
                  seller:
                    type: object
                    properties:
                      name:
                        type: string
                        description: Seller legal name
                        example: CDK Bot
                      address:
                        type: string
                        description: Seller registered address
                        example: see /terms
                      email:
                        type: string
                        description: Seller contact email
                        example: info@cdk.bot
                    required:
                    - name
                    - address
                    - email
                    description: Seller details
                  buyer:
                    type: object
                    properties:
                      wallet_address:
                        type: string
                        description: Buyer wallet address (from onchain tx)
                        example: 0xabc123...
                    required:
                    - wallet_address
                    description: Buyer details
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        description:
                          type: string
                          description: Game title
                          example: Battlefield 2042 (PC) (Steam)
                        platform:
                          type: string
                          description: Digital storefront
                          example: Steam
                        quantity:
                          type: number
                          enum:
                          - 1
                        unit_price_usd:
                          type: number
                          description: Unit price in USD
                          example: 29.99
                        total_usd:
                          type: number
                          description: Line total in USD
                          example: 29.99
                      required:
                      - description
                      - platform
                      - quantity
                      - unit_price_usd
                      - total_usd
                    description: Purchased items
                  payment:
                    type: object
                    properties:
                      method:
                        type: string
                        enum:
                        - USDC on Base
                      tx_hash:
                        type: string
                        description: Onchain transaction hash
                        example: 0x1234...
                      chain:
                        type: string
                        enum:
                        - base
                      chain_id:
                        type: number
                        enum:
                        - 8453
                    required:
                    - method
                    - tx_hash
                    - chain
                    - chain_id
                    description: Payment details
                  total_usd:
                    type: number
                    description: Total amount in USD
                    example: 29.99
                  status:
                    type: string
                    enum:
                    - paid
                required:
                - receipt_id
                - receipt_date
                - seller
                - buyer
                - items
                - payment
                - total_usd
                - status
                description: Structured purchase receipt. The tx_hash is a verifiable onchain proof of payment on Base chain.
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Machine-readable error code
                    example: not_found
                  message:
                    type: string
                    description: Human-readable error description
                  diagnosis:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - tx_not_found
                        - tx_failed
                        - insufficient_confirmations
                        - wrong_contract
                        - wrong_recipient
                        - insufficient_amount
                        - no_transfer_logs
                        - no_erc20_logs
                        description: Machine-readable diagnosis code for payment verification failure
                      expected_chain:
                        type: string
                        description: Chain name we verified on
                        example: base
                      expected_chain_id:
                        type: number
                        description: Chain ID we verified on
                        example: 8453
                      expected_usdc_contract:
                        type: string
                        description: USDC contract address we looked for
                        example: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
                      expected_recipient:
                        type: string
                        description: Payment recipient address we looked for
                        example: '0x0b321A0F1294431347f98e10a2275F23B11BBfFb'
                      found:
                        type: object
                        properties:
                          contract:
                            type: string
                            description: Token contract found in tx (if different from expected)
                          recipient:
                            type: string
                            description: Recipient found in tx (if different from expected)
                          amount_usdc:
                            type: number
                            description: Amount transferred (if found)
                        description: What was actually found in the transaction
                      hint:
                        type: string
                        description: Actionable hint for the agent to fix the issue
                    required:
                    - code
                    - expected_chain
                    - expected_chain_id
                    - expected_usdc_contract
                    - expected_recipient
                    - hint
                    description: Structured payment diagnosis (only on 422 payment_verification_failed)
                  fields:
                    type: array
                    items:
                      type: object
                      properties:
                        path:
                          type: string
                          example: limit
                        message:
                          type: string
                          example: limit must be an integer between 1 and 100
                        code:
                          type: string
                          example: invalid_format
                      required:
                      - path
                      - message
                      - code
                    description: Per-field validation errors (only on 400 validation_error)
                required:
                - error
        '404':
          description: Not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: Machine-readable error code
                    example: not_found
                  message:
                    type: string
                    description: Human-readable error description
                  diagnosis:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - tx_not_found
                        - tx_failed
                        - insufficient_confirmations
                        - wrong_contract
                        - wrong_recipient
                        - insufficient_amount
                        - no_transfer_logs
                        - no_erc20_logs
                        description: Machine-readable diagnosis code for payment verification failure
                      expected_chain:
                        type: string
                        description: Chain name we verified on
                        example: base
                      expected_chain_id:
                        type: number
                        description: Chain ID we verified on
                        example: 8453
                      expected_usdc_contract:
                        type: string
                        description: USDC contract address we looked for
                        example: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'
                      expected_recipient:
                        type: string
                        description: Payment recipient address we looked for
                        example: '0x0b321A0F1294431347f98e10a2275F23B11BBfFb'
                      found:
                        type: object
                        properties:
                          contract:
                            type: string
                            description: Token contract found in tx (if different from expected)
                          recipient:
                            type: string
                            description: Recipient found in tx (if different from expected)
                          amount_usdc:
                            type: number
                            description: Amount transferred (if found)
                        description: What was actually found in the transaction
                      hint:
                        type: string
                        description: Actionable hint for the agent to fix the issue
                    required:
                    - code
                    - expected_chain
                    - expected_chain_id
                    - expected_usdc_contract
                    - expected_recipient
                    - hint
                    description: Structured payment diagnosis (only on 422 payment_verification_failed)
                  fields:
                    type: array
                    items:
                      type: object
                      properties:
                        path:
                          type: string
                          example: limit
                        message:
                          type: string
                          example: limit must be an integer between 1 and 100
                        code:
                          type: string
                          example: invalid_format
                      required:
                      - path
                      - message
                      - code
                    description: Per-field validation errors (only on 400 validation_error)
                required:
                - error
      security: []
      operationId: getOrdersByIdReceipt
      x-operation-id-source: derived