API Reference
Log In
API Reference

Recurring

A recurring escrow contract for subscriptions, retainers, and periodic payment schedules.

🔁 Recurring Escrow

Create a recurring escrow contract for automated, periodic payments. This type of escrow is ideal for subscriptions, installment plans, retainers, or any ongoing financial agreement that requires funds to be released at regular intervals.


📌 Use Case

Use this endpoint when you want to:

  • Automate subscription payments (e.g., SaaS, streaming services, memberships).
  • Structure installment-based transactions (e.g., phased project payments).
  • Manage retainer agreements for ongoing services (e.g., legal, consulting, maintenance).
  • Enable multi-contributor pools where multiple parties fund a recurring payment to a single receiver.
  • Define complete payment schedules upfront with automatic execution on due dates.

🧰 Features

  • Supports multiple cycle intervals (daily, weekly, monthly)
  • Automatic payment processing on scheduled due dates
  • Multi-contributor support for pooled funding
  • Configurable contributor minimums and maximums
  • Dispute protection for every cycle
  • Multiple payout methods (bank, crypto, mobile money)
  • Webhook callbacks for cycle events

🧾 Example Use Case

  • A SaaS platform charges clients $50/month for access. The client funds a recurring escrow, and payments are automatically released to the platform on the 1st of each month.
  • A group of tenants (5 contributors) each pay a portion of the monthly $2,500 rent into escrow. The funds are automatically released to the landlord on the 28th of every month.
  • A consultant agrees to a 6-month retainer at $2,000/month. The client funds the first month, and subsequent payments are triggered automatically on the same date each month.

🧱 Required Fields

FieldTypeDescription
uuidstringA unique reference for the escrow session
escrow_typestringMust be set to "recurring"
initiator_rolestringRole of the initiator: buyer or seller
initiator_idstringUnique identifier of the user creating the escrow
receiver_idstring or nullUnique identifier of the primary receiver (null if using contributors)
titlestringShort title of the recurring transaction
currencystringCurrency code (e.g. USD, NGN)
amountnumberTotal amount to be collected per cycle
descriptionstringDetailed description of the recurring agreement
how_dispute_is_handledstringDispute method: platform or arbitration
who_pay_feesstringWho covers transaction fees: buyer, seller, or split
cycleobjectObject defining the recurring schedule (see below)
contributorsarray(Optional) Array of participants for multi-party funding
payoutobjectObject containing payout details for the receiver
callback_urlstring(Optional) URL to receive webhook events for each cycle

🔄 Cycle Object

FieldTypeDescription
cycle_intervalstringFrequency: daily, weekly, or monthly
minimum_contributorsintegerMinimum contributors required (default: 1)
maximum_contributorsintegerMaximum contributors allowed
due_day_of_monthinteger(Required for monthly) Day of month for payment (1-31)
expected_amountnumberTotal amount expected per cycle
due_datestringFirst payment due date in YYYY-MM-DD format

👥 Contributors Array (Optional)

FieldTypeDescription
namestringFull name of the contributor
emailstringEmail address of the contributor
expected_amountnumberAmount this contributor pays per cycle

💰 Payout Object Fields

FieldTypeDescription
payout_typestringPayout method: bank, crypto, or mobile_money
bank_namestring(Bank) Name of the bank
bank_codestring(Bank) Bank code
account_numberstring(Bank) Account number
account_namestring(Bank) Account holder name
account_branchstring(Bank, Optional) Account branch
bank_addressstring(Bank, Optional) Bank address
swift_codestring(Bank, Optional) SWIFT code for international transfers
ibanstring(Bank, Optional) IBAN for international transfers
routing_numberstring(Bank, Optional) Routing number
sort_codestring(Bank, Optional) Sort code
wallet_addressstring(Crypto) Wallet address
crypto_networkstring(Crypto) Network (e.g., ERC20, TRC20, BEP20)
token_symbolstring(Crypto) Token symbol (e.g., USDT, USDC)
mobile_money_providerstring(Mobile Money) Provider name
mobile_money_numberstring(Mobile Money) Mobile money account number

📦 Example Payload

{
  "uuid": "4b5c12fb-74f8-4dd5-b700-f825b29e7719",
  "escrow_type": "recurring",
  "initiator_role": "buyer",
  "initiator_id": "4b5c12fb-74f8-4dd5-b700-f825b29e7719",
  "receiver_id": null,
  "title": "Monthly Netflix Subscription 2",
  "currency": "NGN",
  "amount": 25000.00,
  "description": "Recurring subscription escrow for Netflix access.",
  "how_dispute_is_handled": "arbitration",
  "who_pay_fees": "buyer",
  "cycle": {
    "cycle_interval": "monthly",
    "minimum_contributors": 1,
    "maximum_contributors": 30,
    "due_day_of_month": 28,
    "expected_amount": 25000.00,
    "due_date": "2026-03-28"
  },
  "contributors": [
    {
      "name": "Jamb Tom",
      "email": "[email protected]",
      "expected_amount": 2000.00
    },
    {
      "name": "Dev Tom",
      "email": "[email protected]",
      "expected_amount": 2000.00
    }
  ],
  "payout": {
    "payout_type": "bank",
    "bank_name": "FIDELITY BANK",
    "bank_code": "077",
    "account_number": "6150222737",
    "account_name": "PRECIOUS TOM ANIEFIOK"
  },
  "callback_url": "app.pandascrow.io/recurring-webhook"
}