One base URL, one header, three endpoints.

The Metera HTTP API. Every response carries the verification level it earned. No SDK required: it works from any language that can make a request.

Every request goes to https://api.metera.xyz and carries a bearer token in the Authorization header. Keys are created in the dashboard and shown once. There are three endpoints, and the MCP server exposes the same capabilities to an agent that speaks it rather than HTTP.

curl https://api.metera.xyz/v1/ask \
  -H "Authorization: Bearer $METERA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"SOL price"}'

The three endpoints

/v1/ask takes a question in language and resolves it to a canonical type before calling. Use it when the caller is a person or a model writing prose.

/v1/get_data calls a canonical type directly with explicit parameters. There is no language resolution in the path, so it is faster and fully deterministic. Use it when your code already knows what it wants.

/v1/types returns the live catalog: every servable type, how many independent providers back it, and the maximum level it can reach. The catalog never lists a level the network cannot actually deliver, and when a type is capped it says why.

The verification block

Every answer carries one, and it is the reason to use this API rather than call a provider directly. level is anchored, consensus or single_source. Anchored means the answer was checked against an independent authoritative reference, typically on chain state, and agreed with it. Consensus means it agreed with sources measured to be independent of one another, where providers found to share an upstream count as one rather than as several. Single source means one provider answered with no independent peer available to confirm it.

{
  "data": { "token": "SOL", "priceUsd": 72.46 },
  "verification": {
    "level": "anchored",
    "origin": "measured",
    "source": "okx",
    "cost": "0.0015",
    "traceId": "tr_dr29wv"
  }
}

origin is orthogonal to level and answers a different question: whether the source measured the number or we derived it from what the source returned. A value can be measured and unconfirmed, or derived and anchored. Both facts ship, because collapsing them into one word would let a caller satisfy themselves about one and assume the other.

Statuses that are not errors

A refusal is a result. When a source answered but nothing reached your required level, Metera refuses to deliver rather than pass unconfirmed data labelled as verified, and the response says so with the reason. The same is true when no servable type matches the query: the honest answer is that nothing measures it, not an invented number.

Genuine failures return the matching HTTP status with a typed code: a missing or invalid key, a query the request omitted, a type that is not servable, a rate limit to back off from, or an engine that could not complete the request.

Two numbers about cost

They answer different questions. cost in the verification block is what the engine consumed on the source it used. debitedCredits is what your account was charged. The second includes the markup and any failed attempts we absorbed, so it is the number on your bill, while the first is the number that explains the routing.

The SDK

The JavaScript and TypeScript package wraps these endpoints. All three surfaces, HTTP, SDK and MCP, share one engine and return the same verification block on every answer. There is no version of Metera that answers without saying how far the checking got.