Base path
The canonical API path is/v2/wallets. All wallet endpoints use this path prefix.
Authentication
All requests require a Bearer token in theAuthorization header. If the token is missing or invalid, the API returns 401.
Environments
| Environment | Base URL |
|---|---|
| Sandbox | https://sandbox.groundtech.co |
| Production | https://production.groundtech.co |
ethereum_sepolia— Ethereum Sepolia testnet
arbitrum, base, ethereum, polygon, solana). See Supported Chains for details.
Pagination
List endpoints use cursor-based pagination withlimit and cursor parameters.
nextCursor field. Pass it as cursor to fetch the next page:
nextCursor is null, you have reached the end of the result set.
Additional query parameters on list endpoints:
sort: field to sort by (e.g.createdAt)order:desc(default) orasccreatedAtGte: ISO-8601 timestamp filterstatus: repeatable status filter (e.g.status=processing&status=completed)
Idempotency
Create and withdrawal endpoints accept arequestId (UUID v4). Retrying the same request with the same requestId returns the original response: 201 for the initial creation and 200 for an idempotent replay. If the requestId was already used with different parameters, the API returns 409 Conflict.
409, fetch the existing resource by requestId rather than retrying the create.
Rate limiting
All/v2 endpoints are rate limited:
| Scope | Limit |
|---|---|
General (all /v2 endpoints) | 200 requests/min |
| Write endpoints (POST, PATCH, DELETE) | 20 requests/min |
| Header | Description |
|---|---|
RateLimit-Limit | Maximum requests allowed in the current window |
RateLimit-Remaining | Requests remaining in the current window |
RateLimit-Reset | Seconds until the rate limit window resets |
429 Too Many Requests. Back off and retry after the RateLimit-Reset interval.
Error handling
Errors are returned as JSON with a human-readableerror string and a machine-readable code field.
| HTTP status | Meaning | Action |
|---|---|---|
400 | Validation error | Fix the request and retry |
401 | Authentication failed | Check your Bearer token |
404 | Resource not found | Verify the wallet/withdrawal ID |
409 | Duplicate requestId | Fetch the existing resource instead |
429 | Rate limited | Back off and retry after RateLimit-Reset |
500 | Server error | Log the response and retry with backoff |
error and code fields. Use the code field for programmatic branching. Use the error string for logging and debugging.