# List a tool on Another Directory

> How to add a software tool to Another Directory (another.directory), a directory of new software tools. Written for AI agents acting for a tool's maker; people can follow it too.

## What a listing gets

- Its own page at https://another.directory/tools/{slug}: what the tool does, who it's for, pricing and an FAQ. The maker can edit it from an account.
- A place on the alternatives and comparison pages of similar tools, and on its category and tag pages.
- A Markdown copy of its page and an entry in https://another.directory/llms.txt, for AI assistants.
- Structured data (FAQ, breadcrumbs, software application) and a sitemap entry; new pages are sent to search engines through IndexNow.
- Free: one dofollow link to the tool's site while the Another Directory badge stays on it.
- Pro ($29 once): Live right away, two dofollow links, no badge, 7 days on the homepage and 30 days at the top of its category, tags and alternatives.
- Boost ($99 once): Everything in Pro, pinned first on the homepage for 14 days in a double-width tile, and above Pro in its category.

## Submit through the API, without an account

For AI agents: no account, password or API key is needed. The agent writes the listing itself and sends it with the maker's email; nothing is generated here. People submit at https://another.directory/submit, which asks them to create an account first.

The same API as an OpenAPI description, with every field and limit: https://another.directory/openapi.json

**A listing is published only once a plan is picked.** Send `plan` with the listing. Without it, the listing stays an unpublished draft that nobody sees, and it is deleted after 30 days if no badge or payment follows.

### Before you start: pick the plan

Ask the maker which one, if you don't know.

- **Free** (needs the tool's site): the Another Directory badge goes on a public page of the tool's site, and the listing goes live as soon as it's found there. Put the badge up first (step 1 gives its HTML), then send the listing with `"plan": "free"` and `"badge_url": "<the page with the badge>"`. Without `badge_url`, the homepage is checked.
- **Pro** ($29 once) or **Boost** ($99 once): no badge. Send the listing with `"plan": "pro"` (or `"boost"`); the answer has a `checkout_url` on Stripe. Give it to the maker to pay. The listing goes live as soon as the payment lands.

### 1. Check the listing, then send it

`POST https://another.directory/api/submissions/check` with the JSON below runs every check and saves nothing. It answers `{"ok": true}` with the page address the listing will get (`page_url`) and the badge HTML for that page (`badge.html`), or the same errors sending it would get. Fix what it reports, then send the same JSON to `POST https://another.directory/api/submissions`. Once sent, the text can't be changed through the API.

```
POST https://another.directory/api/submissions
Content-Type: application/json

{
  "url": "https://yourtool.com",
  "email": "maker@yourtool.com",
  "name": "Yourtool",
  "tagline": "Form backend for static sites, no server needed",
  "summary": "Yourtool collects form submissions from static sites and sends them to email, Slack or a webhook. Point a form's action at it and submissions arrive within seconds.",
  "what_it_does": "...",
  "who_its_for": "...",
  "highlights": ["Spam filtering on every form", "Email, Slack and webhook delivery", "File uploads up to 25 MB"],
  "pricing_model": "freemium",
  "pricing_note": "Free up to 100 submissions a month, paid plans from $9 a month.",
  "category": "forms-surveys",
  "tags": ["forms", "static sites", "webhooks"],
  "meta_description": "Yourtool is a form backend for static sites: point a form at it and get submissions by email, Slack or webhook, with spam filtering.",
  "logo": "https://yourtool.com/logo.png",
  "plan": "pro"
}
```

Every field is required except `pricing_note`, `meta_description`, `logo`, `image`, `plan` and `badge_url`:

- `url`: the tool's website.
- `email`: the maker's address, the person the listing is for. The listing moves into the account with this email (step 4), and it fills in Stripe checkout. Nothing is emailed to it.
- `name`: 2 to 60 characters.
- `tagline`: one line, 20 to 90 characters.
- `summary`: 120 to 320 characters.
- `what_it_does`: 280 to 1400 characters. Paragraphs separated by a blank line are fine.
- `who_its_for`: 100 to 700 characters.
- `highlights`: 3 to 6 short points, 6 to 120 characters each.
- `pricing_model`: one of `free`, `freemium`, `free_trial`, `paid`, `open_source`, `unknown`.
- `pricing_note`: up to 300 characters, optional.
- `category`: one category slug from the list below, also at `GET https://another.directory/api/categories` as JSON.
- `tags`: 2 to 6 tags, 2 to 24 characters each, lowercase.
- `meta_description`: optional, 100 to 160 characters. The description search engines show under the page title: what the tool is and who it's for, in one or two sentences. Without it, the first sentences of `summary` that fit are used.
- `logo`: optional. The tool's logo, ideally square, as a PNG, JPEG or WebP up to 512 KB. Without it, the site's own icon is used.
- `image`: optional. A picture of the product, such as a screenshot, landscape (about 1200×630 works well), as a PNG, JPEG or WebP up to 2 MB. Without it, the site's og:image is used.

- `plan`: `free`, `pro` or `boost` (see above). Leave it out only if the plan will be picked later; the listing isn't published until then.
- `badge_url`: with `"plan": "free"`, the page of the tool's site that has the badge.

`logo` and `image` are either the address of the file (`https://...`) or the file itself as a data URI (`data:image/png;base64,...`). SVG isn't accepted.

Write it from what the tool's site says, plainly, like an editor would: facts, no sales voice. The text is checked and refused with the reason when it uses hype words ("seamless", "unlock", "revolutionary", "cutting-edge"...), filler phrases that read as machine-written ("delve", "robust", "streamline", "the power of"...), exclamation marks, long dashes, emoji, all caps, links or Markdown.

The answer (201) has `status`, a `message` that says whether the listing is live and what to do if not, `status_url` and the listing as it was stored. With `"plan": "pro"` or `"boost"` it also has `checkout_url`. When the plan couldn't be taken (the badge wasn't found yet, say), the listing is still saved, `plan_error` says why, and step 2 finishes it. Keep `status_url`: it's the only way to follow this submission without an account.

### Categories

- `ai-assistants`: AI Assistants
- `analytics`: Analytics
- `automation`: Automation
- `communication`: Communication
- `customer-support`: Customer Support
- `data`: Data & Databases
- `design`: Design
- `developer-tools`: Developer Tools
- `ecommerce`: E-commerce
- `education`: Education
- `email`: Email
- `finance`: Finance & Accounting
- `health`: Health & Fitness
- `hosting`: Hosting & Infrastructure
- `hr`: HR & Recruiting
- `images`: Images & Photos
- `legal`: Legal
- `marketing`: Marketing
- `no-code`: No-Code
- `productivity`: Productivity
- `project-management`: Project Management
- `sales`: Sales & CRM
- `security`: Security & Privacy
- `seo`: SEO
- `social-media`: Social Media
- `video`: Video
- `audio`: Audio & Podcasting
- `writing`: Writing & Content
- `forms-surveys`: Forms & Surveys
- `scheduling`: Scheduling & Calendars
- `translation`: Translation
- `research`: Research
- `personal-finance`: Personal Finance
- `travel`: Travel

### 2. No plan yet, or it didn't go through

Until a plan is taken the listing is a draft and isn't published. `next_steps` and `actions` in every answer say what can be done:

- Free: put `badge.html` on a public page of the tool's site (the footer of the homepage is typical), deploy it, then `POST {"badge_url": "<that page>"}` to `actions.verify_badge.url`. The listing goes live as soon as the badge is found.
- Pro or Boost: `POST {"plan": "pro"}` (or `"boost"`) to `actions.checkout.url`. Open the `checkout_url` from the answer and pay on Stripe's page. The listing goes live as soon as the payment lands; `GET status_url` shows `live`.

### 3. Follow it

`GET status_url` any time: `status` and `message` say where the listing is.

### 4. Editing needs an account

The text can't be changed through the API once it's sent. To edit it, the maker creates an account at https://another.directory/users/register (Google or email) with the same email that was sent in step 1, or signs in if they already have one. Once the email is confirmed, the listing moves into that account and is edited from the dashboard. From then on `status_url` shows only the status, and badge or payment requests answer `409 claimed`.

### Statuses

`draft` (not published: no plan yet), `awaiting_badge` (not published: the badge wasn't found yet), `awaiting_payment` (not published: waiting for the payment), `live`, `rejected` (taken down; `message` says why).

### Errors

- `422 invalid`: some fields need fixing. `errors` maps each field to its problems; fix them and send the whole listing again.
- `409 already_listed`: the domain is already live on Another Directory.
- `409 recently_submitted`: the domain was already sent without an account in the last 24 hours; use the `status_url` from that submission.
- `422 badge_not_verified`: the badge wasn't found on that page; `message` says why, `submission` has the current state.
- `422 invalid_plan` or `checkout_unavailable`: the plan name is wrong, or a payment can't be opened right now (`message` says why).
- `409 claimed`: the listing is in the maker's account now.
- `404 not_found`: no submission has this status URL.
- `429`: too many requests; wait and retry.

Every error has `error` and `message`. Drafts that never get a plan or an account are deleted after 30 days.

## Rules

- Software products only: apps, SaaS, developer tools, browser extensions, open-source projects people can use or buy.
- One listing per domain (or per app on an app store).
- The text says what the site says, in plain language; nothing is invented. Sites that are parked, adult, gambling or scams are taken down.
- At most 10 submissions an hour from one address.

Questions: hello@another.directory. Plans and prices: https://another.directory/pricing.
