{"id":"chunk-boundaries","title":"Split text into chunks under a hard token cap without cutting a table, sentence or code fence","description":"Plans chunk boundaries for text an agent must feed to a model in pieces: every chunk is at most maxTokens in the named tokenizer (o200k_base or cl100k_base, verified by counting each finished chunk), boundaries fall only between sentences, blocks, whole Markdown or HTML tables and whole code fences, headings stay with the text that follows, and the chunks tile the input exactly (concatenating the spans gives the original). Spans carry offsets in UTF-16, code points, UTF-8 bytes and graphemes. If one sentence, table or fence alone exceeds the cap it is returned alone with exceedsCap and the status is fail; it is never cut. Sentence breaks follow ICU rules and can be wrong after abbreviations. Other tokenizer names (including Claude) return unsupported.","roi":"Chunking that never splits a table or fence and never exceeds the cap. 100,000 characters per $0.005 call.","audience":"agent-infra","package":"context-evidence-kit","channels":["x402","mcp"],"endpoint":{"method":"POST","url":"https://agents.writerslogic.com/api/v1/chunk-boundaries","path":"/api/v1/chunk-boundaries","contentType":"application/json"},"price":{"amount":"0.005","currency":"USDC","network":"base","perCall":true,"failedCallsCharged":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["text","maxTokens","tokenizer"],"properties":{"text":{"type":"string","maxLength":100000,"minLength":1,"description":"Text to chunk (Markdown, plain text or HTML tables)."},"maxTokens":{"type":"integer","minimum":32,"maximum":1000000,"description":"Hard cap per chunk."},"tokenizer":{"type":"string","maxLength":64,"description":"o200k_base or cl100k_base. Any other name (including Claude models) returns status unsupported for items that need counting; caller token counts are always accepted.","minLength":1},"includeText":{"type":"boolean","description":"Also return each chunk's text. Default false (slice by span)."}}},"resultSchema":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"chunks":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"index":{"type":"integer"},"tokens":{"type":"integer","description":"Actual token count of the chunk text."},"units":{"type":"integer"},"span":{"type":"object","description":"Half-open [start,end) range in four coordinate systems: UTF-16 code units, code points, UTF-8 bytes, extended grapheme clusters (Intl.Segmenter).","properties":{"utf16":{"type":"object","properties":{"start":{"type":"integer"},"end":{"type":"integer"}}},"codePoint":{"type":"object","properties":{"start":{"type":"integer"},"end":{"type":"integer"}}},"utf8":{"type":"object","properties":{"start":{"type":"integer"},"end":{"type":"integer"}}},"grapheme":{"type":"object","properties":{"start":{"type":"integer"},"end":{"type":"integer"}}},"graphemeAligned":{"type":"boolean"}}},"exceedsCap":{"type":"boolean"},"text":{"type":"string"}}},"maxItems":5000},"totalTokens":{"type":"integer","description":"Token count of the whole text."},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"outputSchema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"chunks":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"index":{"type":"integer"},"tokens":{"type":"integer","description":"Actual token count of the chunk text."},"units":{"type":"integer"},"span":{"type":"object","description":"Half-open [start,end) range in four coordinate systems: UTF-16 code units, code points, UTF-8 bytes, extended grapheme clusters (Intl.Segmenter).","properties":{"utf16":{"type":"object","properties":{"start":{"type":"integer"},"end":{"type":"integer"}}},"codePoint":{"type":"object","properties":{"start":{"type":"integer"},"end":{"type":"integer"}}},"utf8":{"type":"object","properties":{"start":{"type":"integer"},"end":{"type":"integer"}}},"grapheme":{"type":"object","properties":{"start":{"type":"integer"},"end":{"type":"integer"}}},"graphemeAligned":{"type":"boolean"}}},"exceedsCap":{"type":"boolean"},"text":{"type":"string"}}},"maxItems":5000},"totalTokens":{"type":"integer","description":"Token count of the whole text."},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"_provenance":{"type":"object","description":"C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance"}},"required":["data","_provenance"]},"example":{"text":"# Title\n\nFirst paragraph. It has two sentences.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\n```js\nconsole.log(1)\n```\n","maxTokens":40,"tokenizer":"o200k_base"},"openapiOperation":{"operationId":"chunk_boundaries","summary":"Split text into chunks under a hard token cap without cutting a table, sentence or code fence","description":"Plans chunk boundaries for text an agent must feed to a model in pieces: every chunk is at most maxTokens in the named tokenizer (o200k_base or cl100k_base, verified by counting each finished chunk), boundaries fall only between sentences, blocks, whole Markdown or HTML tables and whole code fences, headings stay with the text that follows, and the chunks tile the input exactly (concatenating the spans gives the original). Spans carry offsets in UTF-16, code points, UTF-8 bytes and graphemes. If one sentence, table or fence alone exceeds the cap it is returned alone with exceedsCap and the status is fail; it is never cut. Sentence breaks follow ICU rules and can be wrong after abbreviations. Other tokenizer names (including Claude) return unsupported.\n\nPrice: 0.005 USDC on Base (x402).","x-x402-price-usdc":"0.005","x-x402-amount":"5000","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}},"x-audience":"agent-infra","x-sample-url":"https://agents.writerslogic.com/api/v1/samples/chunk-boundaries","security":[{"x402":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["text","maxTokens","tokenizer"],"properties":{"text":{"type":"string","maxLength":100000,"minLength":1,"description":"Text to chunk (Markdown, plain text or HTML tables)."},"maxTokens":{"type":"integer","minimum":32,"maximum":1000000,"description":"Hard cap per chunk."},"tokenizer":{"type":"string","maxLength":64,"description":"o200k_base or cl100k_base. Any other name (including Claude models) returns status unsupported for items that need counting; caller token counts are always accepted.","minLength":1},"includeText":{"type":"boolean","description":"Also return each chunk's text. Default false (slice by span)."}}},"example":{"text":"# Title\n\nFirst paragraph. It has two sentences.\n\n| a | b |\n|---|---|\n| 1 | 2 |\n\n```js\nconsole.log(1)\n```\n","maxTokens":40,"tokenizer":"o200k_base"}}}},"responses":{"200":{"description":"Paid result with provenance","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"chunks":{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"index":{"type":"integer"},"tokens":{"type":"integer","description":"Actual token count of the chunk text."},"units":{"type":"integer"},"span":{"type":"object","description":"Half-open [start,end) range in four coordinate systems: UTF-16 code units, code points, UTF-8 bytes, extended grapheme clusters (Intl.Segmenter).","properties":{"utf16":{"type":"object","properties":{"start":{"type":"integer"},"end":{"type":"integer"}}},"codePoint":{"type":"object","properties":{"start":{"type":"integer"},"end":{"type":"integer"}}},"utf8":{"type":"object","properties":{"start":{"type":"integer"},"end":{"type":"integer"}}},"grapheme":{"type":"object","properties":{"start":{"type":"integer"},"end":{"type":"integer"}}},"graphemeAligned":{"type":"boolean"}}},"exceedsCap":{"type":"boolean"},"text":{"type":"string"}}},"maxItems":5000},"totalTokens":{"type":"integer","description":"Token count of the whole text."},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"_provenance":{"type":"object","description":"C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance"}},"required":["data","_provenance"]}}}},"400":{"description":"Invalid request (no payment consumed)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Invalid X-API-KEY","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Payment required or invalid","content":{"application/json":{"schema":{"type":"object","description":"x402 v2 PaymentRequired (also base64 in the PAYMENT-REQUIRED header)","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"code":{"type":"string"},"resource":{"type":"object"},"accepts":{"type":"array","items":{"type":"object"}},"extensions":{"type":"object"}}}}}},"502":{"description":"Upstream failure; the payment is released or not settled","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}},"links":{"docs":"https://agents.writerslogic.com/docs/chunk-boundaries/","docsJson":"https://agents.writerslogic.com/docs/chunk-boundaries.json","sample":"https://agents.writerslogic.com/api/v1/samples/chunk-boundaries","openapi":"https://agents.writerslogic.com/openapi.json","catalog":"https://agents.writerslogic.com/api/v1/catalog","verifyProvenance":"https://agents.writerslogic.com/api/v1/verify-provenance","index":"https://agents.writerslogic.com/docs/index.json"}}