Conditional Payouts

Approval records for payouts. Sandbox preview.

A test-mode preview: record a payout against a condition (approval, time, webhook or milestone), collect approvals, and move it from PENDING to APPROVED or CANCELLED. Automatic expiry is not built yet. No payout rail is wired, so approving a conditional payout does not move money.

Illustrative — not customer data

Conditions

Condition types you can record.

Time-based

Record a timeout of 1 to 720 hours. Automatic expiry is not built yet.

Approval-based

The payout moves to APPROVED once the named approvers approve it.

Webhook-triggered

Recorded as the condition type. Triggering from an inbound webhook is not built yet.

Multiple approvers

List several approvers. Every one of them must approve before the status changes.

Milestone

Recorded as the condition type. Partial, per-milestone releases are not built yet.

Current status

A record and approval trail. No money moves yet.

Conditional Payouts is a test-mode preview. It stores the payout, its condition and its approvals, and moves the status from PENDING to APPROVED or CANCELLED. It is not connected to a payout rail, so approving a payout does not release funds.

For developers

Create a conditional payout. Approve it.

create.bashbash
# Test mode only
curl -X POST https://api.finveil.money/api/conditional-payouts \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "amountCents":        250000,
    "recipientAccountId": "<CONNECT_ACCOUNT_ID>",
    "condition": {
      "type":         "approval",
      "timeoutHours": 24,
      "approvers":    ["<APPROVER_USER_ID>"]
    }
  }'

# => {
#      "id":        "<PAYOUT_ID>",
#      "status":    "PENDING",
#      "timeoutAt": "..."
#    }
approve.bashbash
# Called by an approver's own session (test mode only)
curl -X POST https://api.finveil.money/api/conditional-payouts/<PAYOUT_ID>/approve \
  -H "Authorization: Bearer <APPROVER_ACCESS_TOKEN>"

# => {
#      "id":        "<PAYOUT_ID>",
#      "status":    "APPROVED",
#      "approvals": [ { "userId": "...", "approvedAt": "..." } ]
#    }
# No money moves: no payout rail is wired to conditional payouts yet.

Use cases

Where an approval trail helps.

Freelance platforms

Record a payout that needs the buyer’s approval before it can move forward.

Withdrawal review

Require a second person to approve a withdrawal record before it is processed.

Property deposits

Record a deposit payout that both parties must approve.

Construction payments

Record a payout against a milestone and track who approved it. Per-milestone partial releases are not built yet.

How it works

Three steps.

1

Create the record

Specify the connected account, amount in cents, condition type, timeout and approvers.

2

Collect approvals

Each named approver calls POST /api/conditional-payouts/{id}/approve, or the payout is cancelled.

3

Status changes

When every approver has approved, the record moves to APPROVED. Releasing funds on a rail, and automatic expiry, are not built yet.

Benefits

Why teams choose Conditional Payouts.

Four condition types

Approval, time, webhook and milestone.

No money moves

This is a state machine and approval trail. It is not connected to a payout rail.

Timeouts

Each payout carries a 1 to 720 hour timeout. The job that expires overdue payouts is not built yet.

Audit-logged

Creating, approving and cancelling a conditional payout are recorded with who did it and when.

Who it's for

Marketplace opsFreelance platformsConstruction & propertyRegulated fintechs

Developer-friendly

Drop it into your stack.

REST API with an OpenAPI reference, and a test mode on the same API. Sign up for test API keys without a sales call. SDKs are available on request.

Read the docs
conditional-payouts.bashbash
# Test mode only
curl -X POST https://api.finveil.money/api/conditional-payouts \
  -H "Authorization: Bearer <ACCESS_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{
    "amountCents":        250000,
    "recipientAccountId": "<CONNECT_ACCOUNT_ID>",
    "condition": {
      "type":         "approval",
      "timeoutHours": 24,
      "approvers":    ["<APPROVER_USER_ID>"]
    }
  }'

# => { "id": "...", "conditionType": "approval", "status": "PENDING", ... }

Ready to try Conditional Payouts?