Skip to main content
This guide walks through the structure of StackOne’s Falcon connectors — how files are organized, how authentication works, how actions and steps fit together, and how expressions let you wire data between them. For detailed property-by-property documentation, see the YAML Reference. For working examples, see the connectors-template repository.

File Structure

Connectors are organized into a main connector file and (optionally) partial files for each resource:
Naming conventions:
  • Use kebab-case for file names
  • Reference partials in the main file using $ref: provider.resource
  • Add references in alphabetical order (not required, but recommended for readability)

Main Connector File

The main connector file defines metadata, authentication, and references to action partials.

Info Section

  • title: User-facing name. Use the official provider name (e.g., “BambooHR” not “Bamboo HR”)
  • key: Machine-readable identifier. Must be lowercase with underscores. Cannot be changed after deployment without breaking existing integrations
  • version: Increment when making changes. Use semantic versioning: major.minor.patch
  • assets.icon: Use https://stackone-logos.com/api/{key}/filled/png for consistent styling
  • description: Keep concise. Used by AI agents for context when discovering connectors

Base URL

The baseUrl defines the root URL for all API requests. It supports credential interpolation for providers with dynamic domains.
Use credential interpolation when the provider requires:
  • Customer-specific subdomains: Many B2B SaaS products use {company}.provider.com URLs
  • Region selection: Some providers have separate endpoints per region (US, EU, APAC)
  • Environment switching: Sandbox vs production endpoints
The interpolated values come from configFields in your authentication config. These are fields your customer fills in when connecting their account.

Authentication

Authentication is defined once in the main connector file. All actions inherit it.

Setup vs Config Fields

Use setupFields for:
  • OAuth client credentials (Client ID, Client Secret)
  • Scopes that you control
  • API keys that belong to your app, not the end user
  • Values you configure once in the StackOne dashboard
Use configFields for:
  • Customer’s own API tokens or keys
  • Customer-specific identifiers (subdomain, account ID, workspace ID)
  • Any value that differs per customer connection
  • Values the customer enters in the Hub when linking their account
Field properties:
  • secret: true: Masks the field value and encrypts storage (use for tokens, keys, passwords)
  • required: true: Field must be filled before connection can complete
  • placeholder: Shows example format without exposing real values
  • tooltip: Additional help text shown on hover

Example: API Key Authentication

Other Authentication Types

The Falcon engine supports several authorization types:
For complete authentication examples including OAuth 2.0 with token refresh, see the YAML Reference — Authentication.

Actions

Actions define the operations your connector can perform. Each action consists of metadata, inputs, steps, and result configuration.

Action Structure

  • actionId: Keep it descriptive and follow the pattern {verb}_{resource} (e.g., list_users, get_employee, create_candidate). Cannot be changed after deployment.
  • categories: Determines where the action appears in the Actions Explorer. An action can belong to multiple categories.
  • actionType: Choosing custom is fastest since no schema mapping is needed. Use unified types (list, get, etc.) when you want cross-provider compatibility.
  • schema: Must match a StackOne schema name (e.g., users, employees, candidates). Only required when actionType is unified.
  • label + description: These appear in the Actions Explorer and are sent to AI agents. Write them for humans, not machines.
  • context: Adding the provider’s API doc URL helps the Builder Agent and AI tools understand edge cases.

Action Types

Add a schema field to map provider data to StackOne’s standardized schemas (e.g., schema: employees). Without schema, the action returns provider data as-is. See Field Configs for mapping details.

Inputs

Inputs define the parameters your action accepts. Each input specifies a name, type, location (in), and whether it’s required:
Input types: string, number, boolean, datetime_string, object Input locations: path, query, body, headers For full input property documentation including nested objects, see the YAML Reference — Inputs.

Step Functions

Step functions are the building blocks of actions. Each step performs one operation.
Common patterns:
  • GET single resource: requestresult
  • LIST with pagination: paginated_requestresult
  • Unified action: requestmap_fieldstypecastresult
  • Multi-source data: request (x2) → group_dataresult
  • Per-item enrichment: request → iterator requestgroup_dataresult
  • Static + dynamic merge: static_values + requestmerge_collectionsresult

request - HTTP Requests

Make a single HTTP request to the provider API. Use args to pass headers, query parameters, and body fields. Use response.dataKey to extract nested data from the response.
Always use args for request parameters. Never use a direct body field.

paginated_request - Cursor Pagination

Automatically fetches all pages using cursor-based pagination. StackOne handles cursor tracking, page assembly, and continuation logic.
How it works: Makes the initial request, extracts results from response.dataKey, checks response.nextKey for a continuation cursor, and repeats until no cursor is returned. All pages are combined automatically.
Only use paginated_request for cursor-based pagination. For offset or page-based pagination, use a regular request step with manual cursor handling.

map_fields - Transform Data

Transform provider response data into your output schema. Takes a dataSource (typically a previous step’s output), evaluates an expression per field against each record, and converts to the specified type.
Supports enum mapping, nested objects, and JEXL expressions for complex transformations. See YAML Reference — map_fields for the full list of field config options.

typecast - Type Conversion

Apply type conversions to data. Used for unified actions.

group_data - Combine Results

Merge data from multiple steps into a single dataset.

static_values - Return Static Data

Return predefined values without making an API request. Useful for enum lookups or constant data.

merge_collections - Merge Arrays

Merge multiple data collections into a single array.

upload_file / download_file - File Operations

Handle file uploads (multipart form) and downloads (with encoding options).

soap_request - SOAP API

Make SOAP (XML) requests. Used for enterprise providers like Workday.

code_execution_lambda - AWS Lambda Invocation

Invoke an AWS Lambda function and use its response as the step output. Use for custom transformations or provider-specific logic that doesn’t fit other step functions. The args array is assembled into the JSON payload sent to the Lambda.
See YAML Reference — code_execution_lambda for all parameters, invocation types, and output fields.
For full parameter documentation on all step functions, see the YAML Reference — Steps.

Iterator Steps (Foreach)

Iterator steps execute one or more step functions for each item in a collection. Use them when you need to make per-item API calls — for example, fetching detailed data for each record returned by a list endpoint.

Structure

An iterator step is defined by adding the iterator property to a step. The iterator value is a JSONPath expression that resolves to an array.

How It Works

  1. The iterator expression is evaluated to produce an array
  2. For each item in the array, the step function(s) execute
  3. Inside the step, you can access:
    • $.iterator.item — the current array element
    • $.iterator.index — the current iteration index (0-based)
    • $.iterator.current — the output of the previous step function in the same iteration (when using stepFunctions)
  4. All iteration outputs are collected into an array at $.steps.{stepId}.output.data

Single Step Function

The most common pattern — make one API call per item:

Multiple Step Functions

Use stepFunctions (plural) to execute a sequence of functions per iteration. Each function can access the output of the previous one via $.iterator.current:
You must provide either stepFunction (singular) or stepFunctions (plural) — not both. The YAML validator enforces this.

Conditional Iterator

Like regular steps, iterator steps support the condition and ignoreError properties:

Iterator Context Reference


Expression Syntax

The Falcon engine supports three expression formats for dynamic values. For the complete expression language reference including all built-in functions, operators, and detailed examples, see the Expression Language page.

JSONPath (Preferred)

Direct data access. Use for any direct reference.

String Interpolation (${...})

Use for embedding values within strings.

JEXL Expressions ('{{...}}')

Use for conditional logic and transformations. Must be in single quotes.
Common functions: present(), missing(), includes(), join(), capitalize(), truncate(), regexMatch(), now() — see full reference.

Conditional Arguments

Include arguments only when conditions are met:

Result

Define the action’s response output. Read operations:
Write operations:
With pagination info:

Field Configs (Unified Actions)

For unified actions (those with a schema field), fieldConfigs map provider response fields to StackOne’s standardized schema:
For built-in enum matchers and full field config options, see the YAML Reference — map_fields.

Rate Limiting

Configure request throttling:

Validation

Validate connector files using the CLI:

Complete Example


Next Steps

Expression Language

Full reference for JSONPath, JEXL, and string interpolation

YAML Reference

Complete property reference with impact analysis

Browse Examples

See real connector implementations

StackOne Agent

Generate connectors with AI assistance