---
title: "Step 1, claim: add your product's domain. A verified sign-in email on the domain (or a subdomain or parent of it) verifies at once, unless the domain is one where anyone can get an address (a mailbox provider's: gmail.com, tuta.com …, or ours: agentdrives.com, matfy.com) and queues the free check (private); otherwise you get the ways to prove it (a code mailed to any address at the domain, a DNS TXT record, a meta tag on the home page or a file at /.well-known/agentdrive-verify.txt), and pending says why your address didn't."
method: POST
path: "/api/claims"
tags: ["Claims"]
---

# Step 1, claim: add your product's domain. A verified sign-in email on the domain (or a subdomain or parent of it) verifies at once, unless the domain is one where anyone can get an address (a mailbox provider's: gmail.com, tuta.com …, or ours: agentdrives.com, matfy.com) and queues the free check (private); otherwise you get the ways to prove it (a code mailed to any address at the domain, a DNS TXT record, a meta tag on the home page or a file at /.well-known/agentdrive-verify.txt), and pending says why your address didn't.

`POST /api/claims`

## Request

- Base URL: `https://agentdrives.com`
- URL: `https://agentdrives.com/api/claims`
- Auth: one of:
  - API key in header `x-api-key`
  - HTTP bearer

## Request body

- object
  - `domain` string, required
  - `tool` string: Directory slug, if listed
  - `scan` boolean: false: don't queue the free check when the claim verifies

## Response `201`

Claim, and the ways to verify it or the scan it queued

- object
  - `claim` Claim
    - `id` string
    - `domain` string
    - `tool_slug` string, nullable
    - `status` 'pending' | 'verified'
    - `token` string
    - `listed` boolean: GET /api/me: the product is in the directory
    - `check` object: GET /api/me, a proved domain only: its latest finished free check when another account ran it. You read its result at GET /api/orders/{order_id}/report
      - `order_id` string
      - `checked_at` string, date-time
      - `next_free_at` string, date-time
    - `plan_hint` object, nullable: GET /api/me: the product's cheapest paid plan from its pricing page as we last read it (checked), a suggestion for an order's plan; price_cents null when it isn't billed monthly
      - `plan` string
      - `price_cents` integer, nullable
      - `per_seat` boolean
      - `monthly` boolean, nullable
      - `source` string
      - `checked` string, date
  - `methods` Methods: Ways to prove the domain is yours
    - `email` object
      - `how` string
    - `dns` object
      - `type` 'TXT'
      - `name` string
      - `value` string
      - `then` string
    - `meta` object
      - `tag` string
      - `where` string
      - `then` string
    - `file` object
      - `url` string
      - `content` string
      - `then` string
  - `scan` ScanQueued, nullable: The free check a newly verified claim queues (null when the claim was verified before)
    - `queued` boolean
    - `order_id` string
    - `next_free_at` string, date-time: with scanned_recently
    - `reason` string: Why not: scanned_recently, check_running, rate_limited, scan_budget_reached, site_unreachable, flagged_unsafe
    - `fix` string
  - `pending` string: Why your account's own address didn't verify the claim, when it is at the domain

## Other responses

- `400`: Error as problem details (RFC 9457) with a machine-readable `error` and a `fix` that says what to do next

---

[API](https://skmtc.dev/agentdrives/apis/agentdrives-api.md) · [All operations](https://skmtc.dev/agentdrives/apis/agentdrives-api/llms.txt) · [OpenAPI document](https://skmtc.dev/agentdrives/apis/agentdrives-api/revisions/94dcaabff4b2?raw)
