Tamara Checkout API

Create online checkout sessions that send customer and order information to Tamara and receive a hosted checkout URL where the consumer completes the BNPL or Pay-Now flow. Supports SAR, AED, BHD, KWD, and OMR across Saudi Arabia, the UAE, Bahrain, Kuwait, and Oman.

OpenAPI Specification

tamara-checkout-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Tamara Checkout API
  description: |
    Create online checkout sessions that send customer and order information to Tamara
    and receive a hosted checkout URL where the consumer completes the BNPL or Pay-Now flow.
    Supports SAR, AED, BHD, KWD, and OMR across Saudi Arabia, the UAE, Bahrain, Kuwait, and Oman.
  version: 1.0.0
  contact:
    name: Tamara Merchant Support
    url: https://docs.tamara.co/
  license:
    name: Proprietary
    url: https://tamara.co/en-SA/legal/terms-conditions
servers:
- url: https://api.tamara.co
  description: Production
- url: https://api-sandbox.tamara.co
  description: Sandbox
tags:
- name: Checkout Sessions
  description: Create and manage hosted-checkout sessions.
paths:
  /checkout:
    post:
      operationId: createCheckoutSession
      summary: Create Checkout Session
      description: |
        Create a hosted checkout session where Tamara collects payment information and
        completes the BNPL or Pay-Now flow with the consumer. Store the returned
        `order_id` and redirect the customer to `checkout_url`.
      tags:
      - Checkout Sessions
      security:
      - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CheckoutSessionRequest'
      responses:
        '200':
          description: Checkout session created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckoutSessionResponse'
        '400':
          description: Validation failure (e.g. unsupported country/currency combination).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Tamara-issued merchant API token.
  schemas:
    Money:
      type: object
      required:
      - amount
      - currency
      properties:
        amount:
          type: number
          format: double
          example: 300
        currency:
          type: string
          enum: [SAR, AED, BHD, KWD, OMR]
    Item:
      type: object
      required:
      - reference_id
      - type
      - name
      - sku
      - quantity
      - total_amount
      properties:
        reference_id:
          type: string
        type:
          type: string
        name:
          type: string
        sku:
          type: string
        quantity:
          type: integer
        unit_price:
          $ref: '#/components/schemas/Money'
        discount_amount:
          $ref: '#/components/schemas/Money'
        tax_amount:
          $ref: '#/components/schemas/Money'
        total_amount:
          $ref: '#/components/schemas/Money'
        image_url:
          type: string
          format: uri
    Consumer:
      type: object
      required:
      - first_name
      - last_name
      - phone_number
      properties:
        first_name:
          type: string
        last_name:
          type: string
        phone_number:
          type: string
          description: E.164 phone number for the consumer.
        email:
          type: string
          format: email
        date_of_birth:
          type: string
          format: date
        national_id:
          type: string
    Address:
      type: object
      required:
      - first_name
      - last_name
      - line1
      - city
      - country_code
      properties:
        first_name:
          type: string
        last_name:
          type: string
        line1:
          type: string
        line2:
          type: string
        region:
          type: string
        city:
          type: string
        country_code:
          type: string
          minLength: 2
          maxLength: 2
        phone_number:
          type: string
    MerchantUrls:
      type: object
      required:
      - success
      - failure
      - cancel
      properties:
        success:
          type: string
          format: uri
        failure:
          type: string
          format: uri
        cancel:
          type: string
          format: uri
        notification:
          type: string
          format: uri
    CheckoutSessionRequest:
      type: object
      required:
      - order_reference_id
      - total_amount
      - description
      - country_code
      - payment_type
      - items
      - consumer
      - shipping_address
      - tax_amount
      - shipping_amount
      - merchant_url
      properties:
        order_reference_id:
          type: string
        order_number:
          type: string
        total_amount:
          $ref: '#/components/schemas/Money'
        description:
          type: string
          maxLength: 256
        country_code:
          type: string
          enum: [SA, AE, BH, KW, OM]
        payment_type:
          type: string
          enum: [PAY_BY_INSTALMENTS, PAY_NOW]
        instalments:
          type: integer
          minimum: 2
          maximum: 24
        locale:
          type: string
          enum: [ar_SA, en_US]
        items:
          type: array
          items:
            $ref: '#/components/schemas/Item'
        consumer:
          $ref: '#/components/schemas/Consumer'
        billing_address:
          $ref: '#/components/schemas/Address'
        shipping_address:
          $ref: '#/components/schemas/Address'
        discount:
          type: object
          properties:
            name:
              type: string
            amount:
              $ref: '#/components/schemas/Money'
        tax_amount:
          $ref: '#/components/schemas/Money'
        shipping_amount:
          $ref: '#/components/schemas/Money'
        merchant_url:
          $ref: '#/components/schemas/MerchantUrls'
        platform:
          type: string
        is_mobile:
          type: boolean
        risk_assessment:
          type: object
          additionalProperties: true
        expires_in_minutes:
          type: integer
          minimum: 5
          maximum: 1440
          default: 30
        additional_data:
          type: object
          additionalProperties: true
    CheckoutSessionResponse:
      type: object
      properties:
        order_id:
          type: string
          format: uuid
        checkout_id:
          type: string
          format: uuid
        checkout_url:
          type: string
          format: uri
        status:
          type: string
          example: new
    Error:
      type: object
      properties:
        message:
          type: string
        errors:
          type: array
          items:
            type: object
            properties:
              error_code:
                type: string
              description:
                type: string