canonical: https://jentic.com/apis/cenit.io/cenit

# Cenit IO - REST API Specification

Cenit IO is an open-source integration platform (iPaaS) for moving data between business systems. The REST API exposes the platform's setup primitives - connections, connection roles, data types, flows, namespaces, observers (events), and schedulers - so external clients can build, modify, and orchestrate integration pipelines programmatically. The same API surface that the Cenit IO web UI uses is available here for automation. Authentication requires both an X-User-Access-Key and an X-User-Access-Token header.

## For AI agents

Build and run integration flows in Cenit IO programmatically - manage connections, data types, flows, schedulers, and event observers in the open-source iPaaS platform.

## Scope

Does not handle hosted execution of arbitrary code, payment processing, or end-user authentication for downstream apps - use for managing integration pipeline configuration in Cenit IO only.

## Capabilities

- Manage iPaaS connections to external systems via `/setup/connection` endpoints
- Define and update data types that describe the records flowing through Cenit
- Build flows that route data between connections and apply translators
- Configure schedulers to run flows on a recurring cadence
- Register observer events that trigger flows on inbound conditions
- Group integration assets under namespaces for multi-tenant or per-project organisation
- Apply connection roles to share authentication contexts across multiple flows

## Use cases

### Programmatic iPaaS Pipeline Build-Out

Integration teams script the creation of dozens of similar pipelines - for example one per customer tenant - by calling the Cenit setup endpoints in sequence. An agent or template runner posts connections, data types, flows, and schedulers from a configuration file, removing the click-through cost of standing up each tenant in the Cenit UI.

Example prompt: POST `/setup/connection`, then `/setup/data_type`, then `/setup/flow` with the configuration for a new tenant pipeline

### Scheduled Data Sync Configuration

Operations teams use Cenit to run nightly syncs between a CRM and a data warehouse. Rather than configure schedulers in the UI, an agent posts the schedule definitions via `/setup/scheduler` and binds them to existing flows, then verifies the schedule with a GET. This keeps schedule changes versionable in source control.

Example prompt: POST `/setup/scheduler` with a cron expression, then GET `/setup/scheduler/{id}` to confirm it is bound to the right flow

### Event-Driven Flow Triggers

Cenit observers (events) trigger flows on inbound conditions such as a new record matching a filter. An agent provisions observers via `/setup/observer`, references the upstream data type, and verifies the binding. This brings event-driven integration patterns into existing flow definitions.

Example prompt: POST `/setup/observer` with the data type id and filter expression, then list observers via GET `/setup/observer`/ to confirm

### AI Agent Integration via Jentic

An integration agent uses Jentic to discover Cenit IO endpoints, load schemas for setup operations, and execute calls without holding the access key and token directly. This is useful when an LLM-driven agent reasons over user requests like 'add a Stripe-to-warehouse sync' and needs to provision the underlying iPaaS pipeline programmatically.

Example prompt: Use Jentic to search 'create a Cenit IO flow', load the schema for POST `/setup/flow`, and execute with the source and destination data type ids

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/setup/connection` | List connections |
| POST | `/setup/connection` | Create or update a connection |
| POST | `/setup/flow/` | Create or update a flow |
| POST | `/setup/data_type/` | Create or update a data type |
| POST | `/setup/scheduler/` | Create or update a scheduler |
| POST | `/setup/observer/` | Create or update an event observer |
| GET | `/setup/namespace/` | List namespaces |

## Key resources

- **Connection** — Manage external system connections used by flows
- **Connection Role** — Group connections under reusable authentication roles
- **Data Type** — Define record schemas that flow through the platform
- **Flow** — Define integration pipelines between connections and data types
- **Namespace** — Organise flows, types, and connections by project or tenant
- **Observer** — Register events that trigger flows on inbound conditions
- **Scheduler** — Configure cron-style schedules that run flows on a cadence
- **Translator** — Manage translators that transform data between types

## Why Jentic

- **Setup:** Wiring Cenit IO by hand means sending both its X-User-Access-Key and X-User-Access-Token headers and finding the right setup operations across a 40-endpoint configuration surface yourself. Through Jentic you install once, import Cenit IO from the API Directory, store the credentials once, and your agent calls it.
- **Permission scoping:** Cenit IO's setup operations carry the pipeline definition in the request body rather than a resource path, so scope your agent to the operations it needs, such as reading connections or creating a flow, and leave the rest out. Every operation you credit it with is one you have added to the allowed set.
- **Credential handling:** Your Cenit IO access key and access token are stored once, encrypted, by your own Jentic One instance and injected at execution time. They never enter the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'create an integration flow in Cenit' or 'add a connection', and Jentic returns the matching Cenit IO operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **n8n API** — Open-source workflow automation platform with similar self-hosting story
- **Zapier NLA API** — Hosted automation platform with a vast app library and natural-language actions
- **cdnjs API** — Lookup utility commonly invoked from integration flows that handle web assets

## FAQ

### What authentication does the Cenit IO API use?

Cenit IO requires two header values together: `X-User-Access-Key` and `X-User-Access-Token`, both issued from a user's Cenit account. Through Jentic both values are stored encrypted in the vault and injected at execution time.

### Can I build integration flows programmatically with Cenit?

Yes. The `/setup/flow`, `/setup/connection`, `/setup/data_type`, `/setup/scheduler`, and `/setup/observer` endpoints together cover the full setup needed for an integration pipeline - flows can be built, scheduled, and event-triggered without touching the Cenit UI.

### What are the rate limits for the Cenit IO API?

The OpenAPI spec does not declare specific numeric rate limits. Cenit IO is open source and self-hostable, so limits depend on the deployment. On the public hosted instance, treat as fair-use and back off on 429 responses.

### How do I create a Cenit flow through Jentic?

Search Jentic for 'create a Cenit IO flow', load the schema for POST `/setup/flow`/, and execute with source and destination data type ids. Schedule it via POST `/setup/scheduler` in the same agent run.

### Is the Cenit IO API free?

Cenit IO is open source under the MIT licence and self-hostable for free. The hosted cenit.io service offers tiered plans listed on the website; the API itself has no separate cost beyond the chosen plan.

### Can I organise integrations by project or tenant?

Yes. The `/setup/namespace` endpoints let you group flows, data types, and connections under named namespaces, which is the recommended pattern for multi-tenant or per-project setups.

### Can I limit what my agent is allowed to do with the Cenit IO API?

Yes. Jentic One runs self-hosted, so your own rules decide which Cenit IO setup operations and credentials the agent may use. Because these operations carry the pipeline definition in the request body rather than a resource path, you scope the agent to only the operations it needs, such as listing connections via GET `/setup/connection` or creating a flow via POST `/setup/flow`, and leave the rest out of the allowed set. Every operation you credit it with is one you have deliberately added.
