Payment Sessions API
POST /api/v1/payment-sessions
Create a new payment session.
Authorization
Authorization: Bearer <MERCHANT_API_TOKEN>
Request Body
{
requestId: string; // Idempotency key
amount: string; // e.g., "10.00"
currency: string; // "USD"
}Response
{
paymentSessionId: string;
paymentSessionToken: string;
}Example
curl -X POST https://api.grain.inc/api/v1/payment-sessions \
-H "Authorization: Bearer <MERCHANT_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{ "requestId":"req-001", "amount":"10.00", "currency":"USD" }'GET /api/v1/payment-sessions/:paymentSessionId
Retrieve details of a payment session.
Authorization
Authorization: Bearer <paymentSessionToken>
Response
{
paymentSessionId: string;
createdAt: string; // ISO 8601
status: "CREATED" | "PENDING" | "FUNDED" | "CANCELED" | "CAPTURING" | "SUCCEEDED" | "ERROR";
amount: string;
currency: string;
// PENDING or later
oneTimeWalletAddress?: string;
userAddress?: string;
network?: string; // "ETHEREUM" | "POLYGON" | "SEPOLIA"
tokenSymbol?: string; // e.g., "USDC", "USD1"
userSubmittedTransactionHash?: string;
// FUNDED or later
fundingTransactionHash?: string;
capturableAmount?: string;
capturedAmount?: string;
refundedAmount?: string;
captures: Array<{
paymentCaptureId: string;
createdAt: string; // ISO 8601
finalCapture: boolean;
captureAmount: string;
refundAmount: string;
status: "CAPTURING" | "CAPTURED" | "ERROR";
transactionHash?: string;
error?: string;
}>;
}Example
curl -X GET https://api.grain.inc/api/v1/payment-sessions/ps_123 \
-H "Authorization: Bearer <paymentSessionToken>"Last updated

