ABX
Use ABX

Hosted services

Connect ABX to a compatible hosted resolver.

A resolver indexes ABX events and serves metadata. Run your own or use a compatible provider.

First-party service

abx auth login
abx remote abx
abx add 0xYourContract --remote abx

abx auth login opens a browser flow and saves ABX_SERVICES_API_KEY to an ignored .env. It does not print the key. The same sign-in provisions or reuses the creator wallet; an active browser session can avoid another email code. A later CLI login reuses the loaded key. Creating a key requires agreement to the Art Blocks User Terms. Existing keys continue to work; acceptance is checked only when a new key is created.

An account may have five active keys. The service cannot recover a lost key value.

abx auth keys
abx auth revoke-key <key-id>
abx auth logout

The built-in abx remote points to https://services.abx.io. Other providers can implement the same interfaces.

Creator RPC

When ABX_SERVICES_API_KEY is available and you have not configured ABX_RPC_URLS_<CHAIN> or ABX_RPC_URLS, the CLI treats the built-in abx remote as its default creator-RPC provider. It fetches that remote's public descriptor and uses the endpoint only when it advertises abx-creator-rpc/v1, bearer authentication, a route template, and the active chain. The existing public endpoints remain failovers, and your API key is sent only in the authorization header to the exact advertised URL.

This is a provider interface, not an ABX Services-only URL convention. Set ABX_RPC_REMOTE to any named remote or catalog URL to select another compatible provider; named remotes use their matching ABX_REMOTE_<NAME>_TOKEN, while an ad-hoc catalog URL follows the existing ABX_REMOTE_SELF_TOKEN convention. If its descriptor is unavailable, invalid, or does not advertise the active chain, ABX does not guess a route and continues with the public fallbacks. Run abx remote <name-or-url> to inspect the live advertisement. Rate limits and availability are service policy, not protocol guarantees.

The creator RPC is private CLI infrastructure for tasks such as deploying and checking project state. Do not publish its endpoint or API key, put either in browser code, or use it for a project website. Public applications should use their own Alchemy, QuickNode, Infura, or equivalent provider account. Excessive traffic or public-site use may result in suspension of the API key or account. To use your own RPC in the CLI, set ABX_RPC_URLS_<CHAIN> or ABX_RPC_URLS; explicit configuration always wins.

To report illegal, infringing, or otherwise prohibited content served by ABX Services, email legal@artblocks.io with the chain, contract address, exact service URL, and supporting information. Art Blocks can stop its services from indexing, rendering, or serving a project; it cannot remove blockchain data or copies held elsewhere.

Another provider

Add a named remote to .env:

ABX_REMOTE_MYPROVIDER_URL=https://meta.provider.example
ABX_REMOTE_MYPROVIDER_TOKEN=YOUR_API_KEY

Then pass the name to any remote command:

abx remote myprovider
abx add 0xYourContract --remote myprovider
abx status 0xYourContract --remote myprovider --watch

A named remote uses only its matching token. It never falls back to another credential.

What a compatible service exposes

GET /.well-known/abx-service returns the provider's chains, interfaces, authentication, rendering, and contract generations. Its endpoints map may place interfaces on different HTTPS origins. Inspect the descriptor before using a provider:

abx remote <name-or-url>

The first-party catalog, accounts, and project control live at services.abx.io. Public token data lives at resolver.abx.io. The CLI follows the descriptor instead of inferring behavior from a hostname.

A compatible creator-RPC provider advertises the interface and its route rather than relying on a well-known hostname or path:

{
  "interfaces": ["abx-creator-rpc/v1"],
  "chains": [8453, 84532],
  "endpoints": {
    "abx-creator-rpc/v1": {
      "baseUrl": "https://rpc.provider.example",
      "chains": [8453, 84532],
      "auth": "bearer",
      "pathTemplate": "/v1/rpc/{chainId}"
    }
  }
}

The resolved route accepts JSON-RPC over POST with the remote's bearer token. The chain list must be a subset of the catalog's chains, and a bearer-authenticated origin must use HTTPS (except loopback HTTP during local development). A fixed path is valid for a single-chain endpoint; a multi-chain endpoint normally uses the percent-encoded {chainId} substitution. Clients must not infer a route for an unadvertised interface or chain.

The version 1 control plane uses bearer authentication:

Method and pathPurpose
POST /v1/projectsRegister a project.
GET /v1/projectsList visible projects and status.
DELETE /v1/projects/{chainId}/{address}Remove a registration.
POST /v1/projects/{chainId}/{address}/reindexRequest a fresh index.
GET /v1/projects/{chainId}/{address}/statusRead progress and freshness.

Registration may return 202 while indexing continues. abx add waits by default. Use --no-wait when another process will watch status. Use --json for structured output.

The status words are queued, backfilling, live, stale, and failed. A stale service keeps serving its last indexed state.

After the service verifies the factory and core version, project responses include contractGeneration. A missing value means provenance is not established.

Public reads

Do not guess metadata routes. Read the URI stored by the contract:

abx tokenuri 0xYourContract --token 0
abx contracturi 0xYourContract --json

The public API returns distinct status codes for bad routes, unsupported chains, unregistered projects, unminted tokens, and burned ERC-721 tokens.

Leave cleanly

The chain remains the source of truth. Move to another provider or your own resolver with:

abx migrate 0xYourContract --from <source> --to <destination>

The command copies offchain values, checks hashes, and compares both resolvers. It does not update DNS or the onchain base URI.

On this page