Create an incoming payment grant request
Before a client can call most of the Open Payments APIs, it must receive a grant from the appropriate authorization server.
The snippets below enable a client to 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.
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.
Request an incoming payment grant
Initial configuration
If you’re using JavaScript, only do the first step.
- Add
"type": "module"
topackage.json
. - Add the following to
tsconfig.json
{"compilerOptions": {"target": "ES2022","module": "ES2022"}}
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! Get wallet address information
const walletAddress = await client.walletAddress.get({
url: WALLET_ADDRESS,
});
Copied! 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"],
},
],
},
},
);
Copied! Check grant state
if (isPendingGrant(grant)) {
throw new Error("Expected non-interactive grant");
}
Copied! Output
console.log("INCOMING_PAYMENT_ACCESS_TOKEN =", grant.access_token.value);
console.log(
"INCOMING_PAYMENT_ACCESS_TOKEN_MANAGE_URL = ",
grant.access_token.manage,
);
Copied! For TypeScript, run tsx path/to/directory/index.ts
. View full TS source
For JavaScript, run node path/to/directory/index.js
. View full JS source
Import dependencies
use OpenPayments\AuthClient;
use OpenPayments\Config\Config;
Copied! Initialize Open Payments client
$config = new Config($WALLET_ADDRESS, $PRIVATE_KEY, $KEY_ID);
$opClient = new AuthClient($config);
Copied! Get wallet address information
$wallet = $opClient->walletAddress()->get([
"url" => $config->getWalletAddressUrl(),
]);
Copied! Request incoming payment grant
$grant = $opClient->grant()->request(
[
"url" => $wallet->authServer,
],
[
"access_token" => [
"access" => [
[
"type" => "incoming-payment",
"actions" => ["read", "complete", "create", "list"],
],
],
],
"client" => $config->getWalletAddressUrl(),
]
);
Copied! Check grant state
if (!$grant instanceof \OpenPayments\Models\Grant) {
throw new \Error("Expected non-interactive grant");
}
Copied! Output
$output->writeln("INCOMING_PAYMENT_GRANT: " . $grant->access_token->value);
$output->writeln(
"INCOMING_PAYMENT_ACCESS_TOKEN_MANAGE_URL = " . $grant->access_token->manage
);
Copied!