Forte · Developer Docs

Embed payments in 60 seconds.

Forte is in private beta. The endpoints and parameters below describe the integration shape; final names may change before public launch.

Quick start

Forte ships as a single <script> tag you drop on any page where you want to take a payment. The script renders a styled button; clicking it opens a hosted checkout, runs the charge, and redirects to your success URL.

<!-- 1. Drop this snippet anywhere on your page -->
<script src="https://viridianlabs.co/embed.js"
        data-merchant="acct_1A2B3C"
        data-amount="4900"
        data-currency="usd"
        data-label="Buy now — $49"
        data-success="https://yoursite.com/thanks"
        data-cancel="https://yoursite.com/cancelled"></script>

That’s it. The button styling matches your site colors via CSS custom properties, and Forte handles the rest: PCI-compliant card entry, Apple Pay / Google Pay, 3-D Secure, receipts, and webhook delivery.

Embed parameters

Every parameter is set as a data-* attribute on the <script> tag.

data-merchant
string · required
Your Forte merchant ID. Starts with acct_ . Find this in your merchant dashboard.
data-amount
integer · required
Charge amount in the smallest currency unit (cents for USD, pence for GBP). 4900 = $49.00.
data-currency
ISO 4217 · required
Three-letter currency code, lowercase. usd, eur, gbp, cad, aud — full list at /pay/docs#currencies.
data-label
string · optional
Button label. Defaults to "Pay $X.XX" using your amount and currency.
data-success
URL · optional
Redirect target after a successful charge. Defaults to the current page with ?forte=ok appended.
data-cancel
URL · optional
Redirect target if the buyer dismisses checkout. Defaults to the current page with ?forte=cancelled.
data-metadata
JSON · optional
Up to 50 keys forwarded to your webhook. Useful for order IDs, customer IDs, line items.
data-customer-email
email · optional
Pre-fills the buyer email field on checkout. Speeds up returning-customer flow.

Webhooks

Set your webhook endpoint in the merchant dashboard. Forte forwards the following events with HMAC-SHA256 signatures in the Forte-Signature header.

payment.succeeded
A charge completed and is settled to your Connect Account. Includes amount, currency, fees, metadata.
payment.failed
A charge attempt failed. Includes the decline code and a Buyer-friendly message.
payment.refunded
You issued a refund (full or partial). Includes refund_amount and reason.
payment.disputed
A Buyer disputed a charge. Includes dispute_reason, due_by deadline, and evidence_required flags.
payout.paid
A payout to your bank account has settled. Includes amount, arrival_date, and method (standard / instant).
payout.failed
A payout failed (e.g. closed bank account). Includes failure_code and failure_message.
account.updated
Your KYB status changed (e.g. requires_more_information → active). Includes the new status and any required actions.

Signature verification (Node.js)

import crypto from 'node:crypto'

function verifyForteSignature(req) {
  const signature = req.headers['forte-signature']
  const expected = crypto
    .createHmac('sha256', process.env.FORTE_WEBHOOK_SECRET)
    .update(req.rawBody)
    .digest('hex')
  return crypto.timingSafeEqual(
    Buffer.from(signature, 'hex'),
    Buffer.from(expected, 'hex'),
  )
}

Forte retries failed webhooks with exponential backoff (1m, 5m, 30m, 2h, 12h) for up to 24 hours. After that the event is marked dead-letter and visible in the dashboard.

REST API

The REST API is the programmatic alternative to the embed for teams that need full control. All requests must include a Bearer token from https://forte.viridianlabs.co/dashboard/api-keys.

POST /v1/checkouts
Create a hosted checkout session. Returns a one-use URL you redirect the Buyer to.
GET /v1/payments
List your transactions. Supports cursor pagination and date filtering.
GET /v1/payments/:id
Retrieve a single transaction with line-item detail.
POST /v1/payments/:id/refunds
Issue a full or partial refund.
GET /v1/payouts
List payouts to your linked bank or debit card.
POST /v1/payouts
Trigger an immediate payout (instant fee applies).
GET /v1/account
Retrieve your merchant account: KYB status, payout schedule, fee structure.

Sandbox

Forte ships with a full sandbox environment. Sandbox merchant IDs start with acct_test_ and use a separate base URL: https://sandbox.forte.viridianlabs.co. No charges are made and no payouts are issued.

Toggle a key as “Test mode” in the dashboard to receive test events without affecting your live account.

Test card numbers

In sandbox mode the following card numbers behave deterministically:

4242 4242 4242 4242
Successful charge.
4000 0000 0000 0002
Declined: generic decline.
4000 0000 0000 9995
Declined: insufficient funds.
4000 0027 6000 3184
Requires 3-D Secure authentication.
4000 0000 0000 0341
Successful charge that triggers a chargeback dispute the next business day.

Need help?

Forte is a small team and we read every email. hello@viridianlabs.co for product questions, abuse@viridianlabs.co to report a violation, or open the dashboard chat once your account is active.

See also: Forte landing · Merchant Agreement · Acceptable Use.