Start backend first: cargo run --bin specter -- serve --port 3001 from SPECTER/specter.
Integration loop
Generate recipient keys
curl -s -X POST http://localhost:3001/api/v1/keys/generate | tee /tmp/specter-keys.json
META_ADDRESS=$(jq -r '.meta_address' /tmp/specter-keys.json)
VIEWING_SK=$(jq -r '.viewing_sk' /tmp/specter-keys.json)
SPENDING_PK=$(jq -r '.spending_pk' /tmp/specter-keys.json)
SPENDING_SK=$(jq -r '.spending_sk' /tmp/specter-keys.json)
Create stealth payload
curl -s -X POST http://localhost:3001/api/v1/stealth/create \
-H 'Content-Type: application/json' \
-d "{\"meta_address\":\"$META_ADDRESS\"}" | tee /tmp/specter-create.json
EPHEMERAL_KEY=$(jq -r '.ephemeral_ciphertext' /tmp/specter-create.json)
VIEW_TAG=$(jq -r '.view_tag' /tmp/specter-create.json)
STEALTH_ADDRESS=$(jq -r '.stealth_address' /tmp/specter-create.json)
echo "Stealth destination: $STEALTH_ADDRESS"
Publish announcement
curl -s -X POST http://localhost:3001/api/v1/registry/announcements \
-H 'Content-Type: application/json' \
-d "{\"ephemeral_key\":\"$EPHEMERAL_KEY\",\"view_tag\":$VIEW_TAG,\"tx_hash\":\"0x1111111111111111111111111111111111111111111111111111111111111111\",\"amount\":\"0.01\",\"chain\":\"ethereum\"}" | jq .
Scan and discover
curl -s -X POST http://localhost:3001/api/v1/stealth/scan \
-H 'Content-Type: application/json' \
-d "{\"viewing_sk\":\"$VIEWING_SK\",\"spending_pk\":\"$SPENDING_PK\",\"spending_sk\":\"$SPENDING_SK\"}" | jq .
Expected result: one discovery with stealth_address matching the create step.
You validated the core integration loop and payload contract: keygen → create → publish → scan. Your app can now use these exact calls.
Next step after quickstart