> This page is for Referencia de la API.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://signalcore.ai/docs/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://signalcore.ai/docs/_mcp/server.

# Agents Create

POST https://signalcore.ai/v1/squads/{squad_id}/agents
Content-Type: application/json

Reference: https://signalcore.ai/docs/referencia/equipos/agents-create

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Request

### Path parameters

- `squad_id` (string, required)

### Body (application/json)

This endpoint expects an object.

- `name` (string, required)
- `role` (string, optional, default: )
- `description` (string, optional, default: )
- `instructions` (string, optional, default: )
- `model` (string, optional, nullable)
- `icon` (enum, optional, nullable)
  - Allowed values: `sparkle`, `calendar`, `headset`, `message`, `phone`, `mail`, `cart`, `card`, `chart`, `megaphone`, `wrench`, `briefcase`, `heart`, `user`, `search`, `file`, `globe`, `code`, `map`

## Response

### 201

Successful Response

- `id` (string, required)
- `squad_id` (string, required)
- `name` (string, required)
- `role` (string, required)
- `description` (string, required)
- `instructions` (string, required)
- `model` (string, required)
- `actions` (list of string, required)
- `needs_approval` (list of string, required)
- `access` (map from string to any, required)
- `icon` (enum, required, nullable)
  - Allowed values: `sparkle`, `calendar`, `headset`, `message`, `phone`, `mail`, `cart`, `card`, `chart`, `megaphone`, `wrench`, `briefcase`, `heart`, `user`, `search`, `file`, `globe`, `code`, `map`
- `about_at` (datetime, required, nullable)
- `is_builder` (boolean, required)
- `voice` (Voice, required) — How an agent talks on a call (VOICE.md). The defaults are the old product's, in Spanish: its ElevenLabs voice (Carolina, from Spain), up to ten minutes, a goodbye ends it.
- `timezone` (string, required)
- `packages` (Packages, required) — What an agent's own code needs besides the platform, installed exactly as declared (`environments.py`): Debian packages (`apt`: ffmpeg, poppler-utils) and Python requirements (`pip`: openpyxl==3.1.5, pinned so a new release never changes what runs). The manifest checks each (`manifest.read_packages`).
- `created_at` (datetime, required)
- `approvals` (map from string to enum, optional)
  - Allowed values: `never`, `person`, `business`

## Errors

### 422 Squads Agents Create Request Unprocessable Entity Error

Validation Error

- `detail` (list of ValidationError, optional)

## Types

### Voice

How an agent talks on a call (VOICE.md). The defaults are the old product's, in Spanish: its ElevenLabs voice (Carolina, from Spain), up to ten minutes, a goodbye ends it.

- `language` (string, optional, default: es)
- `voice` (VoiceId, optional) — Who speaks for the agent: a voice of ElevenLabs (by its id there) or of Cartesia.
- `first_message` (string, optional, default: Hola, ¿en qué puedo ayudarte?)
- `max_duration_s` (integer, optional, default: 600)
- `end_call_phrases` (list of string, optional, default: ["adiós","hasta luego"])
- `model` (enum, optional, default: claude-haiku-5-5)
  - Allowed values: `claude-haiku-5-5`, `claude-sonnet-5-5`
- `record` (boolean, optional, default: true)

### Packages

What an agent's own code needs besides the platform, installed exactly as declared (`environments.py`): Debian packages (`apt`: ffmpeg, poppler-utils) and Python requirements (`pip`: openpyxl==3.1.5, pinned so a new release never changes what runs). The manifest checks each (`manifest.read_packages`).

- `apt` (list of string, optional, default: [])
- `pip` (list of string, optional, default: [])

### ValidationError

- `loc` (list of ValidationErrorLocItem, required)
- `msg` (string, required)
- `type` (string, required)
- `input` (any, optional)
- `ctx` (map from string to any, optional)

### VoiceId

Who speaks for the agent: a voice of ElevenLabs (by its id there) or of Cartesia.

- `provider` (enum, required)
  - Allowed values: `elevenlabs`, `cartesia`
- `id` (string, required)

### ValidationErrorLocItem

## Examples

**Request**

```json
{
  "name": "name"
}
```

**Response**

```json
{
  "id": "id",
  "squad_id": "squad_id",
  "name": "name",
  "role": "role",
  "description": "description",
  "instructions": "instructions",
  "model": "model",
  "actions": [
    "actions"
  ],
  "needs_approval": [
    "needs_approval"
  ],
  "access": {
    "key": "value"
  },
  "icon": "sparkle",
  "about_at": "2024-01-15T09:30:00Z",
  "is_builder": true,
  "voice": {
    "language": "language",
    "voice": {
      "provider": "elevenlabs",
      "id": "id"
    },
    "first_message": "first_message",
    "max_duration_s": 1,
    "end_call_phrases": [
      "end_call_phrases"
    ],
    "model": "claude-haiku-5-5",
    "record": true
  },
  "timezone": "timezone",
  "packages": {
    "apt": [
      "apt"
    ],
    "pip": [
      "pip"
    ]
  },
  "created_at": "2024-01-15T09:30:00Z",
  "approvals": {
    "key": "never"
  }
}
```

**SDK Code**

```python
import requests

url = "https://signalcore.ai/v1/squads/squad_id/agents"

payload = { "name": "name" }
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```