Kredivo Checkout API

The Kredivo Checkout API lets merchants offer Kredivo installment payment at checkout. It supports 2-click redirect checkout, 0-click tokenized express checkout, QR checkout and EDC checkout for physical stores, plus transaction status, cancellation, user credit details and an installment calculator. Authentication is a per-merchant server_key carried in the JSON request body; results are delivered asynchronously to a merchant push_uri and confirmed via a signature-key callback.

OpenAPI Specification

kredivo-checkout-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Kredivo Checkout API
  version: v2
  summary: Merchant-facing installment ("Buy Now, Pay Later") checkout API for Kredivo.
  description: |
    The Kredivo Checkout API lets an ecommerce store, marketplace, POS or EDC terminal offer
    Kredivo installment payment at checkout.

    Surfaces documented by Kredivo:

    * **2-click Checkout** — merchant posts the cart, receives a `redirect_url`, and sends the
      shopper to Kredivo to authenticate with phone + PIN + OTP.
    * **0-click Checkout** — once a shopper is tokenized (`tokenize_user: true` /
      `client_user_key`), later purchases are placed with the stored `user_token`.
    * **QR Checkout** — dynamic (per-transaction) or static (per-store) QR for physical stores.
    * **EDC Checkout** — checkout initiated from a physical EDC terminal, with reversal support.
    * **Additional APIs** — transaction status, full/partial cancellation, and an installment
      and interest calculator.

    Every operation authenticates with the per-merchant `server_key` carried **in the JSON
    request body**, not in a header. Transaction outcomes arrive asynchronously as an HTTP POST
    to the merchant's `push_uri`; the merchant confirms by calling `GET /kredivo/v2/update`
    with the `transaction_id` and `signature_key` from the notification.

    This description was generated by the API Evangelist enrichment pipeline from Kredivo's
    published developer documentation at https://doc.kredivo.com/. It is a faithful
    transcription of the documented request/response surface — it is not published by Kredivo.
  contact:
    name: Kredivo Merchant Operations
    email: merchops@finaccel.co
    url: https://doc.kredivo.com/
  termsOfService: https://kredivo.com/p/in/tos.html
  x-generated: '2026-07-19'
  x-method: generated
  x-source: https://doc.kredivo.com/
externalDocs:
  description: Kredivo developer documentation
  url: https://doc.kredivo.com/
servers:
- url: https://sandbox.kredivo.com
  description: Sandbox. Published server key and test account are documented under Environment Setup.
- url: https://{productionHost}
  description: |
    Production. Kredivo does not publish the production endpoint; merchants must request it from
    merchops@kredivo.com before going live.
  variables:
    productionHost:
      default: production-endpoint-provided-by-kredivo
      description: Production host supplied by Kredivo merchant operations.
tags:
- name: Checkout
  description: Initiating a Kredivo installment checkout (2-click, 0-click, QR, EDC).
- name: Confirmation
  description: Confirming a transaction after a push notification.
- name: Tokenization
  description: Managing tokenized (0-click) shoppers and their credit limits.
- name: Transactions
  description: Status, cancellation and reversal of transactions.
- name: Calculator
  description: Installment, interest and service-fee breakdown.
paths:
  /kredivo/v2/checkout_url:
    post:
      operationId: createCheckoutUrl
      tags:
      - Checkout
      summary: Initiate a 2-click or 0-click checkout
      description: |
        Creates a Kredivo checkout for the supplied cart and returns a `redirect_url` the merchant
        sends the shopper to. Set `tokenize_user: true` with a `client_user_key` to tokenize the
        shopper for later 0-click purchases; supply an existing `user_token` to attempt a 0-click
        purchase. If the `user_token` is invalid the response still carries a `redirect_url` that
        the merchant should follow to fall back to regular 2-click checkout.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CheckoutRequest'
            examples:
              twoClick:
                summary: 2-click checkout
                value:
                  server_key: MEJ4FLRc74UU64cxCF8Z3HYSpPctD7
                  payment_type: 30_days
                  client_user_key: rangge@finaccel.co
                  transaction_details:
                    amount: 6505000
                    order_id: KD14721
                    items:
                    - id: BB12345678
                      name: iPhone 5S
                      price: 6000000
                      type: Smartphone
                      url: http://merchant.com/cellphones/iphone5s_64g
                      quantity: 1
                    - id: taxfee
                      name: Tax Fee
                      price: 1000
                      quantity: 1
                  customer_details:
                    first_name: Rangge
                    last_name: Septyo
                    email: rangge@finaccel.co
                    phone: '081513114262'
                  push_uri: https://www.merchantcallback.com/notify
                  back_to_store_uri: https://merchant.com/store
              zeroClick:
                summary: 0-click checkout with a stored user token
                value:
                  server_key: MEJ4FLRc74UU64cxCF8Z3HYSpPctD7
                  payment_type: 30_days
                  tokenize_user: false
                  client_user_key: rangge@finaccel.co
                  user_token: XXXX-XXXX
                  transaction_details:
                    amount: 6505000
                    order_id: KD14721
                    items:
                    - id: BB12345678
                      name: iPhone 5S
                      price: 6000000
                      type: Smartphone
                      url: http://merchant.com/cellphones/iphone5s_64g
                      quantity: 1
                  customer_details:
                    first_name: Rangge
                    email: rangge@finaccel.co
                    phone: '081513114262'
                  push_uri: https://www.merchantcallback.com/notify
                  back_to_store_uri: https://merchant.com/store
      responses:
        '200':
          description: |
            Checkout created, or an application-level error. Kredivo signals success and failure
            through the `status` field of the body rather than the HTTP status code.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckoutResponse'
              examples:
                ok:
                  value:
                    status: OK
                    message: ''
                    redirect_url: https://sandbox.kredivo.com/kredivo/v2/signin?tk=XXX
                error:
                  value:
                    status: ERROR
                    error:
                      code: null
                      message: Invalid merchant
                      kind: deprecated
  /kredivo/v2/update:
    get:
      operationId: confirmTransaction
      tags:
      - Confirmation
      summary: Confirm a transaction from a push notification
      description: |
        Called by the merchant in response to a push notification delivered to `push_uri`, to
        validate that the notification really originated from Kredivo and to read the authoritative
        transaction state. Both the `transaction_id` and the `signature_key` come from the
        notification payload.
      parameters:
      - name: transaction_id
        in: query
        required: true
        description: Transaction ID given by Kredivo.
        schema:
          type: string
        example: bb0380d7-2688-4e73-a668-997f3fc5cbec
      - name: signature_key
        in: query
        required: true
        description: Signature key used to validate that the notification originated from Kredivo.
        schema:
          type: string
      responses:
        '200':
          description: Authoritative transaction state.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionStatus'
              examples:
                settled:
                  value:
                    status: OK
                    legal_name: TANDRA
                    fraud_status: accept
                    order_id: KD125262
                    transaction_time: 1501846094
                    amount: '1500100.00'
                    payment_type: 30_days
                    transaction_status: settlement
                    message: Confirmed order status. Valid!
                    transaction_id: fadee4e5-99a2-48d6-952d-007f3fa508e8
  /kredivo/v2/deactive_user_token:
    post:
      operationId: deactivateUserToken
      tags:
      - Tokenization
      summary: Deactivate a tokenized user
      description: |
        Invalidates a `user_token`, ending 0-click eligibility for that shopper. A shopper can also
        deactivate a tokenized account from the Kredivo app, in which case Kredivo sends a push
        notification to a merchant endpoint registered with Kredivo so the merchant can invalidate
        the token on its side.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserTokenRequest'
            example:
              server_key: ABCD-XXXX-1234
              user_token: XXXX-YYYY
      responses:
        '200':
          description: Token deactivation result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserTokenResponse'
              examples:
                ok:
                  value:
                    Status: OK
                    user_token: XXXX-YYYY
                    is_active: false
                    remarks: deactive user successful
                invalidToken:
                  value:
                    status: ERROR
                    error:
                      kind: deprecated
                      message: Invalid user_token
                      code: null
  /kredivo/v2/get_user_credit_details:
    post:
      operationId: getUserCreditDetails
      tags:
      - Tokenization
      summary: Get a tokenized user's remaining credit limit
      description: |
        Returns the remaining limit, account status and account type of a tokenized shopper, broken
        down per installment tenure. Requires a valid `user_token`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UserTokenRequest'
            example:
              server_key: ABCD-XXXX-1234
              user_token: XXXX-YYYY
      responses:
        '200':
          description: Shopper identity and per-tenure remaining credit limits.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserCreditDetailsResponse'
              example:
                Status: OK
                user_details:
                  legal_name: Rangge Septyo
                  mobile_number: 62812xxxx0581
                user_credit_details:
                  account_status: 1
                  account_type: 2
                  credit_limit_details:
                  - payment_type: 30_days
                    remaining_user_limit: '1500000'
                  - payment_type: 3_months
                    remaining_user_limit: '4500000'
  /offline/v1/init_checkout:
    post:
      operationId: initOfflineCheckout
      tags:
      - Checkout
      summary: Initiate a QR or EDC checkout
      description: |
        Initiates an offline (physical store) checkout. With `source: "QR"` Kredivo returns a
        dynamic QR code — as an image URL or as a string, selected by `qr_type` — that the shopper
        scans in the Kredivo app. With `source: "EDC Mobile"` the checkout is initiated from an EDC
        terminal against the shopper's `mobile_number`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OfflineCheckoutRequest'
            examples:
              qr:
                summary: Dynamic QR checkout
                value:
                  server_key: 8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7x
                  amount: 70000
                  source: QR
                  qr_type: IMAGE
                  order_id: 548tIt83saeN
                  sub_merchant_id: KFCSenayanCity
                  push_uri: https://www.merchantcallback.com/notify
                  items:
                  - id: '001'
                    name: Product Name
                    price: 50000
                    quantity: 1
              edc:
                summary: EDC terminal checkout
                value:
                  server_key: 8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7
                  sub_merchant_id: KFCSenayanCity
                  source: EDC Mobile
                  push_uri: https://merchant.com/pushnotif
                  order_id: '12345678912'
                  amount: 15000
                  mobile_number: +62-85210549044
                  terminal_id: WDCMERCHANT0001
      responses:
        '200':
          description: Offline checkout initiated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OfflineCheckoutResponse'
              example:
                status: OK
                message: ''
                transaction_id: bcda87e2-e87b-4b7f-add4-206bb4c1d72c
                order_id: '12345678912'
  /offline/v1/reversal_transaction:
    post:
      operationId: reverseOfflineTransaction
      tags:
      - Transactions
      summary: Reverse an offline (EDC) transaction
      description: Reverses an offline transaction that has not completed, identified by `order_id`.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReversalRequest'
            example:
              order_id: '12345678912'
              server_key: 8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7
      responses:
        '200':
          description: Reversal result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SimpleStatusResponse'
              examples:
                ok:
                  value:
                    message: ''
                    status: OK
                error:
                  value:
                    message: ''
                    status: ERROR
  /kredivo/transaction/status:
    post:
      operationId: checkTransactionStatus
      tags:
      - Transactions
      summary: Check a transaction's status by order ID
      description: |
        Polls the authoritative state of a transaction by merchant `order_id`. Documented as the
        fallback when a push notification to `push_uri` fails to arrive.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TransactionStatusRequest'
            example:
              server_key: 8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7
              order_id: KB-0c40f395
      responses:
        '200':
          description: Transaction state.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionStatus'
              example:
                fraud_status: accept
                transaction_time: 1637743030
                order_id: KB-0c40f395
                external_userid: S9JRJ2bGiS4d
                status: OK
                legal_name: Rangge
                message: Transaction is settlement
                amount: '75000.00'
                discount_amount: 0
                transaction_id: 7401e873-ea77-455e-9f31-4ca2268304dc
                payment_type: 30_days
                transaction_status: settlement
  /kredivo/v2/cancel_transaction:
    post:
      operationId: cancelTransaction
      tags:
      - Transactions
      summary: Cancel a transaction in full or in part
      description: |
        Cancels a transaction. Omitting `cancellation_amount`, or passing an amount equal to the
        transaction amount, is a full cancellation; a smaller amount is a partial cancellation. An
        amount larger than the remaining cancellable amount, or zero or negative, is rejected.

        `cancellation_id` is the merchant-supplied idempotency key for this operation: one order ID
        may carry several cancellation IDs. When no `cancellation_id` is sent, Kredivo uses the pair
        (`order_id`, `cancellation_amount`) as the uniqueness key, and rejects a repeat of that same
        pair if less than one hour has elapsed since the previous request.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CancelTransactionRequest'
            example:
              server_key: 8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7
              transaction_id: 2be7d9ea-ccba-4743-8b92-0f1fc3ec358d
              cancellation_amount: 5000
              cancellation_reason: Out of stock
              cancelled_by: Althea
              cancellation_date: '1512032053'
              order_id: KB-0123456
              cancellation_id: '1234567'
      responses:
        '200':
          description: Cancellation result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SimpleStatusResponse'
              examples:
                ok:
                  value:
                    status: OK
                    message: Succes cancelling transaction by amount
                amountTooLarge:
                  value:
                    status: ERROR
                    error:
                      code: 2415
                      message: Cancellation amount bigger than remaining transaction amount that can be cancelled
                      kind: deprecated
                alreadyCancelled:
                  value:
                    status: ERROR
                    error:
                      code: 1009
                      message: Transaksi sudah dibatalkan.
                      kind: deprecated
  /kredivo/v2/payments:
    post:
      operationId: calculatePayments
      tags:
      - Calculator
      summary: Calculate installment options for a cart
      description: |
        Returns the available payment types for a cart with their full cost breakdown — tenure,
        interest rate, service fee, monthly installment and total amount — so the merchant can
        render Kredivo's installment options before checkout.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentsRequest'
            example:
              server_key: 8tLHIx8V0N6KtnSpS9Nbd6zROFFJH7
              user_token: XXX-XXX
              amount: 2400000
              items:
              - id: BB12345678
                name: iPhone 5S
                price: 2400000
                url: http://merchant.com/cellphones/iphone5s_64g
                type: Smartphone
                quantity: 1
      responses:
        '200':
          description: Available installment options.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentsResponse'
              example:
                payments:
                - id: 30_days
                  name: Bayar dalam 30 hari
                  tenure: 1
                  amount: 2424000
                  raw_amount: 2424000.0
                  raw_monthly_installment: 2423999.801457357
                  service_fee: 24000
                  interest_rate: '0'
                  rate: 0.0
                message: Available payment types are listed.
                status: OK
components:
  securitySchemes:
    serverKey:
      type: apiKey
      in: header
      name: server_key
      description: |
        NOTE ON MODELLING: Kredivo does not use a header or an HTTP auth scheme. The per-merchant
        `server_key` is sent as a **field in the JSON request body** of every operation, which
        OpenAPI cannot express as a security scheme. This entry documents the credential so tooling
        can see it; the body field `server_key` on each request schema is the real carrier. See
        authentication/kredivo-authentication.yml.
      x-actual-location: request-body
      x-actual-field: server_key
  schemas:
    ProductItem:
      type: object
      description: |
        A cart line. Beyond real SKUs, Kredivo reserves the ids `shippingfee`, `adminfee`, `taxfee`,
        `discount`, `additionalfee`, `insurancefee` and `mixpayment` for non-product lines.
      required:
      - id
      - name
      - price
      - quantity
      properties:
        id:
          type: string
          description: SKU, or one of the reserved fee/discount ids.
        name:
          type: string
        price:
          type: number
          format: double
        type:
          type: string
          description: Product category.
        url:
          type: string
          description: Product URL on the merchant site.
        image_url:
          type: string
        quantity:
          type: integer
        parent_type:
          type: string
          enum:
          - SELLER
          - ITEM
        parent_id:
          type: string
          description: Seller or item id this line belongs to.
    Address:
      type: object
      required:
      - first_name
      - address
      - city
      - postal_code
      - phone
      - country_code
      properties:
        first_name:
          type: string
        last_name:
          type: string
        address:
          type: string
        city:
          type: string
        postal_code:
          type: string
        phone:
          type: string
        country_code:
          type: string
          example: IDN
    Customer:
      type: object
      required:
      - first_name
      - email
      - phone
      properties:
        first_name:
          type: string
        last_name:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
    Seller:
      type: object
      description: A marketplace seller. Required when the merchant is a marketplace.
      required:
      - id
      - name
      - email
      - url
      - address
      properties:
        id:
          type: string
        name:
          type: string
        email:
          type: string
          format: email
        url:
          type: string
        legal_id:
          type: string
        address:
          $ref: '#/components/schemas/Address'
    Metadata:
      type: object
      description: Device and network signals used by Kredivo's fraud detection system.
      properties:
        ip_address:
          type: string
        user_agent:
          type: string
        device_id:
          type: string
        imsi:
          type: string
    TransactionDetails:
      type: object
      required:
      - order_id
      - amount
      - items
      properties:
        order_id:
          type: string
          description: Order id given by the merchant.
        amount:
          type: number
          format: double
        items:
          type: array
          items:
            $ref: '#/components/schemas/ProductItem'
    PaymentType:
      type: string
      description: Installment tenure chosen by the shopper.
      enum:
      - 30_days
      - 3_months
      - 6_months
      - 9_months
      - 12_months
      - 18_months
      - 24_months
    CheckoutRequest:
      type: object
      required:
      - server_key
      - payment_type
      - transaction_details
      - customer_details
      - push_uri
      - back_to_store_uri
      properties:
        server_key:
          type: string
          description: Per-merchant key generated by Kredivo.
        payment_type:
          $ref: '#/components/schemas/PaymentType'
        tokenize_user:
          type: boolean
          description: Set true to tokenize the shopper for later 0-click checkout.
        client_user_key:
          type: string
          description: Merchant-side identifier for the shopper. Required when tokenize_user is true.
        user_token:
          type: string
          description: Existing token for a 0-click checkout.
        transaction_details:
          $ref: '#/components/schemas/TransactionDetails'
        customer_details:
          $ref: '#/components/schemas/Customer'
        sellers:
          type: array
          description: Required for marketplaces.
          items:
            $ref: '#/components/schemas/Seller'
        billing_address:
          $ref: '#/components/schemas/Address'
        shipping_address:
          $ref: '#/components/schemas/Address'
        metadata:
          $ref: '#/components/schemas/Metadata'
        push_uri:
          type: string
          description: Merchant endpoint that receives the asynchronous transaction push notification.
        user_cancel_uri:
          type: string
        back_to_store_uri:
          type: string
        expiration_time:
          type: string
          description: Epoch seconds. Defaults to 24 hours.
    ErrorDetail:
      type: object
      description: Kredivo's error envelope. Note the API returns HTTP 200 with status ERROR.
      properties:
        kind:
          type: string
          description: Type of error.
        code:
          type:
          - integer
          - 'null'
          description: Numeric error code. May be null.
        message:
          type: string
    CheckoutResponse:
      type: object
      properties:
        status:
          type: string
          enum:
          - OK
          - ERROR
        message:
          type: string
        redirect_url:
          type: string
          description: |
            URL to send the shopper to. Omitted when a 0-click checkout completed without shopper
            interaction; present on an invalid user_token so the merchant can fall back to 2-click.
        error:
          $ref: '#/components/schemas/ErrorDetail'
    TransactionStatus:
      type: object
      properties:
        status:
          type: string
          enum:
          - OK
          - ERROR
        message:
          type: string
        legal_name:
          type: string
        external_userid:
          type: string
        order_id:
          type: string
        transaction_id:
          type: string
        transaction_time:
          type: integer
          description: UNIX epoch timestamp.
        amount:
          type: string
        discount_amount:
          type: number
        payment_type:
          $ref: '#/components/schemas/PaymentType'
        sub_merchant_id:
          type: string
        user_token:
          type: string
        transaction_status:
          type: string
          description: |
            settlement — transaction successful; pending — shopper has not completed the
            transaction; deny — denied by Kredivo; cancel — cancelled by the merchant;
            expire — shopper did not complete, transaction expired.
          enum:
          - settlement
          - pending
          - deny
          - cancel
          - expire
        fraud_status:
          type: string
          description: |
            accept — approved by the Fraud Detection System; deny — denied by FDS, the transaction
            automatically fails.
          enum:
          - accept
          - deny
        error:
          $ref: '#/components/schemas/ErrorDetail'
    UserTokenRequest:
      type: object
      required:
      - server_key
      - user_token
      properties:
        server_key:
          type: string
        user_token:
          type: string
    UserTokenResponse:
      type: object
      properties:
        Status:
          type: string
        status:
          type: string
        user_token:
          type: string
        is_active:
          type: boolean
          description: When false, Kredivo cannot provide user credit details for this token.
        remarks:
          type: string
        error:
          $ref: '#/components/schemas/ErrorDetail'
    UserCreditDetailsResponse:
      type: object
      properties:
        Status:
          type: string
        user_details:
          type: object
          properties:
            legal_name:
              type: string
            mobile_number:
              type: string
        user_credit_details:
          type: object
          properties:
            account_status:
              type: integer
            account_type:
              type: integer
            credit_limit_details:
              type: array
              items:
                type: object
                properties:
                  payment_type:
                    $ref: '#/components/schemas/PaymentType'
                  remaining_user_limit:
                    type: string
        error:
          $ref: '#/components/schemas/ErrorDetail'
    OfflineCheckoutRequest:
      type: object
      required:
      - server_key
      - amount
      - source
      - order_id
      - push_uri
      properties:
        server_key:
          type: string
        amount:
          type: number
          format: double
        source:
          type: string
          description: QR for a dynamic QR checkout, "EDC Mobile" for an EDC terminal checkout.
          enum:
          - QR
          - EDC Mobile
        qr_type:
          type: string
          description: Requested QR representation. IMAGE returns a QR image URL.
          enum:
          - IMAGE
          - STRING
        order_id:
          type: string
        sub_merchant_id:
          type: string
          description: Identifier of the sub-merchant / outlet.
        push_uri:
          type: string
        mobile_number:
          type: string
          description: Shopper phone number. Used by EDC checkout.
        terminal_id:
          type: string
          description: Optional outlet EDC device identifier.
        sellers:
          $ref: '#/components/schemas/Seller'
        items:
          type: array
          items:
            $ref: '#/components/schemas/ProductItem'
    OfflineCheckoutResponse:
      type: object
      properties:
        status:
          type: string
          enum:
          - OK
          - ERROR
        message:
          type: string
        transaction_id:
          type: string
        order_id:
          type: string
        qr_url:
          type: string
          description: QR code image URL, returned when qr_type is IMAGE.
        qr_string:
          type: string
          description: QR code string representation, returned when qr_type is STRING.
        error:
          $ref: '#/components/schemas/ErrorDetail'
    ReversalRequest:
      type: object
      required:
      - server_key
      - order_id
      properties:
        server_key:
          type: string
        order_id:
          type: string
    TransactionStatusRequest:
      type: object
      required:
      - server_key
      - order_id
      properties:
        server_key:
          type: string
        order_id:
          type: string
    CancelTransactionRequest:
      type: object
      required:
      - server_key
      - order_id
      - transaction_id
      properties:
        server_key:
          type: string
        order_id:
          type: string
        transaction_id:
          type: string
        cancellation_id:
          type: string
          maxLength: 60
          description: |
            Merchant-supplied idempotency key for the cancellation. One order id may have multiple
            cancellation ids. When omitted, (order_id, cancellation_amount) is the uniqueness key and
            a repeat within one hour is rejected.
        cancellation_amount:
          type: integer
          description: Omit or match the transaction amount for a full cancellation; smaller for partial.
        cancellation_reason:
          type: string
        cancelled_by:
          type: string
        cancellation_date:
          type: string
          description: Epoch seconds.
    SimpleStatusResponse:
      type: object
      properties:
        status:
          type: string
          enum:
          - OK
          - ERROR
        message:
          type: string
        error:
          $ref: '#/components/schemas/ErrorDetail'
    PaymentsRequest:
      type: object
      required:
      - server_key
      - amount
 

# --- truncated at 32 KB (33 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kredivo/refs/heads/main/openapi/kredivo-checkout-openapi.yml