Skip to content
GitHub

Create an incoming payment grant request

Last reviewed: Nov 3, 2026

The Grant Request API lets you request a grant for incoming payment, outgoing payment, and quote resources.

Before your client can call most of the Open Payments APIs, it must receive a grant from the appropriate authorization server.

The code snippets below let an authenticated client request a grant for an incoming payment. The request to the authorization server must indicate the incoming-payment and the actions the client wants to take at the resource server.

We recommend you create an account on the Interledger test network. Creating an account allows you to test your client against the Open Payments APIs by using an ILP-enabled wallet funded with play money.

Authenticated client required
Prerequisites(opens in a new tab)
Initial configuration

If you’re using JavaScript, only do the first step.

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

  2. Add the following to tsconfig.json

    {
    "compilerOptions": {
    "target": "ES2022",
    "module": "ES2022"
    }
    }
// Import dependencies
import {
createAuthenticatedClient,
isFinalizedGrantWithAccessToken
} from '@interledger/open-payments'
// Initialize client
const client = await createAuthenticatedClient({
walletAddressUrl: CLIENT_WALLET_ADDRESS,
privateKey: PRIVATE_KEY_PATH,
keyId: KEY_ID
})
// Get wallet address information
const walletAddress = await client.walletAddress.get({
url: WALLET_ADDRESS
})
// Request incoming payment grant
const grant = await client.grant.request(
{
url: walletAddress.authServer
},
{
access_token: {
access: [
{
type: 'incoming-payment',
actions: ['list', 'read', 'read-all', 'complete', 'create']
}
]
}
}
)
// Check grant state
if (!isFinalizedGrantWithAccessToken(grant)) {
throw new Error('Expected finalized grant')
}
// Output
console.log('INCOMING_PAYMENT_ACCESS_TOKEN =', grant.access_token.value)
console.log(
'INCOMING_PAYMENT_ACCESS_TOKEN_MANAGE_URL = ',
grant.access_token.manage
)