Skip to main content
This walks through the most common integration pattern end-to-end: a dedicated wallet authenticates as a manager on your team/company, then lists teams and sends a payment. Every step is copy-paste runnable.
New here? Overview explains what this section is and why it exists. This page assumes you just want working code.

Prerequisites

  • An existing Rise team or company (from before your V1 integration) and its V1 RiseID — an address like 0xabc..., found in the Rise dashboard under company/team settings.
  • A wallet registered as that team/company’s Owner or a delegate — see Secondary Wallets if you need to set one up. This wallet’s private key does the signing; it doesn’t need any funds.
  • The email of a manager on that team — a user with the team_admin, team_finance_admin, team_delegate_admin, or team_payment_initiator role. Can be the same person who controls the wallet, or someone else.
  • Node.js 16+
Don’t have those on hand, or not sure what they mean? See Which flow do I use? — there’s also a simpler “personal auth” flow for a wallet tied to your own individual Rise user account.

Step 1: Install dependencies

Step 2: Configure your environment

Create a .env file:
Never commit .env to version control. Anyone with WALLET_PRIVATE_KEY can sign on your team/company’s behalf.

Step 3: Authenticate and list your teams

Save this as quickstart.js and run it to confirm authentication works end-to-end:
If this prints at least one team, authentication is working correctly — move on to Step 4. If it fails, jump to Troubleshooting below.

Step 4: Send your first payment

Add a payee nanoid or RiseID to your .env (any contractor already on the team you listed above), then extend the script:
salt must be unique for every payment to the same payee with the same amount — reusing one fails with 409 Conflict. Date.now() is fine for testing; use a counter or UUID-derived integer in production. See Payments.
Test against staging first (RISE_ENVIRONMENT=stg and https://b2b-api.staging-riseworks.io) before pointing this at production — see Base URLs.

Troubleshooting

Either wallet isn’t registered as the RiseID’s Owner/delegate, or impersonate isn’t a user with a manager role on that RiseID. Both are checked independently — see Which flow do I use?.
The JWT is missing or expired (tokens last 24 hours). Re-run the authentication step to get a fresh one, and make sure client.updateToken(...) ran before the failing call.
You reused a salt for the same payer + payee + amount. Use a new, never-before-used salt and retry.
Every non-auth identifier (rise_id, payee, teamId, etc.) accepts a V1 RiseID, V2 RiseID, nanoid, or RiseAccount address interchangeably — no conversion needed. See Identifier formats.
See Troubleshooting for the full list of errors across every endpoint.

Next steps

Authentication

Full reference for both auth flows, manual HTTP, and error cases

Payments

Batch payments, payment intents, and payment history

Teams & Talent

List, get, and remove contractors

Troubleshooting

Common errors and how to fix them, across every endpoint