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).

Payment Hub

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.
Authorization header
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

POST/v3/payments/intentsCreate a payment intent

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"
}
GET/v3/payments/intents/{id}Retrieve an intent

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..."
}
POST/v3/payments/refundsIssue a refund

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"
}
POST/v3/payments/payoutsTrigger an escrow payout

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.

JavaScript · /v3/payments · v3.2
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 envelope
{
  "error": {
    "code": "validation_failed",
    "message": "Field 'amount' must be a positive integer.",
    "request_id": "req_01HZ7K2A..."
  }
}
STATUSCODEDESCRIPTION
400validation_failedInvalid amount, currency or routing parameters.
401unauthenticatedMissing or invalid API key.
402payment_failedUpstream gateway declined the payment.
403forbiddenKey does not have permission for this resource.
404not_foundIntent, refund or escrow account not found.
409idempotency_conflictIdempotency key reused with a different payload.
429rate_limitedToo many requests. Retry with exponential backoff.
500internal_errorUnexpected 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.