Skip to main content
Integrations (integrations:manage) deliver job events somewhere else. GET /v1/integrations/catalog lists the types, each with the JSON Schema of its config, its events and the module it needs.

A generic CRM endpoint

config.field_mapping maps target fields (dots nest) to paths into event, job and result; without one, the event’s summary is sent as is. secrets.authorization is the Authorization header to send; it is write-only and stored encrypted.

HubSpot and Salesforce

Installing answers an authorize_url. The integration stays pending until the person’s consent returns. Then each job event creates or updates the deal:
  • HubSpot finds the deal by match_field (default parser_merchant_id, the merchant’s fingerprint).
  • Salesforce upserts object (default Opportunity) by its external-id field.
field_mapping sets the CRM’s fields from the result (underwriting, status, positions), result_link_field the result’s URL, and defaults the fields every update carries. If the provider later refuses the grant, the integration becomes reauth_required; POST /v1/integrations/{id}/connect gives a new consent link, and the events in between are delivered once it is back.

Delivery

Each event an integration takes becomes a run. 5xx, 429 and timeouts are retried on the webhook schedule; a 4xx ends the run as dead. GET /v1/integrations/{id}/runs shows every run, and POST /v1/integrations/{id}/test sends a ping. Targets must be https on public addresses.

Modules

Modules switch parts of the pipeline per tenant, and are all on by default: underwriting, positions, fraud, email_intake, email_routing, crm_sync and notifications. A module that is off is not computed: its section of the result is empty, result.pipeline.modules_off names it, and its routes answer 403. GET /v1/modules shows yours.