[{"data":1,"prerenderedAt":1293},["ShallowReactive",2],{"docs-nav":3,"docs-en-\u002Fdocs\u002Fmcp":58},{"th":4,"en":45},[5,10,14,19,23,27,31,36,40],{"path":6,"title":7,"category":8,"order":9},"\u002Fdocs","Introduction","intro",1,{"path":11,"title":12,"category":8,"order":13},"\u002Fdocs\u002Fgetting-started","เริ่มต้นใช้งาน",10,{"path":15,"title":16,"category":17,"order":18},"\u002Fdocs\u002Fauthentication","Authentication","core",20,{"path":20,"title":21,"category":17,"order":22},"\u002Fdocs\u002Fapi","API Reference",25,{"path":24,"title":25,"category":17,"order":26},"\u002Fdocs\u002Fwebhooks","Webhooks",30,{"path":28,"title":29,"category":17,"order":30},"\u002Fdocs\u002Fsecurity","Security & PDPA",35,{"path":32,"title":33,"category":34,"order":35},"\u002Fdocs\u002Frecipes","ตัวอย่างพร้อมใช้","guides",40,{"path":37,"title":38,"category":34,"order":39},"\u002Fdocs\u002Fmcp","MCP สำหรับ AI",45,{"path":41,"title":42,"category":43,"order":44},"\u002Fdocs\u002Fchangelog","Changelog","meta",90,[46,47,48,49,51,52,54,56,57],{"path":20,"title":21},{"path":15,"title":16},{"path":41,"title":42},{"path":11,"title":50},"Getting started",{"path":6,"title":7},{"path":37,"title":53},"MCP for AI tools",{"path":32,"title":55},"Recipes",{"path":28,"title":29},{"path":24,"title":25},{"id":59,"title":53,"badge":60,"body":61,"category":34,"description":1286,"extension":1287,"meta":1288,"navigation":1059,"order":39,"path":37,"seo":1289,"stem":1290,"updatedAt":1291,"__hash__":1292,"translated":1059},"docs_en\u002Fdocs\u002Fmcp.md","New",{"type":62,"value":63,"toc":1273},"minimark",[64,73,84,133,136,149,161,164,169,183,217,243,246,250,261,266,273,321,332,426,437,441,452,510,520,524,542,638,671,675,692,696,930,998,1002,1005,1114,1125,1129,1164,1168,1269],[65,66,67,68,72],"p",{},"SlipBolt runs an ",[69,70,71],"strong",{},"MCP server"," (Model Context Protocol) so the AI you already code with\ncan talk to SlipBolt directly — no pasting docs into the chat, no guessing endpoint names.",[74,75,81],"pre",{"className":76,"code":78,"language":79,"meta":80},[77],"language-text","https:\u002F\u002Fdocs.slip-bolt.com\u002Fmcp\n","text","",[82,83,78],"code",{"__ignoreMap":80},[85,86,87,100],"table",{},[88,89,90],"thead",{},[91,92,93,97],"tr",{},[94,95,96],"th",{},"What it can do",[94,98,99],{},"Key needed?",[101,102,103,112,123],"tbody",{},[91,104,105,109],{},[106,107,108],"td",{},"Search and read these docs (TH\u002FEN, code samples included)",[106,110,111],{},"No",[91,113,114,117],{},[106,115,116],{},"Show your shop, plan and remaining quota · look up past slips · fetch receipts",[106,118,119,120],{},"Key with scope ",[82,121,122],{},"read",[91,124,125,128],{},[106,126,127],{},"Verify a new slip (uses real quota)",[106,129,119,130],{},[82,131,132],{},"verify",[65,134,135],{},"Try asking your AI:",[137,138,139,143,146],"ul",{},[140,141,142],"li",{},"\"Write an Express endpoint that takes a slip from a customer and closes the order, following the SlipBolt docs\"",[140,144,145],{},"\"Did the slip with reference 015170106978BTF01234 pass? Give me the receipt code and check link\"",[140,147,148],{},"\"How much quota is left this month?\"",[150,151,153],"callout",{"type":152},"info",[65,154,155,156,160],{},"MCP has no powers beyond the REST API — every tool just forwards your key to the same ",[157,158,159],"a",{"href":20},"Public API",".\nKey scopes, rate limits, plan rules and quota all behave exactly as in these docs.",[162,163],"hr",{},[165,166,168],"h2",{"id":167},"_1-create-an-api-key","1. Create an API key",[65,170,171,172,175,176,182],{},"Go to ",[69,173,174],{},"Settings → API Keys"," (",[157,177,181],{"href":178,"rel":179},"https:\u002F\u002Fapp.slip-bolt.com\u002Fsettings\u002Fapi-keys",[180],"nofollow","app.slip-bolt.com\u002Fsettings\u002Fapi-keys",") and create a key.",[137,184,185,198,207],{},[140,186,187,188,193,194,197],{},"Use ",[69,189,190],{},[82,191,192],{},"sk_test_"," while developing · switch to ",[82,195,196],{},"sk_live_"," for the shop's real data",[140,199,200,206],{},[69,201,202,203,205],{},"Tick only the ",[82,204,122],{}," scope"," if the AI only needs to read — it then cannot verify new slips (which uses quota), however hard it tries",[140,208,209,210,213,214],{},"Keep the key in an environment variable called ",[82,211,212],{},"SLIPBOLT_API_KEY"," — ",[69,215,216],{},"never paste the key into a chat with an AI",[74,218,222],{"className":219,"code":220,"language":221,"meta":80,"style":80},"language-bash shiki shiki-themes github-light github-dark","export SLIPBOLT_API_KEY=\"sk_test_xxxxxxxxxxxxxxxx\"\n","bash",[82,223,224],{"__ignoreMap":80},[225,226,228,232,236,239],"span",{"class":227,"line":9},"line",[225,229,231],{"class":230},"szBVR","export",[225,233,235],{"class":234},"sVt8B"," SLIPBOLT_API_KEY",[225,237,238],{"class":230},"=",[225,240,242],{"class":241},"sZZnC","\"sk_test_xxxxxxxxxxxxxxxx\"\n",[65,244,245],{},"Docs only (no shop data)? Skip this step and configure without the header.",[165,247,249],{"id":248},"_2-configure-your-ai-tool","2. Configure your AI tool",[65,251,252,253,256,257,260],{},"The key goes in the ",[82,254,255],{},"Authorization: Bearer sk_…"," header only — ",[69,258,259],{},"keys in the URL are not accepted"," (URLs end up in logs at every hop).",[262,263,265],"h3",{"id":264},"claude-code","Claude Code",[65,267,268,269,272],{},"Quick — one command (the key is stored in ",[82,270,271],{},"~\u002F.claude.json"," on your machine):",[74,274,276],{"className":219,"code":275,"language":221,"meta":80,"style":80},"claude mcp add --transport http slipbolt https:\u002F\u002Fdocs.slip-bolt.com\u002Fmcp \\\n  --header \"Authorization: Bearer $SLIPBOLT_API_KEY\"\n",[82,277,278,306],{"__ignoreMap":80},[225,279,280,284,287,290,294,297,300,303],{"class":227,"line":9},[225,281,283],{"class":282},"sScJk","claude",[225,285,286],{"class":241}," mcp",[225,288,289],{"class":241}," add",[225,291,293],{"class":292},"sj4cs"," --transport",[225,295,296],{"class":241}," http",[225,298,299],{"class":241}," slipbolt",[225,301,302],{"class":241}," https:\u002F\u002Fdocs.slip-bolt.com\u002Fmcp",[225,304,305],{"class":292}," \\\n",[225,307,309,312,315,318],{"class":227,"line":308},2,[225,310,311],{"class":292},"  --header",[225,313,314],{"class":241}," \"Authorization: Bearer ",[225,316,317],{"class":234},"$SLIPBOLT_API_KEY",[225,319,320],{"class":241},"\"\n",[65,322,323,324,327,328,331],{},"Shared with your team — put ",[82,325,326],{},".mcp.json"," at the project root. It is safe to commit because it holds no key:\nClaude Code reads ",[82,329,330],{},"${SLIPBOLT_API_KEY}"," from each person's environment when it connects.",[74,333,337],{"className":334,"code":335,"language":336,"meta":80,"style":80},"language-json shiki shiki-themes github-light github-dark","{\n  \"mcpServers\": {\n    \"slipbolt\": {\n      \"type\": \"http\",\n      \"url\": \"https:\u002F\u002Fdocs.slip-bolt.com\u002Fmcp\",\n      \"headers\": { \"Authorization\": \"Bearer ${SLIPBOLT_API_KEY}\" }\n    }\n  }\n}\n","json",[82,338,339,344,352,360,375,388,408,414,420],{"__ignoreMap":80},[225,340,341],{"class":227,"line":9},[225,342,343],{"class":234},"{\n",[225,345,346,349],{"class":227,"line":308},[225,347,348],{"class":292},"  \"mcpServers\"",[225,350,351],{"class":234},": {\n",[225,353,355,358],{"class":227,"line":354},3,[225,356,357],{"class":292},"    \"slipbolt\"",[225,359,351],{"class":234},[225,361,363,366,369,372],{"class":227,"line":362},4,[225,364,365],{"class":292},"      \"type\"",[225,367,368],{"class":234},": ",[225,370,371],{"class":241},"\"http\"",[225,373,374],{"class":234},",\n",[225,376,378,381,383,386],{"class":227,"line":377},5,[225,379,380],{"class":292},"      \"url\"",[225,382,368],{"class":234},[225,384,385],{"class":241},"\"https:\u002F\u002Fdocs.slip-bolt.com\u002Fmcp\"",[225,387,374],{"class":234},[225,389,391,394,397,400,402,405],{"class":227,"line":390},6,[225,392,393],{"class":292},"      \"headers\"",[225,395,396],{"class":234},": { ",[225,398,399],{"class":292},"\"Authorization\"",[225,401,368],{"class":234},[225,403,404],{"class":241},"\"Bearer ${SLIPBOLT_API_KEY}\"",[225,406,407],{"class":234}," }\n",[225,409,411],{"class":227,"line":410},7,[225,412,413],{"class":234},"    }\n",[225,415,417],{"class":227,"line":416},8,[225,418,419],{"class":234},"  }\n",[225,421,423],{"class":227,"line":422},9,[225,424,425],{"class":234},"}\n",[65,427,428,429,432,433,436],{},"Check it: type ",[82,430,431],{},"\u002Fmcp"," in Claude Code — you should see ",[82,434,435],{},"slipbolt"," with 9 tools.",[262,438,440],{"id":439},"cursor","Cursor",[65,442,443,444,447,448,451],{},"Edit ",[82,445,446],{},"~\u002F.cursor\u002Fmcp.json"," (all projects) or ",[82,449,450],{},".cursor\u002Fmcp.json"," (this project only):",[74,453,455],{"className":334,"code":454,"language":336,"meta":80,"style":80},"{\n  \"mcpServers\": {\n    \"slipbolt\": {\n      \"url\": \"https:\u002F\u002Fdocs.slip-bolt.com\u002Fmcp\",\n      \"headers\": { \"Authorization\": \"Bearer ${env:SLIPBOLT_API_KEY}\" }\n    }\n  }\n}\n",[82,456,457,461,467,473,483,498,502,506],{"__ignoreMap":80},[225,458,459],{"class":227,"line":9},[225,460,343],{"class":234},[225,462,463,465],{"class":227,"line":308},[225,464,348],{"class":292},[225,466,351],{"class":234},[225,468,469,471],{"class":227,"line":354},[225,470,357],{"class":292},[225,472,351],{"class":234},[225,474,475,477,479,481],{"class":227,"line":362},[225,476,380],{"class":292},[225,478,368],{"class":234},[225,480,385],{"class":241},[225,482,374],{"class":234},[225,484,485,487,489,491,493,496],{"class":227,"line":377},[225,486,393],{"class":292},[225,488,396],{"class":234},[225,490,399],{"class":292},[225,492,368],{"class":234},[225,494,495],{"class":241},"\"Bearer ${env:SLIPBOLT_API_KEY}\"",[225,497,407],{"class":234},[225,499,500],{"class":227,"line":390},[225,501,413],{"class":234},[225,503,504],{"class":227,"line":410},[225,505,419],{"class":234},[225,507,508],{"class":227,"line":416},[225,509,425],{"class":234},[65,511,512,513,515,516,519],{},"Launch Cursor from a terminal where ",[82,514,212],{}," is exported (or set it system-wide), then check ",[69,517,518],{},"Settings → MCP",".",[262,521,523],{"id":522},"claude-desktop","Claude Desktop",[65,525,526,527,534,535,175,538,541],{},"Claude Desktop cannot send custom headers to a remote MCP server by itself ⇒ use ",[157,528,531],{"href":529,"rel":530},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fmcp-remote",[180],[82,532,533],{},"mcp-remote"," as a bridge (needs Node.js 18+).\nEdit ",[82,536,537],{},"claude_desktop_config.json",[69,539,540],{},"Settings → Developer → Edit Config",") and restart Claude Desktop:",[74,543,545],{"className":334,"code":544,"language":336,"meta":80,"style":80},"{\n  \"mcpServers\": {\n    \"slipbolt\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"mcp-remote\", \"https:\u002F\u002Fdocs.slip-bolt.com\u002Fmcp\", \"--header\", \"Authorization:${SLIPBOLT_AUTH}\"],\n      \"env\": { \"SLIPBOLT_AUTH\": \"Bearer sk_test_xxxxxxxxxxxxxxxx\" }\n    }\n  }\n}\n",[82,546,547,551,557,563,575,609,626,630,634],{"__ignoreMap":80},[225,548,549],{"class":227,"line":9},[225,550,343],{"class":234},[225,552,553,555],{"class":227,"line":308},[225,554,348],{"class":292},[225,556,351],{"class":234},[225,558,559,561],{"class":227,"line":354},[225,560,357],{"class":292},[225,562,351],{"class":234},[225,564,565,568,570,573],{"class":227,"line":362},[225,566,567],{"class":292},"      \"command\"",[225,569,368],{"class":234},[225,571,572],{"class":241},"\"npx\"",[225,574,374],{"class":234},[225,576,577,580,583,586,589,592,594,596,598,601,603,606],{"class":227,"line":377},[225,578,579],{"class":292},"      \"args\"",[225,581,582],{"class":234},": [",[225,584,585],{"class":241},"\"-y\"",[225,587,588],{"class":234},", ",[225,590,591],{"class":241},"\"mcp-remote\"",[225,593,588],{"class":234},[225,595,385],{"class":241},[225,597,588],{"class":234},[225,599,600],{"class":241},"\"--header\"",[225,602,588],{"class":234},[225,604,605],{"class":241},"\"Authorization:${SLIPBOLT_AUTH}\"",[225,607,608],{"class":234},"],\n",[225,610,611,614,616,619,621,624],{"class":227,"line":390},[225,612,613],{"class":292},"      \"env\"",[225,615,396],{"class":234},[225,617,618],{"class":292},"\"SLIPBOLT_AUTH\"",[225,620,368],{"class":234},[225,622,623],{"class":241},"\"Bearer sk_test_xxxxxxxxxxxxxxxx\"",[225,625,407],{"class":234},[225,627,628],{"class":227,"line":410},[225,629,413],{"class":234},[225,631,632],{"class":227,"line":416},[225,633,419],{"class":234},[225,635,636],{"class":227,"line":422},[225,637,425],{"class":234},[137,639,640,654,657],{},[140,641,642,645,646,653],{},[82,643,644],{},"Authorization:${SLIPBOLT_AUTH}"," has ",[69,647,648,649,652],{},"no space after ",[82,650,651],{},":"," on purpose"," — Claude Desktop on Windows splits arguments containing spaces incorrectly",[140,655,656],{},"The key lives in this file on your machine — don't share the file",[140,658,659,660,663,664,667,668,670],{},"Docs only: ",[69,661,662],{},"Settings → Connectors → Add custom connector"," with the URL ",[82,665,666],{},"https:\u002F\u002Fdocs.slip-bolt.com\u002Fmcp"," — no ",[82,669,533],{}," needed",[262,672,674],{"id":673},"other-clients","Other clients",[65,676,677,678,681,682,684,685,688,689,691],{},"Any client that supports ",[69,679,680],{},"Streamable HTTP"," takes the same two values: URL ",[82,683,666],{}," + header ",[82,686,687],{},"Authorization: Bearer \u003Ckey>",".\nClients that only speak stdio can use ",[82,690,533],{}," the same way as Claude Desktop.",[165,693,695],{"id":694},"_3-all-tools","3. All tools",[85,697,698,714],{},[88,699,700],{},[91,701,702,705,708,711],{},[94,703,704],{},"Tool",[94,706,707],{},"What it does",[94,709,710],{},"Endpoint called",[94,712,713],{},"Quota",[101,715,716,732,746,764,781,809,830,855,896],{},[91,717,718,723,726,729],{},[106,719,720],{},[82,721,722],{},"search_docs",[106,724,725],{},"Search the docs (Thai\u002FEnglish), returns sections + links",[106,727,728],{},"—",[106,730,731],{},"No key",[91,733,734,739,742,744],{},[106,735,736],{},[82,737,738],{},"read_doc",[106,740,741],{},"Read a whole page or one section (markdown + code)",[106,743,728],{},[106,745,731],{},[91,747,748,753,756,761],{},[106,749,750],{},[82,751,752],{},"whoami",[106,754,755],{},"Shop · plan · key scopes · rate limits · payee accounts",[106,757,758],{},[82,759,760],{},"GET \u002Fapi\u002Fv1\u002Fme",[106,762,763],{},"Free",[91,765,766,771,774,779],{},[106,767,768],{},[82,769,770],{},"get_quota",[106,772,773],{},"Remaining quota this period + credits",[106,775,776],{},[82,777,778],{},"GET \u002Fapi\u002Fv1\u002Fquota",[106,780,763],{},[91,782,783,788,802,807],{},[106,784,785],{},[82,786,787],{},"list_transactions",[106,789,790,791,794,795,794,798,801],{},"Past slips, filter by ",[82,792,793],{},"status"," · ",[82,796,797],{},"source",[82,799,800],{},"transRef"," · time range",[106,803,804],{},[82,805,806],{},"GET \u002Fapi\u002Fv1\u002Ftransactions",[106,808,763],{},[91,810,811,816,823,828],{},[106,812,813],{},[82,814,815],{},"get_transaction",[106,817,818,819,822],{},"One result (",[82,820,821],{},"id"," from a result or a webhook)",[106,824,825],{},[82,826,827],{},"GET \u002Fapi\u002Fv1\u002Ftransactions\u002F:id",[106,829,763],{},[91,831,832,837,844,853],{},[106,833,834],{},[82,835,836],{},"get_receipt",[106,838,839,840,843],{},"Receipt code ",[82,841,842],{},"SB-XXXX-XXXX"," + check link + receipt image (PNG)",[106,845,846,849,850],{},[82,847,848],{},"…\u002F:id"," + ",[82,851,852],{},"…\u002F:id\u002Freceipt.png",[106,854,763],{},[91,856,857,862,883,891],{},[106,858,859],{},[82,860,861],{},"verify_slip",[106,863,864,865,794,868,794,871,874,875,878,879,882],{},"Verify a new slip from ",[82,866,867],{},"imageUrl",[82,869,870],{},"qr",[82,872,873],{},"imageBase64"," (exactly one) · ",[82,876,877],{},"async: true"," = queue it and get a ",[82,880,881],{},"vrf_…"," id at once",[106,884,885,794,888],{},[82,886,887],{},"POST \u002Fapi\u002Fv1\u002Fverify",[82,889,890],{},"…\u002Fverify\u002Fasync",[106,892,893],{},[69,894,895],{},"Uses quota",[91,897,898,903,923,928],{},[106,899,900],{},[82,901,902],{},"get_verification",[106,904,905,906,908,909,175,911,914,915,918,919,922],{},"Result of an ",[82,907,877],{}," ",[82,910,861],{},[82,912,913],{},"PENDING"," → ",[82,916,917],{},"COMPLETED","\u002F",[82,920,921],{},"FAILED",")",[106,924,925],{},[82,926,927],{},"GET \u002Fapi\u002Fv1\u002Fverifications\u002F:id",[106,929,763],{},[137,931,932,937,945,956,964,990],{},[140,933,934,936],{},[82,935,861],{}," is the only tool declared as not read-only — most clients ask you before calling it",[140,938,939,941,942,944],{},[82,940,870],{}," (the text inside the slip's QR code) is the cheapest and fastest · ",[82,943,873],{}," fits about 3.5 MB (the whole request must stay under 5 MB)",[140,946,947,948,951,952,922],{},"You can pass ",[82,949,950],{},"idempotencyKey"," (e.g. the order id) — an AI that retries after a timeout with the same value gets the original result, not verified or charged again (",[157,953,955],{"href":954},"\u002Fdocs\u002Fapi#idempotency-key-retry-the-same-request-with-no-side-effects","Idempotency-Key",[140,957,958,959,963],{},"Sending the same image again within 24 h returns the same result without using quota — same ",[157,960,962],{"href":961},"\u002Fdocs\u002Fapi#idempotency","Idempotency"," as the REST API",[140,965,966,967,588,970,973,974,977,978,981,982,985,986,922],{},"A passing slip (",[82,968,969],{},"status: \"SUCCESS\"",[82,971,972],{},"verified: true",") may still carry ",[82,975,976],{},"errorCode: \"STALE_SLIP\""," (and ",[82,979,980],{},"warnings: [{ code: \"STALE_SLIP\" }]",") — this is a ",[69,983,984],{},"warning"," that the slip is genuine but the bank transfer timestamp is over 24 h old, not a rejection (see ",[157,987,989],{"href":988},"\u002Fdocs\u002Fapi#stale-slip","Stale slip",[140,991,992,994,995],{},[82,993,192],{}," keys don't use the shop's quota but have their own ceiling; past it you get ",[82,996,997],{},"402 TEST_QUOTA_EXCEEDED",[165,999,1001],{"id":1000},"_4-try-it-with-curl","4. Try it with cURL",[65,1003,1004],{},"MCP is plain JSON-RPC over HTTP POST — you can try it without an AI:",[74,1006,1008],{"className":219,"code":1007,"language":221,"meta":80,"style":80},"# List tools (no key needed)\ncurl -s https:\u002F\u002Fdocs.slip-bolt.com\u002Fmcp \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Accept: application\u002Fjson, text\u002Fevent-stream\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools\u002Flist\"}'\n\n# Call get_quota with your shop's key\ncurl -s https:\u002F\u002Fdocs.slip-bolt.com\u002Fmcp \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"Accept: application\u002Fjson, text\u002Fevent-stream\" \\\n  -H \"Authorization: Bearer $SLIPBOLT_API_KEY\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools\u002Fcall\",\"params\":{\"name\":\"get_quota\",\"arguments\":{}}}'\n",[82,1009,1010,1016,1028,1038,1047,1055,1061,1066,1076,1084,1092,1106],{"__ignoreMap":80},[225,1011,1012],{"class":227,"line":9},[225,1013,1015],{"class":1014},"sJ8bj","# List tools (no key needed)\n",[225,1017,1018,1021,1024,1026],{"class":227,"line":308},[225,1019,1020],{"class":282},"curl",[225,1022,1023],{"class":292}," -s",[225,1025,302],{"class":241},[225,1027,305],{"class":292},[225,1029,1030,1033,1036],{"class":227,"line":354},[225,1031,1032],{"class":292},"  -H",[225,1034,1035],{"class":241}," \"Content-Type: application\u002Fjson\"",[225,1037,305],{"class":292},[225,1039,1040,1042,1045],{"class":227,"line":362},[225,1041,1032],{"class":292},[225,1043,1044],{"class":241}," \"Accept: application\u002Fjson, text\u002Fevent-stream\"",[225,1046,305],{"class":292},[225,1048,1049,1052],{"class":227,"line":377},[225,1050,1051],{"class":292},"  -d",[225,1053,1054],{"class":241}," '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools\u002Flist\"}'\n",[225,1056,1057],{"class":227,"line":390},[225,1058,1060],{"emptyLinePlaceholder":1059},true,"\n",[225,1062,1063],{"class":227,"line":410},[225,1064,1065],{"class":1014},"# Call get_quota with your shop's key\n",[225,1067,1068,1070,1072,1074],{"class":227,"line":416},[225,1069,1020],{"class":282},[225,1071,1023],{"class":292},[225,1073,302],{"class":241},[225,1075,305],{"class":292},[225,1077,1078,1080,1082],{"class":227,"line":422},[225,1079,1032],{"class":292},[225,1081,1035],{"class":241},[225,1083,305],{"class":292},[225,1085,1086,1088,1090],{"class":227,"line":13},[225,1087,1032],{"class":292},[225,1089,1044],{"class":241},[225,1091,305],{"class":292},[225,1093,1095,1097,1099,1101,1104],{"class":227,"line":1094},11,[225,1096,1032],{"class":292},[225,1098,314],{"class":241},[225,1100,317],{"class":234},[225,1102,1103],{"class":241},"\"",[225,1105,305],{"class":292},[225,1107,1109,1111],{"class":227,"line":1108},12,[225,1110,1051],{"class":292},[225,1112,1113],{"class":241}," '{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools\u002Fcall\",\"params\":{\"name\":\"get_quota\",\"arguments\":{}}}'\n",[65,1115,1116,1117,1120,1121,1124],{},"The tool output is in ",[82,1118,1119],{},"result.content[0].text"," (JSON) · failures come back as ",[82,1122,1123],{},"result.isError: true"," with a message saying what to fix.",[165,1126,1128],{"id":1127},"_5-security","5. Security",[137,1130,1131,1134,1137,1150,1159],{},[140,1132,1133],{},"The key travels only in each request's header — we don't store it, don't log it, and don't accept it via the URL or tool arguments",[140,1135,1136],{},"The server is stateless: every request stands alone, no lingering sessions",[140,1138,1139,1140,1142,1143,1146,1147,922],{},"Other websites cannot call ",[82,1141,431],{}," from a browser (the ",[82,1144,1145],{},"Origin"," is checked · ",[82,1148,1149],{},"403",[140,1151,1152,1153,1158],{},"Give the AI a ",[69,1154,1155,1157],{},[82,1156,122],{},"-only key"," unless it really needs to verify new slips · revoke keys any time at Settings → API Keys (takes effect on MCP immediately)",[140,1160,1161,1162],{},"Tool results contain your shop's slip data (payer name · partial account numbers) — some AI tools send chat content to their own provider, see ",[157,1163,29],{"href":28},[165,1165,1167],{"id":1166},"_6-troubleshooting","6. Troubleshooting",[85,1169,1170,1180],{},[88,1171,1172],{},[91,1173,1174,1177],{},[94,1175,1176],{},"Symptom",[94,1178,1179],{},"Cause \u002F fix",[101,1181,1182,1196,1206,1222,1235,1254],{},[91,1183,1184,1190],{},[106,1185,1186,1187],{},"Tool says ",[82,1188,1189],{},"This tool needs a SlipBolt API key",[106,1191,1192,1193,1195],{},"The client isn't sending the header — check ",[82,1194,212],{}," is set in the environment the client was started from",[91,1197,1198,1203],{},[106,1199,1200],{},[82,1201,1202],{},"SlipBolt API 401",[106,1204,1205],{},"Wrong or revoked key — create a new one at Settings → API Keys",[91,1207,1208,1213],{},[106,1209,1210],{},[82,1211,1212],{},"SlipBolt API 403",[106,1214,1215,1216,1218,1219,1221],{},"The key lacks the scope the tool needs (",[82,1217,861],{}," needs ",[82,1220,132],{},") or the plan has no REST API",[91,1223,1224,1229],{},[106,1225,1226],{},[82,1227,1228],{},"SlipBolt API 402",[106,1230,1231,1232,1234],{},"Out of quota\u002Fcredits, or the ",[82,1233,192],{}," ceiling is used up — retrying won't help",[91,1236,1237,1242],{},[106,1238,1239],{},[82,1240,1241],{},"SlipBolt API 429",[106,1243,1244,1245,1249,1250,1253],{},"Over the ",[157,1246,1248],{"href":1247},"\u002Fdocs\u002Fauthentication#rate-limit-same-on-every-plan","rate limit"," — wait as the ",[82,1251,1252],{},"Retry after"," in the message says",[91,1255,1256,1259],{},[106,1257,1258],{},"Opening the URL in a browser lands on this page",[106,1260,1261,1262,1264,1265,1268],{},"Expected — ",[82,1263,431],{}," only takes ",[82,1266,1267],{},"POST"," from MCP clients",[1270,1271,1272],"style",{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":80,"searchDepth":354,"depth":354,"links":1274},[1275,1276,1282,1283,1284,1285],{"id":167,"depth":308,"text":168},{"id":248,"depth":308,"text":249,"children":1277},[1278,1279,1280,1281],{"id":264,"depth":354,"text":265},{"id":439,"depth":354,"text":440},{"id":522,"depth":354,"text":523},{"id":673,"depth":354,"text":674},{"id":694,"depth":308,"text":695},{"id":1000,"depth":308,"text":1001},{"id":1127,"depth":308,"text":1128},{"id":1166,"depth":308,"text":1167},"Connect Claude Code, Cursor or Claude Desktop to SlipBolt — let your AI read the real docs, check quota, look up slips, fetch receipts and verify slips with your shop's key","md",{},{"title":53,"description":1286},"docs\u002Fmcp",null,"DEygOd8Z2LEx34jJfstPcV2TAJ_HS1eXYpyfu1bJpiI",1793286719490]