Every platform. One contract. Here's the shape.
Publish, schedule, listen for events, audit every state change. The same primitives for every platform Connectrix supports.
One POST routes to every platform.
One publish request carries a draft, a target list, and an optional idempotency key. Connectrix routes the same payload to every platform Connectrix supports.
Per-platform overrides live alongside the shared payload, in the same request. Validation runs at submit, the heavy lifting runs on a queue.
POST /api/publish HTTP/1.1
Host: api.connectrix.example
Content-Type: application/json
Idempotency-Key: launch_q2_2026
{
"workspace": "ws_a8f2c1",
"targets": ["linkedin", "x", "tiktok"],
"scheduleAt": "2026-05-14T15:00:00Z",
"body": "Native TikTok publishing is live. One POST, fifteen platforms.",
"media": [{ "url": "https://cdn.example/launch.mp4" }],
"overrides": {
"x": { "body": "TikTok publishing is live. One POST, fifteen platforms." },
"tiktok": { "privacyLevel": "public", "disableDuet": false }
}
}One signed URL. One payload shape.
Every platform Connectrix supports posts back to the same webhook URL with the same envelope. Event type, connector id, delivery id, timestamp, signature validity.
Platform-specific bits live under a typed `data` field. The envelope never changes. Signatures are verified before delivery, duplicates are dropped on the dedup key.
POST /webhooks/connectrix HTTP/1.1
Connectrix-Signature: t=1715000000,v1=8f3...
Content-Type: application/json
{
"id": "evt_8x2k4nq",
"type": "publish.succeeded",
"occurredAt": "2026-05-06T15:01:23Z",
"workspace": "ws_a8f2c1",
"connector": "con_linkedin_a91",
"platform": "linkedin",
"externalRef": "urn:li:share:7193...",
"data": { "publishRequestId": "pub_z1q9", "permalink": "https://..." }
}Schedule once, publish on time.
A `scheduleAt` field on the publish request defers delivery to a UTC instant. The job sits in a per-workspace queue until its window opens.
The dashboard shows scheduled and published items on a drag-to-reschedule calendar. Compose, save as draft, convert a draft to a scheduled publish.
- Per-platform character limits
- Media MIME types and dimensions
- Video duration and aspect ratio
- Platform-specific fields like privacy level and thread parent
Tokens that survive platform changes.
OAuth tokens live encrypted at rest with rotatable keys. Refresh runs automatically before expiry. Tokens are never logged or returned through the API.
When a refresh fails, the connector enters a stale state. The dashboard surfaces a Reconnect CTA on the connector card and a banner on the connector page.
Every state change leaves a row.
Connector connect, token refresh, publish submit, publish success, publish fail, webhook processing failure. Every state change writes an append-only row.
Analytics roll the audit log into per-connector dashboards with CSV export. WhatsApp deliveries get their own export.
| Time (UTC) | Actor | Action | Target |
|---|---|---|---|
| 2026-05-14T14:59:01Z | usr_q1f... | publish.submitted | pub_z1q9 (linkedin, x, tiktok) |
| 2026-05-14T15:00:14Z | system | publish.succeeded | pub_z1q9 (linkedin) |
| 2026-05-14T15:00:18Z | system | publish.succeeded | pub_z1q9 (x) |
Self-host or use the managed cloud.
The same code runs in both. Connectrix ships as a docker-compose for self-host, or as a managed cloud workspace with zero install.
Self-host suits teams with strict data residency. Managed cloud suits teams who want operations to be a someone-else problem. The API contract is identical.
Managed cloud
Hosted on Connectrix infrastructure. Workspace ready in minutes. SLA-backed uptime. No upgrade ops.
Self-host
Runs in your VPC. Postgres, Redis, and the apps/{web,api,worker} stack. Data and tokens never leave your network.
See it in your own workspace.
Connect a platform, fire a publish, watch the audit row land. Ten minutes to first publish.