Home › Docs › Connector Builder

Connector Builder Documentation

Build integration routes using visual activity blocks

Last updated: 2026-04-07 · 15 min read · ← Back to Docs

Contents

  1. What is a Connector?
  2. Base Activity Types
  3. Activity Control Flow
  4. Connector JSON Schema
  5. Quick-start Guide
  6. FAQ
Status: connectors are stored, not executed. The Connector Builder saves, versions, clones, exports, imports and publishes connector definitions, but Priostack has no connector runtime yet. No activity chain runs; an active inbound connector's webhook URL answers 501 (inbound webhooks are received but not yet processed) and any other answers 404; no outbound connector is handed jobs. Nothing is charged for connectors. This page describes what a connector definition records.

1. What is a Connector?

A Connector is a named integration route meant to bridge an external system to the Priostack execution engine. A connector is composed of one or more activity blocks, stored in order, describing how data should move from a source to a destination.

Every connector has a direction:

Until a connector runtime exists, build the same integrations with code you run: a worker that activates the service task's jobs (outbound), or your own endpoint that calls POST /api/v1/process-instances (inbound).

2. Base Activity Types

Each connector is a chain of activities. The table below lists the activity types the builder stores, their category, and what each block is meant to configure. None of them runs today.

Activity Category Description
http I/O Describes an HTTP request to a REST endpoint: method (GET, POST, PUT, PATCH, DELETE), URL and body.
oauth2 Auth Holds the OAuth2 settings (client ID, client secret, token endpoint) for the client-credentials or authorization-code flow. No token is fetched.
transform Transform Holds a field mapping written as FEEL expressions, with dot-notation for nested properties.
filter Transform Holds the FEEL predicate a message should match. Nothing evaluates it, so no message is dropped or redirected; no reject path is defined.
aggregate Transform Describes collecting N messages before proceeding, like the Layer 2 Aggregator pattern.
split Transform Describes expanding an array field into one branch per element.
cache Storage Describes storing or retrieving a value under a TTL-keyed entry.
retry Flow Describes a retry policy (maximum attempts, linear or exponential backoff) around a set of activities.
delay Flow Describes a pause of an ISO 8601 duration before the next activity.
conditional Flow Describes an if/else branch on a FEEL condition, with a then and an else sub-chain.
Webhook (inbound) Trigger Generates the URL /api/connector/{id}/inbound. It answers 501 once the connector is active, 404 before.
Schedule (inbound) Trigger Stores a cron expression. Nothing fires on it.
Process Start (outbound) Output Describes a process start: output_type: process_start with the process id in process_key and a variable mapping. Nothing starts it.
Message Channel (outbound) Output Names a Layer 2 channel to publish to. Nothing publishes to it, and BPMN catch events do not subscribe to channels.
Telegram Notify (outbound) Output Holds a Telegram bot, chat ID and message template.
Email Notify (outbound) Output Holds the recipients, subject and body of an email.

3. Activity Control Flow

Every activity in a connector can have one or more control flow toggles enabled. These map directly to the toggles visible in the Connector Builder UI and are stored on the activity (async, repetitive, compensation, escalation, goto, timer, constraints, retry_max, retry_backoff). None of them is executed today; each description says what the toggle is meant to express.

Asynchronous

Marks the activity as fire-and-forget: the chain would continue without waiting for its result.

Repetitive

Marks the activity as meant to repeat, for example to poll together with a delay activity. It is a flag only: no loop condition is stored with it.

Compensation

Marks the activity as meant to undo the side effects of an earlier one (e.g., delete a record created by an earlier HTTP POST). It is unrelated to BPMN compensation, which the process engine does run (see BPMN Elements).

Escalation

Marks an error in the activity as meant for the parent scope (a conditional or retry block) rather than for the connector as a whole.

Goto

Names, in the goto field, the activity id the chain is meant to jump to instead of proceeding sequentially.

Timer

Stores an ISO 8601 duration (e.g., PT30S for 30 seconds, PT5M for 5 minutes) meant to delay the activity. Unlike the Delay activity type, the Timer toggle can be set on any activity type.

Constraints

A free-text condition stored with the activity. The Console builder sets it with a checkbox, as "true" or empty. Nothing evaluates it: it neither skips an activity nor filters a message. A filter's condition belongs in the filter activity's own config.

Retry

Stores a maximum retry count (retry_max, 0 = disabled) and a backoff strategy (retry_backoff: linear or exponential). They are not applied, because no activity runs.

4. Connector JSON Schema

The example below shows a complete connector definition as returned by GET /api/connectors/{id}/export. You can import this JSON on any account using POST /api/connectors/import, which creates a new draft connector (new id, version 1). config is free-form: the builder stores whatever a block's panel collects, and this example keeps the filter's condition in config.predicate. Export replaces config values whose key names a secret (secret, token, password, API key and similar) with ***redacted***.

{
  "id": "con_1712345678000000000",
  "name": "Stripe → Start Billing Process",
  "description": "Receive Stripe checkout.session.completed events and start a BPMN billing workflow",
  "type": "inbound",
  "trigger_type": "webhook",
  "webhook_url": "/api/connector/con_1712345678000000000/inbound",
  "status": "active",
  "version": 2,
  "created_at": "2026-04-01T10:00:00Z",
  "updated_at": "2026-04-07T08:30:00Z",
  "activities": [
    {
      "id": "a1",
      "type": "filter",
      "label": "Only completed checkouts",
      "config": {
        "predicate": "payload.type = \"checkout.session.completed\""
      }
    },
    {
      "id": "a2",
      "type": "transform",
      "label": "Extract customer data",
      "config": {
        "mapping": {
          "customerId": "payload.data.object.customer",
          "amount":     "payload.data.object.amount_total / 100",
          "currency":   "payload.data.object.currency"
        }
      }
    },
    {
      "id": "a3",
      "type": "http",
      "label": "Enrich from CRM",
      "config": {
        "method": "GET",
        "url": "https://crm.example.com/api/customers/{{output.customerId}}"
      },
      "retry_max": 3,
      "retry_backoff": "exponential"
    },
    {
      "id": "a4",
      "type": "output",
      "label": "Start billing process",
      "config": {
        "output_type": "process_start",
        "process_key": "billing_workflow",
        "variables": {
          "customerId": "output.customerId",
          "amount":     "output.amount",
          "crmData":    "output"
        }
      }
    }
  ]
}

5. Quick-start: First Connector Deployment

  1. Sign up and get your API key.

    Create a free account at priostack.com. You get 100 credits at signup and 100 more per day; your API key arrives in the welcome email once you verify your address. No credit card required.

  2. Open the Connector Builder in the Console.

    Navigate to Console and click New Connector. Choose Inbound (Webhook) or Outbound depending on your integration direction.

  3. Add and configure activity blocks.

    Drag activity blocks from the sidebar into the canvas. Configure each block - set the HTTP URL, FEEL expression, or output target - and set the control flow toggles in the right panel. They are saved with the connector.

  4. Publish your connector.

    Click Publish to set the connector's status to active. For an inbound connector the webhook URL then answers 501 (received but not yet processed); nothing runs and no execution log is written.

Connectors cost nothing today: no connector runs, so nothing is charged.

6. FAQ

How do I store OAuth2 secrets?
The oauth2 activity stores the client ID, client secret and token endpoint in its config. Connector configs are not encrypted at rest. Export replaces config values whose key names a secret with ***redacted***, so a shared export carries no credentials. No token is fetched or refreshed, because no connector runs.
What happens if an activity fails?
No activity runs today, so none fails, and the Logs tab (GET /api/connectors/{id}/logs) stays empty. retry_max and retry_backoff are stored and not applied.
Can I use connectors without BPMN?
Connectors are stored independently of BPMN, but they run nothing today, with or without BPMN. To react to external events now, run your own endpoint, or a Layer 2 camel route in your service, and call POST /api/v1/process-instances from it.
How are connector executions counted?
They are not counted: no connector executes, so nothing is charged and no connector call returns 402. Workflow calls are charged on their own (for example one credit per process instance started), from the balance that receives 100 credits at signup and 100 more per day.
Can I export and share connectors?
Yes. Use the Export button on any connector in the Console to download a connector.json file. The export strips execution logs and redacts secret-named config values; the rest of the activity configuration is kept. On another account, use the Import button (or POST /api/connectors/import) to recreate the connector in draft status, ready to configure secrets and publish.