Make recurring payments using saved payment routes

Static template transfer is a saved/reusable payment route let you generate reusable deposit instructions (like an ACH memo) that trigger a transfer automatically when funds are sent to Bridge.

Step 1: Create a Static Template

Use the Create a transfer endpoint and set "static_template": true.

Request

curl --location --request POST 'https://api.bridge.xyz/v0/transfers' \
--header 'Api-Key: <API Key>' \
--header 'Idempotency-Key: <Unique Key>' \
--header 'Content-Type: application/json' \
--data-raw '{
  "on_behalf_of": "cust_alice",
  "source": {
    "payment_rail": "sepa",
    "currency": "eur"
  },
  "destination": {
    "payment_rail": "polygon",
    "currency": "usdc",
    "to_address": "0xdeadbeef"
  },
  "features": {
  	"static_template": true
    "flexible_amount": true // allows for any deposit amount
  }
}'

Response

The response object will contain deposit instructions. You can share these with your customers. Every time your customers send Bridge a deposit with the message BRGEXAMPLEMEMO, we will match it to this template, and create a new transfer instance.

{
  "id": "transfer_template_123",
  "state": "awaiting_funds",
  "on_behalf_of": "cust_alice",
  "source": {
    "payment_rail": "sepa",
    "currency": "eur"
  },
  "destination": {
    "payment_rail": "polygon",
    "currency": "usdc",
    "to_address": "0xdeadbeef"
  },
  // Share this with your customer
  "source_deposit_instructions": {
    "payment_rail": "sepa",
    "currency": "eur",
    "deposit_message": "BRGEXAMPLEMEMO",
    "iban": "IE57MODR99035505123456",
    "bic": "MODRIE22XXX",
    "account_holder_name": "Bridge Building Sp.z.o.o.",
    "bank_name": "Modulr Finance B.V.",
    "bank_address": "Strawinskylaan 4117, 1077 ZX Amsterdam, The Netherlands"
  },
 "features": {
    "static_template": true,
    "flexible_amount": true
  },
  "created_at": "2023-05-05T19:39:14.316Z",
  "updated_at": "2023-05-05T19:39:15.231Z"
}

Step 2: Customer sends funds

Each time funds match the template (e.g. via SEPA + deposit message), Bridge:

  • Creates a new Transfer instance
  • Processes the transfer automatically
  • Sends you a webhook
  • Makes it available to fetch at Get all transfers

Fetching static template created transfers via API

Use the template ID to list all matched transfers.

Request

curl --request GET \
  --url 'https://api.bridge.xyz/v0/transfers?template_id=transfer_template_123' \
  --header 'Api-Key: <API Key>'

Response

Each resulting transfer instance is represented as a unique transfer object.

{
  "count": 2,
  "data": [
    {
      "id": "transfer_instance_456",
      "state": "payment_processed",
      "on_behalf_of": "cust_alice",
      "amount": "1234.0",
      "source": {
        "payment_rail": "sepa",
        "currency": "eur",
      },
      "destination": {
        "payment_rail": "polygon",
        "currency": "usdc",
        "to_address": "0xdeadbeef"
      },
      "source_deposit_instructions": {
        "payment_rail": "sepa",
        "currency": "eur",
        "deposit_message": "BRGEXAMPLEMEMO",
        "iban": "IE57MODR99035505123456",
        "bic": "MODRIE22XXX",
        "account_holder_name": "Bridge Building Sp.z.o.o.",
        "bank_name": "Modulr Finance B.V.",
        "bank_address": "Strawinskylaan 4117, 1077 ZX Amsterdam, The Netherlands"
      },
      "receipt": {
        "initial_amount": "1234.0",
        "developer_fee": "0.0",
        "exchange_fee": "0.0",
        "subtotal_amount": "1234.0",
        "url": "https://dashboard.bridge.xyz/transaction/4181f2d9-7647-4249-b340-068d6ebdf8a2/receipt/c571e913-1f94-457e-a158-4249526b847b",
        gas_fee: "0.0",
        final_amount: "1234.0",
        destination_tx_hash: "0x628ec487573fc503c3cad909bcd271d29a906257dc19a27db8cc82f213cf95e2",
      },
     "features": {
        "static_template": true,
        "flexible_amount": true
      },
      "created_at": "2024-10-06T19:39:14.316Z",
      "updated_at": "2024-10-06T19:39:15.231Z"
    },
    {
      "id": "transfer_template_123",
      "state": "awaiting_funds",
      "on_behalf_of": "cust_alice",
      "source": {
        "payment_rail": "sepa",
        "currency": "eur",
      },
      "destination": {
        "payment_rail": "polygon",
        "currency": "usdc",
        "to_address": "0xdeadbeef"
      },
      "source_deposit_instructions": {
        "payment_rail": "sepa",
        "currency": "eur",
        "deposit_message": "BRGEXAMPLEMEMO",
        "iban": "IE57MODR99035505123456",
        "bic": "MODRIE22XXX",
        "account_holder_name": "Bridge Building Sp.z.o.o.",
        "bank_name": "Modulr Finance B.V.",
        "bank_address": "Strawinskylaan 4117, 1077 ZX Amsterdam, The Netherlands"
      },
     "features": {
        "static_template": true,
        "flexible_amount": true
      },
      "created_at": "2024-10-05T19:39:14.316Z",
      "updated_at": "2024-10-05T19:39:15.231Z"
    }
  ]
}

Tips

  • Omit "amount" to make the template flexible (flexible_amount: true)
  • Use Update a transfer to modify template behavior (applies only to future deposits)
  • Static templates use shared deposit instructions, unlike Virtual Accounts, which are customer-specific