Xendit

Xendit is a payments infrastructure provider for Southeast Asia, giving businesses in Indonesia, the Philippines, and the wider region a single REST API to accept payments, disburse funds, and manage money movement. The unified Payments API accepts virtual accounts, e-wallets (OVO, DANA, GoPay, ShopeePay, GCash, GrabPay, Maya), QR (QRIS / QR Ph), cards, direct debit, and retail outlets through Payment Requests and Payment Tokens; complementary APIs cover hosted Invoices, Payouts / disbursements, Balance, Transactions, Customers, and Refunds. All requests are authenticated with a secret API key over HTTP Basic against the base host https://api.xendit.co.

Xendit publishes 8 APIs on the APIs.io network, including Payment Requests API, Payment Tokens API, Invoices API, and 5 more. Tagged areas include Payments, Fintech, Payment Gateway, Southeast Asia, and Indonesia.

Xendit’s developer surface includes authentication, documentation, engineering blog, and 8 more developer resources.

36.3/100 thin ▬ flat Agent 48/100 agent ready Full breakdown ↓
scored 2026-07-20 · rubric v0.4
8 APIs 0 Features
PaymentsFintechPayment GatewaySoutheast AsiaIndonesiaPhilippinesDisbursementsE-WalletVirtual AccountsCardsFinancial Infrastructure

API Rating

API Evangelist API Evangelist Rating How this is scored →
scored 2026-07-20 · rubric v0.4
Composite quality — 36.3/100 · thin
Contract Quality 14.6 / 25
Developer Ergonomics 4.3 / 20
Commercial Clarity 5.8 / 20
Operational Transparency 4.8 / 13
Governance 0.0 / 12
Discoverability 6.8 / 10
Agent readiness — 48/100 · agent ready
Machine-Readable Contract 18 / 18
Agentic Access Contract 15 / 15
MCP Server 0 / 12
Machine-Readable Auth 10 / 10
Idempotency 0 / 9
Stable Error Semantics 0 / 8
Request/Response Examples 0 / 7
Rate-Limit Signaling 7 / 7
Typed Event Surface 0 / 6
Agent Skills 0 / 5
Well-Known Catalog 0 / 4
Consent & Bot Identity 0 / 3
Improve this rating by publishing the missing artifacts — every area above can be raised, and the full rubric is at apis.io/rating/. This rating is computed from github.com/api-evangelist/xendit: open an issue to ask a question, or submit a pull request to add artifacts. Want it done for you? Prioritized profiling — $2,500 →

APIs

Xendit Payment Requests API

The unified Payments API surface. Create, retrieve, and cancel payment requests that charge end users across every Xendit channel - virtual accounts, e-wallets, QR (QRIS / QR Ph...

Xendit Payment Tokens API

Save an end user's payment method as a reusable payment token for future and recurring transactions, then reference it from a payment request. Part of the v3 Payments API and ga...

Xendit Invoices API

Create Xendit-hosted invoices / payment links that present every enabled payment channel on a single checkout page. Create an invoice, retrieve it, list invoices, and expire an ...

Xendit Payouts API

Disburse funds to bank accounts and e-wallets across the region. Create a payout, retrieve it by ID, and cancel a pending payout. The v3 Payouts API supersedes the legacy Disbur...

Xendit Balance API

Retrieve your Xendit account balance for a given account type (CASH or HOLDING) and currency, optionally at a point in time. Supports the multi-currency balances Xendit holds ac...

Xendit Transactions API

List the money-movement transactions on your account with rich filters (type, status, channel, currency, amount, created/updated date ranges) and cursor pagination, and retrieve...

Xendit Customers API

Create and manage customer records - individual or business - that can be attached to payment requests, payment tokens, and payouts. Create a customer, list customers by referen...

Xendit Refunds API

Initiate a full or partial refund against a successful payment request and retrieve refund status. Refund webhooks notify your systems as the refund settles.

Collections

Xendit API

OPEN

Pricing Plans

Xendit Plans Pricing

2 plans

PLANS

Rate Limits

Xendit Rate Limits

4 limits

RATE LIMITS

FinOps

Xendit Finops

FINOPS

Resources

Documentation 1

Reference material describing how the API behaves

Agent Surfaces 1

MCP servers, agent skills, and machine-readable catalogs

Build 1

SDKs, sample code, and the tooling you integrate with

Access & Security 2

Authentication, authorization, and security posture

Operate 1

Status, limits, changes, and where to get help

Commercial 2

Pricing, plans, and the legal terms of use

Company 3

The organization behind the API

Source (apis.yml)

apis.yml Raw ↑
opencollection: 1.0.0
info:
  name: Xendit API
  version: '1.0'
request:
  auth:
    type: basic
    username: '{{secretApiKey}}'
    password: ''
items:
- info:
    name: Payment Requests
    type: folder
  items:
  - info:
      name: Create a payment request.
      type: http
    http:
      method: POST
      url: https://api.xendit.co/v3/payment_requests
      headers:
      - name: api-version
        value: '2024-11-11'
      - name: Content-Type
        value: application/json
      body:
        type: json
        data: "{\n  \"reference_id\": \"order-123\",\n  \"currency\": \"IDR\",\n  \"amount\": 15000,\n  \"country\": \"ID\"\
          ,\n  \"payment_method\": {}\n}"
    docs: Charges an end user through a chosen channel (VA, e-wallet, QR, card, direct debit, retail outlet).
  - info:
      name: Get a payment request.
      type: http
    http:
      method: GET
      url: https://api.xendit.co/v3/payment_requests/:payment_request_id
      headers:
      - name: api-version
        value: '2024-11-11'
      params:
      - name: payment_request_id
        value: ''
        type: path
        description: The 39-character payment request ID.
    docs: Retrieves the status of a payment request by ID.
  - info:
      name: Cancel a payment request.
      type: http
    http:
      method: POST
      url: https://api.xendit.co/v3/payment_requests/:payment_request_id/cancel
      headers:
      - name: api-version
        value: '2024-11-11'
      params:
      - name: payment_request_id
        value: ''
        type: path
        description: The 39-character payment request ID.
    docs: Cancels a payment request, preventing the end user from completing payment.
- info:
    name: Payment Tokens
    type: folder
  items:
  - info:
      name: Create a payment token.
      type: http
    http:
      method: POST
      url: https://api.xendit.co/v3/payment_tokens
      headers:
      - name: api-version
        value: '2024-11-11'
      - name: Content-Type
        value: application/json
      body:
        type: json
        data: "{\n  \"reference_id\": \"cust-token-1\",\n  \"country\": \"ID\",\n  \"currency\": \"IDR\",\n  \"channel_code\"\
          : \"DANA\",\n  \"channel_properties\": {}\n}"
    docs: Saves an end user's payment method as a reusable payment token for future transactions.
- info:
    name: Invoices
    type: folder
  items:
  - info:
      name: Create an invoice.
      type: http
    http:
      method: POST
      url: https://api.xendit.co/v2/invoices
      headers:
      - name: Content-Type
        value: application/json
      body:
        type: json
        data: "{\n  \"external_id\": \"invoice-001\",\n  \"amount\": 100000,\n  \"payer_email\": \"customer@example.com\"\
          ,\n  \"description\": \"Test invoice\"\n}"
    docs: Creates a Xendit-hosted invoice / payment link presenting all enabled channels.
  - info:
      name: List invoices.
      type: http
    http:
      method: GET
      url: https://api.xendit.co/v2/invoices?limit=10
      params:
      - name: limit
        value: '10'
        type: query
        description: Results per page.
    docs: Lists invoices, filterable by external_id and status. (Modeled representative.)
  - info:
      name: Get an invoice.
      type: http
    http:
      method: GET
      url: https://api.xendit.co/v2/invoices/:invoice_id
      params:
      - name: invoice_id
        value: ''
        type: path
        description: The Xendit invoice ID.
    docs: Retrieves an invoice by ID. (Modeled representative.)
  - info:
      name: Expire an invoice.
      type: http
    http:
      method: POST
      url: https://api.xendit.co/invoices/:invoice_id/expire!
      params:
      - name: invoice_id
        value: ''
        type: path
        description: The Xendit invoice ID.
    docs: Manually expires an outstanding invoice. (Modeled representative.)
- info:
    name: Payouts
    type: folder
  items:
  - info:
      name: Create a payout.
      type: http
    http:
      method: POST
      url: https://api.xendit.co/v3/payouts
      headers:
      - name: Idempotency-key
        value: unique-key-123
      - name: Content-Type
        value: application/json
      body:
        type: json
        data: "{\n  \"reference_id\": \"payout-001\",\n  \"channel_code\": \"ID_BCA\",\n  \"channel_properties\": {},\n  \"\
          amount\": 50000,\n  \"currency\": \"IDR\"\n}"
    docs: Disburses funds to a bank account or e-wallet.
  - info:
      name: Get a payout.
      type: http
    http:
      method: GET
      url: https://api.xendit.co/v3/payouts/:payout_id
      params:
      - name: payout_id
        value: ''
        type: path
        description: The payout ID.
    docs: Retrieves a payout by ID.
  - info:
      name: Cancel a payout.
      type: http
    http:
      method: POST
      url: https://api.xendit.co/v3/payouts/:payout_id/cancel
      params:
      - name: payout_id
        value: ''
        type: path
        description: The payout ID.
    docs: Cancels a payout not yet disbursed. (Modeled representative.)
- info:
    name: Balance
    type: folder
  items:
  - info:
      name: Get balance.
      type: http
    http:
      method: GET
      url: https://api.xendit.co/balance?account_type=CASH&currency=IDR
      params:
      - name: account_type
        value: CASH
        type: query
        description: CASH or HOLDING.
      - name: currency
        value: IDR
        type: query
        description: ISO 4217 currency code.
    docs: Retrieves the account balance for an account type and currency.
- info:
    name: Transactions
    type: folder
  items:
  - info:
      name: List transactions.
      type: http
    http:
      method: GET
      url: https://api.xendit.co/transactions?limit=10
      params:
      - name: limit
        value: '10'
        type: query
        description: Results per page.
    docs: Lists money-movement transactions with filters and cursor pagination.
  - info:
      name: Get a transaction.
      type: http
    http:
      method: GET
      url: https://api.xendit.co/transactions/:transaction_id
      params:
      - name: transaction_id
        value: ''
        type: path
        description: The transaction ID.
    docs: Retrieves a single transaction by ID. (Modeled representative.)
- info:
    name: Customers
    type: folder
  items:
  - info:
      name: Create a customer.
      type: http
    http:
      method: POST
      url: https://api.xendit.co/customers
      headers:
      - name: api-version
        value: '2020-10-31'
      - name: Content-Type
        value: application/json
      body:
        type: json
        data: "{\n  \"reference_id\": \"cust-001\",\n  \"type\": \"INDIVIDUAL\",\n  \"individual_detail\": { \"given_names\"\
          : \"Jane\", \"surname\": \"Doe\" }\n}"
    docs: Creates a customer record for later use with a payments endpoint.
  - info:
      name: List customers.
      type: http
    http:
      method: GET
      url: https://api.xendit.co/customers?reference_id=cust-001
      headers:
      - name: api-version
        value: '2020-10-31'
      params:
      - name: reference_id
        value: cust-001
        type: query
        description: The customer reference ID.
    docs: Retrieves customers matching the given reference_id.
  - info:
      name: Get a customer.
      type: http
    http:
      method: GET
      url: https://api.xendit.co/customers/:customer_id
      params:
      - name: customer_id
        value: ''
        type: path
        description: The customer ID.
    docs: Retrieves a customer by ID. (Modeled representative.)
  - info:
      name: Update a customer.
      type: http
    http:
      method: PATCH
      url: https://api.xendit.co/customers/:customer_id
      headers:
      - name: Content-Type
        value: application/json
      params:
      - name: customer_id
        value: ''
        type: path
        description: The customer ID.
      body:
        type: json
        data: '{}'
    docs: Updates a customer record. (Modeled representative.)
- info:
    name: Refunds
    type: folder
  items:
  - info:
      name: Create a refund.
      type: http
    http:
      method: POST
      url: https://api.xendit.co/refunds
      headers:
      - name: Content-Type
        value: application/json
      body:
        type: json
        data: "{\n  \"payment_request_id\": \"pr-xxxxxxxx\",\n  \"reason\": \"REQUESTED_BY_CUSTOMER\",\n  \"amount\": 15000\n\
          }"
    docs: Initiates a full or partial refund for a successful payment request.
  - info:
      name: Get a refund.
      type: http
    http:
      method: GET
      url: https://api.xendit.co/refunds/:refund_id
      params:
      - name: refund_id
        value: ''
        type: path
        description: The refund ID.
    docs: Retrieves a refund by ID. (Modeled representative.)
bundled: true