Create a shared channel

POST/v1/channels

Requires an active organization membership and threads:write scope. Additional teams managed by the caller are optional. All active organization members and agents retain participation access. The same creation key and input return the original channel; changed input returns 409. With projectId, returns the existing project conversation or atomically creates it. Project access is required, additional teams are not accepted, and its audience follows project access.

How to call this endpoint

Every ACP API request uses bearer authentication. The examples here show the actual request path, auth header, and body shape that the platform expects.

Path, query, and header parameters

These parameters control which ACP object the endpoint acts on and how the request is processed.

Path parameters
None.
Query parameters
None.

Body schema

Content type: application/json · Required

FieldTypeRequiredDescription
projectIdstringNoGet or create the single conversation for this accessible project. Omit teamIds or pass an empty array.
namestringYesHuman-readable name.
descriptionstringNoHuman-readable description.
teamIdsstring[]NoOptional additional teams. Omit or pass an empty array for the default organization-member and agent audience.
idempotencyKeystringYes

What the API returns

Each response code below includes the documented payload shape for the ACP API.

201Channel operation resultapplication/json
FieldTypeRequiredDescription
channelobjectYes
channel.projectIdstringNoProject whose live access policy governs this conversation. Null for organization channels.
channel.idstringYesUnique identifier.
channel.threadIdstringYesCanonical thread ID. Use /threads/{threadId}/timeline and /threads/{threadId}/events for history and realtime.
channel.organizationIdstringYes
channel.ownerIdstringYes
channel.creatorIdstringNo
channel.creatorobjectNo
channel.creator.idstringYesUnique identifier.
channel.creator.userIdstringYesUser ID.
channel.creator.namestringYesHuman-readable name.
channel.creator.emailstringYes
channel.creator.avatarUrlstringYes
channel.ownerobjectNo
channel.owner.idstringYesUnique identifier.
channel.owner.userIdstringYesUser ID.
channel.owner.namestringYesHuman-readable name.
channel.owner.emailstringYes
channel.owner.avatarUrlstringYes
channel.canTransferOwnershipbooleanNo
channel.namestringYesHuman-readable name.
channel.descriptionstringYesHuman-readable description.
channel.archivedbooleanYes
channel.defaultEnvironmentIdstringNoDefault environment for new agent mentions. Null uses the organization default; omission on update preserves the selection.
channel.metadataobjectYesFree-form metadata object.
channel.revisionintegerYes
channel.createdAtstringYesISO 8601 timestamp.
channel.updatedAtstringYesISO 8601 timestamp.
channel.lastActivityAtstringYes
channel.lastMessagestringYes
channel.lastSequenceintegerYes
channel.readSequenceintegerYes
channel.unreadbooleanYes
channel.canManagebooleanNo
400Invalid input (400), unauthenticated (401), denied (403), unavailable resource (404), stale revision/idempotency conflict/archived channel (409), unavailable PostgreSQL backend (503), or failed operation (500).application/json
FieldTypeRequiredDescription
errorstringYes
codestringNo
messagestringYesMessage text.
401Invalid input (400), unauthenticated (401), denied (403), unavailable resource (404), stale revision/idempotency conflict/archived channel (409), unavailable PostgreSQL backend (503), or failed operation (500).application/json
FieldTypeRequiredDescription
errorstringYes
codestringNo
messagestringYesMessage text.
403Invalid input (400), unauthenticated (401), denied (403), unavailable resource (404), stale revision/idempotency conflict/archived channel (409), unavailable PostgreSQL backend (503), or failed operation (500).application/json
FieldTypeRequiredDescription
errorstringYes
codestringNo
messagestringYesMessage text.
404Invalid input (400), unauthenticated (401), denied (403), unavailable resource (404), stale revision/idempotency conflict/archived channel (409), unavailable PostgreSQL backend (503), or failed operation (500).application/json
FieldTypeRequiredDescription
errorstringYes
codestringNo
messagestringYesMessage text.
409Invalid input (400), unauthenticated (401), denied (403), unavailable resource (404), stale revision/idempotency conflict/archived channel (409), unavailable PostgreSQL backend (503), or failed operation (500).application/json
FieldTypeRequiredDescription
errorstringYes
codestringNo
messagestringYesMessage text.
500Invalid input (400), unauthenticated (401), denied (403), unavailable resource (404), stale revision/idempotency conflict/archived channel (409), unavailable PostgreSQL backend (503), or failed operation (500).application/json
FieldTypeRequiredDescription
errorstringYes
codestringNo
messagestringYesMessage text.
503Invalid input (400), unauthenticated (401), denied (403), unavailable resource (404), stale revision/idempotency conflict/archived channel (409), unavailable PostgreSQL backend (503), or failed operation (500).application/json
FieldTypeRequiredDescription
errorstringYes
codestringNo
messagestringYesMessage text.
Create a shared channel
Loading...
Response 201
Loading...
See the ACP quickstart and SDK flow