Quickstart Guide

Go from API key to first payment in 15 minutes. This guide walks through authentication, creating a test user, running a KYC check, and initiating your first ACH payment.

Authentication

All API requests require a bearer token. Use your sandbox key for testing — prefix sk_test_. Production keys use sk_live_.

# Set your API key in environment
export FINSYNCIO_API_KEY=sk_test_4xKmQrNpW9v2Y3bZ

$ curl https://api.finsyncio.com/v1/health \
  -H "Authorization: Bearer $FINSYNCIO_API_KEY"

{
  "status": "ok",
  "env": "sandbox"
}

KYC Verification

Before users can make or receive payments, they must pass KYC. Submit user identity data to POST /v1/users. Most identity checks complete in under 30 seconds.

$ curl -X POST \
  https://api.finsyncio.com/v1/users \
  -H "Authorization: Bearer $FINSYNCIO_API_KEY" \
  -d '{
    "first_name": "Jordan",
    "last_name": "Reyes",
    "email": "[email protected]",
    "date_of_birth": "1990-04-15",
    "ssn_last4": "4321",
    "address": {
      "line1": "400 Market St",
      "city": "San Francisco",
      "state": "CA",
      "zip": "94105"
    }
  }'

# 201 Created
{
  "user_id": "usr_7Pk3nM2wQx",
  "kyc_status": "approved",
  "created_at": "2026-04-10T09:12:31Z"
}

Initiating a Payment

Once a user is KYC-approved, initiate ACH or RTP payments with POST /v1/payments/initiate. Include an idempotency key to prevent duplicate transactions.

$ curl -X POST \
  https://api.finsyncio.com/v1/payments/initiate \
  -H "Authorization: Bearer $FINSYNCIO_API_KEY" \
  -H "Idempotency-Key: my-unique-key-001" \
  -d '{
    "amount_cents": 25000,
    "currency": "usd",
    "recipient_id": "usr_7Pk3nM2wQx",
    "type": "ach_same_day"
  }'

{
  "payment_id": "pay_2RqMv8kXn",
  "status": "processing",
  "eta_hours": 4
}

Webhooks

Subscribe to payment and KYC events via the dashboard. Finsyncio signs each webhook with an HMAC-SHA256 signature in the X-Finsyncio-Signature header. Verify before processing.

// Node.js webhook verification
const crypto = require('crypto');

function verifyWebhook(body, signature, secret) {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(body)
    .digest('hex');
  return crypto.timingSafeEqual(
    Buffer.from(expected), Buffer.from(signature)
  );
}

Idempotency

All mutation endpoints accept an Idempotency-Key header. If a request with the same key is retried within 24 hours, the same response is returned without re-executing. Always use idempotency keys for payment mutations.

SDKs

npm install @finsyncio/node
pip install finsyncio
go get github.com/finsyncio/go-sdk

Sandbox Testing

The sandbox environment supports magic test values to simulate different outcomes:

SSN last 4KYC outcome
0000Instant approval
0001Manual review triggered
0002Identity mismatch rejection
Amount (cents)Payment outcome
100Instant cleared
101Returns with R02 (account closed)
102Network timeout (retry scenario)