Skip to main content
This guide creates a wallet whose key is generated as shares across the signing nodes, attaches an Ethereum Sepolia asset to it, and sends a small withdrawal through policy, threshold signing and broadcast. It takes about fifteen minutes; most of that is waiting for testnet confirmations.

Before you start

1

Request sandbox access

Email hello@blockops.network with your company name and the address you will integrate from. You receive a workspace ID, an API key and an API secret for the sandbox at https://wallet-sandbox.blockops.network. The sandbox runs on Ethereum Sepolia; nothing you do in it touches real funds.
2

Have a Sepolia faucet ready

You will need a small amount of Sepolia ETH in the wallet you create. Any public Sepolia faucet works.

Sign every request

Each request carries three headers: ACCESS-API-KEY, ACCESS-TIMESTAMP and ACCESS-SIGN. The signature is an HMAC-SHA256 over method=<METHOD>&path=<PATH>&timestamp=<TIMESTAMP>&body=<RAW BODY>, keyed with the API secret and hex-encoded. Timestamps older or newer than five minutes are rejected. Set API_KEY, API_SECRET and WORKSPACE_ID in your environment to the values you received. In cURL, each step computes the signature with openssl and passes it to a plain curl call. In TypeScript and Go, the req function below does the same and is used by every step.
For GET requests the body is empty, so the canonical string ends with body=. Every response uses the same envelope: { "success": true, "message": "...", "code": "...", "data": ... }. When something is wrong, success is false and message says why.

1. Create a wallet

Wallet creation is asynchronous: the API accepts the request, the signing nodes run distributed key generation, and the wallet becomes usable when they finish. Send an idempotency key so a retry cannot create a second wallet.
The response is 202 Accepted:
Keep wallet_id. Poll the creation status until it is success:
Status moves pendingsubmittedsuccess. If it ends in failed, status_reason says why; a failed operation never leaves a partial wallet behind.
Key generation typically takes a few seconds. In production, subscribe to the wallet.created webhook instead of polling; see Webhooks & events.

2. Attach an asset and get a deposit address

A wallet holds a key; an asset binds it to a network and token. Look up the Sepolia ETH asset in the catalog, then attach it. The platform derives the address server-side; you never supply a derivation path.
Send Sepolia ETH from the faucet to address. Deposits are detected by the platform’s chain scanner: a deposit.detected webhook fires when the transfer is seen, and balance.updated when the balance changes.

3. Request a withdrawal

A withdrawal is a request, not an instruction. The platform validates it, evaluates the workspace’s policies, holds the amount against the balance, plans the transaction, has the signing nodes produce a threshold signature, broadcasts, and confirms.
A fresh sandbox workspace has no approval rules, so the request proceeds straight to signing. If a policy had required approval, status would stay pending until an approver acted in the console; the API call itself never bypasses that. Poll the withdrawal until it reaches a terminal status:
submitted means the signed transaction is on the network; success means it has reached the configured confirmation depth, and tx_hash, block_number and gas_used are filled in. Look the hash up on a Sepolia explorer to see the transfer.

What just happened

  • The wallet’s private key never existed in one place. Each signing node holds a share, and signing needed a threshold of them to cooperate.
  • Your API key could only do what its scopes allow. The sandbox key you received carries wallets:create, wallets:read, assets:attach, balances:read, withdrawals:create and withdrawals:read.
  • Every step (creation, attachment, withdrawal request, signing, broadcast) is recorded and available through Reporting & audit.

Where to next

Add a policy

Require approval above a threshold, whitelist destinations, set daily limits.

Receive webhooks

Replace polling with signed event deliveries.

API reference

Every endpoint, request and response.

Go to production

Choose managed, hybrid or self-hosted signing.