{"query":"SDK Delivery and Recovery","corpusVersion":"local","generatedAt":"2026-11-03T08:05:54.006Z","results":[{"blockId":"sdks.delivery#sdk-delivery-and-recovery","pageId":"sdks.delivery","title":"SDK Delivery and Recovery","pageTitle":"SDK Delivery and Recovery","url":"https://teammately.ai/docs/sdks/delivery-and-recovery.md","humanUrl":"https://teammately.ai/docs/sdks/delivery-and-recovery#sdk-delivery-and-recovery","markdownUrl":"https://teammately.ai/docs/sdks/delivery-and-recovery.md","sectionId":"sdk-delivery-and-recovery","kind":"reference","productArea":"developer_tools","score":3124.1797889538598,"reasons":["search_match","exact_match","title_match","display_title_match","term_match","prefix_or_fuzzy_match"],"markdown":"# SDK Delivery and Recovery"},{"blockId":"sdks.delivery#definition","pageId":"sdks.delivery","title":"Definition","pageTitle":"SDK Delivery and Recovery","url":"https://teammately.ai/docs/sdks/delivery-and-recovery.md","humanUrl":"https://teammately.ai/docs/sdks/delivery-and-recovery#definition","markdownUrl":"https://teammately.ai/docs/sdks/delivery-and-recovery.md","sectionId":"definition","kind":"reference","productArea":"developer_tools","score":1584.0352001706356,"reasons":["search_match","exact_match","page_title_match","term_match","prefix_or_fuzzy_match"],"markdown":"## Definition\n\nYour application chooses what to capture, how to redact it, how long to wait and how to retain source records. The SDK preserves captured data and logical batch identity during submission."},{"blockId":"sdks.delivery#related-task-pages","pageId":"sdks.delivery","title":"Related task pages","pageTitle":"SDK Delivery and Recovery","url":"https://teammately.ai/docs/sdks/delivery-and-recovery.md","humanUrl":"https://teammately.ai/docs/sdks/delivery-and-recovery#related-task-pages","markdownUrl":"https://teammately.ai/docs/sdks/delivery-and-recovery.md","sectionId":"related-task-pages","kind":"reference","productArea":"developer_tools","score":1573.0195149128795,"reasons":["search_match","exact_match","page_title_match","term_match","prefix_or_fuzzy_match"],"markdown":"## Related task pages\n\n{% related-card-grid %}\n- [Python](/docs/sdks/python)\n- [TypeScript](/docs/sdks/typescript)\n- [Go](/docs/sdks/go)\n- [Fieldloop troubleshooting](/docs/troubleshooting/fieldloop)\n{% /related-card-grid %}"},{"blockId":"sdks.delivery#privacy-and-errors","pageId":"sdks.delivery","title":"Privacy and errors","pageTitle":"SDK Delivery and Recovery","url":"https://teammately.ai/docs/sdks/delivery-and-recovery.md","humanUrl":"https://teammately.ai/docs/sdks/delivery-and-recovery#privacy-and-errors","markdownUrl":"https://teammately.ai/docs/sdks/delivery-and-recovery.md","sectionId":"privacy-and-errors","kind":"reference","productArea":"developer_tools","score":1435.1317091527262,"reasons":["search_match","exact_match","page_title_match","term_match","prefix_or_fuzzy_match"],"markdown":"## Privacy and errors\n\nSelect and redact captured content before submission; the SDK does not automatically scrub it. Keep keys on the server. HTTPS is required outside loopback; credentials do not follow redirects. SDKs do not emit telemetry or discover stored login credentials.\n\nInspect structured API errors and processing receipts. A processed batch can have rejected or conflicting rows; an unknown transport outcome is not a confirmed rejection."},{"blockId":"sdks.delivery#fields-states-or-lifecycle-rules","pageId":"sdks.delivery","title":"Fields, states, or lifecycle rules","pageTitle":"SDK Delivery and Recovery","url":"https://teammately.ai/docs/sdks/delivery-and-recovery.md","humanUrl":"https://teammately.ai/docs/sdks/delivery-and-recovery#fields-states-or-lifecycle-rules","markdownUrl":"https://teammately.ai/docs/sdks/delivery-and-recovery.md","sectionId":"fields-states-or-lifecycle-rules","kind":"reference","productArea":"developer_tools","score":1404.9186503296305,"reasons":["search_match","exact_match","page_title_match","term_match","prefix_or_fuzzy_match"],"markdown":"## Fields, states, or lifecycle rules\n\n| Acknowledgement | What it establishes |\n| --- | --- |\n| Ingestor `add` / `Add` returns | A copied record is in memory |\n| Submission returns a receipt | Durable server admission is known |\n| Receipt becomes `processed` | Processing finished; inspect all row counts |\n| Receipt is `failed`, `cancelled` or `deleted` | Terminal outcome to inspect |\n\nBuffers are memory-only, with no disk outbox or crash-delivery guarantee. Keep original records until admission is known."},{"blockId":"sdks.delivery#immutable-batches-and-retries","pageId":"sdks.delivery","title":"Immutable batches and retries","pageTitle":"SDK Delivery and Recovery","url":"https://teammately.ai/docs/sdks/delivery-and-recovery.md","humanUrl":"https://teammately.ai/docs/sdks/delivery-and-recovery#immutable-batches-and-retries","markdownUrl":"https://teammately.ai/docs/sdks/delivery-and-recovery.md","sectionId":"immutable-batches-and-retries","kind":"reference","productArea":"developer_tools","score":1403.248811022205,"reasons":["search_match","exact_match","page_title_match","term_match","prefix_or_fuzzy_match"],"markdown":"## Immutable batches and retries\n\nPrepare a batch once and retain its bytes and application-owned key. Transient `429`, `502`, `503`, `504` and uncertain network failures retry identical bytes/key. `Retry-After` is honored independently of backoff. Permanent failures return directly.\n\nDefault retry counts and operation durations are uncapped unless the caller supplies limits or cancellation. Choose explicit application policies. A deadline stops the wait, not durable server work.\n\nPython `Batch.restore`, TypeScript `Batch.restore` and Go `RestoreBatch` retain original bytes for caller-owned recovery. Keep these bytes secure. Re-encoding changed content under the same key can conflict."},{"blockId":"sdks.delivery#continuous-ingestion-and-shutdown","pageId":"sdks.delivery","title":"Continuous ingestion and shutdown","pageTitle":"SDK Delivery and Recovery","url":"https://teammately.ai/docs/sdks/delivery-and-recovery.md","humanUrl":"https://teammately.ai/docs/sdks/delivery-and-recovery#continuous-ingestion-and-shutdown","markdownUrl":"https://teammately.ai/docs/sdks/delivery-and-recovery.md","sectionId":"continuous-ingestion-and-shutdown","kind":"reference","productArea":"developer_tools","score":1377.2810980226711,"reasons":["search_match","exact_match","page_title_match","term_match","prefix_or_fuzzy_match"],"markdown":"## Continuous ingestion and shutdown\n\nCapacities default to uncapped; caller-selected capacities include in-flight rows and can apply backpressure. Automatic dispatch has no imposed delay. Explicit flush and close drain serially.\n\nA failed batch remains pending and pauses automatic flushing. Inspect status/pending batch, correct the failure and retry flush or close. Close stops new input and scheduling, consumes an in-flight result and attempts to drain. A failed or timed-out close can be retried.\n\nReceipt callbacks report admission, not processing. Return promptly. Python callbacks can run on background threads; callbacks must not close their own ingestor. Go callbacks run outside locks."},{"blockId":"sdks.overview#fields-states-or-lifecycle-rules","pageId":"sdks.overview","title":"Fields, states, or lifecycle rules","pageTitle":"Application SDKs","url":"https://teammately.ai/docs/sdks.md","humanUrl":"https://teammately.ai/docs/sdks#fields-states-or-lifecycle-rules","markdownUrl":"https://teammately.ai/docs/sdks.md","sectionId":"fields-states-or-lifecycle-rules","kind":"reference","productArea":"developer_tools","score":888.2584912145006,"reasons":["search_match","exact_match","term_match","prefix_or_fuzzy_match"],"markdown":"## Fields, states, or lifecycle rules\n\nA new Fieldloop Submission key authorizes that capability across its workspace. The application supplies organization, Project and source identifiers; current server permissions apply. Older restricted keys retain their restrictions.\n\n`source_event_id` and batch idempotency keys belong to your application. Project/source IDs and receipts are issued by Teammately. In-memory enqueue, durable admission and completed processing are different acknowledgements.\n\nRead [Delivery and Recovery](/docs/sdks/delivery-and-recovery) before continuous ingestion. It covers immutable batches, retries, shutdown, row outcomes and privacy."}]}