Kushki Subscriptions API

Create, update, retrieve, charge, and cancel scheduled card subscriptions and one-click recurring payments. Plans support monthly, weekly, daily, biweekly, quarterly, and yearly periodicity, fixed or variable amounts, start/end dates, contact details, and Webpay OneClick on the Chile rail.

Kushki Subscriptions API is one of 8 APIs that Kushki publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 1 JSON Schema definition.

Tagged areas include Subscriptions, Recurring Payments, Payments, and One Click. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, 1 Naftiko capability spec, and 1 JSON Schema.

OpenAPI Specification

kushki-subscriptions-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Kushki Subscriptions API
  description: |
    Scheduled and one-click card subscriptions. Create a subscription against a
    tokenized card, manage its periodicity and amount, charge on demand, update
    the underlying card, and cancel.
  version: "1.0.0"
  contact:
    name: Kushki
    url: https://kushkipagos.com/
    email: [email protected]
servers:
  - url: https://api.kushkipagos.com
    description: Production
  - url: https://api-uat.kushkipagos.com
    description: UAT / Sandbox
security:
  - PrivateMerchantId: []
tags:
  - name: Subscriptions
    description: Recurring card subscriptions
paths:
  /subscriptions/v1/card:
    post:
      summary: Kushki Create Subscription
      description: Create a scheduled card subscription. Returns a subscription identifier used for subsequent updates and on-demand charges.
      operationId: createSubscription
      tags:
        - Subscriptions
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubscriptionRequest'
            example:
              token: 0aabF1aae450476cb7547bda5bdfc11d
              planName: Pro Monthly
              amount:
                subtotalIva: 0
                subtotalIva0: 2990
                ice: 0
                iva: 0
                currency: USD
              startDate: '2026-06-01'
              periodicity: monthly
              contactDetails:
                firstName: Juan
                lastName: Perez
                email: [email protected]
                phoneNumber: '+593999999999'
      responses:
        '200':
          description: Subscription created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionResponse'
        '4XX':
          $ref: '#/components/responses/ErrorResponse'
  /subscriptions/v1/card/{subscriptionId}:
    get:
      summary: Kushki Retrieve Subscription
      description: Retrieve the current state of a subscription.
      operationId: getSubscription
      tags:
        - Subscriptions
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
      responses:
        '200':
          description: Subscription
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionResponse'
    put:
      summary: Kushki Update Subscription
      description: Update plan name, amount, periodicity, or contact details on an existing subscription.
      operationId: updateSubscription
      tags:
        - Subscriptions
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubscriptionUpdateRequest'
      responses:
        '200':
          description: Updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionResponse'
    delete:
      summary: Kushki Cancel Subscription
      description: Cancel an active subscription. No further scheduled charges will be initiated.
      operationId: cancelSubscription
      tags:
        - Subscriptions
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
      responses:
        '200':
          description: Cancelled
  /subscriptions/v1/card/{subscriptionId}/charge:
    post:
      summary: Kushki Charge Subscription On Demand
      description: Trigger an on-demand charge against the card stored on the subscription (one-click flow).
      operationId: chargeSubscription
      tags:
        - Subscriptions
      parameters:
        - $ref: '#/components/parameters/SubscriptionId'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubscriptionChargeRequest'
      responses:
        '200':
          description: Charge approved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionChargeResponse'
components:
  securitySchemes:
    PrivateMerchantId:
      type: apiKey
      in: header
      name: Private-Merchant-Id
  parameters:
    SubscriptionId:
      name: subscriptionId
      in: path
      required: true
      schema: { type: string }
      description: Kushki subscription identifier.
  schemas:
    Amount:
      type: object
      required: [subtotalIva, subtotalIva0, iva, currency]
      properties:
        subtotalIva: { type: number }
        subtotalIva0: { type: number }
        ice: { type: number, default: 0 }
        iva: { type: number }
        currency: { type: string, enum: [USD, COP, PEN, CLP, MXN, BRL] }
    ContactDetails:
      type: object
      properties:
        firstName: { type: string }
        lastName: { type: string }
        email: { type: string, format: email }
        phoneNumber: { type: string }
        documentType: { type: string }
        documentNumber: { type: string }
    SubscriptionRequest:
      type: object
      required: [token, planName, amount, startDate, periodicity, contactDetails]
      properties:
        token: { type: string }
        planName: { type: string }
        amount: { $ref: '#/components/schemas/Amount' }
        startDate: { type: string, format: date }
        endDate: { type: string, format: date }
        periodicity:
          type: string
          enum: [daily, weekly, biweekly, monthly, bimonthly, quarterly, halfYearly, yearly, custom]
        contactDetails: { $ref: '#/components/schemas/ContactDetails' }
        metadata: { type: object, additionalProperties: true }
    SubscriptionUpdateRequest:
      type: object
      properties:
        planName: { type: string }
        amount: { $ref: '#/components/schemas/Amount' }
        periodicity: { type: string }
        contactDetails: { $ref: '#/components/schemas/ContactDetails' }
    SubscriptionChargeRequest:
      type: object
      properties:
        amount: { $ref: '#/components/schemas/Amount' }
        metadata: { type: object, additionalProperties: true }
    SubscriptionResponse:
      type: object
      properties:
        subscriptionId: { type: string }
        planName: { type: string }
        amount: { $ref: '#/components/schemas/Amount' }
        periodicity: { type: string }
        startDate: { type: string, format: date }
        status:
          type: string
          enum: [active, pending, cancelled, expired, suspended]
        contactDetails: { $ref: '#/components/schemas/ContactDetails' }
    SubscriptionChargeResponse:
      type: object
      properties:
        ticketNumber: { type: string }
        transactionReference: { type: string }
        approvedTransactionAmount: { type: number }
        currencyCode: { type: string }
        responseText: { type: string }
    Error:
      type: object
      properties:
        code: { type: string }
        message: { type: string }
  responses:
    ErrorResponse:
      description: Error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'