# CurlShip > Bot-friendly SaaS directory. Submit your product with a single curl command. ## What is CurlShip? CurlShip is a SaaS directory that welcomes automated submissions. Unlike other directories that gate behind manual forms, CurlShip lets you submit your product with a simple curl/API call. Bots, agents, and AI are explicitly welcome — no CAPTCHA, no login, no approval queue. ## API (all endpoints accept and return JSON over HTTPS) OpenAPI 3.1 spec: https://curlship.com/openapi.json Interactive docs (Swagger UI): https://curlship.com/docs Submit a listing (goes live instantly): POST https://curlship.com/api/submit Body: {"url": "https://yourapp.com", "email": "you@email.com"} Optional: add "tier": "bronze|bronze_lifetime|silver|gold|platinum|featured" for a paid tier — the response then carries a checkout_url to complete payment (the listing stays free until paid). "featured" bids on the auction spot; add "amount_usd" to bid above the current minimum. Verify your badge on demand (upgrade Free listing to dofollow immediately): POST https://curlship.com/api/verify-badge Body: {"url": "https://yourapp.com"} Returns: {"ok": true, "has_badge": true, "dofollow": true, ...} Re-fetches your listed site and looks for a link back to curlship.com. This is the manual trigger for the otherwise-hourly badge check. Upgrade an existing listing to a paid tier: POST https://curlship.com/api/upgrade Body: {"url": "https://yourapp.com", "tier": "gold"} The Featured spot (one listing above Platinum, sold by auction): GET https://curlship.com/api/featured Returns the current holder and the next bid: {"ok": true, "featured": {...}|null, "next_bid_usd": 50, "next_bid_cents": 5000, "currency": "USD"} POST https://curlship.com/api/feature Body: {"url": "https://yourapp.com", "amount_usd": 51} amount_usd is optional (defaults to the current minimum) and must be at least the holder's price + $1 ($50 with no holder). Pay the returned checkout and the spot is yours — always dofollow — until someone outbids you. One-time payment, no refund when outbid. List all active listings (JSON): GET https://curlship.com/api/listings Fetch one listing by id (JSON): GET https://curlship.com/api/listing/2142 Live site stats (JSON) — listings added in the last 24h, total active listings, and the site's Domain Rating by Ahrefs (refreshed daily): GET https://curlship.com/api/stats Right now: {"domain_rating": {"value": 44, "checked_at": "2026-10-08", "source": "Domain Rating by Ahrefs"}, ...} Change your listing's URL yourself (no account, no support email): Guide for humans: https://curlship.com/edit POST https://curlship.com/api/edit-request Body: {"listing_id": 2142, "url": "https://new-url.example/", "proof": "email"} proof "email" — we mail a one-time confirmation link to the registered address. proof "domain" — we return a token you publish at /.well-known/curlship-verify.txt (or as a tag) on BOTH the currently listed site AND the new one, then you call POST https://curlship.com/api/edit-confirm Body: {"request_id": 7, "token": "..."} Publishing the token on the new domain alone is never enough — that proves you own the destination, not the listing. Changing the registered email always needs proof "email". Poll a request: GET https://curlship.com/api/edit-request/7 Every applied change is logged and mailed to the registered address with an undo link, and a URL change resets the badge until it is re-verified. Refresh stale title/description/image (your copy changed, ours didn't): POST https://curlship.com/api/edit-request Body: {"listing_id": 2142, "proof": "email"} Send NO url and NO email — that is what makes it a refresh. We re-read the title, description and image from the page already on the listing. Your URL is untouched and the badge is not reset. Confirming a refresh takes two calls, so nothing is ever written that you have not seen: POST /api/edit-confirm {"request_id": 7, "token": "..."} -> {"applied": false, "status": "preview", "changed": {...}, "apply": ""} nothing is written POST /api/edit-confirm {"request_id": 7, "token": "...", "apply": ""} -> {"applied": true, ...} We re-read the page on apply; if it changed since the preview the digest no longer matches and you get a fresh preview instead of a surprise. If your site is down, or answers with a bot-wall, parking or error-page title, the refresh is refused rather than overwriting good metadata. ## Tiers - Featured (auction, from $50 one-time) — ONE spot above Platinum; highest payment holds it, always dofollow - Platinum ($49/year) — top of directory, dofollow link - Gold ($3/mo) — above silver/bronze, dofollow link - Silver ($2/mo) — above bronze/free, dofollow link - Bronze ($1/mo) — above free, dofollow link - Bronze Lifetime ($30 one-time) — Bronze forever, no subscription - Free ($0) — nofollow by default, add badge for dofollow ## Pages - https://curlship.com/ — Directory homepage with lazy-loaded listings - https://curlship.com/pricing — Pricing details - https://curlship.com/about — About CurlShip and founder Marcin Dudek - https://curlship.com/privacy — Privacy notice - https://curlship.com/terms — Terms of service - https://curlship.com/badge — How to add the badge + verify it instantly - https://curlship.com/edit — How to change a listing's URL or email (ownership proofs) - https://curlship.com/docs — Interactive API reference (Swagger UI) - https://curlship.com/sitemap — Human-readable map of the whole site ## Feeds - https://curlship.com/feed.xml — Atom feed of the latest listings - https://curlship.com/sitemap.xml — Full sitemap