
Dark Pattern Contract & Subscription Exit Lawyer
Paste a contract or Terms URL and get the decision first: send notice by a computed date, or the window has passed. Quotes auto-renewal, notice-window and early-termination traps verbatim, computes the renewal and last-notice dates in code, estimates the renewal cost you avoid from your fee, maps the exit to ROSCA, state automatic-renewal laws and EU/UK consumer law with links, and drafts a notice with its placeholders listed. General information, not legal advice.
What you get
A missed 60-day notice window on a gym, SaaS or telecom plan locks in another full term, often $500 to several thousand dollars for consumers and far more for business contracts; one caught deadline pays for the call many times over.
Call it
Send the JSON body below to https://agents.writerslogic.com/api/v1/terminate-contract. An unpaid request answers 402 with the price and how to pay; a request that fails with a 5xx status is not charged.
curl -i -X POST https://agents.writerslogic.com/api/v1/terminate-contract \
-H 'content-type: application/json' \
-d '{"contractText":"This Agreement renews automatically for successive 12-month terms unless either party gives written notice of non-renewal by certified mail at least 60 days before the end of the then-current term. Early termination requires payment of all remaining fees for the current term.","vendorName":"Acme Fitness Clubs","userJurisdiction":"California","reasonForExit":"Moved out of state; signed up online.","customerType":"consumer","signupMethod":"online","contractStartDate":"2026-03-15","monthlyFee":49.99}'
Input
| Field | Type | Required | Description |
|---|---|---|---|
termsUrl | string; length 0..2048 | no | Terms of Service or cancellation policy URL. Provide termsUrl or contractText. |
contractText | string; length 0..200000 | no | |
vendorName | string; length 1..200 | yes | |
userJurisdiction | string; length 2..100 | yes | e.g. California, New York, EU (Germany), UK. |
reasonForExit | string; length 1..2000 | yes | |
customerType | string; one of "consumer", "business" | no | |
customerName | string; length 0..200 | no | |
accountIdentifier | string; length 0..200 | no | |
contractStartDate | string | no | |
signupMethod | string; one of "online", "phone", "in_person" | no | |
monthlyFee | number; 0..10000000 | no | What you pay per month, USD. Used to compute the dollars at stake. |
annualFee | number; 0..100000000 | no | What you pay per year, USD, if billed annually. Use monthlyFee or annualFee. |
earlyTerminationFeeUsd | number; 0..100000000 | no | Early-termination fee the vendor says you owe, USD, if any. |
Example request body
{
"contractText": "This Agreement renews automatically for successive 12-month terms unless either party gives written notice of non-renewal by certified mail at least 60 days before the end of the then-current term. Early termination requires payment of all remaining fees for the current term.",
"vendorName": "Acme Fitness Clubs",
"userJurisdiction": "California",
"reasonForExit": "Moved out of state; signed up online.",
"customerType": "consumer",
"signupMethod": "online",
"contractStartDate": "2026-03-15",
"monthlyFee": 49.99
}
Result
The response is { "data": ..., "_provenance": ... }. data carries these fields; _provenance is a signed W3C Verifiable Credential with a C2PA-style manifest, checked free at POST /api/v1/verify-provenance.
| Field | Type | Required | Description |
|---|---|---|---|
contract_summary | string | no | |
hiddenTraps | array<object> | no | |
legalLeverage | array<object> | no | |
deadlines | array<string> | no | |
cancellationSteps | array<string> | no | |
terminationNotice | object | no | |
risk_of_fees | string; one of "high", "medium", "low", "none" | no | |
caveats | array<string> | no | |
unverifiedTraps | array<object> | no | Traps whose quoted clause was not found in the contract text; withheld from hiddenTraps. |
headline | object | no | Decision first: the verdict, the dollars at stake, confidence and the exact next step. |
fee_exposure | object | no | Dollar exposure computed from monthlyFee/annualFee and the contract's renewal term; null fields mean an input was missing. |
readyToSend | object | no | What to do before sending terminationNotice: placeholders to replace, delivery methods, the last day to send, and warnings. |
llm | string; one of "ok", "unavailable" | no | unavailable: the analysis step failed and the result is code-only (dates, keyword-flagged clauses, template notice). |
llm_error | string | no | |
disclaimer | string | no | |
computed_deadlines | object | no | Renewal and notice dates computed by code from the contract text; see status for why none may be present. |
source_url | one of | no | |
contract_chars | integer | no | |
truncated_for_model | boolean | no |
Pay and connect
Available through: x402 (USDC on Base), MCP, RapidAPI, Apify.
Machine-readable
- This agent as JSON (schemas, example, OpenAPI operation)
- Free signed sample response
- OpenAPI 3.1 · Catalog · Index of every agent