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 the test wallet. Creating an account allows you to test your client against the Open Payments APIs by using an ILP-enabled wallet funded with play money.
Create an incoming payment resource
Prerequisites
- Node 20
- A package manager such as NPM or PNPM
-
Open Payments SDK
- TSX
Additional configuration
Add "type": "module"
to package.json
Add the following to tsconfig.json
{ "compilerOptions": { "target": "ES2022", "module": "ES2022" }}
Import dependencies
Import createAuthenticatedClient
from the Open Payments SDK package.
Import dependencies
import { createAuthenticatedClient } from "@interledger/open-payments";
Copied! Create an authenticated Open Payments client
Create an Open Payments-authenticated client by providing the following properties:
walletAddressURL
: your Open Payments-enabled wallet address that your client will use to authenticate itself to one or more authorization servers.privateKey
: the EdDSA-Ed25519 key or preferably the absolute or relative file path to the key that is bound to your wallet address. A public key signed with this private key must be made available as a public JWK document at{walletAddressUrl}/jwks.json
url.keyId
: the identifier of the private key and the corresponding public key.
Initialize Open Payments client
const client = await createAuthenticatedClient({
walletAddressUrl: WALLET_ADDRESS,
privateKey: PRIVATE_KEY_PATH,
keyId: KEY_ID,
});
Copied! Get started
Import dependencies
import { createAuthenticatedClient } from "@interledger/open-payments";
Copied! Initialize Open Payments client
const client = await createAuthenticatedClient({
walletAddressUrl: WALLET_ADDRESS,
privateKey: PRIVATE_KEY_PATH,
keyId: KEY_ID,
});
Copied! Create incoming payment
const incomingPayment = await client.incomingPayment.create(
{
url: new URL(WALLET_ADDRESS).origin,
accessToken: INCOMING_PAYMENT_ACCESS_TOKEN,
},
{
walletAddress: WALLET_ADDRESS,
incomingAmount: {
value: "1000",
assetCode: "USD",
assetScale: 2,
},
expiresAt: new Date(Date.now() + 60_000 * 10).toISOString(),
},
);
Copied! Output
console.log("INCOMING PAYMENT URL =", incomingPayment.id);
Copied! Run tsx path/to/directory/index.ts
.
Prerequisites
- Node 20 or higher
- A package manager such as NPM or PNPM
-
Open Payments SDK
Additional configuration
Add "type": "module"
to package.json
Get started
Import dependencies
import { createAuthenticatedClient } from "@interledger/open-payments";
Copied! Initialize Open Payments client
const client = await createAuthenticatedClient({
walletAddressUrl: WALLET_ADDRESS,
privateKey: PRIVATE_KEY_PATH,
keyId: KEY_ID,
});
Copied! Create incoming payment
const incomingPayment = await client.incomingPayment.create(
{
url: new URL(WALLET_ADDRESS).origin,
accessToken: INCOMING_PAYMENT_ACCESS_TOKEN,
},
{
walletAddress: WALLET_ADDRESS,
incomingAmount: {
value: "1000",
assetCode: "USD",
assetScale: 2,
},
expiresAt: new Date(Date.now() + 60_000 * 10).toISOString(),
},
);
Copied! Output
console.log("INCOMING PAYMENT URL =", incomingPayment.id);
Copied! Run node path/to/directory/index.js
.