Skip to main content
External entity payments let a team pay recipients who are not Rise members — vendors, contractors, or suppliers identified by email. Unlike standard payments (which target a Rise member of the team), external-entity payments create or reference an external recipient and disburse funds directly.
External entity payments are a team-scoped operation. The signer must hold a wallet with payment permissions on the team’s RiseID, exactly like standard payments.

When to use this

Standard payments

Recipient is already a member of your team. Use client.payments.* and POST /v2/payments.

External entity payments

Recipient is an outside vendor/supplier identified by email. Use client.billPay.* and the external_entity endpoints.

Payment flow

External-entity instant payments follow the same secure prepare → sign → execute pattern as standard payments. The signature is produced locally with your wallet; the private key never leaves your process.
1

Create or reference a recipient

Register the external recipient under the team (or reuse an existing one).
2

Prepare the payment

Request EIP-712 typed data for the instant payment.
3

Sign with your wallet

Sign the returned typed data locally.
4

Execute

Submit the signature to execute the payment on-chain.

SDK usage

Manage recipients

Send an instant payment (one call)

sendInstantPayment runs the full prepare → sign → execute flow for you. It needs a private key to sign — either passed inline or configured on the client via riseIdAuth.

Prepare and execute separately

If you sign with an external wallet (hardware wallet, custody service), split the flow:

REST endpoints

See the API Reference for full request and response schemas.

Idempotency with external_id

Payments accept an optional external_id — your own reference for the payment (an invoice number, an internal transaction id). Rise enforces that external_id is unique per payer (team): a second payment from the same team with an external_id it has already used is rejected with 409 Conflict. Use it to make retries safe and to prevent accidental double-payments.
external_id uniqueness is enforced going forward and is scoped per payer. Omit it (leave it unset) when you do not need idempotency — unset values are never treated as duplicates. Reuse the same external_id on a retry to guarantee the payment is only created once.