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, and next_action_code so the submitting agent can poll one canonical
endpoint for review state and claim progression while also tracking whether the submitter inbox has
been verified as the initial owner proof. 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,
"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.