one-api.ai

ads.txt and sellers.json checker API

The ads.txt checker API reads a host's /ads.txt and /sellers.json and returns both as structured JSON, which is easier to diff and validate than the raw files.

Early access: billing is not open yet. Prices below are what a call will debit when it opens. Request access →

Price: $0.001 per call (one credit), with 25 free lookups per account each UTC month. Data source: the host's ads.txt and sellers.json.

Request

Send POST /v1/ads-txt with a JSON body and your key in the Authorization: Bearer header. Send a host. The JSON parses only that host's /ads.txt and /sellers.json.

curl https://one-api.ai/v1/ads-txt \
  -H "Authorization: Bearer $ONE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"host":"example.com"}'
import os, requests

resp = requests.post(
    "https://one-api.ai/v1/ads-txt",
    headers={"Authorization": f"Bearer {os.environ['ONE_API_TOKEN']}"},
    json={"host":"example.com"},
    timeout=30,
)
print(resp.status_code, resp.json())

Response fields

FieldMeaning
ads_txt.found / statusWhether /ads.txt answered 2xx, and its HTTP status.
ads_txt.recordsEach line as domain, publisher_id, relationship (DIRECT or RESELLER) and certification_authority_id.
ads_txt.variablescontact, subdomain, inventorypartnerdomain, ownerdomain and managerdomain lines.
sellers_json.sellersEach seller's seller_id, seller_type, is_confidential, name and domain.
sellers_json.identifiersIdentifier name and value pairs.
sellers_json.contact_email / versionTop-level contact and version fields, or null.
truncatedTrue on either file when it was larger than 1 MiB.

Limits and behaviour

Errors come back as JSON with an HTTP status and a short code. HTTP 400 means the input was refused, 401 a missing or bad key, 402 an empty balance, 429 a rate limit and 502 an upstream failure. Calls that end in 400 or a 5xx status are not charged.

What people use it for

The same lookup is available to AI agents through the remote MCP server at https://one-api.ai/mcp, using the same key and the same price per call.

FAQ

Does it validate seller IDs against the exchange?

No. It parses both files on the host you send. Cross-checking a publisher's ads.txt against each exchange's sellers.json takes one call per host.

Is app-ads.txt supported?

Not yet. Only /ads.txt and /sellers.json are read.

What if the host has no ads.txt?

found is false and status carries the HTTP status, usually 404. The call still succeeds and is charged as one lookup.

Why read sellers.json as well?

An ads.txt line names a seller account at an ad system. That ad system's sellers.json says who the account belongs to and whether it is a publisher or an intermediary, so reading both lets you match DIRECT lines to a named seller.

Related

Last updated 2026-10-31.