Developers
Unsubscribe Intelligence API
The public API for unsubscribe navigation and friction scoring: browse the service catalog, fetch step-by-step cancellation guides, and six-axis cancellation-difficulty analysis. No key required.
Base URLhttps://api.unsubscribetool.com
Endpoints
Unified envelope:{ code, data, message } · code: "0" = OK
GET/api/v1/servicesList servicesPaginated service catalog. Optional: q (search), cat (category slug), page (default 1).
Example requestcurl "https://api.unsubscribetool.com/api/v1/services?q=netflix&page=1"
Example response{ "code": "0", "data": { "items": [ /* … */ ], "total": 203 } }
GET/api/v1/services/:slugGet a serviceFull directory record for one service: steps, traps, friction, and source links.
Example requestcurl "https://api.unsubscribetool.com/api/v1/services/netflix"
Example response{ "code": "0", "data": { "service": "Netflix", "steps": [ /* … */ ], "friction": { /* … */ } } }
GET/api/v1/categoriesList categoriesAll browse categories with a per-category service count.
Example requestcurl "https://api.unsubscribetool.com/api/v1/categories"
Example response{ "code": "0", "data": { "categories": [ /* … */ ] } }
POST/api/v1/guideCancellation guideStep-by-step cancellation walkthrough with traps and an explanation. Body: { slug, options?: { tone?: "neutral"|"reassuring"|"terse", locale?: string } }. Rate limit 20/min.
Example requestcurl -X POST "https://api.unsubscribetool.com/api/v1/guide" \
-H "Content-Type: application/json" \
-d '{"slug":"netflix"}'
Example response{ "code": "0", "data": { "entry": "Netflix", "steps": [ /* … */ ], "traps": [ /* … */ ], "explanation": "…", "source_url": "…" } }
POST/api/v1/analyzerFriction analysisSix-axis cancellation-difficulty score with a per-axis explanation. Body: { slug }.
Example requestcurl -X POST "https://api.unsubscribetool.com/api/v1/analyzer" \
-H "Content-Type: application/json" \
-d '{"slug":"netflix"}'
Example response{ "code": "0", "data": { "friction": { /* … */ }, "difficulty": 5.4, "tier": "Moderate", "why": [ /* … */ ] } }
POST/api/v1/link-checkLink health checkQueue an async re-verification of a service’s cancellation link. Body: { slug }. Returns 202.
Example requestcurl -X POST "https://api.unsubscribetool.com/api/v1/link-check" \
-H "Content-Type: application/json" \
-d '{"slug":"netflix"}'
Example response{ "code": "0", "data": { "queued": true }, "message": "" }
Access & rate limits
The catalog and category endpoints are public and read-only — no key required. The AI guide/analyzer endpoints are powered by our server-side key, so callers do not need their own; they return 503 (LLM_UNAVAILABLE) only if that key is momentarily unavailable.
Rate limits: /guide 20/min and /link-check 30/min per client IP. Exceeding them returns 429 (RATE_LIMITED).