Skip to main content
POST
/
v1
/
create-digital-human
Create Digital Human
curl --request POST \
  --url https://api.getbluejay.ai/v1/create-digital-human \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <x-api-key>' \
  --data '
{
  "digital_human": {
    "intent": "",
    "success_criteria": "",
    "name": "<string>",
    "tag": "<string>",
    "language": "en",
    "accent": "multilingual",
    "gender": "male",
    "background_noise": "none",
    "voice_speed": "normal",
    "audio_quality": "high",
    "fluency": "native",
    "verbosity": "medium",
    "phone_number": "<string>",
    "outbound_text_number": "<string>",
    "background_noise_volume": 0.8,
    "expected_tool_calls": [
      {
        "name": "<string>",
        "parameters": {},
        "output": "<unknown>"
      }
    ],
    "allow_end_call_tool": true,
    "allow_silence_tool": true,
    "silence_tool_instructions": "default",
    "endpointing_delay": 1.5,
    "creativity": 0.7,
    "hangup_phrases": [
      "<string>"
    ],
    "hangup_instructions": "<string>",
    "silence_timeout": 16,
    "role_description": "<string>",
    "traits": [
      {
        "trait_name": "<string>",
        "trait_data_type": "BOOLEAN",
        "value": "<unknown>",
        "is_sip_header": false
      }
    ],
    "interruptions": {
      "type": "none"
    },
    "scripted_responses": [
      {
        "match_type": "exact",
        "match_phrase": "<string>",
        "response_type": "phrase",
        "occurrence_mode": "always",
        "response_value": "<string>",
        "occurrence_n": 1,
        "silence_duration": 1
      }
    ],
    "speaks_first_config": {
      "speaks_first": true,
      "mode": "custom",
      "message": "<string>"
    },
    "original_transcript": "<string>",
    "formatted_transcript": [
      {}
    ],
    "enriched_playback": [
      {}
    ],
    "workflow_v2_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "workflow_path_index": 1,
    "always_on_mode": false,
    "always_on_active": true,
    "num_runs": 1,
    "livekit_metadata": {}
  },
  "simulation_ids": [
    123
  ],
  "simulation_id": 123
}
'
{
  "digital_human": {
    "intent": "<string>",
    "success_criteria": "<string>",
    "id": 123,
    "tag": "<string>",
    "name": "<string>",
    "language": "en",
    "accent": "multilingual",
    "gender": "male",
    "background_noise": "<string>",
    "voice_speed": "<string>",
    "audio_quality": "<string>",
    "fluency": "<string>",
    "verbosity": "<string>",
    "phone_number": "<string>",
    "outbound_text_number": "<string>",
    "websocket_url": "<string>",
    "background_noise_volume": 123,
    "expected_tool_calls": [
      {
        "name": "<string>",
        "parameters": {},
        "output": "<unknown>"
      }
    ],
    "allow_end_call_tool": true,
    "allow_silence_tool": true,
    "silence_tool_instructions": "default",
    "endpointing_delay": 123,
    "creativity": 123,
    "hangup_phrases": [
      "<string>"
    ],
    "hangup_instructions": "<string>",
    "silence_timeout": 123,
    "role_description": "<string>",
    "created_at": "2023-11-07T05:31:56Z",
    "traits": [
      {
        "trait_name": "<string>",
        "trait_data_type": "BOOLEAN",
        "value": "<unknown>",
        "is_sip_header": false
      }
    ],
    "interruptions": {},
    "scripted_responses": [
      {
        "match_type": "exact",
        "match_phrase": "<string>",
        "response_type": "phrase",
        "occurrence_mode": "always",
        "response_value": "<string>",
        "occurrence_n": 1,
        "silence_duration": 1
      }
    ],
    "speaks_first_config": {
      "speaks_first": true,
      "mode": "custom",
      "message": "<string>"
    },
    "original_transcript": "<string>",
    "formatted_transcript": [
      {}
    ],
    "enriched_playback": [
      {}
    ],
    "workflow_v2_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
    "workflow_path_index": 123,
    "livekit_metadata": {}
  },
  "simulation_ids": [
    123
  ],
  "simulation_id": 123
}
Integration Prompt for AI Agents
# Bluejay — Testing & Monitoring Platform for Conversational AI Agents

You are a senior backend engineer integrating the Bluejay API. Think step-by-step: first understand the endpoint, then plan the integration, then implement with minimal changes.

## Create Digital Human — POST /v1/create-digital-human

> **What this endpoint does:** Create a new digital human. 

**Endpoint:** POST `https://api.getbluejay.ai/v1/create-digital-human`
**Auth:** `X-API-Key` header
**Content-Type:** application/json

### Required Parameters
| Name | Type | Description |
|------|------|-------------|
| X-API-Key | string | API key required to authenticate requests. |
| digital_human | object | Digital human data model for requests (without id and created_at). intent and success_criteria default to empty strings. `allow_silence_tool` defaults to false; `silence_tool_instructions` defaults to `"default"` (built-in silence-tool behavior). |

Review the full parameter list at https://docs.getbluejay.ai/api-reference/endpoint/create-digital-human and include any optional parameters (e.g., `simulation_ids`, `simulation_id`) that serve your integration's use case and align with Bluejay's testing and monitoring capabilities.

### Request Body (required fields)
```json
{
  "digital_human": {
    "intent": "",
    "success_criteria": "",
    "name": "string",
    "tag": "string",
    "language": "en",
    "accent": "multilingual",
    "gender": "male",
    "background_noise": "none",
    "voice_speed": "slowest",
    "audio_quality": "high",
    "fluency": "beginner",
    "verbosity": "low",
    "phone_number": "+15551234567",
    "outbound_text_number": "string",
    "background_noise_volume": 1.0,
    "expected_tool_calls": [
      {
        "name": "example_name",
        "parameters": {
          "key": "value"
        }
      }
    ],
    "allow_end_call_tool": true,
    "endpointing_delay": 1.0,
    "creativity": 1.0,
    "hangup_phrases": [
      "string"
    ],
    "hangup_instructions": "string",
    "allow_silence_tool": false,
    "silence_tool_instructions": "default",
    "silence_timeout": 123,
    "role_description": "string",
    "traits": [
      {
        "trait_name": "example_name",
        "trait_data_type": "BOOLEAN",
        "value": "string",
        "is_sip_header": false
      }
    ],
    "interruptions": {
      "type": "none"
    },
    "scripted_responses": [
      {
        "match_type": "exact",
        "match_phrase": "string",
        "response_type": "phrase",
        "response_value": "string",
        "occurrence_mode": "always",
        "occurrence_n": 123,
        "silence_duration": 123
      }
    ],
    "speaks_first_config": {
      "speaks_first": true,
      "mode": "custom",
      "message": "string"
    },
    "original_transcript": "string",
    "formatted_transcript": [
      {
        "key": "value"
      }
    ],
    "enriched_playback": [
      {
        "key": "value"
      }
    ],
    "always_on_mode": true,
    "always_on_active": true,
    "num_runs": 123,
    "livekit_metadata": {
      "key": "value"
    }
  }
}
```

Refer to the full schema at https://docs.getbluejay.ai/api-reference/endpoint/create-digital-human. Include optional fields that serve the goal of setting up for testing and monitoring on Bluejay.

### Example
**POST with body:**
```python
import requests

def create_digital_human(payload: dict, api_key: str) -> dict:
    url = "https://api.getbluejay.ai/v1/create-digital-human"
    headers = {"X-API-Key": api_key}
    response = requests.post(url, headers=headers, json=payload)
    response.raise_for_status()
    return response.json()
```

### Constraints
- Minimal changes — only add/change files needed for this integration.
- Match existing codebase patterns (naming, file structure, error handling).
- Include error handling for 400: Workflow-tagged or business-rule violation (e.g. always-on mode mismatch, invalid phone number, missing SIP prerequisites); 409: Phone number conflict: another always-on active digital human already uses this phone number; 422: Validation Error.

### Integration Checklist
Before writing code, verify:
1. Which module/service owns this API domain in the codebase?
2. What HTTP client and error-handling patterns does the project use?
3. Are there existing types/interfaces to extend?

Then implement the integration, export it, and confirm it compiles/passes lint.
This endpoint allows you to create a digital human and attach it to a simulation. Field requirements depend on tags and optional playback payloads; see the OpenAPI schema on this page.

Headers

X-API-Key
string
required

API key required to authenticate requests.

Body

application/json

Request model for creating a digital human.

digital_human
DigitalHumanRequestData · object
required

The digital human data

simulation_ids
integer[] | null

List of simulation IDs to associate with this digital human

simulation_id
integer | null
deprecated

ID of the associated simulation. Use simulation_ids instead.

Response

Successful Response

Response model for digital human operations with clear separation of digital human data and simulation context.

digital_human
DigitalHumanResponseData · object
required

The digital human data

simulation_ids
integer[] | null

List of simulation IDs associated with this digital human

simulation_id
integer | null
deprecated

ID of the associated simulation. Use simulation_ids instead.