> ## Documentation Index
> Fetch the complete documentation index at: https://rain-sandbox-trial.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Create a travel redemption

> Creates a travel redemption for a booking. `amount` is a positive integer point string where 1 point = 1 cent; `totalBookingAmountCents` is the total booking price in cents. Lifecycle depends on points mode. `RAIN_MANAGED` reserves the redemption, sends `raindrop_redemption.created`, and returns `201` with `PENDING` while the user authorizes an on-chain burn. `PARTNER_ONCHAIN` and `PARTNER_OFFCHAIN` perform a fresh balance check, synchronously confirm the booking with the travel provider, and return `200` with `COMPLETED` on success. `bookingId` is the travel idempotency key; processed booking IDs return `409`.



## OpenAPI

````yaml /openapi.json post /issuing/raindrops/travel-redemptions
openapi: 3.0.3
info:
  title: Issuing API
  description: This is the specification for Rain's Issuing API.
  termsOfService: https://www.rain.xyz/legal/authorized-user-terms
  contact:
    email: support@rain.xyz
  version: 1.3.0
servers:
  - url: https://api-dev.rain.xyz/v1
    description: Sandbox server
  - url: https://api.rain.xyz/v1
    description: Production server
security: []
tags:
  - name: paymentRoutes
    description: >-
      **Endpoint Migration:** The `/v1/automations` endpoints have been renamed
      to `/v1/payment-routes`. The old `/v1/automations` paths remain available
      as deprecated aliases during migration. Update your integrations to use
      `/v1/payment-routes` as the deprecated endpoints will be removed in a
      future release.
  - name: simulate
    description: >-
      Transaction simulation endpoints for testing integration flows in
      non-production environments. These endpoints let you trigger transaction
      events programmatically to automate integration tests and verify webhook
      handling without depending on external systems or staging real deposits.
      **Sandbox only** — all simulation endpoints return `404 Not Found` in
      production.
  - name: raindrops
    description: >-
      Rewards and points management endpoints. Custom API keys need
      `raindrops:read`/`raindrops:write` for general rewards endpoints and
      `raindrops-travel:read`/`raindrops-travel:write` for travel redemption
      endpoints.
    x-group: rewards
paths:
  /issuing/raindrops/travel-redemptions:
    post:
      tags:
        - raindrops
      summary: Create a travel redemption
      description: >-
        Creates a travel redemption for a booking. `amount` is a positive
        integer point string where 1 point = 1 cent; `totalBookingAmountCents`
        is the total booking price in cents. Lifecycle depends on points mode.
        `RAIN_MANAGED` reserves the redemption, sends
        `raindrop_redemption.created`, and returns `201` with `PENDING` while
        the user authorizes an on-chain burn. `PARTNER_ONCHAIN` and
        `PARTNER_OFFCHAIN` perform a fresh balance check, synchronously confirm
        the booking with the travel provider, and return `200` with `COMPLETED`
        on success. `bookingId` is the travel idempotency key; processed booking
        IDs return `409`.
      operationId: createTravelRedemption
      requestBody:
        description: Travel redemption details
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - userId
                - amount
                - bookingId
                - bookingType
                - totalBookingAmountCents
                - bookingDescription
              properties:
                userId:
                  type: string
                  format: uuid
                  description: The ID of the user making the redemption
                amount:
                  type: string
                  pattern: ^[1-9][0-9]*$
                  description: >-
                    The number of points to redeem, as a positive integer
                    string. 1 point = 1 cent.
                bookingId:
                  type: string
                  minLength: 1
                  description: >-
                    The travel portal booking ID. Must be unique across travel
                    redemptions and is used for idempotency.
                  maxLength: 255
                  pattern: \S
                bookingType:
                  type: string
                  enum:
                    - FLIGHT
                    - HOTEL
                    - CAR_RENTAL
                    - PACKAGE
                  description: The type of travel booking
                totalBookingAmountCents:
                  type: integer
                  minimum: 0
                  description: The total booking amount in cents.
                bookingDescription:
                  type: string
                  maxLength: 500
                  description: A description of the booking
      responses:
        '200':
          description: >-
            Partner-managed travel redemption completed synchronously after the
            booking is confirmed.
          content:
            application/json:
              schema:
                type: object
                required:
                  - redemptionId
                  - status
                properties:
                  redemptionId:
                    type: string
                    format: uuid
                    description: The ID of the redemption
                  status:
                    type: string
                    enum:
                      - COMPLETED
                    description: The current status of the redemption
        '201':
          description: >-
            Rain-managed travel redemption reserved. The client must authorize
            the on-chain burn before completion.
          content:
            application/json:
              schema:
                type: object
                required:
                  - redemptionId
                  - status
                properties:
                  redemptionId:
                    type: string
                    format: uuid
                    description: The ID of the redemption
                  status:
                    type: string
                    enum:
                      - PENDING
                    description: The current status of the redemption
        '400':
          description: >-
            Invalid request, insufficient balance, or travel provider rejected
            the booking.
        '401':
          description: Invalid authorization
        '403':
          description: Raindrops are not enabled for this tenant
        '404':
          description: User not found in this tenant
        '409':
          description: >-
            A redemption for this booking is already in progress or has already
            been processed
        '503':
          description: >-
            Partner balance or travel provider is temporarily unavailable; retry
            the request
      security:
        - ApiKeyAuth: []
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      name: Api-Key
      in: header

````