Orsun Pay Transactions API

Poll stored merchant transaction status

GitHub OpenAPI

Operations 1

GET /v1/transactions/{id} Poll a merchant transaction #

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

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

orsunpay-com-transactions-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  contact:
    name: OrsunPay
  description: Server-to-server merchant payments. Money is always a decimal string in major units.
  title: OrsunPay Merchant Transactions API
  version: '1.0'
servers: []
tags:
- description: Poll stored merchant transaction status
  name: Transactions
paths:
  /v1/transactions/{id}:
    get:
      description: Read the current stored status. Scoped to the merchant and live/test mode of the authenticated API key. IDs longer than 32 characters return 404 without a transaction lookup. No PSP sale is sent. Amounts are decimal strings. Poll after PSP_OUTCOME_UNKNOWN; do not create a second order.
      operationId: getPayment
      parameters:
      - in: path
        name: id
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              example:
                status: true
                transaction:
                  action: SALE
                  amount: '12.30'
                  createdAt: '2026-10-11T10:00:00.000Z'
                  currency: EUR
                  errorCode: PSP_OUTCOME_UNKNOWN
                  id: tr_example
                  livemode: true
                  orderId: order_example_001
                  processingAmount: '12.30'
                  processingCurrency: EUR
                  status: PROCESSING
              schema:
                $ref: '#/components/schemas/TransactionStatusResponseDto'
          description: Current merchant-scoped transaction status
          headers:
            RateLimit:
              description: Remaining requests (r) and seconds to reset/full refill (t), per evaluated policy. Absent when disabled; merchant quota is omitted during Redis outages, while IP/auth protection uses replica memory.
              schema:
                example: '"merchant";r=37;t=4'
                type: string
            RateLimit-Policy:
              description: Evaluated policies (draft-ietf-httpapi-ratelimit-headers-11). q is burst quota; w is the full refill window in seconds.
              schema:
                example: '"merchant";q=100;w=5'
                type: string
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedErrorResponseDto'
          description: Missing or invalid API key
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionNotFoundResponseDto'
          description: Transaction not found for this merchant and API-key mode
        '429':
          content:
            application/json:
              example:
                error: RATE_LIMITED
                errorCode: RATE_LIMITED
                message: Too many requests. Retry after the indicated delay.
                status: false
                statusCode: 429
              schema:
                $ref: '#/components/schemas/ApiErrorResponseDto'
          description: 'RATE_LIMITED: IP, merchant or failed-auth quota exhausted, or auth-in-flight concurrency pressure (Retry-After: 1). Wait Retry-After seconds and retry with the same Idempotency-Key.'
          headers:
            RateLimit:
              description: Remaining requests (r) and seconds to reset/full refill (t), per evaluated policy. Absent when disabled; merchant quota is omitted during Redis outages, while IP/auth protection uses replica memory.
              schema:
                example: '"merchant";r=37;t=4'
                type: string
            RateLimit-Policy:
              description: Evaluated policies (draft-ietf-httpapi-ratelimit-headers-11). q is burst quota; w is the full refill window in seconds.
              schema:
                example: '"merchant";q=100;w=5'
                type: string
            Retry-After:
              description: Minimum delay in whole seconds before retrying.
              schema:
                example: 1
                minimum: 1
                type: integer
        '502':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponseDto'
          description: Payment core failed or unavailable
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticationUnavailableResponseDto'
          description: API key validation is temporarily unavailable; retry later
        '504':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiErrorResponseDto'
          description: Payment core deadline exceeded
      security:
      - X-API-Key: []
      summary: Poll a merchant transaction
      tags:
      - Transactions
components:
  schemas:
    AuthenticationUnavailableResponseDto:
      properties:
        error:
          example: Service Unavailable
          type: string
        message:
          example: API_KEY_VALIDATION_UNAVAILABLE
          type: string
        statusCode:
          example: 503
          type: number
      required:
      - statusCode
      - error
      - message
      type: object
    ApiErrorResponseDto:
      properties:
        error:
          description: Same as errorCode
          example: DUPLICATE_ORDER_ID
          type: string
        errorCode:
          description: 'Machine-readable, extensible code. Known values: ADYEN_REFUSED, CARD_DATA_NOT_ACCEPTED, RATE_LIMITED, PAYMENT_LINK_INVALID_AMOUNT, PAYMENT_LINK_UNSUPPORTED_CURRENCY, PAYMENT_LINK_INVALID_EXPIRY, PAYMENT_LINK_INVALID_MAX_USES, PAYMENT_LINK_REDIRECT_URL_NOT_ALLOWED, PAYMENT_LINK_METADATA_TOO_LARGE, PAYMENT_LINK_INVALID_TEXT, PAYMENT_LINK_NOT_FOUND, PAYMENT_LINK_INVALID_LIMIT, PAYMENT_LINK_INVALID_CURSOR, API_KEY_ROTATION_REQUIRED, ORDER_ID_RESERVED, NO_CREDENTIALS_FOR_MODE, LIVEMODE_MISMATCH, PSP_OUTCOME_UNKNOWN, PAYMENT_METHOD_REQUIRED, PAYMENT_METHOD_INPUT_WITHOUT_METHOD, NO_PAYMENT_METHODS, IDEMPOTENCY_KEY_INVALID, DUPLICATE_ORDER_ID, IDEMPOTENCY_IN_PROGRESS, IDEMPOTENCY_KEY_REUSED, UPSTREAM_ERROR, UPSTREAM_UNAVAILABLE, UPSTREAM_TIMEOUT, REFUND_INVALID_AMOUNT, REFUND_INVALID_REASON, REFUND_INVALID_METADATA, REFUND_INPUT_INVALID, REFUND_EXCEEDS_AMOUNT, TRANSACTION_NOT_REFUNDABLE, REFUND_NOT_FOUND, REFUND_NOT_SUPPORTED, IDEMPOTENCY_LEASE_LOST, REFUND_SERVICE_UNAVAILABLE. New codes may be added; clients must handle unknown values.'
          example: DUPLICATE_ORDER_ID
          type: string
        existingTransactionId:
          description: 'DUPLICATE_ORDER_ID only: the transaction that already uses this orderId'
          example: tr_x8k2p0q5scocndpejk0nud75q
          type: string
        fields:
          description: Invalid or missing buyer contact fields for CUSTOMER_CONTACT_REQUIRED
          example:
          - customer.email
          - customer.country
          items:
            type: string
          type: array
        idempotencyKey:
          description: IDEMPOTENCY_* errors only
          example: 0b6f2c1e-4c7a-4a43-9a51-6a4b1d7e9f10
          type: string
        message:
          example: A transaction with orderId "A-1001" already exists for this merchant
          type: string
        orderId:
          description: DUPLICATE_ORDER_ID only
          example: A-1001
          type: string
        status:
          example: false
          type: boolean
        statusCode:
          example: 409
          type: number
      required:
      - status
      - statusCode
      - errorCode
      - error
      - message
      type: object
    TransactionNotFoundResponseDto:
      properties:
        error:
          example: Not Found
          type: string
        message:
          example: Transaction not found
          type: string
        statusCode:
          example: 404
          type: number
      required:
      - statusCode
      - error
      - message
      type: object
    TransactionStatusResponseDto:
      properties:
        status:
          example: true
          type: boolean
        transaction:
          $ref: '#/components/schemas/MerchantTransactionDto'
      required:
      - status
      - transaction
      type: object
    MerchantTransactionDto:
      properties:
        action:
          description: Transaction action type
          enum:
          - SALE
          - PAYOUT
          - AUTHORIZE
          - REFUND
          - CHARGEBACK
          example: SALE
          type: string
        amount:
          description: Transaction amount in `currency`. Decimal string in major units, padded to the currency exponent ("10.00" EUR, "5000" JPY). Parse with a decimal library, never with parseFloat.
          example: '10.00'
          pattern: ^(0|[1-9]\d{0,19})(\.\d{1,18})?$
          type: string
        createdAt:
          description: Transaction creation timestamp
          example: '2023-12-25T10:00:00.000Z'
          format: date-time
          type: string
        currency:
          description: Transaction currency
          enum:
          - AED
          - AFN
          - ALL
          - AMD
          - ANG
          - AOA
          - ARS
          - AUD
          - AWG
          - AZN
          - BAM
          - BBD
          - BDT
          - BGN
          - BHD
          - BIF
          - BMD
          - BND
          - BOB
          - BRL
          - BSD
          - BTN
          - BWP
          - BYN
          - BZD
          - CAD
          - CDF
          - CHF
          - CLF
          - CLP
          - CNY
          - COP
          - CRC
          - CUC
          - CUP
          - CVE
          - CZK
          - DJF
          - DKK
          - DOP
          - DZD
          - EGP
          - ERN
          - ETB
          - EUR
          - FJD
          - FKP
          - GBP
          - GEL
          - GHS
          - GIP
          - GMD
          - GNF
          - GTQ
          - GYD
          - HKD
          - HNL
          - HRK
          - HTG
          - HUF
          - IDR
          - ILS
          - INR
          - IQD
          - IRR
          - ISK
          - JMD
          - JOD
          - JPY
          - KES
          - KGS
          - KHR
          - KMF
          - KPW
          - KRW
          - KWD
          - KYD
          - KZT
          - LAK
          - LBP
          - LKR
          - LRD
          - LSL
          - LYD
          - MAD
          - MDL
          - MGA
          - MKD
          - MMK
          - MNT
          - MOP
          - MRU
          - MUR
          - MVR
          - MWK
          - MXN
          - MYR
          - MZN
          - NAD
          - NGN
          - NIO
          - NOK
          - NPR
          - NZD
          - OMR
          - PAB
          - PEN
          - PGK
          - PHP
          - PKR
          - PLN
          - PYG
          - QAR
          - RON
          - RSD
          - RUB
          - RWF
          - SAR
          - SBD
          - SCR
          - SDG
          - SEK
          - SGD
          - SHP
          - SLL
          - SOS
          - SRD
          - SSP
          - STN
          - SVC
          - SYP
          - SZL
          - THB
          - TJS
          - TMT
          - TND
          - TOP
          - TRY
          - TTD
          - TWD
          - TZS
          - UAH
          - UGX
          - USD
          - UYU
          - UZS
          - VES
          - VND
          - VUV
          - WST
          - XAF
          - XAG
          - XAU
          - XCD
          - XDR
          - XOF
          - XPF
          - YER
          - ZAR
          - ZMW
          - ZWL
          example: USD
          type: string
        errorCode:
          anyOf:
          - description: 'Payment error/outcome reason. LIVEMODE_MISMATCH means the transaction was DECLINED before PSP dispatch; creation still returns HTTP 201 with status: true. PSP_OUTCOME_UNKNOWN means reconcile or poll; do not create another order. PSP_INPUT_INVALID identifies local legacy-submit serialization/codec failures; PSP_REQUEST_REJECTED identifies a definitive upstream rejection.'
            example: PSP_OUTCOME_UNKNOWN
            type: string
          - type: 'null'
        id:
          description: Transaction ID
          example: tr_xv0p2q5scocndpejk0nud75q
          type: string
        livemode:
          description: True for live payments; false for sandbox payments. Derived from the authenticated API key.
          example: true
          type: boolean
        orderId:
          description: Order ID from merchant system
          example: transaction_123
          type: string
        processingAmount:
          anyOf:
          - description: Amount in `processingCurrency`. Decimal string in major units, padded to the currency exponent ("10.00" EUR, "5000" JPY). Parse with a decimal library, never with parseFloat.
            example: '9.57'
            pattern: ^(0|[1-9]\d{0,19})(\.\d{1,18})?$
            type: string
          - type: 'null'
        processingCurrency:
          description: Currency the PSP is charged in (differs from `currency` with DCC)
          enum:
          - AED
          - AFN
          - ALL
          - AMD
          - ANG
          - AOA
          - ARS
          - AUD
          - AWG
          - AZN
          - BAM
          - BBD
          - BDT
          - BGN
          - BHD
          - BIF
          - BMD
          - BND
          - BOB
          - BRL
          - BSD
          - BTN
          - BWP
          - BYN
          - BZD
          - CAD
          - CDF
          - CHF
          - CLF
          - CLP
          - CNY
          - COP
          - CRC
          - CUC
          - CUP
          - CVE
          - CZK
          - DJF
          - DKK
          - DOP
          - DZD
          - EGP
          - ERN
          - ETB
          - EUR
          - FJD
          - FKP
          - GBP
          - GEL
          - GHS
          - GIP
          - GMD
          - GNF
          - GTQ
          - GYD
          - HKD
          - HNL
          - HRK
          - HTG
          - HUF
          - IDR
          - ILS
          - INR
          - IQD
          - IRR
          - ISK
          - JMD
          - JOD
          - JPY
          - KES
          - KGS
          - KHR
          - KMF
          - KPW
          - KRW
          - KWD
          - KYD
          - KZT
          - LAK
          - LBP
          - LKR
          - LRD
          - LSL
          - LYD
          - MAD
          - MDL
          - MGA
          - MKD
          - MMK
          - MNT
          - MOP
          - MRU
          - MUR
          - MVR
          - MWK
          - MXN
          - MYR
          - MZN
          - NAD
          - NGN
          - NIO
          - NOK
          - NPR
          - NZD
          - OMR
          - PAB
          - PEN
          - PGK
          - PHP
          - PKR
          - PLN
          - PYG
          - QAR
          - RON
          - RSD
          - RUB
          - RWF
          - SAR
          - SBD
          - SCR
          - SDG
          - SEK
          - SGD
          - SHP
          - SLL
          - SOS
          - SRD
          - SSP
          - STN
          - SVC
          - SYP
          - SZL
          - THB
          - TJS
          - TMT
          - TND
          - TOP
          - TRY
          - TTD
          - TWD
          - TZS
          - UAH
          - UGX
          - USD
          - UYU
          - UZS
          - VES
          - VND
          - VUV
          - WST
          - XAF
          - XAG
          - XAU
          - XCD
          - XDR
          - XOF
          - XPF
          - YER
          - ZAR
          - ZMW
          - ZWL
          example: EUR
          type: string
        status:
          description: Transaction status
          enum:
          - CREATED
          - WAIT_APPROVE
          - PROCESSING
          - CANCELED
          - DECLINED
          - SUCCESS
          - EXPIRED
          example: PROCESSING
          type: string
      required:
      - livemode
      - id
      - orderId
      - status
      - action
      - amount
      - currency
      - createdAt
      type: object
    UnauthorizedErrorResponseDto:
      properties:
        error:
          example: Unauthorized
          type: string
        errorCode:
          description: Stable authentication error code when available
          example: API_KEY_ROTATION_REQUIRED
          type: string
        message:
          example: Invalid API key
          type: string
        statusCode:
          description: HTTP status when included by the error handler
          example: 401
          type: number
      required:
      - message
      type: object
  securitySchemes:
    X-API-Key:
      in: header
      name: x-api-key
      type: apiKey
    bearer:
      bearerFormat: Opaque cashier player grant
      scheme: bearer
      type: http