Skip to main content
FeatureFactory

FeatureFactory for developers

API v1

Connect any system to FeatureFactory.

Bring data from an internal tool, a niche platform, or your own product into FeatureFactory. Keep it current, connect related records, and add two-way actions when your workflow needs them.

10

documented API operations

500

records per request

10 MB

maximum batch request body

Clear access

Give each integration only the access it needs.

Separate permissions cover sending data, receiving actions, and reporting connection health. Every API key is limited to its FeatureFactory organization and connected account.

connectors:ingest

Connectors - Ingest

Start connector runs and submit source records, relationships, and tombstones.

connectors:commands

Connectors - Commands

Claim and report results for outbound connector commands.

connectors:health

Connectors - Health

Report remote connector health and permission status.

1

Create a connection

Choose how your system will stay current: webhooks, incremental updates, full syncs, files, or manual runs.

2

Send your data

Submit records and their relationships in batches of up to 500. Large imports can resume without starting over.

3

Keep it current

Send versions or timestamps so delayed updates cannot replace newer information.

4

Add two-way actions

Let FeatureFactory request approved actions in your system, then report whether each one succeeded.

Quickstart

Start, send, complete.

Create an API key in Settings, copy your connection ID, then send your first set of records. These examples use an incremental sync so you can continue from where the previous request ended.

1. Start a sync run

startConnectorSyncRun

curl -X POST "https://featurefactory.com/api/v1/connectors/<integration-uuid>/runs" \
  -H "Authorization: Bearer ff_<your-key>" \
  -H "Content-Type: application/json" \
  -H "X-Idempotency-Key: run-crm-2026-07-14" \
  -d '{
    "resource": "accounts",
    "entity_type": "account",
    "mode": "incremental",
    "input": {"cursor": "provider-cursor"}
  }'

2. Submit a source batch

submitConnectorSourceBatch

curl -X POST "https://featurefactory.com/api/v1/connectors/<integration-uuid>/runs/<run-uuid>/batches" \
  -H "Authorization: Bearer ff_<your-key>" \
  -H "Content-Type: application/json" \
  -H "X-Idempotency-Key: page-0001" \
  -d '{
    "idempotency_key": "page-0001",
    "checkpoint": {"cursor": "next-provider-cursor"},
    "records": [{
      "entity_type": "account",
      "external_id": "acct_123",
      "operation": "upsert",
      "source_version": "42",
      "source_timestamp": "2026-07-14T18:00:00Z",
      "payload": {"name": "Acme"},
      "relationships": []
    }]
  }'

Retries are safe

Use the same X-Idempotency-Key when retrying a request. FeatureFactory recognizes the replay instead of creating duplicate data.

The latest update wins

Include a version, ETag, or timestamp with each record. If an older update arrives late, FeatureFactory will not overwrite newer information.

Your workspace stays isolated

An API key can only access connections in its own FeatureFactory organization. It cannot read or update another customer’s data.

API operations

Everything available in API v1.

Response schemas and errors →
POST
/connectors/{integration}/runs

Start an idempotent connector sync run

connectors:ingest
GET
/connectors/{integration}/runs/{run}

Inspect a connector sync run

connectors:ingest
POST
/connectors/{integration}/runs/{run}/batches

Submit an idempotent source-record batch

connectors:ingest
POST
/connectors/{integration}/runs/{run}/complete

Complete a run and atomically advance its stream cursor

connectors:ingest
POST
/connectors/{integration}/commands/claim

Claim pending outbound commands with row-level skip-locking

connectors:commands
POST
/connectors/{integration}/runs/{run}/fail

Mark a connector sync run failed

connectors:ingest
POST
/connectors/{integration}/runs/{run}/tombstones

Explicitly tombstone source records

connectors:ingest
POST
/connectors/{integration}/commands/{command}/complete

Complete a claimed outbound command

connectors:commands
POST
/connectors/{integration}/commands/{command}/fail

Fail or mark a claimed outbound command ambiguous

connectors:commands
POST
/connectors/{integration}/health

Report remote connector health and permissions

connectors:health

Ready for your toolchain

Generate a client and validate requests before you send them.

Download the OpenAPI specification to generate typed clients or explore every endpoint. Use the JSON Schema to validate record batches in development and CI.