Complete step-by-step guide to unlock Claude Max using the SEPA payment method. Simple, fast, and 100% working.
Full access to Claude Max features using a simple browser trick
Get 5x the usage limits compared to the free tier. Send more prompts and get longer responses without hitting limits.
Skip the queue during high-traffic periods. Get instant responses even when servers are under heavy load.
Access Claude 3.5 Sonnet and other premium models with extended context windows for complex tasks.
Uses German SEPA direct debit payment system. No credit card needed, no recurring charges.
Simple VPN connection to Germany unlocks the SEPA payment option on Claude's checkout page.
Powerful userscript intercepts and modifies the checkout response to enable the Cassia payment flow.
Follow each step carefully. Takes about 5 minutes total.
Open Chrome Web Store and install the Tampermonkey browser extension. This is a userscript manager that will run our script on Claude's website.
Click the Tampermonkey icon → "Create a new script" → Delete the default code → Paste the Claude Script below → Click File → Save.
Turn on any VPN and connect to a German server. This is required to make the SEPA payment option appear on Claude's checkout page.
Open claude.ai, go to upgrade page. Change the country 2-3 times until the SEPA Payment option appears. Select Germany as country and SEPA as payment method.
Use FakeXy for a German address. Use @random1ban_bot on Telegram for a random German bank account number. Enter all details and submit.
Copy this script and paste it into Tampermonkey for Claude Max
// ==UserScript== // @name TestExample Cassia Response Mock // @namespace local.testexample.checkout // @version 1.1.0 // @description Rewrite checkout_capabilities response to cassia // @match *://claude.ai/* // @match *://*.claude.ai/* // @run-at document-start // @grant none // @sandbox raw // ==/UserScript== (function () { "use strict"; const TARGET_HOST = "claude.ai"; const TARGET_PATH = /^\/api\/organizations\/[^/]+\/subscription\/checkout_capabilities\/?$/; const MOCK_DATA = { checkout_flow: "cassia" }; const MOCK_BODY = JSON.stringify(MOCK_DATA); const MOCK_LENGTH = new TextEncoder().encode(MOCK_BODY).byteLength; function getTargetUrl(input, method = "GET") { try { let rawUrl; if (typeof input === "string" || input instanceof URL) { rawUrl = String(input); } else if (input && typeof input.url === "string") { rawUrl = input.url; } else { return null; } const url = new URL(rawUrl, location.href); if (String(method).toUpperCase() !== "GET") { return null; } const hostMatched = url.hostname === TARGET_HOST || url.hostname.endsWith("." + TARGET_HOST); if (!hostMatched) { return null; } if (!TARGET_PATH.test(url.pathname)) { return null; } return url; } catch (error) { console.error("[Cassia Mock] URL parse failed:", error); return null; } } function createMockResponse(originalResponse) { const headers = new Headers(originalResponse.headers); headers.delete("content-length"); headers.delete("content-encoding"); headers.delete("etag"); headers.delete("content-md5"); headers.set( "content-type", "application/json; charset=utf-8" ); headers.set("content-length", String(MOCK_LENGTH)); headers.set("cache-control", "no-store"); const response = new Response(MOCK_BODY, { status: 200, statusText: "OK", headers }); try { Object.defineProperties(response, { url: { value: originalResponse.url, configurable: true }, redirected: { value: originalResponse.redirected, configurable: true }, type: { value: originalResponse.type, configurable: true } }); } catch (_) {} return response; } /* Intercept Fetch */ const nativeFetch = window.fetch; window.fetch = async function (input, init) { const method = init?.method || (input instanceof Request ? input.method : "GET"); const targetUrl = getTargetUrl(input, method); const originalResponse = await nativeFetch.apply(this, arguments); if (!targetUrl) { return originalResponse; } console.warn( "[Cassia Mock] Fetch response overridden:", targetUrl.href, MOCK_DATA ); return createMockResponse(originalResponse); }; /* Intercept XMLHttpRequest */ const XhrPrototype = XMLHttpRequest.prototype; const xhrInfo = new WeakMap(); const loggedXhrs = new WeakSet(); const nativeOpen = XhrPrototype.open; const nativeSend = XhrPrototype.send; const nativeGetResponseHeader = XhrPrototype.getResponseHeader; const nativeGetAllResponseHeaders = XhrPrototype.getAllResponseHeaders; XhrPrototype.open = function (method, url) { let absoluteUrl; try { absoluteUrl = new URL( String(url), location.href ).href; } catch (_) { absoluteUrl = String(url); } xhrInfo.set(this, { method: String(method || "GET").toUpperCase(), url: absoluteUrl }); return nativeOpen.apply(this, arguments); }; function getMatchedXhr(xhr) { const info = xhrInfo.get(xhr); if ( !info || xhr.readyState !== XMLHttpRequest.DONE ) { return null; } return getTargetUrl(info.url, info.method); } function replaceXhrGetter(propertyName, replacement) { const descriptor = Object.getOwnPropertyDescriptor( XhrPrototype, propertyName ); if ( !descriptor || typeof descriptor.get !== "function" || descriptor.configurable === false ) { console.warn( `[Cassia Mock] Cannot override XHR.${propertyName}` ); return; } const nativeGetter = descriptor.get; Object.defineProperty(XhrPrototype, propertyName, { ...descriptor, get: function () { if (!getMatchedXhr(this)) { return nativeGetter.call(this); } return replacement.call(this, nativeGetter); } }); } replaceXhrGetter( "responseText", function (nativeGetter) { if ( this.responseType !== "" && this.responseType !== "text" ) { return nativeGetter.call(this); } return MOCK_BODY; } ); replaceXhrGetter( "response", function (nativeGetter) { if (this.responseType === "json") { return { checkout_flow: "cassia" }; } if ( this.responseType === "" || this.responseType === "text" ) { return MOCK_BODY; } return nativeGetter.call(this); } ); replaceXhrGetter("status", function () { return 200; }); replaceXhrGetter("statusText", function () { return "OK"; }); XhrPrototype.getResponseHeader = function (name) { if (!getMatchedXhr(this)) { return nativeGetResponseHeader.apply( this, arguments ); } switch (String(name).toLowerCase()) { case "content-type": return "application/json; charset=utf-8"; case "content-length": return String(MOCK_LENGTH); case "cache-control": return "no-store"; case "content-encoding": case "etag": case "content-md5": return null; default: return nativeGetResponseHeader.apply( this, arguments ); } }; XhrPrototype.getAllResponseHeaders = function () { const originalHeaders = nativeGetAllResponseHeaders.apply(this, arguments); if (!getMatchedXhr(this)) { return originalHeaders; } const headers = String(originalHeaders || "") .split(/\r?\n/) .filter(Boolean) .filter(function (line) { const name = line .split(":", 1)[0] .trim() .toLowerCase(); return ![ "content-type", "content-length", "content-encoding", "cache-control", "etag", "content-md5" ].includes(name); }); headers.push( "content-type: application/json; charset=utf-8", `content-length: ${MOCK_LENGTH}`, "cache-control: no-store" ); return headers.join("\r\n") + "\r\n"; }; XhrPrototype.send = function () { this.addEventListener( "readystatechange", function () { const targetUrl = getMatchedXhr(this); if (targetUrl && !loggedXhrs.has(this)) { loggedXhrs.add(this); console.warn( "[Cassia Mock] XHR response overridden:", targetUrl.href, MOCK_DATA ); } } ); return nativeSend.apply(this, arguments); }; /* Status Badge */ function showStatusBadge() { if (!document.documentElement) { document.addEventListener( "DOMContentLoaded", showStatusBadge, { once: true } ); return; } if (document.getElementById("cassia-mock-badge")) { return; } const badge = document.createElement("div"); badge.id = "cassia-mock-badge"; badge.textContent = "Cassia Mock ON"; Object.assign(badge.style, { position: "fixed", right: "12px", bottom: "12px", zIndex: "2147483647", padding: "7px 11px", color: "#ffffff", background: "#167c3a", borderRadius: "6px", fontSize: "12px", fontFamily: "sans-serif", boxShadow: "0 2px 8px rgba(0,0,0,.3)" }); document.documentElement.appendChild(badge); } window.__cassiaMockInstalled = true; console.info( "[Cassia Mock] Script loaded:", location.href ); showStatusBadge(); })();
Answers to frequently asked questions about this method
The Tampermonkey script only modifies the browser-side response for the checkout API call. It does not interact with any other websites or steal data. Use a VPN and fake details for your safety.
No. You can use the Telegram bot @random1ban_bot to generate random German bank account details (IBAN/BIC). These are temporary generated numbers that work for the SEPA form.
Any VPN with German servers works. Popular options include NordVPN, Surfshark, ProtonVPN (free), or Windscribe (free). Connect to Germany before opening Claude.
The SEPA method creates a pending authorization, but since the bank details are randomly generated, no actual charge goes through. However, always use caution with payment methods.
No. Tampermonkey only works on desktop browsers (Chrome, Firefox, Edge). You need a computer to install and run the userscript.
Make sure your VPN is connected to Germany. Try switching between different German server locations. Also clear your browser cache and try changing the country selector 2-3 times on the checkout page.