Skip to main content

Environments

Use separate API keys per environment.
EnvironmentBase URL
Sandboxhttps://dev-api.machines.cash
Productionhttps://api.machines.cash
Recommended env file for local API testing:
cat > .env.local <<'EOF'
MC_ENV=sandbox
MC_API_BASE_URL=https://dev-api.machines.cash/partner/v1
MC_API_BASE_URL_PRODUCTION=https://api.machines.cash/partner/v1
MC_PARTNER_KEY=replace-with-your-sandbox-partner-key
EOF

set -a
source .env.local
set +a

Sandbox KYC shortcut

To bypass KYC in sandbox, set the applicant’s lastName to approved when calling POST /kyc/applications. The next status check returns approved.
curl --request POST \
  --url ${MC_API_BASE_URL}/kyc/applications \
  --header 'Authorization: Bearer <SESSION_TOKEN>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "firstName": "John",
  "lastName": "approved",
  "birthDate": "1990-01-01",
  "nationalId": "123456789",
  "countryOfIssue": "US",
  "email": "jsmith@example.com",
  "address": {
    "line1": "123 Main St",
    "city": "New York",
    "region": "NY",
    "postalCode": "10001",
    "countryCode": "US"
  },
  "occupation": "49-3023",
  "annualSalary": "<40k",
  "accountPurpose": "testing",
  "expectedMonthlyVolume": "under $1k"
}
'

Sandbox deposits (rUSD on Base Sepolia)

Sandbox deposits use rUSD on Base Sepolia. You need Base Sepolia ETH for gas.

1) Create a deposit intent

POST /deposits
{
  "currency": "rusd",
  "network": "base",
  "amount": 25
}
The response includes deposit.id and deposit.depositAddress (the Base Sepolia deposit address).

2) Mint rUSD

Mint rUSD on Base Sepolia, then send it to deposit.depositAddress.
  • Chain: Base Sepolia (84532)
  • rUSD contract: 0x10b5Be494C2962A7B318aFB63f0Ee30b959D000b
  • Mint function: mint(uint256 amountDollars_Max100)
  • Max per mint tx: 100 rUSD

3) Track status

Poll until the deposit completes:
GET /deposits/{"{depositId}"}
Sandbox deposits are for testing only. Production deposits use USDC on Base.