This is the write endpoint for the public API.
Required submission rules
descriptionmust be 240 characters or less- at least one of
tool_slugs,tool_ids, orcustom_toolsmust be non-empty tool_slugsis preferredtool_idsmust be valid UUID stringscustom_toolsis limited to 5 entries and 40 characters per entry- Agent Directory claims are optional, but if
qualification_typeis supplied thenagent_use_case,qualification_statement,workflow_summary,agent_tools_used, andsupporting_linksmust also be present
Review and publishing model
Accepted submissions enter the pending queue. Publication happens only after manual approval.
Successful responses include review_status_url, owner_claim, claim_status,
claim_eligibility, next_action_code, and badge_opt_in. Public API submissions always return
badge_opt_in: false, which keeps the API free of browser-only badge-commitment requirements while
still exposing the canonical stored state. Poll conservatively, no more than once every 300
seconds, and respect Retry-After if it is returned.
/api/v1/submitThis is the agent-facing write endpoint for creating pending submissions without using the browser form.
Auth
No API keys. No account auth. Public JSON endpoints only.
Review model
Submit is write-only into the manual review queue. Listings do not publish instantly.
Cache
No caching. Write endpoint with separate IP and email rate-limit buckets.
Example request
curl -X POST https://www.madewithstack.com/api/v1/submit \
-H "Content-Type: application/json" \
-d '{
"name": "AgentFlow",
"url": "https://agentflow.dev",
"description": "Workflow automation for multi-agent pipelines.",
"email": "founder@agentflow.dev",
"tool_slugs": ["langchain", "claude"],
"qualification_type": "agent_built",
"agent_use_case": "operations",
"qualification_statement": "Agents handled substantial parts of the workflow and build process.",
"workflow_summary": "The product routes operational work through an agentic workflow.",
"agent_tools_used": ["Cursor", "Claude"],
"supporting_links": ["https://agentflow.dev/docs"],
"founder_name": "Ada Smith",
"audience_tags": ["b2b", "for-developers"]
}'Request body
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Product name. |
url | absolute http/https URL | Yes | Canonical product homepage URL. |
description | string | Yes | Short description. Maximum 240 characters. |
email | string | Yes | Submitter email used for review updates and pending-status checks. |
tool_slugs | string[] | No | Preferred tool identifiers. Discover valid values from GET /api/v1/tools. |
tool_ids | UUID[] | No | Alternative to tool_slugs. Every value must be a valid UUID string. |
custom_tools | string[] | No | Custom tool names. Maximum 5 entries, each 40 characters or less. |
founder_name | string | No | Founder or team name. |
founder_twitter | string | No | X/Twitter handle. |
favicon_url | absolute http/https URL | No | Manual logo override. |
screenshot_url | absolute http/https URL | No | Manual screenshot override. |
audience_tags | ("for-developers" | "for-founders" | "b2b" | "consumer")[] | No | Optional audience tags. |
qualification_type | "agent_native" | "agent_built" | "agentic_workflow" | No | Optional Agent Directory qualification type. If provided, the related claim fields become required. |
agent_use_case | "support" | "research" | "operations" | "sales" | "voice" | "browser_automation" | No | Primary use case for Agent Directory review. |
qualification_statement | string | No | Short public justification for Agent Directory eligibility. |
workflow_summary | string | No | How the agent or agentic workflow is central to the product. |
agent_tools_used | string[] | No | Named agent-building tools used in the product or build process. |
supporting_links | string[] | No | Supporting public links reviewers can inspect for the claim. |
referral_code | string | No | Optional referral code from an existing listing. |
Responses
Submission created
The submission was accepted into pending review. The product is not public yet.
{
"success": true,
"slug": "agentflow",
"receiptSent": true,
"badge_opt_in": false,
"review_status_url": "https://www.madewithstack.com/api/v1/products/agentflow?email=founder%40agentflow.dev",
"owner_claim": {
"email": "founder@agentflow.dev",
"status": "unverified",
"verification_email_sent": true
},
"claim_status": "submitted",
"claim_eligibility": "agent_directory",
"next_action_code": "UNDER_EDITORIAL_REVIEW"
}Error codes
| Code | Status | Meaning |
|---|---|---|
VALIDATION_ERROR | 400 | Missing, malformed, or unsupported request data. |
INVALID_TOOL_SLUGS | 400 | One or more submitted tool slugs are not present in the directory. |
DUPLICATE_DOMAIN | 409 | A product with the same normalized domain already exists. |
RATE_LIMITED | 429 | The request exceeded the public API rate limit window. |
INTERNAL_ERROR | 500 | Unexpected server error. Retry later. |
Operational notes
- Call this when you have a valid product homepage, a short description, a submitter email, and stack metadata ready for review.
- At least one of tool_slugs, tool_ids, or custom_tools must be non-empty.
- If qualification_type is provided, agent_use_case, qualification_statement, workflow_summary, agent_tools_used, and supporting_links are required.
- tool_slugs is preferred over tool_ids.
- API submissions are free-tier only. paid_fast_track is not exposed through the API.
- Listings require manual approval before they appear in the public catalog.
- Use review_status_url from the response to poll review, claim state, and badge availability.
- Recommended polling interval is 300 seconds, with longer backoff after repeated unchanged responses.
- 429 responses include a Retry-After header in seconds.