io.github.ndkasndakn/refund-decide
Refund eligibility notary for US subscriptions. Returns ALLOWED/DENIED/UNKNOWN.
Ask AI about io.github.ndkasndakn/refund-decide
Powered by Claude Β· Grounded in docs
I know everything about io.github.ndkasndakn/refund-decide. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
decide.fyi
Deterministic subscription decision notaries for US consumers
One-Click Install
Buttons install the Refund Notary server. To add all 4 servers, use the JSON config below.
MCP Servers
| Server | Domain | Tool | Verdicts |
|---|---|---|---|
| Refund Notary | refund.decide.fyi | refund_eligibility | ALLOWED / DENIED / UNKNOWN |
| Cancel Notary | cancel.decide.fyi | cancellation_penalty | FREE_CANCEL / PENALTY / LOCKED / UNKNOWN |
| Return Notary | return.decide.fyi | return_eligibility | RETURNABLE / EXPIRED / NON_RETURNABLE / UNKNOWN |
| Trial Notary | trial.decide.fyi | trial_terms | TRIAL_AVAILABLE / NO_TRIAL / UNKNOWN |
All servers: 100 vendors, US region, individual plans, stateless, no auth, 100 req/min.
Quick Start
Connect via MCP (Claude Desktop / Windsurf / other clients)
{
"mcpServers": {
"refund-decide": { "url": "https://refund.decide.fyi/api/mcp" },
"cancel-decide": { "url": "https://cancel.decide.fyi/api/mcp" },
"return-decide": { "url": "https://return.decide.fyi/api/mcp" },
"trial-decide": { "url": "https://trial.decide.fyi/api/mcp" }
}
}
REST API
# Refund eligibility
curl -X POST https://refund.decide.fyi/api/v1/refund/eligibility \
-H "Content-Type: application/json" \
-d '{"vendor":"adobe","days_since_purchase":12,"region":"US","plan":"individual"}'
# Cancellation penalty
curl -X POST https://cancel.decide.fyi/api/v1/cancel/penalty \
-H "Content-Type: application/json" \
-d '{"vendor":"adobe","region":"US","plan":"individual"}'
# Return eligibility
curl -X POST https://return.decide.fyi/api/v1/return/eligibility \
-H "Content-Type: application/json" \
-d '{"vendor":"adobe","days_since_purchase":12,"region":"US","plan":"individual"}'
# Trial terms
curl -X POST https://trial.decide.fyi/api/v1/trial/terms \
-H "Content-Type: application/json" \
-d '{"vendor":"adobe","region":"US","plan":"individual"}'
Local Dev Checks
Start local dev server:
npx vercel dev
In a separate terminal:
# Handler-level smoke checks (no running server required)
npm run smoke
# MCP endpoint checks (requires vercel dev running on localhost:3000)
npm run mcp:check
# End-to-end workflow fixture (example -> result)
npm run workflow:test
Zendesk Workflow Orchestrators
Use workflow endpoints when you want one request to return:
- decision classification (
yes | no | tie) from/api/decide - policy result from the relevant notary endpoint
- recommended Zendesk action + tags + private note with
request_id
Endpoints
POST https://refund.decide.fyi/api/v1/workflows/zendesk/refundPOST https://cancel.decide.fyi/api/v1/workflows/zendesk/cancelPOST https://return.decide.fyi/api/v1/workflows/zendesk/returnPOST https://trial.decide.fyi/api/v1/workflows/zendesk/trial
Request
{
"ticket_id": "ZD-9001",
"workflow_type": "refund",
"question": "Should this Adobe annual plan refund request proceed under policy?",
"vendor": "adobe",
"region": "US",
"plan": "individual",
"days_since_purchase": 5
}
For refund and return, include days_since_purchase.
Deterministic test mode
Set decision_override to bypass model classification during fixtures and CI:
{
"decision_override": "yes"
}
Response (example)
{
"ok": true,
"flow": "zendesk_refund_v1",
"ticket_id": "ZD-9001",
"decision": { "c": "yes", "request_id": "req_123" },
"policy": { "verdict": "ALLOWED", "code": "WITHIN_WINDOW" },
"action": {
"type": "approve_refund",
"zendesk_tags": ["decide", "decide_yes", "refund_allowed"]
}
}
Refund Notary
Endpoint: POST https://refund.decide.fyi/api/v1/refund/eligibility
MCP Tool: refund_eligibility
Checks if a subscription purchase is within the vendor's refund window.
Input: vendor, days_since_purchase, region, plan
{"refundable":true,"verdict":"ALLOWED","code":"WITHIN_WINDOW","message":"Refund is allowed. Purchase is 12 day(s) old, within 14 day window.","vendor":"adobe","window_days":14}
Codes: WITHIN_WINDOW, OUTSIDE_WINDOW, NO_REFUNDS, UNSUPPORTED_VENDOR
Cancel Notary
Endpoint: POST https://cancel.decide.fyi/api/v1/cancel/penalty
MCP Tool: cancellation_penalty
Checks cancellation penalties β early termination fees, contract locks, or free cancellation.
Input: vendor, region, plan
{"verdict":"PENALTY","code":"EARLY_TERMINATION_FEE","message":"adobe charges an early termination fee: 50% of remaining months on annual plan.","vendor":"adobe","policy":"etf"}
Codes: NO_PENALTY, EARLY_TERMINATION_FEE, CONTRACT_LOCKED, UNSUPPORTED_VENDOR
Return Notary
Endpoint: POST https://return.decide.fyi/api/v1/return/eligibility
MCP Tool: return_eligibility
Checks if a subscription purchase can be returned/reversed, with return type and method.
Input: vendor, days_since_purchase, region, plan
{"returnable":true,"verdict":"RETURNABLE","code":"FULL_RETURN","message":"Return is available. Purchase is 5 day(s) old, within 14-day window.","vendor":"adobe","return_type":"full_refund","method":"self_service"}
Codes: FULL_RETURN, PRORATED_RETURN, CREDIT_RETURN, OUTSIDE_WINDOW, NO_RETURNS, UNSUPPORTED_VENDOR
Trial Notary
Endpoint: POST https://trial.decide.fyi/api/v1/trial/terms
MCP Tool: trial_terms
Checks free trial availability, length, card requirement, and auto-conversion status.
Input: vendor, region, plan
{"verdict":"TRIAL_AVAILABLE","code":"AUTO_CONVERTS","message":"adobe offers a 7-day free trial. Credit card required. Auto-converts to paid plan.","vendor":"adobe","trial_days":7,"card_required":true,"auto_converts":true}
Codes: AUTO_CONVERTS, NO_AUTO_CONVERT, TRIAL_NOT_AVAILABLE, UNSUPPORTED_VENDOR
Supported Vendors (100)
| Vendor | Identifier | Refund | Cancel | Return | Trial |
|---|---|---|---|---|---|
| 1Password | 1password | No refunds | Free | No return | 14d |
| Adobe | adobe | 14d | ETF | 14d full | 7d |
| Amazon Prime | amazon_prime | 3d | Free | 3d full | 30d |
| Apple App Store | apple_app_store | 14d | Free | 14d full | - |
| Apple Music | apple_music | No refunds | Free | No return | 30d |
| Apple TV+ | apple_tv_plus | No refunds | Free | No return | 7d |
| Audible | audible | No refunds | Free | No return | 30d |
| Bitwarden | bitwarden | 30d | Free | 30d full | 7d |
| Bumble | bumble | No refunds | Free | No return | 7d |
| Calm | calm | 30d | Free | 30d full | 7d |
| Canva | canva | No refunds | Free | No return | 30d |
| ChatGPT Plus | chatgpt_plus | No refunds | Free | No return | - |
| Claude Pro | claude_pro | No refunds | Free | No return | - |
| Coursera Plus | coursera_plus | 14d | Free | 14d full | 7d |
| Crunchyroll | crunchyroll | No refunds | Free | No return | 7d |
| Deezer | deezer | No refunds | Free | No return | 30d |
| Disney+ | disney_plus | No refunds | Free | No return | - |
| DoorDash DashPass | doordash_dashpass | No refunds | Free | No return | 30d |
| Dropbox (US) | dropbox_us | No refunds | Free | No return | 30d |
| Duolingo | duolingo | No refunds | Free | No return | 14d |
| Evernote | evernote | 20d | Free | 20d full | 14d |
| ExpressVPN | expressvpn | 30d | Free | 30d full | 7d |
| Figma | figma | No refunds | Free | No return | 30d |
| Fubo TV | fubo_tv | No refunds | Free | No return | 7d |
| GitHub Pro | github_pro | No refunds | Free | No return | - |
| Google Play | google_play | 2d | Free | 2d full | - |
| Grammarly | grammarly | No refunds | Free | No return | 7d |
| Headspace | headspace | No refunds | Free | No return | 7d |
| HelloFresh | hellofresh | No refunds | Free (5d notice) | No return | - |
| Hinge | hinge | No refunds | Free | No return | 7d |
| Hulu | hulu | No refunds | Free | No return | 30d |
| iCloud+ | icloud_plus | 14d | Free | 14d full | - |
| Instacart+ | instacart_plus | 5d | Free | 5d full | 14d |
| LinkedIn Premium | linkedin_premium | 7d | Free | 7d full | 30d |
| MasterClass | masterclass | 30d | Free | 30d full | - |
| Max (HBO) | max | No refunds | Free | No return | - |
| Microsoft 365 | microsoft_365 | 30d | Free | 30d full | 30d |
| Midjourney | midjourney | No refunds | Free | No return | - |
| Netflix | netflix | No refunds | Free | No return | - |
| Nintendo Switch Online | nintendo_switch_online | No refunds | Free | No return | 7d |
| Noom | noom | 14d | Free | 14d full | 7d |
| NordVPN | nordvpn | 30d | Free | 30d full | 7d |
| Notion | notion | 3d | Free | 3d full | - |
| Paramount+ | paramount_plus | No refunds | Free | No return | 7d |
| Peacock | peacock | No refunds | Free | No return | 7d |
| Peloton | peloton | No refunds | Free | No return | 30d |
| PlayStation Plus | playstation_plus | 14d | Free | 14d prorated | 14d |
| Scribd | scribd | 30d | Free | 30d full | 30d |
| Shutterstock | shutterstock | No refunds | ETF | No return | 30d |
| Slack | slack | No refunds | Free | Credit | 90d |
| Sling TV | sling_tv | No refunds | Free | No return | - |
| Spotify | spotify | No refunds | Free | No return | 30d |
| Squarespace | squarespace | 14d | Free | 14d full | 14d |
| Strava | strava | 14d | Free | 14d full | 30d |
| Surfshark | surfshark | 30d | Free | 30d full | 7d |
| Tidal | tidal | No refunds | Free | No return | 30d |
| Tinder | tinder | No refunds | Free | No return | - |
| Todoist | todoist | 30d | Free | 30d full | 30d |
| Twitch | twitch | No refunds | Free | No return | - |
| Walmart+ | walmart_plus | No refunds | Free | No return | 30d |
| Wix | wix | 14d | Free | 14d full | 14d |
| Xbox Game Pass | xbox_game_pass | 30d | Free | 30d full | 14d |
| YouTube Premium | youtube_premium | No refunds | Free | No return | 30d |
| Zoom | zoom | No refunds | Free | No return | - |
Scope: US region, individual plans only.
Data Freshness
Policies are sourced from official vendor documentation and terms of service.
- Daily automated checks β GitHub Action runs at 08:00 UTC, hashing vendor policy pages across all 4 services (refund, cancel, return, trial). If a page changes, an issue is opened for review.
- Policy source URLs tracked β Each service has its own sources file in
rules/linking to official policy pages. - Compliance export β
GET /api/compliance-exportreturns a CSV snapshot of tracked sources, hashes, and pending candidate changes (?format=jsonfor machine-readable output). - Versioned rules β Each rules file includes a
rules_versionfield for staleness detection.
Architecture
- Stateless β No database, no sessions, no side effects
- Deterministic β Same input always produces same output
- Versioned Rules β Rules files include version for tracking changes
- Daily Monitoring β GitHub Action checks all vendor policy pages daily
- Serverless β Runs on Vercel serverless functions
- Zero Dependencies β Core compute logic has no external dependencies
- Hostname Routing β Vercel middleware routes subdomains to correct MCP endpoints
Limitations
- US Only β Currently only supports US region
- Individual Plans Only β Business/enterprise plans not yet supported
- Calendar Days β Windows are based on calendar days, not business days
- Static Rules β Does not account for promotional offers or special circumstances
Changelog
Unreleased
Added:
GET /api/compliance-exportendpoint for policy monitoring evidence export (CSV default, JSON via?format=json).- Smoke test coverage for compliance export JSON and CSV paths.
v1.2.1 (2026-02-08)
Changed:
- Subdomain homepage now shows the relevant notary card (refund/cancel/return/trial).
- Version metadata is consistent across
server.json, MCPinitialize, and/.well-known/*.
v1.2.0 (2026-02-02)
Added:
- Cancel Notary MCP (cancel.decide.fyi) β cancellation penalty checker
- Return Notary MCP (return.decide.fyi) β return eligibility checker
- Trial Notary MCP (trial.decide.fyi) β free trial terms checker
- Hostname-based middleware routing for all subdomains
- Policy source files and daily checking for cancel, return, and trial policies
- Humans/Agents mode toggle on landing page
- MCP catalog with cards for all 4 servers
Fixed:
- Daily policy checker: added
contents:writepermission and fixed shell logic - Removed dead Cloudflare email-decode scripts causing 404s
v1.1.0 (2026-02-01)
Added:
- Expanded from 64 to 100 supported vendors
- Daily policy-check GitHub Action (cron at 08:00 UTC)
- Policy source URLs tracked in
rules/policy-sources.json - MCP vendor
enumin inputSchema for agent discoverability
Fixed:
ERR_IMPORT_ATTRIBUTE_MISSINGcrash on Vercel (Node 22 import attributes)
v1.0.0 (2026-01-15)
Added:
- Initial release with REST API and MCP server
- Support for 9 vendors
Free API (Default: No Auth)
All 4 policy servers are free to use. No authentication. No API keys.
/api/decide is public by default, and can be protected by setting DECIDE_API_KEY in server env vars.
If you run decide behind the decidesite proxy with dynamic customer keys, also set:
DECIDE_PROXY_SHARED_TOKEN: shared secret required inx-decide-proxy-tokenheader for trusted proxy calls.DECIDE_API_KEY: backend internal key that the trusted proxy forwards upstream (recommended to keep backend private).
Rate limit: 100 requests/minute per IP.
Policy Fetch Hook (for policy checker browser-hook lane)
Use POST /api/policy-fetch-hook as a fetch adapter for the daily checker when direct fetches are blocked.
Request body:
{
"url": "https://example.com/policy",
"vendor": "example_vendor",
"policy_type": "refund",
"timeout_ms": 18000
}
Auth:
Authorization: Bearer <POLICY_CHECK_BROWSER_HOOK_TOKEN>orx-hook-token: <token>
Server env:
POLICY_CHECK_BROWSER_HOOK_TOKEN(required for endpoint auth)POLICY_FETCH_BROWSERLESS_TOKEN(optional; enables browserless render first)POLICY_FETCH_BROWSERLESS_CONTENT_URL(optional override; defaulthttps://chrome.browserless.io/content)POLICY_FETCH_ALLOWED_HOSTS(optional comma-separated host allowlist)
Checker (GitHub Actions, repo decide):
- Secret
POLICY_CHECK_BROWSER_HOOK_URL= deployed endpoint URL (example:https://decide-1.vercel.app/api/policy-fetch-hook) - Secret
POLICY_CHECK_BROWSER_HOOK_TOKEN= same token as runtime env - Variable
POLICY_CHECK_FETCH_LANES_DEFAULT=browser_hook,direct,zendesk_api,mirror
Questions? decidefyi@gmail.com or @decidefyi on X
Links
- Website: https://decide.fyi
- Refund: https://refund.decide.fyi
- Cancel: https://cancel.decide.fyi
- Return: https://return.decide.fyi
- Trial: https://trial.decide.fyi
- X/Twitter: @decidefyi
- MCP Spec: https://modelcontextprotocol.io
Built with love by the decide.fyi team

