PromptFrenzy · PromptFrenzy AI Directory

List an AI tool in the public PromptFrenzy AI Directory: verify a required dofollow backlink badge on the tool's own domain and, if it passes, open and auto-merge a permanent public directory entry.

promptfrenzy.list-ai-tool v1.0.0 active free — no wallet

Submit a single AI tool for inclusion in the PromptFrenzy AI Directory, a badge-required public directory of AI tools built to be submitted to by developers and coding agents. The service verifies that the PromptFrenzy badge anchor is present and dofollow on the page you nominate, classifies the host (a domain you control = full listing; platform subdomains like *.vercel.app = early-stage; raw IPs, temporary tunnels and link shorteners are rejected), and if it passes uses the directory bot to open and auto-merge a public YAML entry in the Prompt-Frenzy/ai-directory GitHub repository. Verification typically completes in under 60 seconds. No human review queue, no fee. Listings are re-verified weekly and dropped if the badge disappears.

machine contract: manifest.json · manifest_hash sha256:99bca9f36025df50

Explicitly not promised

Price

Free. No wallet, no account, no payment handshake — rejections cost nothing too.

Contract

Input
application/json · max 16,384 bytes
Output
application/json
Input schema (JSON Schema)
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "promptfrenzy.list-ai-tool input",
  "description": "Payload for POST https://www.promptfrenzy.com/api/directory/submit — one AI tool to list in the PromptFrenzy AI Directory. Mirrors the live server contract.",
  "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://",
      "description": "Canonical homepage of the tool, on a durable domain you control. Raw IPs, temporary tunnels and link shorteners are rejected; platform subdomains (*.vercel.app etc.) list as early-stage."
    },
    "description": {
      "type": "string",
      "minLength": 20,
      "maxLength": 200,
      "description": "One-sentence factual description. No superlatives or marketing copy."
    },
    "category": {
      "type": "string",
      "enum": [
        "image-generation",
        "video-generation",
        "text-generation",
        "audio-generation",
        "prompt-tools",
        "agents",
        "chatbots",
        "code-assist",
        "productivity",
        "data-analysis",
        "voice-cloning",
        "other"
      ]
    },
    "pricing": {
      "type": "string",
      "enum": [
        "free",
        "freemium",
        "paid",
        "subscription"
      ]
    },
    "badge_url": {
      "type": "string",
      "format": "uri",
      "pattern": "^https://",
      "description": "Page on the same domain as url where the PromptFrenzy dofollow badge anchor is present in static HTML. The verifier fetches this page; JS-rendered badges are not seen."
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[a-z0-9-]+$",
        "maxLength": 30
      },
      "maxItems": 5,
      "uniqueItems": true,
      "description": "Up to 5 lowercase-hyphen tags. Optional but encouraged."
    },
    "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'. Optional but encouraged."
    },
    "key_features": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 3,
        "maxLength": 100
      },
      "maxItems": 6,
      "description": "2-6 short factual capability bullets. Optional but encouraged."
    },
    "works_with": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[a-z0-9][a-z0-9 .+-]{0,38}[a-z0-9]$"
      },
      "maxItems": 8,
      "uniqueItems": true,
      "description": "Tools, platforms or models this integrates with, e.g. ['chatgpt', 'figma']. Optional but encouraged."
    },
    "platforms": {
      "type": "array",
      "items": {
        "type": "string",
        "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 is accessed. Optional but encouraged."
    },
    "logo": {
      "type": "string",
      "format": "uri",
      "pattern": "^https://",
      "description": "Optional logo URL."
    },
    "slug": {
      "type": "string",
      "maxLength": 80,
      "description": "Optional explicit slug; otherwise derived from name. Must be unique in the directory."
    }
  }
}
Output schema (JSON Schema)
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "promptfrenzy.list-ai-tool output",
  "description": "HTTP 201 response from POST /api/directory/submit after the badge is verified and the directory PR is opened. Mirrors the live server contract.",
  "type": "object",
  "required": [
    "status",
    "slug",
    "pr_url",
    "pr_number",
    "branch"
  ],
  "additionalProperties": false,
  "properties": {
    "status": {
      "type": "string",
      "const": "verified",
      "description": "Badge verified and directory entry opened."
    },
    "slug": {
      "type": "string",
      "description": "Slug the listing was created under."
    },
    "pr_url": {
      "type": "string",
      "format": "uri",
      "description": "GitHub pull request that adds (and auto-merges) the listing."
    },
    "pr_number": {
      "type": "integer",
      "description": "Pull request number."
    },
    "branch": {
      "type": "string",
      "description": "Branch the directory bot opened for the entry."
    }
  }
}

Failure semantics

CodeMeaningRetriable
validation_failedA required field is missing or malformed; the response body lists the offending fields.no
badge_verification_failedThe badge anchor was not found on badge_url, or it carries rel="nofollow"/"sponsored", or badge_url is not on the same domain as url. Add a static dofollow badge on your own domain and resubmit.yes
host_ineligibleThe url host is a raw IP, temporary tunnel, or link shortener and cannot be listed.no
slug_takenA tool with the derived slug already exists; supply a different slug.no
pr_open_failedBadge verified but the directory bot failed to open the PR; retry.yes

Interfaces

Operational facts

Expected latency
p50 20s · p95 60s
Timeout
90s — every execution reaches a terminal state
Idempotency
supported

Data handling (declared)

Input retention
Retained indefinitelySubmitted listing fields (name, url, description, category, pricing, badge_url and any optional context) are published permanently as a public record in the Prompt-Frenzy/ai-directory GitHub repository; that publication is the purpose of the service, and entries are removable on request. The nominated badge page is fetched only to verify the badge and is not stored.
Training use
Not used for training
Subprocessors
  • github
  • vercel
  • aimlapi

Evidence

Provenance

Integration: first party · adapter operated by promptfrenzy


This page is generated from the capability’s TRACE Manifest — no hand-written marketing. Verify the contract yourself: manifest.json · schema