Submit a product to the directory
submit_productAdd a product to the directory on behalf of the builder whose agent token this call carries. Call this when the person you are working for has asked to be listed here, or has asked you to add a product they built. Do not call it to add somebody else's product, and do not call it speculatively — a listing is a public claim about a real builder. REQUIRES A TOKEN: send Authorization: Bearer wayb_…. A builder creates one at /mine while signed in; without it this tool refuses and every other tool here still works. The listing is created as PENDING and is reviewed before it appears — a successful call returns an id and a status of "pending", never a live listing. Do not report it as published. Submit the builder's OWN product. One product per builder, and the directory refuses a second copy of a product it already lists (by website host or by name) with a message saying so. Call list_filters first: category and region are closed vocabularies, and a value outside them is rejected rather than corrected. Funding fields are optional and tri-state — omit activelyRaising, or send null, where the builder has not said. Do not infer it, and do not send false to mean "did not say".
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| mrr | No | Monthly recurring revenue, only where the builder chose to publish it. | |
| city | No | City, or null. | |
| name | Yes | The product name, up to 80 characters. | |
| openTo | No | What the builder invited contact about. Omit for none. | |
| region | Yes | REQUIRED. Country name from list_filters. Closed vocabulary. Use "Global" where the builder is not anywhere in particular or would rather not say — that is a real answer on this list, and it is the one to send rather than guessing a country or omitting the field. | |
| builder | Yes | Attribution. `name` is required; the rest is optional. | |
| logoUrl | No | An https URL to a square logo, or null. | |
| socials | No | The PRODUCT's own accounts, keyed by platform — not the builder's, which go under `builder.socials`. Keys: `x`, `linkedin`, `instagram`, `tiktok`, `youtube`, `facebook`, `github`, `email`. Each is `{ "url": "…" }` except `x`, which is `{ "handle": "…" }`, and `email`, which is `{ "address": "…" }` and should be a business address (support@, hello@) rather than a person's. `github` is the PRODUCT's repository — the code somebody would clone. The builder's own GitHub account is a different thing and goes in `builder.socials.github`. | |
| category | Yes | REQUIRED. The product's MAIN category, from list_filters. Closed vocabulary. This is the one a row, a card and the sharing image show. | |
| oneLiner | Yes | One sentence saying what it does, up to 80 characters. Not a tagline. | |
| categories | No | Optional. Up to 3 categories from list_filters, MAIN FIRST — for a product that is honestly more than one thing (an AI agent that is also a dev tool). The first must be the same value as `category`; send it first or leave it out of the list and it is put there. A listing is findable and filed under all of them, so send only the ones the builder would claim: three loosely-related categories are worse for them than one true one. Ask the builder rather than inferring from their site. | |
| websiteUrl | Yes | REQUIRED. The product's own https URL — the address a reader opens. A code repository or an app store page counts. REFUSED: a shared document (Drive, Docs, Dropbox, Notion), and a free platform deploy subdomain (vercel.app, netlify.app, github.io, web.app, railway.app and the like) — the builder needs a domain of their own first. Never invent one: ask the builder. | |
| description | Yes | REQUIRED, up to 800 characters. A short paragraph in the builder's OWN words about what the product is and who it is for, shown on the listing's own page. Plain text — links are not rendered, so put the address in websiteUrl. Never write it yourself, and never pad it to a length: ask the builder for it, the way you would ask for the URL. A short answer in their words is worth more here than a long one in yours. It became required on 2026-09-03 because a listing without one has nothing on its page a search engine can tell apart from every other listing. | |
| fundingStage | Yes | Funding stage. Use "undisclosed" where the builder has not said — never guess. | |
| activelyRaising | No | true, false, or null for "would rather not say". Default null. |