Skip to content
Talk to our solutions team

Connectors

Every integration is a directory under integrations/ containing an integration.yaml:

name: hubspot
slug: hubspot
description: HubSpot CRM integration
active: true
tags: [crm, sales]
category: [crm]
meta:
vendor: HubSpot
FieldRequiredPurpose
nameThe integration’s identity and the :name path segment
slugPrefix applied to every entity, job, and connector this integration ships (<slug>_…) so names never collide
activeDefault true; false makes the dispatch routes return a not-active error
description, tags, category, metaCatalog metadata, returned by GET /list

A connector is the outbound call to the third-party API — a definition under bffs/. It declares a path and method (how it’s addressed through the service) and a list of endpoints[] (the actual upstream calls):

name: contacts
path: /crm/contacts
method: GET
endpoints:
- name: fetch
url: https://api.hubspot.com
path: /crm/v3/objects/contacts
method: GET
headers:
Authorization: "Bearer {{secrets.hubspot_token}}"
expression:
jq: '.results | map({ id, email: .properties.email })'
FieldPurpose
path, methodHow the connector is reached: /<method> /integration/<name>/bff/<path>
endpoints[].url + endpoints[].pathThe upstream base URL and path
endpoints[].methodDefaults to the connector’s method
endpoints[].headersHeaders sent upstream (author-controlled)
endpoints[].sendusertrue forwards the caller’s platform token as Authorization: Bearer
endpoints[].bodyA Liquid template rendered against query params + request body + prior endpoints’ responses, then sent as JSON
endpoints[].form[]Multipart fields — each with a file, data, or Liquid template source
expression.jqA jq program to transform the composed response
expression.code + expression.languageA script transform (js, js:v8, lua) instead of jq

Each endpoint’s response is stored under its name and made available to later endpoints’ templates, so a connector can call endpoint A, then use A’s result to build endpoint B’s request — assembling a multi-call operation into a single connector.

Third-party credentials are supplied in the connector definition — as header values (which can reference tenant secrets), or by forwarding the caller’s own token with senduser: true. Sensitive values should be tenant Vault references rather than literals.

FolderBecomes
data/Entity definitions, entity names prefixed with <slug>_
jobs/Job definitions, name prefixed with <slug>_
workflow/Workflow definitions, keyed by name
notification/templates/Notification templates, keyed by name

A notification or workflow shipped by an integration is invoked through the dispatch routes (see API).