Single Instant Payment
Integrate a one-off immediate payment (SingleInstantPayment).
Integration guide
Goal: Collect one amount from a payer immediately after bank authorization, using the SingleInstantPayment type.
Estimated time: 15 minutes
Prerequisites
- Sandbox credentials (
appId,apiKey,tenant) - A registered creditor bank account
When to use
- E-commerce checkout
- Invoice payment links
- One-time service fees
Payment type: SingleInstantPayment
Regions: UAE (primary), KSA (SINGLE_DOMESTIC), Bahrain (domestic PIS)
Integration summary
Create payment request
Set paymentType to SingleInstantPayment. Put amount and currency inside instructions, not at the root of the body.
curl -X POST https://api.sandbox.tryspare.ae/payment-requests \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "x-tenant: UAE" \
-H "Content-Type: application/json" \
-d '{
"type": "SingleInstantPayment",
"creditorType": "MERCHANT",
"creditorReference": "Order #9876",
"merchantReference": "order-9876",
"purpose": "GDDS",
"creditorAccount": {
"schemeName": "IBAN",
"identification": "AE070331234567890123456",
"name": "Acme Trading LLC"
},
"instructions": {
"amount": { "amount": "100.00", "currency": "AED" }
}
}'await client.paymentRequests.create({
paymentType: "SingleInstantPayment",
instructions: { amount: 100_00, currency: "AED" },
// creditorAccount, creditorReference, redirectUrl, ...
});client.payment_requests.create(
payment_type="SingleInstantPayment",
instructions={"amount": 100_00, "currency": "AED"},
# creditor_account, creditor_reference, redirect_url, ...
)client.paymentRequests().create(
CreatePaymentRequest.builder()
.paymentType("SingleInstantPayment")
.instructions(PaymentInstructions.builder().amount(100_00).currency("AED").build())
// creditorAccount, creditorReference, redirectUrl, ...
.build());await client.PaymentRequests.CreateAsync(new CreatePaymentRequest
{
PaymentType = "SingleInstantPayment",
Instructions = new PaymentInstructions { Amount = 100_00, Currency = "AED" },
// CreditorAccount, CreditorReference, RedirectUrl, ...
});client.PaymentRequests.Create(ctx, &spareapi.CreatePaymentRequest{
PaymentType: "SingleInstantPayment",
Instructions: &spareapi.PaymentInstructions{Amount: 100_00, Currency: "AED"},
// CreditorAccount, CreditorReference, RedirectUrl, ...
})Obtain consent
Create consent from the payment request and redirect the payer to authorizationUrl, or use Spare Link to host bank UI.
Verify and fulfill
Poll consent/payment status or use webhooks. Fulfill only after Authorised + payment confirmation.
Key takeaways
- This is the path covered end-to-end in Payment.
- Amount lives in
instructions; root-level amount fields aren't accepted. - Same consent objects whether you use direct API or Spare Link.