See the Channels feature page for details on how placements work within channel configurations.
Base path
List placements
Query parameters
Response 200
Create a placement
Request body
Example request
Response 201
Returns the created placement object with channel and creatives relations.
Side effects
Creating the first placement on a tenant triggersensureBaseFlow (lib/decision-flows/base-flow.ts) so a default base-nba-flow exists for routing. The auto-created flow includes a match_creatives node with placementMatchMode: "exact", which means subsequent /api/v1/recommend calls that pass either a single placement or a placements: [...] array filter candidates to creatives whose placementId matches the request — without any flow editing required. See Decision Flow Internals for the full default node order.
A flow-route entry is also created automatically, pointing the new (channelId, placementId) combination at the default flow; this is best-effort and silently no-ops if a route already exists.
Error codes
Update a placement
Request body
Response 200
Returns the updated placement object with channel and creatives relations.
Error codes
Delete a placement
deletedAt timestamp. The version is incremented.
Query parameters
Response 200
Error codes
To restore a soft-deleted placement, use
POST /api/v1/restore?entityType=placement&id={placementId} (admin only).