For Agents
Provision and manage Ably apps, keys, namespaces, queues, and integration rules via a bearer-authenticated REST API. Use it for account-level configuration, not for publishing messages.
Jentic One is a self-hosted execution layer for AI agents. It lets your agent call the Control API v1, or any other public or private API you need. You set the rules, the agent never sees your credentials, and every call is logged.
# On the machine that will host your Jentic One instance:
curl -fsSL https://raw.githubusercontent.com/jentic/jentic-one/main/tools/install.sh | sh# On the machine where your agent runs (keep this separate from the instance):
curl -fsSL https://raw.githubusercontent.com/jentic/jentic-one/main/tools/install.sh | sh
jentic register # connects your agent to your Jentic One instanceJentic One is in public beta. The setup above keeps your agent separate from the instance, which is what you want before using real credentials: an agent running as the same OS user as Jentic One can read its stored keys directly. Just evaluating? A single local install is fine to start. See the secure deployment guide for the tiers.
What an agent can do with Control API v1 API.
List and create apps under an Ably account
Update an app's configuration or delete it
Upload an APNs .p12 certificate to an app
Create, list, update, and revoke app API keys
GET STARTED
Use for: I need to create a new Ably app under my account, Provision an API key with publish-only capability, Revoke an API key that may be compromised, Create a namespace for channels named 'audit:*'
Not supported: Does not handle message publishing, presence, or push delivery — use Ably's Platform or REST API for those, and Control API for account-level provisioning only.
The Ably Control API is the management plane for an Ably account. It exposes 22 endpoints for managing apps, API keys, namespaces, queues, integration rules, and APNs configuration. Authentication uses bearer tokens issued from the Ably dashboard. The spec is published in Ably's open-specs repository, so the schema tracks the live platform. Use it when an agent or platform team needs to provision Ably resources programmatically rather than through the dashboard.
Manage namespaces that group channels and apply policies
Provision and delete queues that fan out from channels
Create and update integration rules (webhooks, AMQP, Kinesis, etc.)
Patterns agents use Control API v1 API for, with concrete tasks.
★ Multi-Tenant App Provisioning
Platforms running Ably for many customers create one app per tenant to keep traffic and limits isolated. POST /accounts/{account_id}/apps creates the app, POST /apps/{app_id}/keys provisions the key the tenant uses, and POST /apps/{app_id}/rules wires up integrations such as webhooks. The full provisioning sequence runs from a backend script without manual dashboard work.
Create a new Ably app called 'tenant-acme', provision a publish-only key, and add a webhook rule pointing to https://acme.example.com/ably-events
Key Rotation and Revocation
Security workflows rotate API keys on a schedule or revoke them on suspected compromise. The Control API exposes POST /apps/{app_id}/keys to issue replacements, PATCH /apps/{app_id}/keys/{key_id} to update capabilities, and POST /apps/{app_id}/keys/{key_id}/revoke to invalidate the old key. This keeps key hygiene under script-level control.
Revoke key ID 'k-987' on app 'tenant-acme' and create a fresh key with the same capabilities
Integration Rule Management
Platforms wire Ably channels to webhooks, AMQP, and stream destinations via integration rules. POST /apps/{app_id}/rules creates a rule, GET /apps/{app_id}/rules/{rule_id} reads it, and PATCH on the same path updates target URLs or filters. This lets infrastructure-as-code pipelines treat Ably integrations like any other resource.
Create a webhook rule on app 'tenant-acme' that forwards messages on namespace 'audit' to https://acme.example.com/ably-events
Agent-Driven Account Provisioning via Jentic
Platform engineering agents that bootstrap new tenants want to provision Ably resources as a tool call. Through Jentic, an agent searches by intent, loads the Control API operation (e.g., create app, create key), and executes with the bearer token from the Jentic vault. Multiple operations chain into a clean tenant-bootstrap workflow.
Search Jentic for 'create an Ably app', load the Control API schema, and execute create-app then create-key in sequence
22 endpoints — the ably control api is the management plane for an ably account.
METHOD
PATH
DESCRIPTION
/accounts/{account_id}/apps
Create an app under an account
/apps/{app_id}/keys
Create an API key
/apps/{app_id}/keys/{key_id}/revoke
Revoke an API key
/apps/{app_id}/namespaces
Create a namespace
/apps/{app_id}/rules
Create an integration rule
/apps/{app_id}/queues
Create a queue
/accounts/{account_id}/apps
Create an app under an account
/apps/{app_id}/keys
Create an API key
/apps/{app_id}/keys/{key_id}/revoke
Revoke an API key
/apps/{app_id}/namespaces
Create a namespace
/apps/{app_id}/rules
Create an integration rule
Three things that make agents converge on Jentic-routed access.
Credential isolation
Ably Control API bearer tokens are stored encrypted in the Jentic vault. Agents call operations by ID and Jentic injects the Authorization header at execution time, so the raw token never enters the agent's context.
Intent-based discovery
Agents search by intent (e.g., 'create an Ably app' or 'revoke an API key') and Jentic returns the matching Control API operation along with its input schema.
Time to first call
Direct integration: 1-3 days to wire up auth and provisioning flows for apps, keys, namespaces, queues, and rules. Through Jentic: a few hours — search, load schema, execute.
Alternatives and complements available in the Jentic catalogue.
Ably REST API
Ably's data-plane REST surface for publishing messages and pulling history.
Pair Control API with the REST API: Control provisions apps and keys, REST publishes and reads messages.
Ably Platform API
Broader Ably data-plane API including push device registrations and subscriptions.
Use Platform alongside Control when push notifications are part of the workflow.
PubNub
Realtime messaging platform with its own management surface.
Choose PubNub when an existing PubNub footprint exists; Ably Control when staying in the Ably ecosystem.
Specific to using Control API v1 API through Jentic.
What authentication does the Ably Control API use?
The Control API uses HTTP bearer tokens issued from the Ably account dashboard. Pass the token as Authorization: Bearer <token>. Through Jentic, the token is stored in the Jentic vault and injected at execution time, so the agent never holds the raw value.
Can I provision API keys through the Ably Control API?
Yes. POST /apps/{app_id}/keys creates a key with the requested capability JSON, PATCH /apps/{app_id}/keys/{key_id} updates capability or name, and POST /apps/{app_id}/keys/{key_id}/revoke invalidates a key when it must be retired.
How do I create an integration rule through Jentic?
Search Jentic for 'create an Ably integration rule' to find POST /apps/{app_id}/rules, load the schema, and execute the call with the rule type (webhook, AMQP, etc.) and target. Jentic adds the bearer token from the vault and returns the created rule definition.
What are the rate limits for the Ably Control API?
The OpenAPI spec does not document explicit rate limits for Control. Treat Control as low-volume management traffic: serialize bursts and back off on 429 or 5xx responses. For high-throughput operations, use Ably's data plane (Platform/REST API) instead.
How do I configure iOS push for an Ably app?
Upload the APNs .p12 file via POST /apps/{id}/pkcs12 with the certificate file in the body. Ably stores the credential against the app so subsequent push publishes via the Platform API can deliver to APNs.
Can I delete unused namespaces and queues with the Control API?
Yes. DELETE /apps/{app_id}/namespaces/{namespace_id} removes a namespace and DELETE /apps/{app_id}/queues/{queue_id} removes a queue. List the resources first via the corresponding GET endpoints to confirm the IDs before destructive calls.
/apps/{app_id}/queues
Create a queue