---
title: "Approve a pending incoming payment"
method: POST
path: "/transactions/{transactionId}/approve"
tags: ["Transactions"]
---

# Approve a pending incoming payment

`POST /transactions/{transactionId}/approve`

## Request

- Base URL: `https://api.uma.money/umaaas/2025-05-15`
- URL: `https://api.uma.money/umaaas/2025-05-15/transactions/{transactionId}/approve`
- Auth: HTTP basic

Approve a pending incoming payment that was previously acknowledged with a 202 response.
This endpoint allows platforms to asynchronously approve payments after async processing.

## Path parameters

- `transactionId` string, required

## Request body

- object
  - `receiverUserInfo` object: Information about the recipient, provided by the platform if requested in the original webhook via `requestedReceiverUserInfoFields`.

## Response `200`

Payment approved successfully

- IncomingTransaction
  - `id` string, required: Unique identifier for the transaction
  - `status` 'CREATED' | 'PENDING' | 'PROCESSING' | 'COMPLETED' | 'REJECTED' | 'FAILED' | 'REFUNDED' | 'EXPIRED', required: Status of a payment transaction
  - `type` 'INCOMING' | 'OUTGOING', required: Type of transaction (incoming payment or outgoing payment)
  - `senderUmaAddress` string, required: UMA address of the payment sender
  - `receiverUmaAddress` string, required: UMA address of the payment recipient
  - `userId` string, required: System ID of the user (sender for outgoing, recipient for incoming)
  - `platformUserId` string, required: Platform-specific ID of the user (sender for outgoing, recipient for incoming)
  - `settledAt` string, date-time: When the payment was or will be settled
  - `createdAt` string, date-time: When the transaction was created
  - `description` string: Optional memo or description for the payment
  - `counterpartyInformation` object: Additional information about the counterparty, if available
  - `receivedAmount` CurrencyAmount, required
    - `amount` integer, required: Amount in the smallest unit of the currency (e.g., cents for USD/EUR, satoshis for BTC)
    - `currency` Currency, required
      - `code` string: Three-letter currency code (ISO 4217) for fiat currencies. Some cryptocurrencies may use their own ticker symbols (e.g. "SAT" for satoshis, "USDC" for USDCoin, etc.)
      - `name` string: Full name of the currency
      - `symbol` string: Symbol of the currency
      - `decimals` integer: Number of decimal places for the currency
  - `reconciliationInstructions` ReconciliationInstructions
    - `reference` string, required: Unique reference code that must be included with the payment to match it with the correct incoming transaction
  - `rateDetails` IncomingRateDetails: Details about the rate and fees for an incoming transaction.
    - `umaaasMultiplier` number, double, required: The underlying multiplier from the mSATS to the receiving currency, including variable fees.
    - `umaaasFixedFee` integer, required: The fixed fee charged by the UMAaaS product to execute the quote in the smallest unit of the receiving currency (eg. cents).
    - `umaaasVariableFeeRate` number, double, required: The variable fee rate charged by the UMAaaS product to execute the quote as a percentage of the receiving currency amount.
    - `umaaasVariableFeeAmount` number, required: The variable fee amount charged by the UMAaaS product to execute the quote in the smallest unit of the receiving currency (eg. cents). This is the receiving amount times umaaasVariableFeeRate.
  - `failureReason` 'LNURLP_FAILED' | 'PAY_REQUEST_FAILED' | 'PAYMENT_APPROVAL_WEBHOOK_ERROR' | 'PAYMENT_APPROVAL_TIMED_OUT' | 'OFFRAMP_FAILED' | 'MISSING_MANDATORY_PAYEE_DATA' | 'QUOTE_EXPIRED' | 'QUOTE_EXECUTION_FAILED': Reason for failure of an incoming transaction. This is used to provide more context on why a transaction failed. If the transaction is not in a failed state, this field is omitted.

## Other responses

- `400`: Bad request - Invalid parameters or payment cannot be approved
- `401`: Unauthorized
- `404`: Transaction not found
- `409`: Conflict - Payment is not in a pending state or has already been processed or timed out.
- `500`: Internal service error

## Changes

> 16 revisions in range; 1 not diffed.

- **2026-10-13** `723ce326c29c`: 3 info
  - removed the `INVALID_PAYREQ_RESPONSE` enum value from the `code` response property for the response status `400`
  - removed the `LOOKUP_REQUEST_FAILED` enum value from the `code` response property for the response status `400`
  - removed the `QUOTE_REQUEST_FAILED` enum value from the `code` response property for the response status `400`

[Operation history](https://skmtc.dev/lightsparkdev/apis/uma-as-a-service-umaaas-api/changes/transactions/:transactionId/approve/post.md)

---

[API](https://skmtc.dev/lightsparkdev/apis/uma-as-a-service-umaaas-api.md) - [All operations](https://skmtc.dev/lightsparkdev/apis/uma-as-a-service-umaaas-api/llms.txt) - [OpenAPI document](https://skmtc.dev/lightsparkdev/apis/uma-as-a-service-umaaas-api/revisions/aa2c7b1aaf8a?raw)
