---
title: "Create an assignment"
method: POST
path: "/v25-10-beta/agentic-logic/assignments"
tags: ["Agentic Logic"]
---

# Create an assignment

`POST /v25-10-beta/agentic-logic/assignments`

## Request

- Base URL: `https://api.intelligems.io`
- URL: `https://api.intelligems.io/v25-10-beta/agentic-logic/assignments`
- Auth: API key in header `intelligems-access-token`
- TypeScript: <https://skmtc.dev/intelligems/apis/intelligems-external-api-v25-10-beta/docs/v25-10-beta/agentic-logic/assignments/post.ts> (a function with typed inputs; its response is checked against the schema)

```http
POST /v25-10-beta/agentic-logic/assignments
```

Binds a rule to a placement's global cell.

- `placementId` (string UUID, required) — Target placement.
- `ruleId` (string UUID, required) — Rule to serve.
- `variationId` (null, optional) — Only `null` or an omitted field is
  accepted. The global cell serves traffic outside any experiment and every
  variation that has no enabled cell of its own; variation cells come from
  saving the experience.
- `enabled` (boolean, optional, default `true`) — An enabled assignment serves
  traffic.
- `budgetMs` (integer, optional, 1–10000) — Per-evaluation time budget. Omit it
  to use the surface's cap; an explicit budget is still capped by the
  surface's limit.

- One global assignment per placement; a taken cell answers 409.
- A code rule can only be assigned to a placement on one of its
  `targetSurfaces`; any other surface answers 409.
- What the slot does when the rule returns nothing is one of the rule's
  settings, not the assignment's. Set it on the rule.
- Enabling a code rule requires a published (active) version.

Use the `intelligems-access-token` header. The token selects the organization; do not send `orgId`. The organization must have Agentic Logic enabled.

**Rate Limit:** 50 requests per 30s window, refilling 25 tokens every 30s.

## Request body

- object: Assign a rule to a placement as the org's GLOBAL default — the cell with no variation, which serves every variation that has no enabled cell of its own. Variation cells are not writable here: they are derived from the experience save, which owns which rule each variation serves. See AgenticLogicPlacementAssignmentDtoDescriptions.variationId.
  - `placementId` string, uuid, required: Placement being filled (uuid).
  - `variationId` unknown
  - `ruleId` string, uuid, required: Rule that fills it (uuid).
  - `budgetMs` integer: Per-assignment evaluation budget in ms, up to 10000ms. Omit to use the placement surface's cap, which is what serving enforces.
  - `enabled` boolean: Per-assignment pause flag. Defaults to true.

## Response `200`

OK

- object
  - `assignment` object, required: One rule ↔ placement assignment — a cell of the (variation × placement) matrix. Carries which rule fills the cell; the evaluation budget belongs to the assignment and the empty-result policy to the rule. One rule can be assigned to many placements.
    - `id` string, required: Assignment id (uuid).
    - `placementId` string, required: Placement being filled (uuid).
    - `ruleId` string, required: Rule that fills it (uuid).
    - `variationId` string, nullable, required: Experiment variation this assignment belongs to, or null for the org's global default. The global cell applies to EVERY variation unless that variation has an enabled cell of its own, which overrides it. Only the experience save writes a variation cell; the assignment verbs write global rows only.
    - `experience` object, nullable, required: The experience whose variation this assignment belongs to, resolved for display. Null on a global assignment, and also null when the variation no longer resolves — variationId is deliberately not a foreign key.
      - `id` string, required
      - `name` string, required
      - `variationName` string, required
      - `category` 'experiment' | 'personalization', required
      - `status` 'pending' | 'started' | 'ended' | 'paused', required
      - `isDeleted` boolean, required
    - `budgetMs` integer, nullable, required: Per-assignment evaluation budget in milliseconds (maximum 10000ms), or null to use the runtime default. Publish gates check rules against the tightest budget across their enabled assignments.
    - `enabled` boolean, required: Per-assignment pause. False = the cell is skipped at serve time without touching the rule's lifecycle state — a disabled variation cell therefore falls back to the placement's global cell, and only serves nothing when the global cell is missing or disabled too.
    - `createdAtTs` number, required: Creation time, Unix epoch-ms.
    - `lastUpdateTs` number, required: Last update time, Unix epoch-ms.

## Other responses

- `429`: Too Many Requests

## Changes

- **2026-11-06** `7b769b2f90b1`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/intelligems/apis/intelligems-external-api-v25-10-beta/changes/v25-10-beta/agentic-logic/assignments/post.md)

---

[API](https://skmtc.dev/intelligems/apis/intelligems-external-api-v25-10-beta.md) - [All operations](https://skmtc.dev/intelligems/apis/intelligems-external-api-v25-10-beta/llms.txt) - [OpenAPI document](https://skmtc.dev/intelligems/apis/intelligems-external-api-v25-10-beta/revisions/7b769b2f90b1?raw)
