Get started
Quickstart
From an API key to your first protected payment, in five steps. The dashboard has the same guide with your account’s details filled in.
1. Create an API key
In the dashboard, open Developers › API keys and create a key. The full key is shown once: store it in your server’s secret manager and expose it to your server as PP_API_KEY.
ImportantAPI keys are for servers only. Requests that come from a browser are refused with browser_request.
2. Make your first call
GET /me tells you which business and environment the key acts for.
curl https://indeficient.com/api/v1/me \
-H "Authorization: Bearer $PP_API_KEY"{
"object": "business",
"id": "biz_m2xk7q4vtc5nhaw3rjpe",
"name": "Northwind Goods",
"environment": "test",
"apiKey": {
"id": "k5wq3zn7rt2hxmva"
}
}3. Create a payment intent
Describe the payment. amount is a string in the asset’s smallest unit: with 6 decimals, 25000000 is 25.00. Send an Idempotency-Key so a retried request never creates a second intent.
curl https://indeficient.com/api/v1/payment-intents \
-H "Authorization: Bearer $PP_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order_1042" \
-d '{"recipient":"RECIPIENT_WALLET_ADDRESS","amount":"25000000","asset":"6gpWDzHJF36N3zxKJKFTGvR1WHF5uvTBqocNPytCmdQZ","protectionPeriod":"sevenDays","merchantReference":"order_1042","metadata":{"customer_id":"cus_8812"}}'{
"object": "payment_intent",
"id": "pi_test_k3v7q2mz5hxa4wde6rtn2bpy",
"status": "requires_payment",
"recipient": "GkphMxyen3SSuENVGSTrTRMuMuMEn99jowYXe5SNJea5",
"amount": "25000000",
"asset": "6gpWDzHJF36N3zxKJKFTGvR1WHF5uvTBqocNPytCmdQZ",
"protectionPeriod": "sevenDays",
"merchantReference": "order_1042",
"metadata": {
"customer_id": "cus_8812"
},
"paymentId": "9182736455463728190",
"payment": null,
"environment": "test",
"createdAt": "2026-10-10T14:02:11.000Z",
"expiresAt": "2026-10-11T14:02:11.000Z",
"canceledAt": null,
"checkoutUrl": "https://indeficient.com/pay/i/pi_test_k3v7q2mz5hxa4wde6rtn2bpy"
}4. The buyer pays
The hosted checkout is the quickest way to take the payment: send the buyer to checkoutUrl. They connect a wallet, review the payment, and sign it. The buyer’s wallet must hold the amount plus the buyer protection fee in the payment’s asset, and enough of the network’s native token for transaction fees. The recipient’s wallet cannot pay its own intent.
Once the payment is confirmed, it is linked to the intent and the intent’s status becomes protected.
5. Follow the payment
Add a webhook endpoint in Developers › Webhooks, send it a test event, and verify the signature. You can also read the payment directly:
curl "https://indeficient.com/api/v1/payments?intent=pi_test_…" \
-H "Authorization: Bearer $PP_API_KEY"Fulfil the order on payment.released. If the buyer disputes, the payment stays held until the dispute is resolved; see Disputes.