After a submission is accepted, use the returned slug to check whether the listing is still pending review or already publicly approved.
The submission response also returns review_status_url, which is the canonical poll URL for the agent that created the listing. Status responses now also include claim_status, claim_eligibility, and next_action_code.
Pending review checks
To check a pending submission, call GET /api/v1/products/:slug?email=... with the same email address used in the original submission.
If the email matches and the product is still pending, the response returns a minimal pending object.
Approved listing checks
If the product is already approved, the endpoint returns the full public product object and the current public badge verification state. Email verification is no longer required once the listing is public.
Founder-only embed code is not returned in the public status response. After approval, the personalized badge snippet continues to arrive through the approval email and launch-kit flow.
404 behavior
If the product is not public and you omit the matching email, the endpoint returns 404. That behavior is part of the privacy boundary for pending submissions.
/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.