This endpoint has two modes:
- public read for approved listings
- private pending-status check when
?email=is supplied
In both modes, the response includes a machine-readable badge object so agents can read public badge verification state and dofollow status without exposing founder-only embed utilities.
Approved mode
When the slug already points to an approved listing, you get the richer detail object plus the public badge verification state.
Approved responses now include:
editorial_summaryfor concise catalog framingoverviewfor the longer product body used on the detail pagetrustfor the public-safe review source, source quality, evidence links, and review note shown on the listing page
Pending mode
When the listing is still pending, you must supply the original submitter email. The response is intentionally minimal and exposes pending state, the original creation timestamp, claim-review metadata, and a badge state that makes it explicit that approval has not happened yet.
Owner-only embed code is not returned by this public endpoint. After approval, founders receive the personalized launch kit and badge snippet through the existing email flow.
/api/v1/products/:slugThis is the status-check endpoint for programmatic submissions and the canonical read endpoint for approved product details and public badge verification state.
Auth
No API keys. No account auth. Public JSON endpoints only.
Review model
Pending status is visible only to the original submitter email. Approved status is public.
Cache
Dynamic server response.
Example request
curl "https://www.madewithstack.com/api/v1/products/agentflow?email=founder@agentflow.dev"
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
email | string | No | Required only when checking the status of a pending submission. Must match the submitter email. |
Responses
Approved listing
Returns the richer approved product detail object plus a machine-readable public badge-status payload when the slug is already public.
{
"product": {
"id": "string",
"name": "string",
"slug": "string",
"description": "string",
"url": "string",
"favicon_url": "string | null",
"founder_name": "string | null",
"founder_twitter": "string | null",
"founder_profile_slug": "string | null",
"launch_date": "string | null",
"status": "\"approved\"",
"created_at": "string",
"approved_at": "string | null",
"view_count": "number",
"is_featured": "boolean",
"featured_rank": "number",
"screenshot_url": "string | null",
"submission_tier": "\"free\" | \"paid_fast_track\"",
"review_priority": "number",
"audience_tags": [
"\"for-developers\" | \"for-founders\" | \"b2b\" | \"consumer\""
],
"badge_verified": "boolean",
"is_agent_product": "boolean",
"qualification_type": "\"agent_native\" | \"agent_built\" | \"agentic_workflow\" | null",
"agent_use_case": "\"support\" | \"research\" | \"operations\" | \"sales\" | \"voice\" | \"browser_automation\" | null",
"qualification_statement": "string | null",
"workflow_summary": "string | null",
"agent_tools_used": "string[]",
"supporting_links": "string[]",
"claim_review_status": "\"submitted\" | \"verified\" | \"not_verified\" | \"needs_revision\" | null",
"claim_reviewed_at": "string | null",
"claim_review_notes": "string | null",
"claim_verified_by": "string | null",
"claim_evidence_summary": "string | null",
"tools": [
{
"id": "string",
"name": "string",
"slug": "string",
"description": "string | null",
"icon_url": "string | null",
"category": "string",
"product_count": "number",
"created_at": "string"
}
],
"overview": "string | null",
"editorial_summary": "string | null",
"trust": {
"review_model": "\"manual\"",
"source_kind": "\"curated\" | \"user_submission\" | \"other\"",
"source_quality": "\"curated_evidence\" | \"reviewed_with_evidence\" | \"manual_review_only\"",
"source_url": "string",
"verified_at": "string | null",
"public_note": "string | null",
"evidence": [
{
"type": "string",
"url": "string"
}
]
}
},
"badge": {
"available": "boolean",
"image_url": "string",
"verification": {
"status": "\"pending_approval\" | \"awaiting_verification\" | \"verified\" | \"paid_dofollow\"",
"is_dofollow": "boolean",
"requires_badge_install": "boolean",
"requires_manual_review": "boolean",
"detail": "string"
}
},
"claim_status": "verified",
"claim_eligibility": "agent_directory",
"next_action_code": "APPROVED_FOR_AGENT_DIRECTORY"
}Pending submission
Returns minimal pending-state data plus badge availability state when the slug exists in pending status and the submitter email matches.
{
"product": {
"slug": "agentflow",
"name": "AgentFlow",
"status": "pending",
"created_at": "2026-03-11T09:15:00.000Z"
},
"badge": {
"available": "boolean",
"image_url": "string",
"verification": {
"status": "\"pending_approval\" | \"awaiting_verification\" | \"verified\" | \"paid_dofollow\"",
"is_dofollow": "boolean",
"requires_badge_install": "boolean",
"requires_manual_review": "boolean",
"detail": "string"
}
},
"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. |
INTERNAL_ERROR | 500 | Unexpected server error. Retry later. |
Operational notes
- Call this after submitting to poll pending review status, or call it without email when reading an approved listing and its public badge state.
- 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.