Channels
What the app calls a channel, the API calls an integration: one
connected social account. Its id is what every other route takes as
integrationId or integration.
GET /integrations your channelsGET /social/{integration} start connecting one (OAuth URL)GET /is-connected check the API keyGET /integration-settings/{id} rules, maximum length, settings schema, toolsPOST /integration-trigger/{id} run a provider toolGET /find-slot/{id} next free slot of the channelGET /groups legacy groups (see below)DELETE /integrations/{id} disconnectList channels
Section titled “List channels”GET /integrations| Parameter | Required | Description |
|---|---|---|
group |
No | Only the channels of this legacy group. Not a brand: see below |
Response 200:
[ { "id": "cm4ean69r0003w8w1cdomox9n", "name": "maltaexpat", "identifier": "instagram-standalone", "picture": "https://media.usenadia.com/avatar.jpg", "disabled": false, "profile": "maltaexpat" }]| Field | Type | Description |
|---|---|---|
id |
string |
The channel id |
name |
string |
As shown in the app |
identifier |
string |
The platform: instagram-standalone, tiktok or youtube |
picture |
string | null |
Avatar URL |
disabled |
boolean |
Disconnected, or over the plan |
profile |
string | null |
The handle on the platform |
customer |
object |
Only present when the channel has a legacy group: id, name |
Connect a channel
Section titled “Connect a channel”GET /social/{integration}Returns the OAuth URL to send the person to. Connecting is a browser dance: the person authorises on the platform, which sends them back to UseNadia, and the channel appears in the list above.
| Parameter | In | Required | Description |
|---|---|---|---|
integration |
path | Yes | instagram-standalone, tiktok or youtube |
refresh |
query | No | An existing channel id: the flow refreshes its token instead of creating a channel |
Response 200:
{ "url": "https://www.instagram.com/oauth/authorize?client_id=…&state=…" }The state behind the URL lives one hour. 400 when the identifier is unknown
(Integration not allowed); 500 when the platform’s URL could not be
generated, which is what happens for a registered platform that has no
credentials here.
Check the key
Section titled “Check the key”GET /is-connectedAnswers { "connected": true } with a valid key, 401 without. Useful as a
smoke test of a configuration; the MCP session and the CLI do it for you.
Settings and tools of a channel
Section titled “Settings and tools of a channel”GET /integration-settings/{id}Response 200:
{ "output": { "rules": "Instagram should have at least one attachment, if it's a story, it can have only one picture", "maxLength": 2200, "settings": { "type": "object", "properties": { "post_type": { … } } }, "tools": [] }}| Field | Description |
|---|---|
rules |
The posting rules of the platform, in a sentence |
maxLength |
Characters allowed in the text, verification taken into account |
settings |
The JSON schema of the provider settings, or the string No additional settings required when the platform has none |
tools |
The provider tools POST /integration-trigger/{id} can run: methodName, description, dataSchema (key, type, description) |
404 when the channel is not yours.
Run a provider tool
Section titled “Run a provider tool”POST /integration-trigger/{id}{ "methodName": "audioSearch", "data": { "q": "summer" } }Runs a tool the provider exposes and answers 201 with { "output": … },
the raw provider answer. 404 when the channel is not yours or the tool does
not exist on its platform (Tool not found); 401 when the platform’s token
expired and could not be refreshed, in which case the channel is disconnected.
Next free slot
Section titled “Next free slot”GET /find-slot/{id}Walks the channel’s time slots from today
and answers the first one with no post scheduled, 200:
{ "date": "2026-10-21T10:00:00.000Z" }Groups and the group filter
Section titled “Groups and the group filter”GET /groupsAnswers [{ "id", "name" }]: the legacy groups, the Customer model of
the original project. UseNadia’s interface no longer writes it, so this list is
almost always empty here, and GET /integrations?group= filters on the same
model.
Disconnect a channel
Section titled “Disconnect a channel”DELETE /integrations/{id}Deletes the channel and every post scheduled on it. Response 200: the
channel row. 404 when it is not yours.