Skip to content
SiloraSilora

Get started

Quickstart

Silora connects you once to multiple global payment networks. This walkthrough goes from a sandbox key to a settled payment, in the order a real integration is built. Every call here works against https://api.sandbox.silorapay.ai/v1.

Before you start

  • A sandbox API key pair from the Client Portal, API keys screen. The key id goes in X-Silora-Key; the secret never leaves your server and is used only to sign.
  • One HTTPS endpoint that can receive webhooks. Settlement arrives there, not on the POST response.
  • The corridor you intend to serve — a {fromCountry}-{toCountry} pair such as US-IN.

The shape of an integration

  1. 1

    Ask the corridor what it wants

    GET /corridors/{pair}/requirements returns the conditional field schema for that corridor. Build your payload from the answer instead of from guesswork. See Corridor requirements.

  2. 2

    Quote

    POST /payments/quote resolves provider, FX and fees and creates nothing. Optional, and worth doing whenever a human will see a number before approving.

  3. 3

    Create the payment

    POST /payments returns 202 Accepted with a uetr. The creditor rides inline in this same call. Acceptance is not execution.

  4. 4

    Receive the outcome

    A payment.settled or payment.failed webhook delivers the terminal state. See Webhooks.

Call 1 — what does this corridor demand?

curl -G 'https://api.sandbox.silorapay.ai/v1/corridors/US-IN/requirements' \
  --data-urlencode 'currency=USD' \
  --data-urlencode 'amount=24500' \
  --data-urlencode 'creditorType=ORGA' \
  -H "X-Silora-Key: $SILORA_KEY_ID" \
  -H "X-Silora-Timestamp: $TS" \
  -H "X-Silora-Signature: $SIG"
Requirements are threshold-dependent, so pass the amount you intend to send.

Call 2 — create the payment

The creditor rides inline — name, account and agent, straight from what your core banking or customer information system already holds. Silora has no directory to check first.

import { randomUUID } from 'node:crypto';
import { sign } from './silora-signer';

const PATH = '/payments';
const payload = JSON.stringify({
  endToEndId: 'INV-2026-4471',
  provider: 'AUTO',
  instructedAmount: { currency: 'USD', value: '24500.00' },
  debtorAccount: { scheme: 'US_ACCOUNT', id: '8901234567' },
  creditor: { type: 'ORGA', name: 'Meridian Textiles Pvt Ltd' },
  creditorAccount: { scheme: 'IN_ACCOUNT', id: '50100234567890', currency: 'INR' },
  creditorAgent: { clearingSystem: 'INIFSC', clearingSystemMemberId: 'HDFC0000123', bic: 'HDFCINBBXXX' },
  purpose: 'P0103',
  remittanceInformation: { unstructured: ['Invoice INV-2026-4471'] },
  requestedExecutionDate: '2026-08-22',
  metadata: { costCentre: 'CC-EMEA-07', poNumber: 'PO-88213' },
});

const { timestamp, signature } = sign({
  secret: process.env.SILORA_KEY_SECRET!,
  method: 'POST',
  path: PATH,
  body: payload,
});

const response = await fetch('https://api.sandbox.silorapay.ai/v1' + PATH, {
  method: 'POST',
  headers: {
    'X-Silora-Key': process.env.SILORA_KEY_ID!,
    'X-Silora-Timestamp': timestamp,
    'X-Silora-Signature': signature,
    'Idempotency-Key': randomUUID(),
    'Content-Type': 'application/vnd.silora.simple+json',
  },
  body: payload,
});

const accepted = await response.json();
console.log(response.status, accepted.uetr);   // 202 7a9c1e02-...

Call 3 — receive the outcome

Register an endpoint once, then let Silora push. Subscribe to the three terminal events at minimum: payment.settled, payment.failed, payment.returned.

POST /v1/webhooks/endpoints

{
  "url": "https://treasury.example.com/hooks/silora",
  "events": ["payment.settled", "payment.failed", "payment.returned"],
  "description": "Treasury settlement feed"
}

The endpoint registration response returns a secret once. Store it; it is the HMAC key for verifying every delivery.

What to build next

  • Authentication — signing, clock skew and key rotation.
  • Corridor requirements — how to stop guessing what a corridor needs.
  • Webhooks — verification, idempotency and the recovery path when your endpoint is down.
  • Errors — the ISO reason codes, and how a validation failure points at the rule it broke.