# Add reps to target book `POST` `/api/v1/crm-connections/{crm_connection_id}/target-books/{target_book_id}/reps` Assigns one or more reps to the target book. Reps already on this book are skipped. Returns 409 if any rep is assigned to a different target book — no reps are added if any conflict is found. To move reps from another book use PUT instead. Returns the full list of active reps now assigned to this target book. ## Path parameters | Name | Type | Required | Description | |------|------|----------|-------------| | crm_connection_id | string | yes | UUID of the CRM connection | | target_book_id | string | yes | Salesforce ID of the target book | ## Request body `application/json` | Field | Type | Required | Description | |-------|------|----------|-------------| | rep_ids | array[string] | yes | Salesforce IDs of reps | ## Response `201 Created` — `application/json` | Field | Type | Description | |-------|------|-------------| | reps | array[object] | Full list of active reps now assigned to this target book | | reps.id | string | Salesforce User ID of the rep | | reps.name | string | User.Name | | reps.is_active | boolean | User.IsActive | | reps.role | object | User.UserRole, if assigned | | reps.role.id | string | — | | reps.role.name | string | — | | reps.profile | object | User.Profile, if any | | reps.profile.id | string | — | | reps.profile.name | string | — | | reps.manager | object | User.Manager, if assigned | | reps.manager.id | string | — | | reps.manager.name | string | — | | reps.target_book | object | — | | reps.target_book.id | string | — | | reps.target_book.name | string | — | | reps.metrics | object | Requested metrics keyed by metric name. Null when the caller did not request metrics. Individual values may be null for threshold-dependent metrics when the target book has no Activity Threshold configured. | ## Errors | Status | Description | |--------|-------------| | 400 | Bad Request | | 403 | Forbidden | | 409 | Conflict | | 502 | Bad Gateway |