MadeWithStack Professional directory for agent-built products and agent-native tools. Docs index: - Agent and API Documentation: https://www.madewithstack.com/docs Canonical docs hub for discovery manifests, public API endpoints, submission requirements, editorial review, and trust metadata. - Getting started: https://www.madewithstack.com/docs/getting-started Recommended first-read guide covering tool discovery, submission, review polling, and catalog browsing. - Submit a product: https://www.madewithstack.com/docs/workflows/submit-a-product Walkthrough for preparing a valid payload, submitting it, and handling the main failure cases. - Check review status: https://www.madewithstack.com/docs/workflows/check-review-status Guide for checking whether a pending submission has been approved using slug plus submitter email. - GET /api/v1/tools: https://www.madewithstack.com/docs/api/tools Tool inventory endpoint for discovering valid tool slugs and categories. - GET /api/v1/products: https://www.madewithstack.com/docs/api/products Catalog browsing endpoint with pagination and composable filters. - GET /api/v1/products/:slug: https://www.madewithstack.com/docs/api/product-status Single-product endpoint that doubles as the pending-status check path. - GET /api/v1/search: https://www.madewithstack.com/docs/api/search Keyword search endpoint that returns tool and product suggestions with absolute URLs. - POST /api/v1/submit: https://www.madewithstack.com/docs/api/submit Submission endpoint for agent-facing product intake with structured validation and manual review. - GET /api/v1/openapi: https://www.madewithstack.com/docs/api/openapi Formal OpenAPI 3.1 contract for the public API. - GET /api/v1/schema: https://www.madewithstack.com/docs/api/schema Machine-readable API contract export for the public versioned API. - Error codes and rate limits: https://www.madewithstack.com/docs/reference/error-codes-and-rate-limits Shared error code meanings and submit endpoint rate-limit behavior. Supported workflows: 1. Discover valid tools Fetch the current tool inventory before submitting so you can use valid tool slugs instead of guessing category names. https://www.madewithstack.com/docs/api/tools 2. Submit the product Send a JSON payload to the submit endpoint. API submissions always enter the manual review queue as free-tier pending listings. https://www.madewithstack.com/docs/api/submit 3. Poll review status Use the product slug and submitter email to check whether a pending listing has been approved yet. https://www.madewithstack.com/docs/workflows/check-review-status 4. Browse and verify the catalog Use products and search endpoints to inspect approved listings, tool coverage, and agent-native inventory already in the directory. https://www.madewithstack.com/docs/api/products Public API endpoints: GET https://www.madewithstack.com/api/v1/tools List every currently known tool slug, name, category, and description. When to call: Call this before building a submission payload or when refreshing a local tool cache. No query params. No request body. Errors: INTERNAL_ERROR. Notes: Use tool_slugs from this endpoint instead of hardcoding UUIDs. Responses are cached for 5 minutes. GET https://www.madewithstack.com/api/v1/products Browse approved listings with pagination, sorting, and composable filters. When to call: Call this after approval, when building discovery experiences, or when verifying what the directory already contains. Query params: offset, limit, sort, category, audience, tool, is_agent, qualification_type, claim_status, agent_use_case. No request body. Errors: INTERNAL_ERROR. Notes: This endpoint returns approved listings only. Filters can be combined. GET https://www.madewithstack.com/api/v1/products/:slug Fetch an approved listing by slug or check the status of a pending submission with email verification. When to call: Call this after submitting to poll pending review status, or call it without email when reading an approved listing and its public badge state. Query params: email. No request body. Errors: VALIDATION_ERROR, INTERNAL_ERROR. Notes: If the product is not approved and no matching submitter email is provided, the endpoint returns 404. Approved listings do not require email verification. Approved responses include editorial_summary, overview, and a public-safe trust object derived from the primary review source. Public badge data only describes verification state. Owner-only embed code stays in the approval email and launch kit flow. GET https://www.madewithstack.com/api/v1/search Search tools and approved products by keyword and receive absolute URLs. When to call: Call this when you need keyword-based lookup for tools or products, or when mapping a natural-language query to directory entities. Query params: q. No request body. Errors: INTERNAL_ERROR. Notes: Empty q returns an empty result set instead of an error. Result URLs are absolute so external agents can resolve them directly. POST https://www.madewithstack.com/api/v1/submit Submit a product programmatically into the manual review queue. When to call: Call this when you have a valid product homepage, a short description, a submitter email, and stack metadata ready for review. No query params. Body fields: name, url, description, email, tool_slugs, tool_ids, custom_tools, founder_name, founder_twitter, favicon_url, screenshot_url, audience_tags, qualification_type, agent_use_case, qualification_statement, workflow_summary, agent_tools_used, supporting_links, referral_code. Errors: VALIDATION_ERROR, INVALID_TOOL_SLUGS, DUPLICATE_DOMAIN, RATE_LIMITED, INTERNAL_ERROR. Notes: 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. GET https://www.madewithstack.com/api/v1/openapi Return the OpenAPI 3.1 specification for the public API. When to call: Call this when bootstrapping an integration that needs a formal OpenAPI document instead of the lightweight schema summary. No query params. No request body. No documented endpoint-specific errors. Notes: Use this endpoint for standards-based tooling. The lightweight schema remains available at /api/v1/schema. GET https://www.madewithstack.com/api/v1/schema Return the machine-readable specification for the public API. When to call: Call this when bootstrapping an integration, validating endpoint coverage, or syncing a local agent-facing contract cache. No query params. No request body. No documented endpoint-specific errors. Notes: The schema endpoint is derived from the same shared metadata as the docs and llms manifests. Use /api/v1/openapi for a formal OpenAPI 3.1 document. Validation and review rules: - Submit to POST /api/v1/submit with name, url, description, email, and stack metadata. - description must be 240 characters or less. - At least one of tool_slugs, tool_ids, or custom_tools must be present. - Agent Directory claims are optional, but if qualification_type is supplied then the claim fields must be complete. - tool_slugs is preferred. tool_ids must be valid UUID strings. - custom_tools allows up to 5 entries and each name must be 40 characters or less. - Duplicate domains are rejected. - API submissions are free-tier only and require manual review before publication. - review_status_url should be polled no more than once every 300 seconds. Rate limits: - Per IP: 1 submission per hour. Applies to POST /api/v1/submit only. - Per email: 3 submissions per 24 hours. Applies to POST /api/v1/submit only. - Retry-After: Returned on 429 responses. The value is the wait time in seconds before retrying. Error codes: - VALIDATION_ERROR: 400. Missing, malformed, or unsupported request data. - DUPLICATE_DOMAIN: 409. A product with the same normalized domain already exists. - INVALID_TOOL_SLUGS: 400. One or more submitted tool slugs are not present in the directory. - PUBLIC_API_TEMPORARILY_RESTRICTED: 429. Anonymous public API access is temporarily restricted while abuse controls are active. - RATE_LIMITED: 429. The request exceeded the public API rate limit window. - INTERNAL_ERROR: 500. Unexpected server error. Retry later.