---
title: "Submit one listing per site for a person to review. Submitting accepts the directory terms at /ai-tools/terms, never the service terms: an agent tells the maker first. Answers the page, a claimToken (keep it), the badge HTML, the terms URL and the next steps. The maker's email is required: an agent asks the human for it."
method: POST
path: "/api/ai-tools/submit"
---

# Submit one listing per site for a person to review. Submitting accepts the directory terms at /ai-tools/terms, never the service terms: an agent tells the maker first. Answers the page, a claimToken (keep it), the badge HTML, the terms URL and the next steps. The maker's email is required: an agent asks the human for it.

`POST /api/ai-tools/submit`

## Request

- Base URL: `https://shapelessai.com`
- URL: `https://shapelessai.com/api/ai-tools/submit`
- Auth: none required

## Request body

- DirectorySubmitInput
  - `name` string, required
  - `homepage` string, uri, required
  - `tagline` string, required
  - `description` string, required
  - `categories` string[], required: Slugs from /api/ai-tools/requirements.
  - `pricing` 'free' | 'freemium' | 'trial' | 'paid', required
  - `email` string, email, required: The maker's address. An agent asks the human; it never invents one.
  - `surfaces` string[]
  - `hosts` string[]
  - `priceNote` string, nullable
  - `via` 'form' | 'api' | 'mcp': Which door; defaults to api.

## Response `200`

OK

- DirectorySubmitted
  - `ok` boolean, required
  - `slug` string, required
  - `status` 'pending' | 'approved' | 'live': pending: not yet read; approved: read, goes live when the badge is seen; live.
  - `page` string, uri, required
  - `claimToken` string, required: slc_...: the only credential for this listing. Keep it.
  - `badge` object, required
    - `html` string
    - `htmlLight` string
    - `text` string
    - `where` string
  - `agentReady` object, nullable
  - `terms` string, uri: The directory terms the submission accepted; not the service terms.
  - `next` string[], required: What to do, in order.
  - `docs` string, uri

## Other responses

- `400`: Field problems, by field.
- `409`: That site is already listed or waiting; `existing` is its page.
- `429`: 3 accepted listings and 30 attempts an hour per address.

---

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