---
search:
  tags:
    - Hosts
    - POST
seo:
  description: >-
    Create a host. Reference for the POST /v1/hosts endpoint in the Jellypod
    API.
sidebar:
  label: Create a host
  badge: POST
title: Create a host
type: openapi-operation
---
`POST /v1/hosts`

**Request body** (`application/json`, required)

- `backstory` (string, required) — Plain text or HTML. Plain text is returned inside \<p\> tags.
- `image_path` (string)
- `is_guest` (boolean)
- `name` (string, required)
- `personality` (string) — Plain text or HTML. Plain text is returned inside \<p\> tags.
- `title` (string)
- `voice_id` (integer, required)

Request body example:

```json
{
  "backstory": "stringstri",
  "image_path": "string",
  "is_guest": true,
  "name": "string",
  "personality": "string",
  "title": "string",
  "voice_id": 0
}
```

**Responses**

- `201` — Host created
- `400` — Validation failed or malformed request.
- `401` — Missing or invalid API key.
- `403` — Authenticated, but this API key does not have access to this resource.
- `404` — Resource not found.
- `415` — Request \`Content-Type\` is not supported for this endpoint.
- `429` — Rate limit exceeded. Wait \`Retry-After\` seconds before retrying; \`RateLimit-Limit\`, \`RateLimit-Remaining\`, and \`RateLimit-Reset\` describe the window.
- `500` — Internal server error.

Response example, 201:

```json
{
  "data": {
    "backstory": "string",
    "created_at": "string",
    "id": "2e6939fe",
    "name": "string",
    "personality": "string",
    "title": "string",
    "updated_at": "string",
    "voice": {
      "accent": "string",
      "description": "string",
      "gender": "male",
      "id": 0,
      "language": "string",
      "model": "string",
      "voice_type": "professional"
    },
    "voice_id": 0
  }
}
```
