Introducing Starknet Network:   OffRamp and OnRamp USDC are now supported for Starknet network.  View changelog for details →.
Sphere Paysphere
Transfer

Create Transfer

POST
/v1/transfer
AuthorizationBearer <token>

In: header

amountstring

The amount for the transfer.

customerstring

The id of the customer for the transfer

sourceobject

The source of the transfer

destinationobject

The recipient of the transfer.

Response Body

curl -X POST "https://api.sandbox.spherepay.co/v1/transfer" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": "100",
    "customer": "{{customer_id}}",
    "source": {
      "id": "{{wallet_account_id}}",
      "currency": "usdc",
      "network": "ethereum"
    },
    "destination": {
      "id": "{{bank_account_id}}",
      "currency": "usd",
      "network": "achPush"
    }
  }'
const body = JSON.stringify({
  "amount": "100",
  "customer": "{{customer_id}}",
  "source": {
    "id": "{{wallet_account_id}}",
    "currency": "usdc",
    "network": "ethereum"
  },
  "destination": {
    "id": "{{bank_account_id}}",
    "currency": "usd",
    "network": "achPush"
  }
})

fetch("https://api.sandbox.spherepay.co/v1/transfer", {
  body
})
package main

import (
  "fmt"
  "net/http"
  "io/ioutil"
  "strings"
)

func main() {
  url := "https://api.sandbox.spherepay.co/v1/transfer"
  body := strings.NewReader(`{
    "amount": "100",
    "customer": "{{customer_id}}",
    "source": {
      "id": "{{wallet_account_id}}",
      "currency": "usdc",
      "network": "ethereum"
    },
    "destination": {
      "id": "{{bank_account_id}}",
      "currency": "usd",
      "network": "achPush"
    }
  }`)
  req, _ := http.NewRequest("POST", url, body)
  req.Header.Add("Content-Type", "application/json")
  res, _ := http.DefaultClient.Do(req)
  defer res.Body.Close()
  body, _ := ioutil.ReadAll(res.Body)

  fmt.Println(res)
  fmt.Println(string(body))
}
import requests

url = "https://api.sandbox.spherepay.co/v1/transfer"
body = {
  "amount": "100",
  "customer": "{{customer_id}}",
  "source": {
    "id": "{{wallet_account_id}}",
    "currency": "usdc",
    "network": "ethereum"
  },
  "destination": {
    "id": "{{bank_account_id}}",
    "currency": "usd",
    "network": "achPush"
  }
}
response = requests.request("POST", url, json = body, headers = {
  "Content-Type": "application/json"
})

print(response.text)
{
  "ok": true,
  "object": "object",
  "statusCode": 200,
  "error": null,
  "message": "success",
  "data": {
    "transfer": {
      "id": "payout_727a8a9a7e4a46a7839eb5a55424934c",
      "number": 4,
      "type": "onRamp",
      "status": "pending",
      "meta": {},
      "lookupKey": null,
      "amount": "100.00",
      "finalAmount": "99.00",
      "fee": "1.00",
      "source": {
        "id": "bankAccount_fdef235388c240eb8b14dad8ed542e53",
        "currency": "usd",
        "network": "achPush"
      },
      "funding": {
        "id": "bankAccount_15e94e2bfd614a0483afe09f96dae90a",
        "currency": "usd",
        "network": "achPush"
      },
      "destination": {
        "id": "wallet_5655089bfb164769b085f6fd9f1e25a0",
        "currency": "usdc",
        "network": "ethereum"
      },
      "instructions": {
        "memo": "BRGUEWY5SEWHESVTMW94",
        "imad": null,
        "omad": null,
        "human": "Send 100 usd via the achPush network from bankAccount_fdef235388c240eb8b14dad8ed542e53 with an account number of ********9389 to bankAccount_15e94e2bfd614a0483afe09f96dae90a with an account number of ********1267. After sending usd, the payout will be funded and 100 of usdc will be on-ramped to wallet_5655089bfb164769b085f6fd9f1e25a0 with an address of 0x7Aa40147383F5c985Bd6D90D8d6832cF9091fcF1 on the ethereum network.",
        "machine": "",
        "resource": {
          "id": "bankAccount_15e94e2bfd614a0483afe09f96dae90a",
          "status": "active",
          "bankName": "Lead Bank",
          "accountHolderName": "Sphere",
          "accountName": "Sphere",
          "accountNumber": "213796231267",
          "customer": "customer_654f29a47e1b46cdb9e241c8eb154c93",
          "last4": "1267",
          "routingNumber": "101019644",
          "bic": null,
          "iban": null,
          "pixKey": null,
          "clabe": null,
          "ifsc": null,
          "philippinesAccountNumber": null,
          "bankAddressString": "1801 Main St. Kansas City MO 64108, Kansas, United States of America",
          "meta": {},
          "lookupKey": null,
          "currency": "usd",
          "walletBankAccounts": [],
          "accountType": "checking",
          "updated": "2025-01-16T21:05:22.192Z",
          "created": "2025-01-16T21:05:22.192Z",
          "deleted": null
        }
      },
      "failureReason": null,
      "failureReasonExplanation": null,
      "mock": false,
      "customer": "customer_68f1c089703945e7bbff6f04bf1c5041",
      "updated": "2025-04-19T21:46:09.554Z",
      "created": "2025-04-19T21:46:09.554Z"
    }
  },
  "ts": "2025-04-19T21:46:09.849Z",
  "request": "request_a067bc3693d242fe9cd0aeed3e6dabb2"
}
{
  "ok": false,
  "object": "error",
  "statusCode": 500,
  "error": {
    "response": "No eligible transfer provider",
    "status": 400,
    "message": "No eligible transfer provider",
    "name": "HttpException"
  },
  "message": "No eligible transfer provider",
  "data": null,
  "ts": "2025-04-19T21:51:19.150Z",
  "request": "request_7033125868b94b11b4dffb9ba8d86365"
}
{
  "ok": false,
  "object": "error",
  "statusCode": 403,
  "error": "bankAccount/not-active",
  "message": "Bank account not active",
  "data": null,
  "ts": "2025-04-19T21:41:50.903Z",
  "request": "request_eb8ffb87037849e5a3a00cdd4d84407b"
}