- Extraction jobs under
/v1/fetcher— create a job, read a job. - Connections under
/v1/management/connections— the connection lifecycle, schema reads, connection tests, and the two product-assignment operations.
The OpenAPI documents in this portal are render sources for the reference pages. They are not client contracts, and they are not a basis for SDK generation.
Authentication
Fetcher accepts a JWT bearer token:
PLUGIN_AUTH_ENABLED turns the auth middleware on, and PLUGIN_AUTH_ADDRESS points it at the identity service. The Manager refuses to start when you enable auth and leave the address empty. Multi-tenant mode also requires effective authentication — the router refuses to build a tenant middleware without it. See Configuration.
Every one of the 12 operations declares 401 and 403. Fetcher authorizes each request against the fetcher application, a resource (connections or fetcher), and an action that matches the HTTP method.
Five routes stay outside authentication so probes keep working: /health, /readyz, /readyz/tenant/{id}, /metrics, and /version.
Product scope
Only create connection, list connections, and connection assignment read
X-Product-Name. It identifies the product that owns an external connection.
- Create connection requires it. Fetcher rejects a missing, empty, or whitespace-only value.
- List connections treats it as optional. With the header, stored connections are scoped to one product. Without it, stored connections remain in the tenant scope.
- Connection assignment requires it. Other connection endpoints do not consume this header.
metadata.source. For an external connection, that value must match the connection’s product. Internal datasources are excluded from this product check.
Asynchronous jobs
POST /v1/fetcher answers 202 Accepted and returns a job identifier with status pending. The Worker runs the extraction after the response.
Fetcher deduplicates job requests by a request hash over a 5-minute window. A duplicate inside that window answers 200 OK and returns the existing job instead of queueing a second one. A job that already failed does not suppress a retry — you can resubmit it.
To follow a job, poll GET /v1/fetcher/{id}, or subscribe to the terminal events described in Job events.
Pagination
Both list operations — connections and unassigned connections — use offset pagination with the same query parameters.
A page response carries
items, page, limit, and total.
total. Product, creation-date, and metadata filters apply to stored connections; only type filters the internal list.
Filtering
The connection list accepts two filters beyond the date window.
type— Fetcher normalizes the value to uppercase and uses it as an equality filter. An unrecognized value normally matches no stored connection; the parser does not restrict it to five values.metadata.<key>=<value>— an exact match on a metadata entry you stored with the connection. For example,metadata.region=br.
FET-0405:
- A key that starts with
$, which blocks query-operator injection. - A key that starts with
_, which blocks internal fields. - A key longer than 64 characters, or a value longer than 256 characters.
Errors
Every error answers
application/problem+json and follows RFC 9457.
Match on
code, not on title or detail. The codes group by range:
Fetcher redacts driver-level failures at its boundary. It discards the raw database error, so a connection string, a credential, or a driver internal never reaches a caller.
Reading the spec from a running Manager
SWAGGER_ENABLED=true mounts a Scalar reference at /swagger/docs and the OpenAPI 3.1 document at /swagger/openapi.json and /swagger/openapi.yaml. Keep it off in production.
Next steps
API Reference
The 12 operations, with full request and response shapes.
Job events
React to
job.completed and job.failed instead of polling.Core concepts
Connections, schema discovery, extraction jobs, filters, and results.
Configuration
The environment variables behind auth, pagination caps, and the API surface.

