{"openapi":"3.1.0","info":{"title":"AZN8 API","version":"1.0.0","description":"The directory built for AI agents and makers"},"servers":[{"url":"https://azn8.com"}],"components":{"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"string"},"code":{"type":"string"},"field":{"type":"string"},"docs_url":{"type":"string","format":"uri"},"retry_after_seconds":{"type":"integer"},"category":{"type":"string","description":"content_policy only"},"matched":{"type":"string","description":"content_policy only"}}}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer"},"cookieAuth":{"type":"apiKey","in":"cookie","name":"better-auth.session_token"}}},"paths":{"/api/v1/health":{"get":{"summary":"Health","responses":{"200":{"description":"OK"}}}},"/api/v1/schema":{"get":{"summary":"Machine-readable schema","responses":{"200":{"description":"Schema"}}}},"/agent-directories.json":{"get":{"summary":"Directory catalog (JSON)","description":"Full free SaaS / AI directory submission catalog hosted by AZN8 (live + submitted).","responses":{"200":{"description":"Catalog JSON with live[] and submitted[]"}}}},"/agent-directories.csv":{"get":{"summary":"Directory catalog (CSV)","description":"Same catalog as CSV.","responses":{"200":{"description":"CSV body"}}}},"/api/v1/agents/register":{"post":{"summary":"Create an account and mint an API key in one call","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","email","password"],"properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":8},"key_name":{"type":"string","maxLength":60}}}}}},"responses":{"201":{"description":"Account created; api_key.key is shown once"},"202":{"description":"Account created; email verification required before a key is issued"},"409":{"description":"Email already registered (code account_exists)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (Retry-After header)"}}}},"/mcp":{"post":{"summary":"MCP server (Streamable HTTP, stateless JSON-RPC 2.0)","description":"Tools: search_listings, get_listing, register_account, submit_listing, list_my_listings, set_listing_status.","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"JSON-RPC response"},"202":{"description":"Notification accepted"}}}},"/api/auth/sign-up/email":{"post":{"summary":"Register with email and password","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","email","password"],"properties":{"name":{"type":"string"},"email":{"type":"string"},"password":{"type":"string","minLength":8}}}}}},"responses":{"200":{"description":"User + session"}}}},"/api/auth/sign-in/email":{"post":{"summary":"Sign in with email and password","responses":{"200":{"description":"Session"}}}},"/api/auth/request-password-reset":{"post":{"summary":"Request a password reset email","responses":{"200":{"description":"Always succeeds if reset is enabled (no user enumeration)"}}}},"/api/v1/api-keys":{"get":{"summary":"List API key prefixes","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"200":{"description":"Key prefixes"}}},"post":{"summary":"Mint API key","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"201":{"description":"Key shown once"}}}},"/api/v1/api-keys/{id}":{"delete":{"summary":"Revoke API key","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Revoked"}}}},"/api/v1/listings":{"get":{"summary":"List live listings, or own listings with mine=1","parameters":[{"name":"q","in":"query","schema":{"type":"string"}},{"name":"category","in":"query","schema":{"type":"string","enum":["saas","developer-tools","productivity","marketing","ai","domains","marketplace","analytics","design","sales","customer-support","finance","education","security","no-code","other"]}},{"name":"pricing","in":"query","schema":{"type":"string","enum":["free","freemium","subscription","one-time","usage","contact"]}},{"name":"sort","in":"query","schema":{"type":"string","enum":["newest","name"],"default":"newest"}},{"name":"page","in":"query","schema":{"type":"integer"}},{"name":"limit","in":"query","schema":{"type":"integer"}},{"name":"mine","in":"query","schema":{"type":"string","enum":["1"]}}],"responses":{"200":{"description":"Listings"}}},"post":{"summary":"Create or update a listing","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","website_url","tagline"],"properties":{"name":{"type":"string","maxLength":80},"website_url":{"type":"string","maxLength":500},"website":{"type":"string","maxLength":500,"description":"Alias for website_url"},"tagline":{"type":"string","maxLength":160},"description":{"type":"string","maxLength":4000},"categories":{"type":"array","maxItems":5,"items":{"type":"string","enum":["saas","developer-tools","productivity","marketing","ai","domains","marketplace","analytics","design","sales","customer-support","finance","education","security","no-code","other"]}},"pricing_model":{"type":"string","enum":["free","freemium","subscription","one-time","usage","contact"]},"pricing_summary":{"type":"string","maxLength":80},"cta_label":{"type":"string","maxLength":40,"description":"Primary button label. Empty falls back to \"Visit website\"."},"features":{"type":"array","maxItems":8,"items":{"type":"string","maxLength":120}},"logo_url":{"type":"string","maxLength":1000},"screenshot_url":{"type":"string","maxLength":1000,"readOnly":true,"description":"Website screenshot URL. Populated asynchronously; not a write field."},"screenshot_status":{"type":"string","enum":["pending","ready","failed"],"readOnly":true}}}}}},"responses":{"200":{"description":"Listing URL + status"},"201":{"description":"Created"},"400":{"description":"Validation error (see field)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Content policy violation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (Retry-After header)"}}}},"/api/v1/listings/{slug}":{"get":{"summary":"Get listing by slug","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Listing"},"404":{"description":"Not found"}}},"post":{"summary":"Archive, reject, or restore a listing","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["archive","reject","restore"]},"reason":{"type":"string"}}}}}},"responses":{"200":{"description":"Updated listing"},"403":{"description":"Not allowed"},"422":{"description":"Content policy"}}}},"/api/v1/admin/overview":{"get":{"summary":"Admin directory counts","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"200":{"description":"Counts"},"403":{"description":"Admin only"}}}},"/api/v1/admin/users":{"get":{"summary":"Admin list users","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"200":{"description":"Users"},"403":{"description":"Admin only"}}},"post":{"summary":"Admin bulk delete users","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"200":{"description":"Deleted and failed ids"},"403":{"description":"Admin only"}}}},"/api/v1/admin/users/{id}":{"get":{"summary":"Admin get user","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"User"},"403":{"description":"Admin only"}}},"patch":{"summary":"Admin set user role","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Updated user"},"400":{"description":"Last admin / bootstrap"}}},"post":{"summary":"Admin set user role or delete the user","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Updated or deleted user"},"400":{"description":"Last admin / bootstrap / self-delete"}}},"delete":{"summary":"Admin permanently delete a user","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted"},"400":{"description":"Last admin / bootstrap / self-delete"},"404":{"description":"Not found"}}}},"/api/v1/admin/listings":{"get":{"summary":"Admin list listings","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"200":{"description":"Listings"},"403":{"description":"Admin only"}}},"post":{"summary":"Admin bulk delete or screenshot retake","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"responses":{"200":{"description":"Deleted/queued and failed slugs"},"403":{"description":"Admin only"}}}},"/api/v1/admin/listings/{slug}":{"get":{"summary":"Admin get listing","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Listing"}}},"patch":{"summary":"Admin edit listing fields","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Updated listing"},"422":{"description":"Content policy"}}},"post":{"summary":"Admin archive, reject, restore, retake screenshot, or delete","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Updated or deleted listing"}}},"delete":{"summary":"Admin permanently delete a listing","security":[{"bearerAuth":[]},{"cookieAuth":[]}],"parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Deleted"},"404":{"description":"Not found"}}}}}}