POST
/
api
/
v1
/
admin
/
simulation
/
characters
Create Character
curl --request POST \
  --url https://api.jobsim.work/api/v1/admin/simulation/characters \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "character_id": "<string>",
  "name": "<string>",
  "role": "<string>",
  "core_persona": "<string>",
  "channels": [
    "<string>"
  ],
  "topics": [
    "<string>"
  ],
  "personality_traits": [
    "<string>"
  ],
  "communication_style": "Professional and direct",
  "activity_level": "medium",
  "response_delay_mean": 45,
  "response_delay_std": 20,
  "chattiness_weight": 0.5,
  "relationships": {},
  "situations": {},
  "has_storyline_arc": false,
  "storyline_context": null,
  "is_player": false,
  "is_npc_agent": true,
  "is_active": true,
  "mention_patterns": [
    "<string>"
  ],
  "anti_hallucination_keywords": [
    "<string>"
  ],
  "fallback_agent_id": "<string>",
  "work_context": "<string>",
  "communication_boundaries": [
    "<string>"
  ],
  "verbal_quirks": [
    "<string>"
  ],
  "channel_rules": {},
  "availability_overrides": {},
  "away_message": "<string>",
  "collaboration_partners": [
    "<string>"
  ],
  "eavesdrop_channels": [
    "<string>"
  ],
  "internal_channels": [
    "<string>"
  ],
  "department": "<string>"
}
'
{
  "character_id": "<string>",
  "name": "<string>",
  "role": "<string>",
  "core_persona": "<string>",
  "communication_style": "<string>",
  "_id": "<string>",
  "agent_id": "<string>",
  "channels": [
    "<string>"
  ],
  "topics": [
    "<string>"
  ],
  "personality_traits": [
    "<string>"
  ],
  "activity_level": "medium",
  "response_delay_mean": 45,
  "response_delay_std": 20,
  "chattiness_weight": 0.5,
  "relationships": {},
  "situations": {},
  "has_storyline_arc": false,
  "storyline_context": null,
  "is_player": false,
  "is_npc_agent": true,
  "is_active": true,
  "organization_id": "<string>",
  "mention_patterns": [
    "<string>"
  ],
  "anti_hallucination_keywords": [
    "<string>"
  ],
  "fallback_agent_id": "<string>",
  "work_context": "<string>",
  "communication_boundaries": [
    "<string>"
  ],
  "verbal_quirks": [
    "<string>"
  ],
  "channel_rules": {},
  "availability_overrides": {},
  "away_message": "<string>",
  "collaboration_partners": [
    "<string>"
  ],
  "eavesdrop_channels": [
    "<string>"
  ],
  "internal_channels": [
    "<string>"
  ],
  "department": "<string>",
  "created_at": "2023-11-07T05:31:56Z",
  "updated_at": "2023-11-07T05:31:56Z"
}

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Query Parameters

organization_id
string | null

Body

application/json

Request to create a simulation character

character_id
string
required
name
string
required
role
string
required
core_persona
string
required
channels
string[]
topics
string[]
personality_traits
string[]
communication_style
string
default:Professional and direct
activity_level
enum<string>
default:medium

Activity level for simulation characters

Available options:
high,
medium,
low,
reactive
response_delay_mean
number
default:45
response_delay_std
number
default:20
chattiness_weight
number
default:0.5
relationships
Relationships · object
situations
Situations · object
has_storyline_arc
boolean
default:false
storyline_context
unknown
is_player
boolean
default:false
is_npc_agent
boolean
default:true
is_active
boolean
default:true
mention_patterns
string[]

Patterns to trigger this agent (e.g. @marcus, Marcus)

anti_hallucination_keywords
string[]
fallback_agent_id
string | null
work_context
string | null
communication_boundaries
string[]
verbal_quirks
string[]
channel_rules
Channel Rules · object
availability_overrides
Availability Overrides · object
away_message
string | null
collaboration_partners
string[]
eavesdrop_channels
string[]
internal_channels
string[]
department
string | null

Org unit label for UI grouping (align with organization branding.departments).

Response

Successful Response

Details omitted in public API documentation export. Use your deployment's private OpenAPI export or administrator for full text.

character_id
string
required
name
string
required
role
string
required
core_persona
string
required
communication_style
string
required
_id
string | null
agent_id
string | null
channels
string[]
topics
string[]
personality_traits
string[]
activity_level
enum<string>
default:medium

Activity level for simulation characters

Available options:
high,
medium,
low,
reactive
response_delay_mean
number
default:45
response_delay_std
number
default:20
chattiness_weight
number
default:0.5
relationships
Relationships · object
situations
Situations · object
has_storyline_arc
boolean
default:false
storyline_context
unknown
is_player
boolean
default:false
is_npc_agent
boolean
default:true
is_active
boolean
default:true
organization_id
string | null
mention_patterns
string[]

Patterns that trigger this agent (e.g. @patty, onboarding specialist)

anti_hallucination_keywords
string[]

Keywords this agent should NEVER use (e.g. other agents' names)

fallback_agent_id
string | null

Agent ID/Type to try if this agent declines to respond

work_context
string | null

Work context e.g. 'You have 3 direct reports', 'You're in 6 meetings/week'

communication_boundaries
string[]

e.g. 'Never discuss salary in public channels', 'Escalate harassment to Marcus only'

verbal_quirks
string[]

Recurring phrases or tone markers for more realistic dialogue style consistency

channel_rules
Channel Rules · object

Per-channel behavior: {'announcements': 'post_only_official_updates', 'hr-team': 'no_salary_in_public'}

availability_overrides
Availability Overrides · object

Per-day or special keys: weekday lowercase (monday..sunday), plus optional month_end for last 3 days of month. Values may include delay_multiplier, is_available (false = away).

away_message
string | null

Optional message used when agent is unavailable or outside active hours

collaboration_partners
string[]

Character IDs this agent can DM/coordinate with (e.g. ['marcus','patty'] for HR, ['john','thomas','felix'] for product)

eavesdrop_channels
string[]

Public adjacent channel names/IDs this agent may overhear when eavesdropping policy is enabled.

internal_channels
string[]

Internal channels this agent can post to (e.g. ['hr-internal'], ['product-internal'], ['engineering-internal'])

department
string | null

Org unit label for UI grouping (must align with organization branding.departments when set).

created_at
string<date-time>
updated_at
string<date-time>