IP · Payment Hub · v3.2
One SaaS layer over every payment provider.
Multi-gateway, multi-currency payments orchestration. Pure software — no custody of funds, settled through regulated escrow partners. PCI handled by your providers. Documented to industry API standards.
SaaS only — not a financial institution.
AMICA Payment Hub does not hold customer funds at any point. All settlements flow through licensed payment providers and regulated escrow accounts. PCI compliance is handled by upstream gateways (Stripe, Checkout.com and others).

Features
What you can build with Payment Hub.
Multi-gateway
Stripe, Checkout.com and additional providers via a single integration.
Multi-currency
Charge, refund and report across currencies with automatic conversion.
Smart routing
Route by region, currency, success rate or operator preference.
Escrow workflows
Marketplace and split-pay flows handled through regulated escrow partners.
Subscriptions & invoicing
Recurring billing, dunning and invoice generation built in.
Reporting
Unified ledger and reconciliation across every gateway you use.
Getting started
Three steps to production.
01
Get API keys
Request access. Receive sandbox + production credentials under mutual NDA.
02
Choose your SDK
Official SDKs in JavaScript, Python, PHP and Java. REST always available.
03
Start building
Issue your first call in sandbox, validate, then promote to production.
Authentication
Bearer tokens over HTTPS.
Authenticate with environment-scoped Bearer API keys. All write operations accept an Idempotency-Key header for safe retries — strongly recommended on payment intents.
- • All requests must be made over TLS 1.2+.
- • API keys are scoped per environment (sandbox / live).
- • Rotate keys at any time from the dashboard — old keys stay valid for 24h.
- • Rate limit: 600 req/min per key, with burst headroom.
GET /v3/payments/health HTTP/1.1 Host: api.amicaholding.com Authorization: Bearer sk_live_•••••••••••••••• Content-Type: application/json Idempotency-Key: 8f7c1c7e-2b5e-4f1a-9c91-2d2e1c80a1f2
Endpoints
REST resources.
Base URL https://api.amicaholding.com/v3/payments
Creates a payment intent and routes it to the optimal gateway. Returns a client secret for client-side confirmation.
Request body
{
"amount": 12000,
"currency": "AED",
"customer_id": "cus_01HZ...",
"routing": "auto",
"metadata": { "order_id": "ord_998" }
}200 OK · response
{
"id": "pi_01HZ...",
"status": "requires_confirmation",
"gateway": "stripe",
"client_secret": "pi_01HZ_secret_...",
"amount": 12000,
"currency": "AED"
}Fetch the current state of a payment intent including gateway and settlement status.
200 OK · response
{
"id": "pi_01HZ...",
"status": "succeeded",
"gateway": "stripe",
"settled_amount": 12000,
"settled_currency": "AED",
"escrow_account": "esc_77a..."
}Refund all or part of a captured payment. Idempotent.
Request body
{
"intent_id": "pi_01HZ...",
"amount": 5000,
"reason": "requested_by_customer"
}200 OK · response
{
"id": "rf_01HZ...",
"status": "pending",
"amount": 5000,
"currency": "AED"
}Instructs the escrow partner to release settled funds to a connected account. AMICA never touches the funds.
Request body
{
"escrow_account": "esc_77a...",
"destination": "acct_op_223",
"amount": 7000,
"currency": "AED"
}200 OK · response
{
"id": "po_01HZ...",
"status": "instructed",
"expected_arrival": "2026-04-28"
}SDK examples
Pick your stack.
import { AmicaClient } from "@amica/sdk";
const amica = new AmicaClient({ apiKey: process.env.AMICA_KEY });
const intent = await amica.payments.intents.create({
amount: 12000,
currency: "AED",
customer_id: "cus_01HZ...",
routing: "auto",
});
console.log(intent.client_secret);Error model
Predictable, structured errors.
All errors follow a single JSON envelope with stable machine codes, human-readable messages and a request ID for support.
{
"error": {
"code": "validation_failed",
"message": "Field 'amount' must be a positive integer.",
"request_id": "req_01HZ7K2A..."
}
}| STATUS | CODE | DESCRIPTION |
|---|---|---|
| 400 | validation_failed | Invalid amount, currency or routing parameters. |
| 401 | unauthenticated | Missing or invalid API key. |
| 402 | payment_failed | Upstream gateway declined the payment. |
| 403 | forbidden | Key does not have permission for this resource. |
| 404 | not_found | Intent, refund or escrow account not found. |
| 409 | idempotency_conflict | Idempotency key reused with a different payload. |
| 429 | rate_limited | Too many requests. Retry with exponential backoff. |
| 500 | internal_error | Unexpected error. Safe to retry idempotent calls. |
Webhooks
Subscribe to events, not polling.
Each webhook is signed with HMAC-SHA256 in the X-AMICA-Signature header. Verify before processing.
payment_intent.succeeded
Sent when an intent is captured by the upstream gateway.
payment_intent.failed
Sent when the gateway rejects or the intent expires.
refund.completed
Sent when a refund is settled.
payout.completed
Sent when escrow releases funds to the destination account.
