API Referencev1
Integrations and flows API
Create integrations and flows, edit flow versions, steps, edges and mappings, preview transformations and publish.
Updated 07/10/2026
All paths start with /api/console/connect and need a session token.
Integrations
| Method | Path | Permission | Body and notes |
|---|---|---|---|
POST | /integrations | connect.integration.create | {name, projectId, slug?, description?, businessOwnerUserId?, technicalOwnerUserId?}. 409 on a duplicate slug. |
GET | /integrations | connect.integration.read | Active integrations with their flows (id, name, status, activeVersionId) |
GET | /integrations/:id | connect.integration.read | One integration |
PATCH | /integrations/:id | connect.integration.update | {name?, description?, businessOwnerUserId?, technicalOwnerUserId?} |
POST | /integrations/:id/archive | connect.integration.update | Archives the integration |
GET | /integrations/:id/export | connect.integration.read | The nexra-connect-service-v1 service contract (see Export) |
Flows and versions
| Method | Path | Permission | Body and notes |
|---|---|---|---|
POST | /integrations/:id/flows | connect.flow.create | {name, triggerType: manual or schedule, environment: sandbox or production, slug?, description?, versionLabel?}. Creates version 1. |
GET | /flows/:flowId | connect.integration.read | The flow |
PATCH | /flows/:flowId | connect.flow.edit | {name?, description?} |
POST | /flows/:flowId/versions | connect.flow.edit | {fromVersionId?, environment?, triggerType?, versionLabel?}. Creates a new draft version. |
GET | /flows/:flowId/versions | connect.integration.read | All versions |
GET | /flows/:flowId/versions/:versionId | connect.integration.read | One version with its steps, edges and mappings |
POST | /flows/:flowId/validate | connect.flow.edit | {versionId?}. Compiles and returns the issues found. |
POST | /flows/:flowId/compile | connect.flow.edit | Same as validate |
POST | /flows/:flowId/publish | connect.flow.publish | {versionId?}. 400 if compilation fails; 409 if already published. |
POST | /flows/:flowId/pause | connect.flow.pause | Stops scheduled and triggered runs |
POST | /flows/:flowId/resume | connect.flow.pause | Resumes them |
Published versions are immutable; edits to them return 409.
Steps and edges
| Method | Path | Permission | Body and notes |
|---|---|---|---|
POST | /flow-versions/:versionId/steps | connect.flow.edit | See the step fields below |
PATCH | /flow-versions/:versionId/steps/:stepId | connect.flow.edit | Same fields, all optional |
DELETE | /flow-versions/:versionId/steps/:stepId | connect.flow.edit | Removes the step |
POST | /flow-versions/:versionId/edges | connect.flow.edit | {sourceStepId, destinationStepId, sourcePort?, destinationPort?, condition?, priority?} |
DELETE | /flow-versions/:versionId/edges/:edgeId | connect.flow.edit | Removes the edge |
A step body has these fields:
| Field | Notes |
|---|---|
stepKey | Required |
stepType | manual_trigger, schedule_trigger, source, map, transform, filter, validate or destination |
displayName | Optional |
connectorConnectionId, connectorOperationKey | The connection and operation the step uses |
positionX, positionY | Canvas position |
configuration | Step-specific settings |
timeoutSeconds | 1–300, default 30 |
retryPolicy, errorPolicy | Optional |
The version must be editable (draft, validating or ready).
Mappings and transformations
| Method | Path | Permission | Body and notes |
|---|---|---|---|
PUT | /flow-versions/:versionId/mappings | connect.mapping.manage | Replaces a map step's mapping (below) |
GET | /flow-versions/:versionId/mappings | connect.integration.read | Saved mappings |
GET | /flow-versions/:versionId/schemas | connect.integration.read | Schemas available to the version |
GET | /flow-versions/:versionId/bound-schemas | connect.integration.read | Source record and destination input schemas from the bound operations |
POST | /flow-versions/:versionId/mappings/validate | connect.flow.test | {fields, sourceSchema, destinationSchema} |
POST | /flow-versions/:versionId/mappings/preview | connect.flow.test | {flowStepId, record}. Returns the mapped payload. Nothing is written. |
POST | /transformations/validate | connect.flow.test | {expression} |
POST | /transformations/preview | connect.flow.test | {expression, record}. Returns {output}. |
json
PUT /api/console/connect/flow-versions/ver_123/mappings
{
"flowStepId": "step_map",
"entityType": "invoice",
"fields": [
{ "sourcePath": "customer.email", "destinationPath": "Contact.EmailAddress", "mappingType": "direct", "required": true },
{ "sourcePath": "", "destinationPath": "Status", "mappingType": "constant", "constantValue": "DRAFT" },
{ "sourcePath": "currency", "destinationPath": "CurrencyCode", "mappingType": "default", "defaultValue": "GBP" }
]
}When sourceSchema and destinationSchema are omitted, Nexra uses the schemas of the operations bound to the flow.
Templates
| Method | Path | Permission | Description |
|---|---|---|---|
GET | /templates | connect.integration.read | Available integration templates |
GET | /templates/:templateKey | connect.integration.read | One template |
POST | /templates/:templateKey/install | connect.integration.create | {projectId, name?}. Creates the integration and flow. |