Skip to content

Complete an incoming payment

An authorized client can complete an unexpired incoming payment to indicate it will not send any additional payments to the wallet address.

These code snippets pass the wallet address and incoming payment URL to the resource server and mark the payment as completed.

Before you begin

We recommend creating a wallet account on Rafiki.Money, a test wallet provider that’s part of the Interledger testnet. Creating an account allows you to test your client against the Open Payments API using an ILP-enabled wallet funded with play money.

Mark an incoming payment as complete

Additional configuration

Add "type": "module" to package.json

Add the following to tsconfig.json

"compilerOptions": {
"target": "ES2022",
"module": "ES2022"

Get started

Import dependencies

import { createAuthenticatedClient } from "@interledger/open-payments";

Initialize Open Payments client

const client = await createAuthenticatedClient({
  walletAddressUrl: WALLET_ADDRESS,
  privateKey: PRIVATE_KEY_PATH,
  keyId: KEY_ID,

Complete incoming payment

const incomingPayment = await client.incomingPayment.complete({


console.log("INCOMING PAYMENT:", JSON.stringify(incomingPayment, null, 2));

Run tsx path/to/directory/index.ts.

View full source