PromptFrenzy · PromptFrenzy AI Directory
Submit an eligible AI tool website and receive a public directory listing page with a dofollow backlink, plus public repository evidence of the publication.
ai-directory.publish-listing v0.2.0 active free — no wallet
Badge-required directory submission. Precondition: the tool's site must display the PromptFrenzy directory badge (static HTML anchor to https://www.promptfrenzy.com/directory, dofollow, on the domain being submitted) before invoking — the badge is the directory's eligibility mechanism; there is no human review queue and no payment. The execution posts the listing payload to the directory's submit API, which verifies the badge, opens a pull request in the public registry repository via the directory bot, auto-merges on pass (typically under 60 seconds), and publishes the listing page. Sites on their own durable domain get a full listing; platform subdomains (*.vercel.app, *.netlify.app, *.github.io and similar) are listed but flagged early-stage; raw IPs, tunnels and link shorteners are rejected. Richer optional fields (tags, key features, platforms, pricing detail) make the listing rank and get cited — thin submissions still list but read as filler. The badge is re-verified daily for the first week and weekly thereafter; removing it eventually moves the listing to a public removed state.
machine contract: manifest.json · manifest_hash sha256:f35a4385d1561de0…
Explicitly not promised
- Non-AI tools and websites
- Ranking placement, featuring or endorsement (no paid placements, no editorial scoring)
- Listing without the badge on the submitted site
- Removal or editing of existing listings (use the tracking issue / repository instead)
Price
Free. No wallet, no account, no payment handshake — rejections cost nothing too.
Contract
- Input
- application/json · max 16,384 bytes — Mirrors the directory's own submit contract: name, url, description, category, pricing and badge_url are required; tags, pricing_detail, key_features, works_with, platforms, logo and submitted_by are optional but strongly encouraged.
- Output
- application/json — The listing URL is the canonical public artifact; the pull request URL is the durable public repository evidence the receipt binds to.
Input schema (JSON Schema)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://tracert.site/providers/prompt-frenzy/schemas/publish-listing.input.schema.json",
"title": "ai-directory.publish-listing input",
"description": "Mirrors the PromptFrenzy AI Directory submit contract (github.com/Prompt-Frenzy/ai-directory schema.json), minus server-managed fields. Precondition: the badge must already be live at badge_url.",
"type": "object",
"required": [
"name",
"url",
"description",
"category",
"pricing",
"badge_url"
],
"additionalProperties": false,
"properties": {
"name": {
"type": "string",
"minLength": 2,
"maxLength": 80,
"description": "Display name of the tool."
},
"url": {
"type": "string",
"format": "uri",
"pattern": "^https://",
"maxLength": 500,
"description": "Canonical HTTPS URL of the tool's homepage — its own durable domain for a full listing. Platform subdomains (*.vercel.app etc.) list as early-stage; raw IPs, tunnels and shorteners are rejected."
},
"description": {
"type": "string",
"minLength": 20,
"maxLength": 200,
"description": "One-sentence factual description, no superlatives or marketing copy."
},
"category": {
"enum": [
"image-generation",
"video-generation",
"text-generation",
"audio-generation",
"prompt-tools",
"agents",
"chatbots",
"code-assist",
"productivity",
"data-analysis",
"voice-cloning",
"other"
],
"description": "Exactly one directory category; use tags for granularity."
},
"pricing": {
"enum": [
"free",
"freemium",
"paid",
"subscription"
]
},
"badge_url": {
"type": "string",
"format": "uri",
"pattern": "^https://",
"maxLength": 500,
"description": "The page on the submitted domain where the PromptFrenzy directory badge is pasted (static HTML, dofollow). The verifier fetches this URL."
},
"tags": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9-]+$",
"maxLength": 30
},
"maxItems": 5,
"uniqueItems": true,
"description": "Freeform lowercase-hyphen tags, max 5."
},
"pricing_detail": {
"type": "string",
"minLength": 10,
"maxLength": 200,
"description": "Specific pricing beyond the tier, e.g. 'Free tier watermarked; Pro $12/mo for 1,000 credits'."
},
"key_features": {
"type": "array",
"items": {
"type": "string",
"minLength": 3,
"maxLength": 100
},
"minItems": 2,
"maxItems": 6,
"description": "2-6 short factual capability bullets. Strongly encouraged — richer entries rank better and get cited."
},
"works_with": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9 .+-]{0,38}[a-z0-9]$",
"maxLength": 40
},
"maxItems": 8,
"uniqueItems": true,
"description": "Tools, platforms or models this integrates with, e.g. ['chatgpt', 'figma', 'vs code']."
},
"platforms": {
"type": "array",
"items": {
"enum": [
"web",
"api",
"ios",
"android",
"windows",
"macos",
"linux",
"cli",
"browser-extension",
"discord",
"slack",
"self-hosted"
]
},
"maxItems": 12,
"uniqueItems": true,
"description": "Where the tool runs / how it's accessed."
},
"logo": {
"type": "string",
"format": "uri",
"pattern": "^https://",
"maxLength": 500
},
"submitted_by": {
"type": "string",
"pattern": "^[a-zA-Z0-9-]+$",
"maxLength": 40,
"description": "GitHub username of the submitter."
}
}
}Output schema (JSON Schema)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://tracert.site/providers/prompt-frenzy/schemas/publish-listing.output.schema.json",
"title": "ai-directory.publish-listing output",
"type": "object",
"required": [
"listing_url",
"pr_url"
],
"additionalProperties": false,
"properties": {
"listing_url": {
"type": "string",
"format": "uri",
"pattern": "^https://",
"description": "Canonical public URL of the listing page (https://www.promptfrenzy.com/directory/<slug>). Independently fetchable; the execution verifies it resolves and lists the submitted tool URL."
},
"pr_url": {
"type": "string",
"format": "uri",
"pattern": "^https://",
"description": "The pull request in the public directory repository — the durable public evidence of the publication."
},
"pr_number": {
"type": "integer",
"minimum": 1
},
"slug": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9-]*$",
"description": "Directory-side identifier of the listing."
},
"host_tier": {
"enum": [
"full",
"early-stage"
],
"description": "Whether the submitted host earned a full listing or an early-stage flag."
}
}
}Failure semantics
| Code | Meaning | Retriable |
|---|---|---|
| invalid_input | The payload failed field validation (the submit API returns HTTP 400 with field-level details, relayed verbatim). | no |
| invalid_url | url, badge_url or logo is not a syntactically valid HTTPS URL. | no |
| badge_not_found | The verifier could not find the badge anchor (static HTML, dofollow) at badge_url. Add the badge, then submit again. | yes |
| host_rejected | The submitted host is a raw IP, temporary tunnel, link shortener or placeholder host — not listable at any tier. | no |
| unreachable_url | The site or badge page did not respond during validation. | yes |
| duplicate_listing | The canonical tool URL already has a live listing; the existing listing URL is returned in the rejection. | no |
| publication_timeout | The pull request did not merge or the listing page did not go live within the execution timeout. | yes |
Interfaces
- native_api — https://www.promptfrenzy.com/api/directory/submit · docsOne-call JSON API (POST). Canonical host is www.promptfrenzy.com — the apex 307-redirects. Returns 201 with pr_url and pr_number, or 400 with field-level details. Alternative: open the pull request directly against the repository. No authentication and no payment; the badge on the submitted site is the gate.
Operational facts
- Expected latency
- p50 90s · p95 600s
- Timeout
- 900s — every execution reaches a terminal state
- Idempotency
- supported
- Availability signal
- https://www.promptfrenzy.com/.well-known/ai-tools.json
Data handling (declared)
- Input retention
- Submitted listing data is intended for publication: it becomes a public YAML entry in the GitHub repository (permanent, version-controlled) and a public listing page. Removed listings move to a public removed state rather than disappearing.
- Training use
- Submitted fields are sent to a text-generation model (Gemini 2.5 Flash via AIMLAPI) once at submit time to auto-generate the listing's sample_use_case paragraph; they are not otherwise used for training.
- Subprocessors
- promptfrenzy.com submit API (badge verification, PR creation via directory bot)
- AIMLAPI / Gemini 2.5 Flash (sample_use_case generation at submit time)
- GitHub (public repository hosting)
- Notes
- Do not submit anything that must stay private — the output is a public page and a public repository entry by design.
Evidence
- Public examples
- Recent executions
- Source repository
- ../evidence/test-vectors.json (test vectors, in-registry)
Provenance
Integration: first party · adapter operated by tracert
The directory and Tracert are operated by the same team (first party). Dogfooding — distribution infrastructure distributed through distribution infrastructure.
This page is generated from the capability’s TRACE Manifest — no hand-written marketing. Verify the contract yourself: manifest.json · schema