{"uid":"cap_VvfMBWRS4Uz84C7ja7yTS","slug":"netintel-dev-batch-translation-f07e34e4","name":"netintel.dev Batch Translation","description":"Translate many independent strings in one request — each with a caller ID preserved in the response — with per-item status, glossary and tone support, and partial success so one bad item never fails the batch, so agents can localize whole string tables in a single call.","url":"https://netintel.dev/translate/batch","method":"POST","headers":{},"bodySchema":{"type":"object","$schema":"https://json-schema.org/draft/2020-12/schema","required":["input"],"properties":{"input":{"type":"object","required":["type","method","bodyType","body"],"properties":{"body":{"type":"object","required":["items","target"],"properties":{"tone":{"type":"string","description":"Optional tone guidance, e.g. \"friendly and concise\"."},"items":{"type":"array","description":"The strings to translate: [{\"id\":\"greeting\",\"text\":\"Hello {{name}}\",\"context\":\"button label\"}]. ids and order are preserved in the response. 1-200 items, 64KB total."},"source":{"type":"string","description":"Source language, applied to every item. Auto-detected per item when omitted."},"target":{"type":"string","description":"Target language — ISO 639-1 code (\"fr\") or English name (\"French\"). Aliases also accepted: target_lang, target_language, to, lang."},"glossary":{"type":"object","description":"Enforced term mappings applied to all items: {\"dashboard\":\"tableau de bord\"}."},"formality":{"type":"string","description":"\"formal\", \"informal\", or \"neutral\" (default)."},"protected_values":{"type":"array","description":"Strings that must survive byte-for-byte in every item — brand names, IDs: [\"Acme\"]."}}},"type":{"type":"string","const":"http"},"method":{"enum":["POST"],"type":"string"},"bodyType":{"enum":["json","form-data","text"],"type":"string"}},"additionalProperties":false},"output":{"type":"object","required":["type"],"properties":{"type":{"type":"string"},"example":{"type":"object","properties":{"grade":{"type":"string","description":"Letter grade A-F derived from score"},"items":{"type":"array","description":"One entry per input item, in input order, each carrying your id: {id, status (\"ok\"|\"failed\"), translated, detected_language, confidence, warnings, reason}. A failed item has translated=null and a reason (structure_broken, unparseable, truncated, llm_unavailable, timeout)."},"score":{"type":"number","description":"0-100; 100 on a successful run, even with some items failed"},"usage":{"type":"object","description":"Model, model_calls, input_tokens, output_tokens"},"failed":{"type":"number","description":"Items that failed — the batch still returns 200"},"pricing":{"type":"object","description":"Base price, included items, and per-item overage beyond the included count"},"findings":{"type":"array","description":"Scored deductions, e.g. all_items_failed"},"warnings":{"type":"array","description":"Batch-level notes, e.g. that some items failed"},"succeeded":{"type":"number","description":"Items translated and structurally verified"},"item_count":{"type":"number","description":"Items submitted"},"billed_items":{"type":"number","description":"Item count used for pricing (base covers 25)"},"target_language":{"type":"string","description":"ISO 639-1 code translated into"}}}}}}},"responseSchema":{"type":"json","example":{"grade":"A","items":[{"id":"greeting","status":"ok","warnings":[],"confidence":0.98,"translated":"Bonjour {{name}}","detected_language":"en"},{"id":"cta","status":"ok","warnings":[],"confidence":0.98,"translated":"Ouvrir le tableau de bord","detected_language":"en"}],"score":100,"usage":{"model":"claude-haiku-4-5-20251001","model_calls":2,"input_tokens":480,"output_tokens":64},"failed":0,"pricing":{"base_usd":"$0.05","overage_usd":0,"overage_items":0,"included_items":25,"overage_per_item_usd":0.002},"findings":[],"warnings":[],"succeeded":2,"item_count":2,"billed_items":2,"target_language":"fr"}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.05","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.05/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.05","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.05","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_aq9hA14VjYv5RU_GD0lbh","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.05","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Translates an array of strings in a single request, preserving caller-assigned IDs and returning per-item status, with glossary enforcement, tone/formality control, and partial success so one failed item never aborts the batch.","exampleAgentPrompt":"Translate all these UI strings to French — keep 'Acme' untouched, use a friendly and concise tone, and make sure each string comes back with its original ID so I can map the results: [{\"id\":\"btn_save\",\"text\":\"Save changes\"},{\"id\":\"btn_cancel\",\"text\":\"Cancel\"},{\"id\":\"greeting\",\"text\":\"Hello, Acme user!\"}].","exampleUseCases":[{"title":"Localize SaaS app UI strings","prompt":"I have 50 UI strings for my app — each has an ID like 'nav_home' or 'btn_submit' — translate them all to German with a neutral formal tone, enforce that 'Dashboard' always becomes 'Übersicht', and keep the brand name 'Acme' byte-for-byte unchanged."},{"title":"Translate e-commerce product descriptions","prompt":"Take this list of 30 product descriptions with their SKU IDs and translate them all to Japanese. If a couple of items fail, that's okay — I still want the successful ones back. Use a friendly tone and auto-detect the source language for each item."},{"title":"Internationalize mobile app in CI pipeline","prompt":"Localize our entire strings.json file — 120 entries — to Brazilian Portuguese, preserving all the template placeholders like {{name}} and {{count}}, keeping our brand name 'Vela' intact, and give me back a confidence score and grade so I know how reliable the batch was."}],"resultDescription":"An array of result objects in input order, each carrying the original caller-assigned ID, a status of 'ok' or 'failed', the translated text (null if failed), detected source language, a confidence value, any warnings, and a failure reason if applicable. The response also includes an overall 0-100 quality score and a letter grade A-F for the entire batch.","failureModes":["Individual items can fail with reasons: structure_broken, unparseable, truncated, llm_unavailable, timeout — while the rest of the batch succeeds","Exceeding 200 items or the 64KB total body limit may reject the entire request","Invalid ISO 639-1 target language code or unrecognized language alias returns an error","Payment of 0.05 USDC not provided or rejected via x402 protocol blocks the request","Glossary conflicts with protected_values may cause per-item warnings"],"whenToPreferThis":"Choose this endpoint when you need to translate many strings in a single HTTP call, especially when caller-assigned IDs must survive round-trip so you can reassemble a string table. Prefer it over single-string endpoints when you have 2–200 items to localize, when partial success is acceptable, when you need glossary enforcement or brand-name protection, or when you want per-item confidence scoring and an overall batch quality grade. It is particularly well-suited for CI/CD localization pipelines, mobile app string tables, and e-commerce product copy.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-09-14T12:42:57.391Z","isFirstParty":false}