Skip to content

Create an incoming payment

Once an authorized client obtains the requisite grant from the recipient’s authentication server, the client must create an incoming payment resource before any payments can be sent to the recipient’s wallet address.

These code snippets create an incoming payment of $10 USD at a given wallet address, allowing subsequent payments to be sent to that wallet address up to $10 USD.

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.

Create an incoming payment resource

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,

Create incoming payment

const incomingPayment = await client.incomingPayment.create(
    url: new URL(WALLET_ADDRESS).origin,
    walletAddress: WALLET_ADDRESS,
    incomingAmount: {
      value: "1000",
      assetCode: "USD",
      assetScale: 2,
    expiresAt: new Date( + 60_000 * 10).toISOString(),


console.log("INCOMING PAYMENT URL =",;

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

View full source