Curlec Instant Settlements API

On-demand settlements let you transfer your available Razorpay balance to your bank account immediately, outside the normal settlement cycle. Fees apply. Requires Instant Settlements to be enabled on your account.

OpenAPI Specification

curlec-instant-settlements-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Razorpay Bills Instant Settlements API
  version: 1.0.0
  description: Razorpay payment gateway APIs for accepting payments, managing orders, processing refunds, payouts, and subscriptions. All amounts are in the smallest currency sub-unit (e.g. paise for INR). Supports 180+ payment methods including UPI, cards, netbanking, wallets, and EMI.
  termsOfService: https://razorpay.com/terms/
  contact:
    name: Razorpay Support
    url: https://razorpay.com/support/
    email: support@razorpay.com
  license:
    name: Proprietary
    url: https://razorpay.com/terms/
  x-logo:
    url: https://razorpay.com/favicon.png
  x-auth-environments:
    test:
      keyPrefix: rzp_test_
      description: Test mode — keys prefixed rzp_test_. Same API endpoint (https://api.razorpay.com/v1). No real money movement. Use test card numbers from https://razorpay.com/docs/payments/payments/test-card-details/.
    live:
      keyPrefix: rzp_live_
      description: Live mode — keys prefixed rzp_live_. Real money movement. Requires KYC and business activation on the Razorpay Dashboard.
servers:
- url: https://api.razorpay.com/v1
  description: Production
security:
- basicAuth: []
- oauth2:
  - read_only
tags:
- name: Instant Settlements
  description: On-demand settlements let you transfer your available Razorpay balance to your bank account immediately, outside the normal settlement cycle. Fees apply. Requires Instant Settlements to be enabled on your account.
paths:
  /settlements/ondemand:
    post:
      operationId: createInstantSettlement
      summary: Create an instant settlement
      description: Request an on-demand (instant) settlement of your available Razorpay balance to your bank account. Fees apply. Use settle_full_balance=true to settle everything available, or specify an amount.
      tags:
      - Instant Settlements
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - amount
              properties:
                amount:
                  type: integer
                  description: Settlement amount in paise.
                settle_full_balance:
                  type: boolean
                  description: Set true to settle the full available balance. Overrides amount.
                  default: false
                description:
                  type: string
                  description: Custom reference note. Max 30 alphanumeric characters.
                notes:
                  $ref: '#/components/schemas/Notes'
      responses:
        '200':
          description: Instant settlement initiated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstantSettlement'
        '400':
          $ref: '#/components/responses/400'
        '401':
          $ref: '#/components/responses/401'
        '429':
          $ref: '#/components/responses/429'
    get:
      operationId: fetchAllInstantSettlements
      summary: Fetch all instant settlements
      description: Retrieve a list of all on-demand instant settlements. Use expand[]=ondemand_payouts to include individual payout records inline.
      tags:
      - Instant Settlements
      parameters:
      - $ref: '#/components/parameters/from'
      - $ref: '#/components/parameters/to'
      - $ref: '#/components/parameters/count'
      - $ref: '#/components/parameters/skip'
      - name: expand[]
        in: query
        description: Set to ondemand_payouts to include payout details.
        schema:
          type: string
          enum:
          - ondemand_payouts
      responses:
        '200':
          description: Collection of instant settlements.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/Collection'
                - properties:
                    items:
                      type: array
                      items:
                        $ref: '#/components/schemas/InstantSettlement'
        '401':
          $ref: '#/components/responses/401'
        '429':
          $ref: '#/components/responses/429'
  /settlements/ondemand/{id}:
    get:
      operationId: fetchInstantSettlement
      summary: Fetch instant settlement by ID
      description: Retrieve details of a specific on-demand instant settlement. Use expand[]=ondemand_payouts to include payout records.
      tags:
      - Instant Settlements
      parameters:
      - name: id
        in: path
        required: true
        description: Instant settlement ID (setlod_*).
        schema:
          type: string
      - name: expand[]
        in: query
        description: Set to ondemand_payouts to include payout details.
        schema:
          type: string
          enum:
          - ondemand_payouts
      responses:
        '200':
          description: Instant settlement details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InstantSettlement'
        '401':
          $ref: '#/components/responses/401'
        '404':
          $ref: '#/components/responses/404'
        '429':
          $ref: '#/components/responses/429'
components:
  schemas:
    InstantSettlement:
      type: object
      properties:
        id:
          type: string
          description: 'Unique instant settlement identifier. Prefix: setlod_'
        entity:
          type: string
          enum:
          - settlement.ondemand
        amount_requested:
          type: integer
          description: Settlement amount requested (paise).
        amount_settled:
          type: integer
          description: Total amount transferred minus fees and tax (paise).
        amount_pending:
          type: integer
          description: Portion of requested amount yet to be settled (paise).
        amount_reversed:
          type: integer
          description: Amount returned to PG balance (paise).
        fees:
          type: integer
          description: Combined fees and tax deducted (paise).
        tax:
          type: integer
          description: Tax on fee component (paise).
        currency:
          type: string
        settle_full_balance:
          type: boolean
          description: If true, settles maximum available balance.
        status:
          type: string
          enum:
          - created
          - initiated
          - partially_processed
          - processed
          - reversed
        description:
          type: string
          description: Custom reference note. Max 30 alphanumeric characters.
        notes:
          $ref: '#/components/schemas/Notes'
        created_at:
          type: integer
        ondemand_payouts:
          type: object
          description: Collection of individual payout records for this instant settlement.
          properties:
            entity:
              type: string
              enum:
              - collection
            count:
              type: integer
            items:
              type: array
              items:
                $ref: '#/components/schemas/InstantSettlementPayout'
    Notes:
      type: object
      description: Key-value pairs for storing custom metadata. Maximum 15 pairs. Each key and value must not exceed 256 characters.
      additionalProperties:
        type: string
      maxProperties: 15
    InstantSettlementPayout:
      type: object
      properties:
        id:
          type: string
        entity:
          type: string
          enum:
          - settlement.ondemand_payout
        initiated_at:
          type: integer
        processed_at:
          type: integer
        reversed_at:
          type: integer
        amount:
          type: integer
        amount_settled:
          type: integer
        fees:
          type: integer
        tax:
          type: integer
        utr:
          type: string
        status:
          type: string
          enum:
          - created
          - initiated
          - processed
          - reversed
        created_at:
          type: integer
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: 'Error code. Examples: BAD_REQUEST_ERROR, GATEWAY_ERROR, SERVER_ERROR.'
            description:
              type: string
            source:
              type: string
              description: Where the error originated (e.g. business, gateway).
            step:
              type: string
            reason:
              type: string
              description: 'Machine-readable reason. Examples: insufficient_funds, invalid_expiry_date, declined_by_bank.'
            metadata:
              type: object
            field:
              type: string
    Collection:
      type: object
      properties:
        entity:
          type: string
          enum:
          - collection
        count:
          type: integer
          description: Number of items in the current page.
        items:
          type: array
          items: {}
  parameters:
    from:
      name: from
      in: query
      description: Unix timestamp (seconds). Fetch records created on or after this time.
      schema:
        type: integer
    to:
      name: to
      in: query
      description: Unix timestamp (seconds). Fetch records created on or before this time.
      schema:
        type: integer
    skip:
      name: skip
      in: query
      description: Number of records to skip. Use with count for pagination. Default 0.
      schema:
        type: integer
        minimum: 0
        default: 0
    count:
      name: count
      in: query
      description: Number of records to return per call. Maximum 100. Default 10.
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 10
  responses:
    '404':
      description: Resource not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    '400':
      description: Bad request. Invalid parameters or missing required fields.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    '401':
      description: Authentication failed. Invalid or missing API key credentials.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    '429':
      description: Rate limit exceeded. Implement exponential backoff with jitter before retrying.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: HTTP Basic authentication using your Razorpay API key pair. Use key_id as the username and key_secret as the password. Encode as Base64(key_id:key_secret). Keys are environment-scoped (Test vs Live). Obtain keys at https://dashboard.razorpay.com/app/keys. Keys are case-sensitive.
    oauth2:
      type: oauth2
      description: OAuth 2.0 via the Razorpay MCP server (mcp.razorpay.com). Supports Authorization Code with PKCE (S256) for user-delegated access and Client Credentials for server-to-server access. Tokens expire in 3600 seconds. Dynamic Client Registration available at the registration endpoint. For integration setup see https://razorpay.com/docs/build/llm-docs/mcp-server/oauth.md.
      flows:
        authorizationCode:
          authorizationUrl: https://mcp.razorpay.com/authorize
          tokenUrl: https://mcp.razorpay.com/token
          refreshUrl: https://mcp.razorpay.com/token
          scopes:
            read_only: Read-only access to Razorpay account data (payments, orders, refunds, payouts, subscriptions, invoices)
        clientCredentials:
          tokenUrl: https://mcp.razorpay.com/token
          scopes:
            read_only: Read-only access to Razorpay account data (payments, orders, refunds, payouts, subscriptions, invoices)
externalDocs:
  description: Razorpay API Documentation
  url: https://razorpay.com/docs/api/
x-tagGroups:
- name: Core Payments
  tags:
  - Orders
  - Payments
  - Refunds
  - Payment Downtimes
- name: Payment Collection
  tags:
  - Payment Links
  - QR Codes
- name: Billing & Subscriptions
  tags:
  - Items
  - Invoices
  - Plans
  - Subscriptions
- name: Customer Management
  tags:
  - Customers
  - Documents
- name: Finance & Reconciliation
  tags:
  - Settlements
  - Instant Settlements
  - Disputes
- name: Route & Marketplace
  tags:
  - Linked Accounts
  - Transfers
- name: Smart Collect
  tags:
  - Virtual Accounts
- name: Partners & Onboarding
  tags:
  - Partner Accounts
  - Partner Products
  - Partner Stakeholders
  - Partner Documents
  - Partner Webhooks
- name: Bills
  tags:
  - Bills
- name: RazorpayX
  tags:
  - X Contacts
  - X Fund Accounts
  - X Account Validation
  - X Banking Balances
  - X Payouts
  - X Payout Links
  - X Transactions
x-rateLimit:
  description: Razorpay does not publish specific rate limits. If you receive HTTP 429, implement exponential backoff with jitter and retry. Add randomisation to avoid thundering-herd effects.
  throttleStatus: 429
  strategy: exponential backoff with jitter
x-pagination:
  description: All list endpoints return at most 100 records per call (1000 for settlement recon). Use count and skip together to paginate. Date range filters (from/to) use Unix timestamps in seconds.
  example: GET /payments?from=1700000000&to=1700086400&count=100&skip=100
x-amountEncoding:
  description: 'All monetary amounts are in the smallest currency sub-unit. For INR: 1 rupee = 100 paise, so ₹500 = 50000. Minimum for INR is 100 paise (₹1). Three-decimal currencies (KWD, BHD, OMR): drop last decimal digit. Zero-decimal currencies (JPY): pass value as-is.'