Skip to main content
connectors/http is a single source implementation driven by declarative YAML manifests (connectors/http/manifests/) rather than one Go package per API. Onboarding a new integration is mostly a matter of writing a manifest, not writing a new connector — the bundled catalog (catalog.go) is a few lines per integration: an embedded manifest file plus a display name, description, and logo.

Integrations shipped today

Attio

GitHub

Linear

Notion

Slack

How a manifest works

Every manifest is validated against a two-layer grammar (connectors/http/manifest/): a JSON Schema (grammar.v1.json) checks shape — required objects, field types, enum membership — and validate.go checks cross-field semantics (parent cycles, checkpoint-key collisions, template syntax). A manifest declares:
  • connection — base URL, auth (bearer, a static header, or others the grammar supports), and connection-wide headers.
  • resources — one entry per extractable resource: its path, HTTP method, primary key, field mappings (each a JSON/GraphQL path plus a type), and how it paginates.
  • for_each / capture — how resources nest. A child resource (for_each: parent_resource) runs once per parent record, templating the parent’s captured fields into its own path, query, or body ({{ parent.field }}).
  • discoverystatic (extract every declared resource) or a dynamic mode that surfaces individual selectable items (specific channels, repos, databases) to the catalog UI.
  • incremental — per-resource cursor tracking: which field is the cursor, where it’s injected on the next request, and how values compare (lex, numeric, or time). See Slack for a working example.
This page covers the concepts; connectors/http/manifest/grammar.v1.json in the repo is the authoritative field-by-field schema, and connectors/http/manifests/*.yaml are five worked examples.