Subprocessors
Gyrence relies on a small number of third-party services to operate. Each entry lists the role the service plays, the data Gyrence sends, retention, and region.
This list covers operational subprocessors. For the full privacy posture (rights, retention, contact), see the Privacy Statement.
Subprocessor list
| Service | Role | Data sent | Retention | Region |
|---|---|---|---|---|
| Supabase | Managed Postgres, authentication, file storage | Account, workspace, API key hashes, usage logs | Life of account / billing window | US |
| Cloudflare Workers | Edge runtime for the API and console | Inbound request metadata | Operational logs only | Global edge |
| Brave Search | Backs the Search primitive | Your query, request metadata | Per Brave's policy | US/EU |
| Managed LLM gateway (Gemini 2.5 Flash) | Backs the Extract primitive (LLM) | Page markdown + your extraction prompt | Forwarded, not stored by Gyrence | US |
| docABL | Binary-document renderer (PDF/DOCX/XLSX/PPTX passthrough) | Raw document bytes + content-type | Forwarded and forgotten — Gyrence does not persistently store the rendered output | US |
| AssemblyAI | Speech recognition for direct media URLs, podcast enclosures without transcripts, and console uploads | Public media URL or uploaded audio/video bytes | Gyrence requests deletion of the provider transcript after completed delivery; Gyrence does not persist media or transcript text | US |
| Self-hosted Playwright worker | Browser-tier rendering for blocked / JS-heavy pages | Target URL | Operational logs only | US (Gyrence-managed) |
AssemblyAI — when it's invoked
Gyrence checks for existing source text first. AssemblyAI is called only when a direct audio/video URL needs speech recognition, a podcast's newest item has no usable publisher transcript but has a media enclosure, or a user uploads a file through Console → Extract. YouTube uses available caption tracks and is not sent to AssemblyAI.
For URL workflows, Gyrence sends the resolved public media URL directly; it does not download, separate, or transcode the audio. For console uploads, the selected file is forwarded for transcription. Results are classified as dataClass: "public". Gyrence does not persist the media or transcript text and requests deletion of the provider transcript after the completed response is delivered.
Submit only media that your organization permits Gyrence and its listed speech-recognition subprocessor to process as public data.
docABL — when it's invoked
Gyrence's /fetch primitive forwards the raw bytes of a recognized binary document (pdf, docx, xlsx, pptx) to docABL when the upstream content type or magic bytes match one of those kinds. docABL returns extracted markdown which Gyrence ships through the normal /fetch response shape.
When this happens, the response carries via: "docabl_passthrough", and source: "docabl_passthrough" is set on the result body. The in-product provenance chip in /app/fetch and /app/extract surfaces this; the /app/usage page shows a per-endpoint docABL call count; and each usage_events row persists an audit-grade metadata JSON blob:
{
"renderer": "docabl",
"renderMode": "passthrough",
"dataClass": "public",
"kind": "pdf",
"bytesLength": 2218394,
"docablOutcome": "ok"
}Gyrence only forwards bytes that were retrieved from a public URL submitted by your workspace. We treat passthrough payloads as data_class=public. Do not submit URLs whose contents your organization classifies above this tier without a written carve-out from us.
Honest-failure contract
docABL's outcomes are surfaced explicitly so callers (including Lacuna's FallbackClient) can route around them without guessing:
scanned_pdf_text_only_v1— image-only PDF whose OCR retries were exhausted upstream. Now rare: docABL's async OCR lane is always on for scanned and hybrid PDFs and standalone images, so most scans return unified markdown after a short wait rather than this failure.unsupported_binary— non-document binary or bare ZIP without an OOXML signal.docabl_error— docABL upstream error, timeout, or OCR still in progress when the /fetch envelope expired (message includesocr_pending job=<id>; retry to resume the same job).
These reasons surface in the reason field on UnsupportedResult and are mirrored into usage_events.metadata.docablOutcome when applicable.
Changes to this list
Material changes to this subprocessor list are reflected in the Privacy Statement's "Last updated" date and communicated by email or in-product notification. Email operator@gyrence.com for the current list at any time.
