Tabby Payments API

The core of tabby is a payments flow enabling you to handle payments at your webstore.

Operations 6

GET /api/v2/payments/{id} Retrieve a payment #
PUT /api/v2/payments/{id} Update a payment #
POST /api/v2/payments/{id}/captures Capture a payment #
POST /api/v2/payments/{id}/refunds Refund a payment #
POST /api/v2/payments/{id}/close Close a payment #
GET /api/v2/payments List of all payments #

Documentation

Specifications

Schemas & Data

Other Resources

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/tabby-payments-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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

tabby-payments-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Tabby API Reference Checkout Payments API
  version: 1.0.0
  x-logo:
    url: assets/tabby-new.png
    altText: tabby Logo
  description: 'Tabby Documentation:  **[docs.tabby.ai](https://docs.tabby.ai/)**

    '
servers:
- url: https://api.tabby.ai/
  description: Production (UAE, Kuwait)
- url: https://api.tabby.sa/
  description: Production (KSA)
tags:
- name: Payments
  description: The core of tabby is a payments flow enabling you to handle payments at your webstore.
paths:
  /api/v2/payments/{id}:
    get:
      tags:
      - Payments
      summary: Retrieve a payment
      description: Retrieves the specified payment. Returns the entire payment object, including the payment Status, Captures and Refunds objects.
      operationId: getPayment
      security:
      - bearerAuth:
        - secret_key
      parameters:
      - $ref: '#/components/parameters/paymentIdParam'
      responses:
        '200':
          $ref: '#/components/responses/PaymentResponse'
        '400':
          $ref: '#/components/responses/BadRequestError_PaymentsGet'
        '401':
          $ref: '#/components/responses/AuthenticationError_PaymentsGet'
        '404':
          $ref: '#/components/responses/NotFoundError_no_such_payment'
        '500':
          $ref: '#/components/responses/UnexpectedError'
    put:
      tags:
      - Payments
      summary: Update a payment
      description: Updates the reference_id. You can only use this endpoint to update this 1 field. If you send other fields in the request, they will simply be ignored by tabby. The payment to be updated can have a status of AUTHORIZED or CLOSED.
      operationId: putPayment
      security:
      - bearerAuth:
        - secret_key
      parameters:
      - $ref: '#/components/parameters/paymentIdParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                order:
                  type: object
                  properties:
                    reference_id:
                      type: string
                      description: Merchant-assigned order or cart ID.
                      example: 1001_updated
      responses:
        '200':
          $ref: '#/components/responses/PaymentUpdate'
        '400':
          $ref: '#/components/responses/BadRequestError_PaymentsGet'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError_no_such_payment'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /api/v2/payments/{id}/captures:
    post:
      tags:
      - Payments
      summary: Capture a payment
      description: Send a Capture requests for Authorized payments only. If you capture the full payment amount, the payment will be automatically closed with full capture. If you capture partial amount, the payment will remain Authorized until the rest of the amount is captured or Close request sent.
      operationId: postPaymentCapture
      security:
      - bearerAuth:
        - secret_key
      parameters:
      - $ref: '#/components/parameters/paymentIdParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CaptureRequest'
      responses:
        '200':
          $ref: '#/components/responses/PaymentCaptureResponse'
        '400':
          $ref: '#/components/responses/BadRequestError_PaymentsCapture'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError_no_such_payment'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /api/v2/payments/{id}/refunds:
    post:
      tags:
      - Payments
      summary: Refund a payment
      description: Send a full or partial refund amount request. You can only refund the payment that has Closed status. By default refunds reflect instantly, which means Tabby initiates a refund through payment gateway.
      operationId: postPaymentRefund
      security:
      - bearerAuth:
        - secret_key
      parameters:
      - $ref: '#/components/parameters/paymentIdParam'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RefundRequest'
      responses:
        '200':
          $ref: '#/components/responses/PaymentRefundResponse'
        '400':
          $ref: '#/components/responses/BadRequestError_PaymentsRefund'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError_no_such_payment'
        '409':
          $ref: '#/components/responses/PaymentRefundError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /api/v2/payments/{id}/close:
    post:
      tags:
      - Payments
      summary: Close a payment
      description: Closed is the final status of the payment. Your payment is going to be closed automatically if you capture the full amount of the payment. If an order is fully cancelled, please close the payment without capturing it - the customer will be refunded for all paid amount. If only a part of the order is delivered, please capture this part and close the payment – it will mean that another part of the order is not going to be delivered to the customer.
      operationId: closePayment
      security:
      - bearerAuth:
        - secret_key
      parameters:
      - $ref: '#/components/parameters/paymentIdParam'
      responses:
        '200':
          $ref: '#/components/responses/PaymentClose'
        '400':
          $ref: '#/components/responses/BadRequestError_PaymentsClose'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError_no_such_payment'
        '500':
          $ref: '#/components/responses/UnexpectedError'
  /api/v2/payments:
    get:
      tags:
      - Payments
      summary: List of all payments
      description: Returns a list of success payments (`AUTHORIZED` or `CLOSED`) you’ve previously created. The payments are returned in sorted order, with the most recent payments appearing first. Each entry in the array is a separate payments object, including the status, any captures and any refunds. If no more payments are available, the resulting array will be empty. Payments might be filtered by creation date.
      operationId: getPayments
      security:
      - bearerAuth:
        - secret_key
      parameters:
      - in: query
        name: created_at__gte
        schema:
          type: string
          format: date
        description: This is a filter for the payment creation date, use it to get the list of payments where creation date >= created_at__gte. ISO 8601 date time format (greater than or equal to). No time should be provided, it starts at 00:00:00 be default. For example 2020-01-23 -> 2020-01-23T00:00:00Z.
      - in: query
        name: created_at__lte
        schema:
          type: string
          format: date-time
        description: This is a filter for the payment creation date, use it to get the list of payments where creation date <= created_at__lte. ISO 8601 date time format (less than or equal to). No time should be provided, it starts at 00:00:00 be default. For example 2020-01-23 -> 2020-01-23T00:00:00Z.
      - in: query
        name: limit
        schema:
          type: integer
          maximum: 20
        description: Limits the number of returned results.
      - in: query
        name: status
        schema:
          type: string
          enum:
          - authorized
          - closed
          - rejected
          - new
          - captured
          - refunded
          - cancelled
          example: authorized
        description: "Filter the orders by specific statuses:\n  - `authorized`, `closed` and `rejected` belong to the API payment statuses;\n  - `new`, `captured`, `refunded` and `cancelled`` refer to the statuses on Tabby Merchant Dashboard;\n  - If absent, all `AUTHORIZED` and `CLOSED` payments are returned.\n"
      - in: query
        name: offset
        schema:
          type: integer
        description: The number of records into a dataset that you want to start, indexed at 0.
      responses:
        '200':
          $ref: '#/components/responses/Payments'
        '400':
          $ref: '#/components/responses/BadRequestError_failed'
        '401':
          $ref: '#/components/responses/AuthenticationError'
        '500':
          $ref: '#/components/responses/UnexpectedError'
components:
  schemas:
    OrderPaymentUpdate:
      type: object
      nullable: true
      properties:
        reference_id:
          type: string
          nullable: true
          example: 1001_updated
          description: Merchant-assigned order number.
        updated_at:
          type: string
          format: date-time
          description: Date and time the order was last updated, in UTC, and displayed in ISO 8601 datetime format.
        tax_amount:
          type: string
          default: '0.00'
          description: Total tax for the order.
        shipping_amount:
          type: string
          default: '0.00'
          description: Total shipping cost for the order.
        discount_amount:
          type: string
          default: '0.00'
          description: Total discount for the order. Should be positive or zero. Shows up on Tabby App for the Customer's convenience.
        items:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/OrderItemResponse'
          description: Array of objects representing the order items in this payment.
      required:
      - items
      - reference_id
    PaymentExpiresAt:
      type: string
      readOnly: true
      format: date-time
      description: Date and time the payment expires, in UTC, and displayed in ISO 8601 datetime format.
    RefundResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
          example: refund id, uuid format
          readOnly: true
          description: Unique refund ID, assigned by Tabby.
        created_at:
          type: string
          format: date-time
          description: Date and time the refund was created, in UTC, and displayed in ISO 8601 datetime format, assigned by Tabby.
        amount:
          type: string
          default: '0.00'
          description: Amount refunded. Allows to send up to 2 decimals for AED and SAR, up to 3 decimals for KWD.
        reason:
          type: string
          nullable: true
          example: Reason for the refund
          description: Reason for the refund.
        items:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/OrderItemResponse'
          description: Array of objects representing the order items being refunded.
        reference_id:
          type: string
          nullable: true
          example: refund idempotency key
          description: Idempotency key. Used to avoid similar refund requests.
      required:
      - amount
      - reference_id
    OrderItemResponse:
      type: object
      properties:
        reference_id:
          type: string
          nullable: true
          example: SKU123
          description: Merchant’s product identifier. Displayed in Customer's App and Merchant Dashboard, used for Item refunds and disputes.
        title:
          type: string
          nullable: true
          example: Name of the product
          description: Name of the product.
        description:
          type: string
          nullable: true
          example: Description of the product
          description: Description of the product.
        quantity:
          type: integer
          default: 0
          minimum: 0
          example: 1
          description: Quantity of the product ordered.
        unit_price:
          type: string
          default: '0'
          example: '0.00'
          description: Price per unit of the product. Should be positive or zero.
        image_url:
          type: string
          nullable: true
          format: uri
          example: https://example.com/
          description: URL of the item image to show in the order information.
        product_url:
          type: string
          nullable: true
          format: uri
          example: https://example.com/
          description: URL of the item at your store.
        gender:
          type: string
          nullable: true
          enum:
          - Male
          - Female
          - Kids
          - Other
          example: Kids
          description: Who the goods are designed to.
        category:
          type: string
          nullable: true
          example: Clothes
          description: Required as name of high-level category (Clothes, Electronics,etc.); or a tree of category-subcategory1-subcategory2; or id of the category and table with category-ids data mapped provided.
        color:
          type: string
          nullable: true
          example: white
          description: white / blue/ green
        product_material:
          type: string
          nullable: true
          example: cotton
          description: cotton / polyester / synthetic
        size_type:
          type: string
          nullable: true
          example: EU
          description: EU / UK
        size:
          type: string
          nullable: true
          example: M
          description: L / XL / 12
        brand:
          type: string
          nullable: true
          example: Name of the Brand
          description: Mango / Dorothy Perkins / Tommy Hilfiger
        is_refundable:
          type: boolean
          nullable: true
          description: Indicates whether a product can be returned
      required:
      - title
      - quantity
      - unit_price
      - category
    Pagination:
      type: object
      properties:
        limit:
          type: integer
          example: 20
          description: Limits the number of returned results.
        offset:
          type: integer
          example: 0
          description: Offset from which start returned results.
        total_count:
          type: integer
          example: 100
          description: Returned total item count.
    HotelReservationDetails:
      type: object
      required:
      - hotel_itinerary
      - insurance
      - passengers
      properties:
        pnr:
          type: string
          example: TR9088999
          description: Trip booking number, e.g. TR9088999
        hotel_itinerary:
          description: Hotel itinerary data, one per segment
          type: array
          items:
            type: object
            properties:
              hotel_name:
                type: string
                example: hotel_name
              address:
                type: string
                example: address
              hotel_city:
                type: string
                example: hotel_city
              hotel_country:
                type: string
                example: hotel_country
              start_date:
                description: ISO 8601 date e.g. 2018-10-17
                type: string
                format: date
                pattern: ^2[0-9]{3}-[0-1][0-9]-[0-3][0-9]$
              end_date:
                description: ISO 8601 date e.g. 2018-10-17
                type: string
                format: date
                pattern: ^2[0-9]{3}-[0-1][0-9]-[0-3][0-9]$
              number_of_rooms:
                type: integer
                example: 1
              class:
                type: string
                example: class
        insurance:
          description: Insurance data
          type: array
          items:
            type: object
            properties:
              insurance_company:
                type: string
                example: insurance_company
              insurance_type:
                type: string
                example: insurance_type
              insurance_price:
                type: number
                example: insurance_price
        passengers:
          description: Passengers data
          type: array
          items:
            type: object
            properties:
              full_name:
                type: string
                example: full_name
              first_name:
                type: string
                example: first_name
              last_name:
                type: string
                example: last_name
              dob:
                description: ISO 8601 date of birth, e.g. 2018-10-17
                type: string
                example: 2018-10-17 00:00:00+00:00
              document_type:
                type: string
                example: document_type
              document_id:
                type: string
                example: document_id
              expiration_id_dt:
                description: ISO 8601 date e.g. 2018-10-17
                type: string
                format: date
                pattern: ^2[0-9]{3}-[0-1][0-9]-[0-3][0-9]$
              nationality:
                type: string
                example: nationality
              gender:
                description: F - female, M - male, O - other
                type: string
                enum:
                - F
                - M
                - O
                example: M
        affiliate_name:
          description: Name of the affiliate that originated the purchase. If none, leave blank.
          type: string
          example: Name of the affiliate that originated the purchase. If none, leave blank.
    Error_500:
      type: string
      example: Internal Server error
    ShippingAddressResponse:
      type: object
      nullable: true
      properties:
        city:
          type: string
          nullable: true
          example: Dubai
          description: Name of city, municipality, or village.
        address:
          type: string
          nullable: true
          example: Dubai
          description: Building name, apartment number.
        zip:
          type: string
          nullable: true
          example: '1111'
          description: Postal code.
      required:
      - city
      - address
      - zip
    Error_400_PaymentsClose:
      type: object
      properties:
        status:
          type: string
          example: error
        errorType:
          type: string
          example: bad_data
        error:
          type: string
          example: already closed
    Error_400_PaymentsGet:
      type: object
      properties:
        status:
          type: string
          example: error
        errorType:
          type: string
          example: bad_data
        error:
          type: string
          example: invalid payment id
    OrderResponse:
      type: object
      nullable: true
      properties:
        reference_id:
          type: string
          nullable: true
          example: '1001'
          description: Merchant-assigned order number.
        updated_at:
          type: string
          format: date-time
          description: Date and time the order was last updated, in UTC, and displayed in ISO 8601 datetime format.
        tax_amount:
          type: string
          default: '0'
          example: '0.00'
          description: Total tax for the order.
        shipping_amount:
          type: string
          default: '0'
          example: '0.00'
          description: Total shipping cost for the order.
        discount_amount:
          type: string
          default: '0'
          example: '0.00'
          description: Total discount for the order. Should be positive or zero. Shows up on Tabby App for the Customer's convenience.
        items:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/OrderItemResponse'
          description: Array of objects representing the order items in this payment.
      required:
      - items
      - reference_id
    PaymentCreatedAt:
      type: string
      readOnly: true
      format: date-time
      description: Date and time the payment was created, in UTC, and displayed in ISO 8601 datetime format.
    PaymentClose:
      description: Payment object.
      type: object
      properties:
        id:
          $ref: '#/components/schemas/PaymentID'
        created_at:
          $ref: '#/components/schemas/PaymentCreatedAt'
        expires_at:
          $ref: '#/components/schemas/PaymentExpiresAt'
        status:
          $ref: '#/components/schemas/PaymentStatus'
        is_test:
          readOnly: true
          type: boolean
          description: Indicates whether this is a test payment (created using the Test API keys or Production API Keys).
        amount:
          $ref: '#/components/schemas/PaymentAmount'
        currency:
          $ref: '#/components/schemas/Currency'
        description:
          type: string
          nullable: true
          example: description
        buyer:
          $ref: '#/components/schemas/BuyerResponse'
        shipping_address:
          $ref: '#/components/schemas/ShippingAddressResponse'
        order:
          $ref: '#/components/schemas/OrderResponse'
        captures:
          type: array
          nullable: true
          readOnly: true
          items:
            $ref: '#/components/schemas/CaptureResponse'
          default: []
        refunds:
          type: array
          nullable: true
          readOnly: true
          items:
            type: object
          default: []
        buyer_history:
          $ref: '#/components/schemas/BuyerHistoryResponse'
        order_history:
          type: array
          nullable: true
          description: Array of objects, should contain information on 5-10 previously placed via any payment method orders in any status, current order excluded.
          items:
            $ref: '#/components/schemas/OrderHistoryResponse'
        meta:
          $ref: '#/components/schemas/Meta'
        attachment:
          $ref: '#/components/schemas/Attachment_V1'
      required:
      - amount
      - currency
      - buyer
      - order
      - buyer_history
      - order_history
      - shipping_address
    RefundRequest:
      type: object
      properties:
        amount:
          type: string
          default: '0.00'
          description: Amount refunded. Allows to send up to 2 decimals for AED and SAR, up to 3 decimals for KWD.
        reference_id:
          type: string
          example: refund idempotency key
          description: Idempotency key. Used to avoid similar refund requests.
        reason:
          type: string
          example: Reason for the refund
          description: Reason for the refund.
        items:
          type: array
          items:
            $ref: '#/components/schemas/OrderItem'
          description: Array of objects representing the order items being refunded.
      required:
      - amount
      - reference_id
    PaymentUpdate:
      description: Payment object.
      type: object
      properties:
        id:
          $ref: '#/components/schemas/PaymentID'
        created_at:
          $ref: '#/components/schemas/PaymentCreatedAt'
        expires_at:
          $ref: '#/components/schemas/PaymentExpiresAt'
        status:
          $ref: '#/components/schemas/PaymentStatus'
        is_test:
          readOnly: true
          type: boolean
          description: Indicates whether this is a test payment (created using the Test API keys or Production API Keys).
        amount:
          $ref: '#/components/schemas/PaymentAmount'
        currency:
          $ref: '#/components/schemas/Currency'
        description:
          type: string
          nullable: true
          example: description
        buyer:
          $ref: '#/components/schemas/BuyerResponse'
        shipping_address:
          $ref: '#/components/schemas/ShippingAddressResponse'
        order:
          $ref: '#/components/schemas/OrderPaymentUpdate'
        captures:
          type: array
          nullable: true
          readOnly: true
          items:
            $ref: '#/components/schemas/CaptureResponse'
        refunds:
          type: array
          nullable: true
          readOnly: true
          items:
            $ref: '#/components/schemas/RefundResponse'
        buyer_history:
          $ref: '#/components/schemas/BuyerHistoryResponse'
        order_history:
          type: array
          nullable: true
          description: Array of objects, should contain information on 5-10 previously placed via any payment method orders in any status, current order excluded.
          items:
            $ref: '#/components/schemas/OrderHistoryResponse'
        meta:
          $ref: '#/components/schemas/Meta'
        attachment:
          $ref: '#/components/schemas/Attachment_V1'
      required:
      - amount
      - currency
      - buyer
      - order
      - buyer_history
      - order_history
      - shipping_address
    AttachmentPaymentHistorySimple:
      type: object
      properties:
        unique_account_identifier:
          type: string
          example: unique name / id of the customer
          description: Unique name / number to identify the specific customer account
        paid_before_flag:
          type: boolean
          description: Whether the customer has paid before or not
        date_of_last_paid_purchase:
          description: ISO 8601 date e.g. 2018-10-17
          type: string
          format: date
          pattern: ^2[0-9]{3}-[0-1][0-9]-[0-3][0-9]$
        date_of_first_paid_purchase:
          description: ISO 8601 date e.g. 2018-10-17
          type: string
          format: date
          pattern: ^2[0-9]{3}-[0-1][0-9]-[0-3][0-9]$
    PaymentRefundResponse:
      description: Payment object.
      type: object
      properties:
        id:
          $ref: '#/components/schemas/PaymentID'
        created_at:
          $ref: '#/components/schemas/PaymentCreatedAt'
        expires_at:
          $ref: '#/components/schemas/PaymentExpiresAt'
        status:
          $ref: '#/components/schemas/PaymentStatus'
        is_test:
          readOnly: true
          type: boolean
          description: Indicates whether this is a test payment (created using the Test API keys or Production API Keys).
        amount:
          $ref: '#/components/schemas/PaymentAmount'
        currency:
          $ref: '#/components/schemas/Currency'
        description:
          type: string
          nullable: true
          example: description
        buyer:
          $ref: '#/components/schemas/BuyerResponse'
        shipping_address:
          $ref: '#/components/schemas/ShippingAddressResponse'
        order:
          $ref: '#/components/schemas/OrderResponse'
        captures:
          type: array
          readOnly: true
          items:
            $ref: '#/components/schemas/CaptureResponse'
        refunds:
          type: array
          readOnly: true
          items:
            $ref: '#/components/schemas/RefundResponse'
        buyer_history:
          $ref: '#/components/schemas/BuyerHistoryResponse'
        order_history:
          type: array
          nullable: true
          description: Array of objects, should contain information on 5-10 previously placed via any payment method orders in any status, current order excluded.
          items:
            $ref: '#/components/schemas/OrderHistoryResponse'
        meta:
          $ref: '#/components/schemas/Meta'
        attachment:
          $ref: '#/components/schemas/Attachment_V1'
      required:
      - amount
      - currency
      - buyer
      - order
      - buyer_history
      - order_history
      - shipping_address
    Attachment_V1:
      type: object
      nullable: true
      description: Extra data (booking info, insurance, flight reservations, ...) as serialized JSON
      properties:
        body:
          description: Should be an object containing any of the keys with corresponded sub objects
          example: '{"flight_reservation_details": {"pnr": "TR9088999","itinerary": [...],"insurance": [...],"passengers": [...],"affiliate_name": "some affiliate"}}'
          properties:
            flight_reservation_details:
              $ref: '#/components/schemas/FlightReservationDetails'
            hotel_reservation_details:
              $ref: '#/components/schemas/HotelReservationDetails'
            insurance_details:
              $ref: '#/components/schemas/InsuranceDetails'
            payment_history_full:
              $ref: '#/components/schemas/AttachmentPaymentHistoryFull'
            payment_history_simple:
              $ref: '#/components/schemas/AttachmentPaymentHistorySimple'
            flight_points_simple:
              $ref: '#/components/schemas/FlightPointsSimple'
            marketplaces:
              $ref: '#/components/schemas/Marketplaces'
            education_details:
              $ref: '#/components/schemas/EducationDetails'
        content_type:
          description: Version of used schema
          type: string
          default: application/vnd.tabby.v1+json
      required:
      - body
      - content_type
    OrderHistoryResponse:
      type: object
      properties:
        purchased_at:
          type: string
          nullable: true
          format: date-time
          description: Date and time the order was placed, in UTC, and displayed in ISO 8601 datetime format.
        amount:
          $ref: '#/components/schemas/PaymentAmountResponse'
          description: Total payment amount, including tax, shipping, and excluding any discounts. Allows to send up to 2 decimals for AED and SAR, up to 3 decimals for KWD.
        payment_method:
          type: string
          nullable: true
          enum:
          - card
          - cod
          example: card
          description: Payment method used.
        status:
          type: string
          nullable: true
          enum:
          - new
          - processing
          - complete
          - refunded
          - canceled
          - unknown
          description: Status of the order.
        buyer:
          $ref: '#/components/schemas/BuyerResponse'
        shipping_address:
          $ref: '#/components/schemas/ShippingAddressResponse'
        items:
          type: array
          nullable: true
          items:
            $ref: '#/components/schemas/OrderItemHistoryResponse'
          description: Array of objects representing the order items in this payment. If you want to offer consumers a discount, use this object to create a “discount order item”, with the unit_price set to the negative value of the discount.
      required:
      - purchased_at
      - amount
      - status
      - buyer
      - shipping_address
    InsuranceDetails:
      type: object
      required:
      - policy_details
      - client
      properties:
        policy_details:
          description: Information about insurance
          type: object
          required:
          - insurance_type
          - insurance_start_dt
          - insurance_end_dt
          - insured_amount
          properties:
            insurance_type:
              description: Insurance policy type
              type: string
              example: Insurance policy type
            insurance_start_dt:
              description: ISO 8601 start date, e.g. 2018-10-17
              type: string
              example: 2018-10-17 00:00:00+00:00
            insurance_end_dt:
              description: ISO 8601 end date, e.g. 2018-10-17
              type: string
              example: 2018-10-17 00:00:00+00:00
            insured_amount:
              description: Amount of insurance policy
              type: string
              example: '100'
            car_details:
              description: Required for car insurance
              type: object
              required:
              - manufacturer
              - model
              - year
              properties:
                manufacturer:
                  type: string
               

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