Workflows
Machine-readable Arazzo workflows with generated curl, TypeScript, and JavaScript examples for every step.
Universe implementation Verified 2026-09-02
Describes what a Bitcoin Universe service actually does today. It is not a statement about the protocol in general.
- Page ID
-
workflows - Normative authority
- Universe implementation documentation
- Networks
- mainnet, regtest
- Documentation version
- 2026.08
- Audience
- developer, integrator
- Owner
- bitcoin-universe-docs
- Sources
-
- Universe ARC-20 index and Marketplace v1 authority
at
670030e50071private repository - Atomicals ElectrumX
at
v1.5.2.0
- Universe ARC-20 index and Marketplace v1 authority
at
- Known limitations
-
- Every workflow here is read-only or explicitly local. No hosted mainnet signing or broadcast workflow exists.
- Steps that execute against the Regtest Lab require the lab to be running locally.
このコンテンツはまだ日本語訳がありません。
The workflow layer is a single Arazzo 1.1.0 document under contracts/workflows/, validated
against the specification schema in CI with every referenced OpenAPI operation ID resolved. The
page below, the curl examples, the TypeScript and JavaScript snippets, the MCP tool metadata, and
the conformance tests all generate from that one document.
The machine-readable sources are the Arazzo document and the generated summary.
1. Resolve an Atomical and inspect its current ownership
Resolve a Realm or NFT identifier and fetch the asset, its holders, and its history.
fetch-asset - GET /v1/atomicals/assets/{atomicalId}
Operation nftrealms.getAsset. Parameters come from the workflow inputs; see
the Arazzo document in contracts/workflows for the exact mappings.
curl
curl -sS -H 'accept: application/json' http://127.0.0.1:3043/v1/atomicals/assets/REPLACE_ME
TypeScript
const response = await client.get_asset(/* parameters per atomicals-nfts-realms contract */) assert(response.ok)
JavaScript
const response = await fetch('http://127.0.0.1:3043/v1/atomicals/assets/{atomicalId}', { headers: { accept: 'application/json' } })
if (!response.ok) throw new Error('step fetch-asset failed') fetch-holders - GET /v1/atomicals/assets/{atomicalId}/holders
Operation nftrealms.getAssetHolders. Parameters come from the workflow inputs; see
the Arazzo document in contracts/workflows for the exact mappings.
curl
curl -sS -H 'accept: application/json' http://127.0.0.1:3043/v1/atomicals/assets/REPLACE_ME/holders
TypeScript
const response = await client.get_asset_holders(/* parameters per atomicals-nfts-realms contract */) assert(response.ok)
JavaScript
const response = await fetch('http://127.0.0.1:3043/v1/atomicals/assets/{atomicalId}/holders', { headers: { accept: 'application/json' } })
if (!response.ok) throw new Error('step fetch-holders failed') 2. Inspect an ARC-20 ticker and its metadata
feed-first-page - GET /token-explorer/arc20
Operation arc20.arc20GetFeedPage. Parameters come from the workflow inputs; see
the Arazzo document in contracts/workflows for the exact mappings.
curl
curl -sS -H 'accept: application/json' http://127.0.0.1:3043/token-explorer/arc20
TypeScript
const response = await client.arc20_get_feed_page(/* parameters per arc20 contract */) assert(response.ok)
JavaScript
const response = await fetch('http://127.0.0.1:3043/token-explorer/arc20', { headers: { accept: 'application/json' } })
if (!response.ok) throw new Error('step feed-first-page failed') 3. Inspect ARC-20 balance and allocation through the indexed feed
Read the feed page and status so a caller can see allocation state and endpoint freshness together.
read-status - GET /token-explorer/status
Operation arc20.arc20GetStatus. Parameters come from the workflow inputs; see
the Arazzo document in contracts/workflows for the exact mappings.
curl
curl -sS -H 'accept: application/json' http://127.0.0.1:3043/token-explorer/status
TypeScript
const response = await client.arc20_get_status(/* parameters per arc20 contract */) assert(response.ok)
JavaScript
const response = await fetch('http://127.0.0.1:3043/token-explorer/status', { headers: { accept: 'application/json' } })
if (!response.ok) throw new Error('step read-status failed') read-feed - GET /token-explorer/arc20
Operation arc20.arc20GetFeedPage. Parameters come from the workflow inputs; see
the Arazzo document in contracts/workflows for the exact mappings.
curl
curl -sS -H 'accept: application/json' http://127.0.0.1:3043/token-explorer/arc20
TypeScript
const response = await client.arc20_get_feed_page(/* parameters per arc20 contract */) assert(response.ok)
JavaScript
const response = await fetch('http://127.0.0.1:3043/token-explorer/arc20', { headers: { accept: 'application/json' } })
if (!response.ok) throw new Error('step read-feed failed') 4. Verify a Container and DMINT item
Fetch the NFT asset and its metadata, then validate the DMINT proof for an item locally.
fetch-nft - GET /v1/atomicals-nfts/assets/{atomicalId}
Operation nftrealms.getNft. Parameters come from the workflow inputs; see
the Arazzo document in contracts/workflows for the exact mappings.
curl
curl -sS -H 'accept: application/json' http://127.0.0.1:3043/v1/atomicals-nfts/assets/REPLACE_ME
TypeScript
const response = await client.get_nft(/* parameters per atomicals-nfts-realms contract */) assert(response.ok)
JavaScript
const response = await fetch('http://127.0.0.1:3043/v1/atomicals-nfts/assets/{atomicalId}', { headers: { accept: 'application/json' } })
if (!response.ok) throw new Error('step fetch-nft failed') fetch-metadata - GET /v1/atomicals-nfts/assets/{atomicalId}/metadata
Operation nftrealms.getNftMetadata. Parameters come from the workflow inputs; see
the Arazzo document in contracts/workflows for the exact mappings.
curl
curl -sS -H 'accept: application/json' http://127.0.0.1:3043/v1/atomicals-nfts/assets/REPLACE_ME/metadata
TypeScript
const response = await client.get_nft_metadata(/* parameters per atomicals-nfts-realms contract */) assert(response.ok)
JavaScript
const response = await fetch('http://127.0.0.1:3043/v1/atomicals-nfts/assets/{atomicalId}/metadata', { headers: { accept: 'application/json' } })
if (!response.ok) throw new Error('step fetch-metadata failed') 5. Resolve a Realm and its Subrealms
resolve - GET /v1/atomicals-realms/resolve
Operation nftrealms.resolveRealm. Parameters come from the workflow inputs; see
the Arazzo document in contracts/workflows for the exact mappings.
curl
curl -sS -H 'accept: application/json' http://127.0.0.1:3043/v1/atomicals-realms/resolve
TypeScript
const response = await client.resolve_realm(/* parameters per atomicals-nfts-realms contract */) assert(response.ok)
JavaScript
const response = await fetch('http://127.0.0.1:3043/v1/atomicals-realms/resolve', { headers: { accept: 'application/json' } })
if (!response.ok) throw new Error('step resolve failed') subrealms - GET /v1/atomicals-realms/subrealms
Operation nftrealms.getSubrealms. Parameters come from the workflow inputs; see
the Arazzo document in contracts/workflows for the exact mappings.
curl
curl -sS -H 'accept: application/json' http://127.0.0.1:3043/v1/atomicals-realms/subrealms
TypeScript
const response = await client.get_subrealms(/* parameters per atomicals-nfts-realms contract */) assert(response.ok)
JavaScript
const response = await fetch('http://127.0.0.1:3043/v1/atomicals-realms/subrealms', { headers: { accept: 'application/json' } })
if (!response.ok) throw new Error('step subrealms failed') 6. Diagnose endpoint identity, height, and freshness
The exact sequence the Conformance Workbench runs - liveness, readiness, and status with the indexed lag.
liveness - GET /live
Operation arc20.arc20GetLive. Parameters come from the workflow inputs; see
the Arazzo document in contracts/workflows for the exact mappings.
curl
curl -sS -H 'accept: application/json' http://127.0.0.1:3043/live
TypeScript
const response = await client.arc20_get_live(/* parameters per arc20 contract */) assert(response.ok)
JavaScript
const response = await fetch('http://127.0.0.1:3043/live', { headers: { accept: 'application/json' } })
if (!response.ok) throw new Error('step liveness failed') readiness - GET /ready
Operation arc20.arc20GetReady. Parameters come from the workflow inputs; see
the Arazzo document in contracts/workflows for the exact mappings.
curl
curl -sS -H 'accept: application/json' http://127.0.0.1:3043/ready
TypeScript
const response = await client.arc20_get_ready(/* parameters per arc20 contract */) assert(response.ok)
JavaScript
const response = await fetch('http://127.0.0.1:3043/ready', { headers: { accept: 'application/json' } })
if (!response.ok) throw new Error('step readiness failed') status - GET /token-explorer/status
Operation arc20.arc20GetStatus. Parameters come from the workflow inputs; see
the Arazzo document in contracts/workflows for the exact mappings.
curl
curl -sS -H 'accept: application/json' http://127.0.0.1:3043/token-explorer/status
TypeScript
const response = await client.arc20_get_status(/* parameters per arc20 contract */) assert(response.ok)
JavaScript
const response = await fetch('http://127.0.0.1:3043/token-explorer/status', { headers: { accept: 'application/json' } })
if (!response.ok) throw new Error('step status failed') 7. Build and validate a safe ARC-20 transfer plan locally
Entirely local. Uses the UTXO Safety Planner to generate candidate plans and the Protocol Lab to replay the winning plan before anything is signed. No OpenAPI call moves funds.
plan-locally - GET /v1/atomicals/utxos/{txid}/{vout}
Operation nftrealms.getByOutpoint. Parameters come from the workflow inputs; see
the Arazzo document in contracts/workflows for the exact mappings.
curl
curl -sS -H 'accept: application/json' http://127.0.0.1:3043/v1/atomicals/utxos/REPLACE_ME/REPLACE_ME
TypeScript
const response = await client.get_by_outpoint(/* parameters per atomicals-nfts-realms contract */) assert(response.ok)
JavaScript
const response = await fetch('http://127.0.0.1:3043/v1/atomicals/utxos/{txid}/{vout}', { headers: { accept: 'application/json' } })
if (!response.ok) throw new Error('step plan-locally failed') 8. Execute the safe-transfer scenario against the local Regtest Lab
Requires npm run lab:up and lab:seed. Broadcasts only to the disposable regtest chain.
lab-health - GET /live
Operation arc20.arc20GetLive. Parameters come from the workflow inputs; see
the Arazzo document in contracts/workflows for the exact mappings.
curl
curl -sS -H 'accept: application/json' http://127.0.0.1:3043/live
TypeScript
const response = await client.arc20_get_live(/* parameters per arc20 contract */) assert(response.ok)
JavaScript
const response = await fetch('http://127.0.0.1:3043/live', { headers: { accept: 'application/json' } })
if (!response.ok) throw new Error('step lab-health failed') 9. Replay an ARC-20 allocation conformance vector
Local execution of conformance vectors through the shared allocation engine. No network at all.
freshness-check - GET /token-explorer/status
Operation arc20.arc20GetStatus. Parameters come from the workflow inputs; see
the Arazzo document in contracts/workflows for the exact mappings.
curl
curl -sS -H 'accept: application/json' http://127.0.0.1:3043/token-explorer/status
TypeScript
const response = await client.arc20_get_status(/* parameters per arc20 contract */) assert(response.ok)
JavaScript
const response = await fetch('http://127.0.0.1:3043/token-explorer/status', { headers: { accept: 'application/json' } })
if (!response.ok) throw new Error('step freshness-check failed') 10. Execute and inspect an AVM beta sample locally
Runs the pinned beta interpreter in the AVM Workbench. Experimental layer, never a deployment claim.
liveness-only - GET /live
Operation arc20.arc20GetLive. Parameters come from the workflow inputs; see
the Arazzo document in contracts/workflows for the exact mappings.
curl
curl -sS -H 'accept: application/json' http://127.0.0.1:3043/live
TypeScript
const response = await client.arc20_get_live(/* parameters per arc20 contract */) assert(response.ok)
JavaScript
const response = await fetch('http://127.0.0.1:3043/live', { headers: { accept: 'application/json' } })
if (!response.ok) throw new Error('step liveness-only failed') Running the local workflows
Section titled “Running the local workflows”The Regtest Lab workflows need the lab running:
npm run lab:upnpm run lab:seednpm run lab:testEverything else runs against any endpoint you choose in the Conformance Workbench, which never sends a mutation.