CIAO API
    • Getting Started
      • Introduction
      • Authentication
      • Responses and Error
    • Partners
      • Webhooks
      • Redemption Intent (Partners)
        • Create Redemption Intent
        • Retrieve Redemption Intent
      • Subscriptions
        • Create Subscription
        • Retrieve a subscription
        • Cancel Subscription
    • Resellers
      • Webhooks
      • Voucher Generation (Resellers)
        • Create Voucher Payment
        • Retrieve Voucher Payment
    • General
      • Get all Counties
        GET

    Resellers

    Reseller API key required (sk_test_... or sk_live_...).
    You purchase vouchers for customers — either as one-off sales or as recurring subscription billing
    cycles. You receive one webhook when a partner-initiated cancellation needs your confirmation.

    Identifiers#

    FieldUsed for
    subscription_access_codeRecurring voucher payments (POST /voucher-payments)
    access_codeConfirming cancellation (POST /subscriptions/cancellation)
    reseller_charge_referenceUnique ID per billing cycle — safe to retry the same cycle
    reseller_subscription_referenceYour recurring-order ID — optional on first cycle, required on cancel confirm
    You receive subscription_access_code when a customer selects your shop on the subscription
    checkout page. It is passed as a query parameter on the checkout link (see
    Create voucher payment).
    You do not use partner reference values (SUB-…) — those are partner-facing only.
    Important: Do not confuse subscription_access_code (billing cycles) with access_code (confirm cancellation). They refer to the same underlying subscription but are used on different endpoints.

    Voucher payments#

    One endpoint handles both modes. Omit subscription_access_code for one-off; include it for
    subscription cycles.
    Endpoint
    Create voucher paymentPOST /voucher-payments
    Retrieve voucher paymentGET /voucher-payments/{reference}

    One-off#

    Up to 5 voucher lines, 5 total vouchers per payment. Debits your wallet by the
    denomination total.

    Subscription cycle#

    Exactly one voucher line, quantity 1. Denomination value must be ≥ the subscription
    amount. The platform auto-redeems the portion covering the subscription; any excess may remain
    as reusable voucher balance (MPV-preserving).

    Cancellation#

    When a partner cancels a live subscription billed through you:
    1.
    You receive subscription.cancel_requested (webhook)
    2.
    Stop scheduling future charges
    3.
    Call Confirm cancellation
    Not required in test mode or for subscriptions never billed through you.
    Important: When you receive subscription.cancel_requested, stop billing immediately and call Confirm cancellation. The partner is not canceled until you confirm.

    Webhooks#

    Configure test_webhook_url and live_webhook_url in the reseller dashboard.
    Reseller webhooks — event, payload, signature verification.
    Important: Always verify webhook signatures before processing events.

    Idempotency#

    Important: Use idempotency_key on one-off creates and reseller_charge_reference per subscription cycle. Retries with the same key return the original result — you will not be charged twice for the same cycle.
    idempotency_key on voucher payment create — scoped to (reseller, environment)
    reseller_charge_reference per subscription cycle — scoped to (subscription, reference)

    Errors#

    error_codeHTTPWhen
    insufficient_balance400Wallet cannot cover purchase
    subscription_not_active422Subscription is canceled or completed
    subscription_cycle_limit_reached422All cycles already processed
    subscription_requires_single_voucher422Recurring payment must have one voucher, qty 1
    subscription_not_owned_by_reseller422Subscription billed by another reseller
    Validation errors (422) include unknown subscription_access_code or denomination too small.

    Setup#

    Authentication · Responses & errors
    Modified at 2026-07-21 13:41:21
    Previous
    Cancel Subscription
    Next
    Webhooks
    Built with