{"id":"platform-text-fit","title":"Does this text fit: SMS segments, X posts, store listings, ad and push limits","description":"Checks up to 50 texts per call against a platform limit, for an agent writing a message, post, store listing, ad or push payload that must not be truncated or split. sms: GSM 7 bit vs UCS-2 and the exact segment boundaries per 3GPP TS 23.038 (extension characters cost 2 septets and never straddle a segment; an emoji is 2 UTF-16 units). x: weighted length per the open-source twitter-text config v3 (URLs 23, emoji 2). app-store, google-play, google-ads, apns, fcm: sourced field limits with the page URL and date in the answer. Meta ad fields and any unlisted platform or field answer unsupported. It does not judge wording, policy compliance or truncation by the receiving device.","roi":"A truncated ad headline or a surprise 3-segment SMS costs money or a rejected submission; one call returns the exact boundary.","audience":"business","package":"identifier-text-kit","channels":["x402","mcp"],"endpoint":{"method":"POST","url":"https://agents.writerslogic.com/api/v1/platform-text-fit","path":"/api/v1/platform-text-fit","contentType":"application/json"},"price":{"amount":"0.005","currency":"USDC","network":"base","perCall":true,"failedCallsCharged":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","required":["platform","text"],"properties":{"platform":{"type":"string","minLength":1,"maxLength":40,"description":"sms, x, app-store, google-play, google-ads, apns, fcm."},"field":{"type":"string","maxLength":40,"description":"app-store: name, subtitle, keywords, promotional-text, description. google-play: app-name, short-description, full-description. google-ads: rsa-headline, rsa-description, rsa-path. apns: payload, voip-payload. fcm: payload. Not used by sms and x."},"text":{"type":"string","maxLength":20000,"description":"Up to 60000 characters in total. For apns/fcm pass the serialized JSON payload."},"maxSegments":{"type":"integer","minimum":1,"maximum":10,"description":"sms only: the number of segments you accept (default 1)."}}}}}},"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."},"results":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"platform":{"type":"string"},"field":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["pass","fail","unknown","unsupported"]},"metric":{"anyOf":[{"type":"string","description":"septets, utf16-units, weighted-length, chars or utf8-bytes."},{"type":"null"}]},"used":{"anyOf":[{"type":"number"},{"type":"null"}]},"limit":{"anyOf":[{"type":"number","description":"For sms: the maximum number of segments asked for."},{"type":"null"}]},"detail":{"description":"Platform-specific: SMS encoding, segment boundaries, extension characters; X urls and emoji; store/ad/push counts by basis, source URL, as-of date and the quoted rule."}}}},"counts":{"type":"object","description":"Items per status.","properties":{"pass":{"type":"integer"},"fail":{"type":"integer"},"unknown":{"type":"integer"},"unsupported":{"type":"integer"}}},"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."},"results":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"platform":{"type":"string"},"field":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["pass","fail","unknown","unsupported"]},"metric":{"anyOf":[{"type":"string","description":"septets, utf16-units, weighted-length, chars or utf8-bytes."},{"type":"null"}]},"used":{"anyOf":[{"type":"number"},{"type":"null"}]},"limit":{"anyOf":[{"type":"number","description":"For sms: the maximum number of segments asked for."},{"type":"null"}]},"detail":{"description":"Platform-specific: SMS encoding, segment boundaries, extension characters; X urls and emoji; store/ad/push counts by basis, source URL, as-of date and the quoted rule."}}}},"counts":{"type":"object","description":"Items per status.","properties":{"pass":{"type":"integer"},"fail":{"type":"integer"},"unknown":{"type":"integer"},"unsupported":{"type":"integer"}}},"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":{"items":[{"platform":"sms","text":"Your code is 123456"},{"platform":"app-store","field":"subtitle","text":"Plan trips with friends and split every bill"},{"platform":"x","text":"Shipping today: https://example.com/release-notes"}]},"openapiOperation":{"operationId":"platform_text_fit","summary":"Does this text fit: SMS segments, X posts, store listings, ad and push limits","description":"Checks up to 50 texts per call against a platform limit, for an agent writing a message, post, store listing, ad or push payload that must not be truncated or split. sms: GSM 7 bit vs UCS-2 and the exact segment boundaries per 3GPP TS 23.038 (extension characters cost 2 septets and never straddle a segment; an emoji is 2 UTF-16 units). x: weighted length per the open-source twitter-text config v3 (URLs 23, emoji 2). app-store, google-play, google-ads, apns, fcm: sourced field limits with the page URL and date in the answer. Meta ad fields and any unlisted platform or field answer unsupported. It does not judge wording, policy compliance or truncation by the receiving device.\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":"business","x-sample-url":"https://agents.writerslogic.com/api/v1/samples/platform-text-fit","security":[{"x402":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","required":["platform","text"],"properties":{"platform":{"type":"string","minLength":1,"maxLength":40,"description":"sms, x, app-store, google-play, google-ads, apns, fcm."},"field":{"type":"string","maxLength":40,"description":"app-store: name, subtitle, keywords, promotional-text, description. google-play: app-name, short-description, full-description. google-ads: rsa-headline, rsa-description, rsa-path. apns: payload, voip-payload. fcm: payload. Not used by sms and x."},"text":{"type":"string","maxLength":20000,"description":"Up to 60000 characters in total. For apns/fcm pass the serialized JSON payload."},"maxSegments":{"type":"integer","minimum":1,"maximum":10,"description":"sms only: the number of segments you accept (default 1)."}}}}}},"example":{"items":[{"platform":"sms","text":"Your code is 123456"},{"platform":"app-store","field":"subtitle","text":"Plan trips with friends and split every bill"},{"platform":"x","text":"Shipping today: https://example.com/release-notes"}]}}}},"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."},"results":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"platform":{"type":"string"},"field":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"type":"string","enum":["pass","fail","unknown","unsupported"]},"metric":{"anyOf":[{"type":"string","description":"septets, utf16-units, weighted-length, chars or utf8-bytes."},{"type":"null"}]},"used":{"anyOf":[{"type":"number"},{"type":"null"}]},"limit":{"anyOf":[{"type":"number","description":"For sms: the maximum number of segments asked for."},{"type":"null"}]},"detail":{"description":"Platform-specific: SMS encoding, segment boundaries, extension characters; X urls and emoji; store/ad/push counts by basis, source URL, as-of date and the quoted rule."}}}},"counts":{"type":"object","description":"Items per status.","properties":{"pass":{"type":"integer"},"fail":{"type":"integer"},"unknown":{"type":"integer"},"unsupported":{"type":"integer"}}},"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/platform-text-fit/","docsJson":"https://agents.writerslogic.com/docs/platform-text-fit.json","sample":"https://agents.writerslogic.com/api/v1/samples/platform-text-fit","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"}}