For the complete documentation index, see llms.txt. This page is also available as Markdown.

Settings

Get retention policy

get

Get the workspace retention policy.

Returns HIPAA-compliant defaults (2190 days / 6 years) for any field not explicitly configured. Advisory in v1 — no automated deletion.

Permissions: authenticated (any role).

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Responses
200

Successful Response

application/json
call_recordings_daysintegerRequired
call_transcripts_daysintegerRequired
audit_log_daysintegerRequired
world_events_daysintegerRequired
phi_data_daysintegerRequired
legal_holdbooleanRequired
legal_hold_reasonstring · nullableOptional
get/v1/{workspace_id}/settings/retention
GET /v1/{workspace_id}/settings/retention HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "call_recordings_days": 1,
  "call_transcripts_days": 1,
  "audit_log_days": 1,
  "world_events_days": 1,
  "phi_data_days": 1,
  "legal_hold": true,
  "legal_hold_reason": "text"
}

Update retention policy

put

Update the workspace retention policy.

Partial updates supported — only provided fields are changed. Advisory in v1: policy is stored and displayed but no automated deletion is performed. Legal hold overrides all retention.

Permissions: admin, owner (Workspace.update).

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Body
call_recordings_daysinteger · min: 365 · max: 36500 · nullableOptional
call_transcripts_daysinteger · min: 365 · max: 36500 · nullableOptional
audit_log_daysinteger · min: 365 · max: 36500 · nullableOptional
world_events_daysinteger · min: 365 · max: 36500 · nullableOptional
phi_data_daysinteger · min: 365 · max: 36500 · nullableOptional
legal_holdboolean · nullableOptional
legal_hold_reasonstring · max: 2000 · nullableOptional
Responses
200

Successful Response

application/json
call_recordings_daysintegerRequired
call_transcripts_daysintegerRequired
audit_log_daysintegerRequired
world_events_daysintegerRequired
phi_data_daysintegerRequired
legal_holdbooleanRequired
legal_hold_reasonstring · nullableOptional
put/v1/{workspace_id}/settings/retention
PUT /v1/{workspace_id}/settings/retention HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 156

{
  "call_recordings_days": 1,
  "call_transcripts_days": 1,
  "audit_log_days": 1,
  "world_events_days": 1,
  "phi_data_days": 1,
  "legal_hold": true,
  "legal_hold_reason": "text"
}
{
  "call_recordings_days": 1,
  "call_transcripts_days": 1,
  "audit_log_days": 1,
  "world_events_days": 1,
  "phi_data_days": 1,
  "legal_hold": true,
  "legal_hold_reason": "text"
}

Get metric definitions

get

Get the workspace metric definitions.

Returns built-in defaults when not configured.

Permissions: authenticated (any role).

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Responses
200

Successful Response

application/json
get/v1/{workspace_id}/settings/metrics
GET /v1/{workspace_id}/settings/metrics HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "definitions": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "key": "text",
      "name": "text",
      "description": "text",
      "metric_type": "numerical",
      "latency_tier": "batch",
      "period_granularity": "daily",
      "source": "call_intelligence",
      "custom_source_key": "text",
      "event_types": [
        "text"
      ],
      "source_filter": "text",
      "extraction_mode": "static",
      "extract_path": "text",
      "ai_labels": [
        "text"
      ],
      "ai_schema": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      },
      "ai_query_endpoint": "text",
      "ai_query_prompt": "text",
      "sql_expression": "text",
      "aggregation": "count",
      "ratio_numerator_event": "text",
      "ratio_denominator_event": "text",
      "valid_range_min": 1,
      "valid_range_max": 1,
      "freshness_sla_minutes": 60,
      "unit": "text",
      "categories": [
        "text"
      ],
      "model_tier": "free",
      "channel_scope": "all",
      "applies_to_product_types": [
        "text"
      ],
      "prompt": "text",
      "granularity": "aggregate",
      "active": true,
      "builtin": false
    }
  ]
}

Update metric definitions

put

Update the workspace metric definitions.

Partial updates supported — only provided fields are changed. The definitions list is replaced entirely when provided.

A custom ai_query metric needs an output set whenever the save adds it or changes its type, prompt, labels or range: categorical requires a non-empty ai_labels list, numerical requires valid_range_min < valid_range_max. A missing or inverted bound returns 422 naming the field.

Permissions: admin, owner.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Body

Partial update — only provided fields are changed.

The definitions list is replaced entirely when provided. Built-in metrics can be deactivated (active=false) or have their freshness_sla_minutes changed, but their key cannot be reused for custom metrics.

Responses
200

Successful Response

application/json
put/v1/{workspace_id}/settings/metrics
PUT /v1/{workspace_id}/settings/metrics HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 827

{
  "definitions": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "key": "text",
      "name": "text",
      "description": "text",
      "metric_type": "numerical",
      "latency_tier": "batch",
      "period_granularity": "daily",
      "source": "call_intelligence",
      "custom_source_key": "text",
      "event_types": [
        "text"
      ],
      "source_filter": "text",
      "extraction_mode": "static",
      "extract_path": "text",
      "ai_labels": [
        "text"
      ],
      "ai_schema": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      },
      "ai_query_endpoint": "text",
      "ai_query_prompt": "text",
      "sql_expression": "text",
      "aggregation": "count",
      "ratio_numerator_event": "text",
      "ratio_denominator_event": "text",
      "valid_range_min": 1,
      "valid_range_max": 1,
      "freshness_sla_minutes": 60,
      "unit": "text",
      "categories": [
        "text"
      ],
      "model_tier": "free",
      "channel_scope": "all",
      "applies_to_product_types": [
        "text"
      ],
      "prompt": "text",
      "granularity": "aggregate",
      "active": true,
      "builtin": false
    }
  ]
}
{
  "definitions": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "key": "text",
      "name": "text",
      "description": "text",
      "metric_type": "numerical",
      "latency_tier": "batch",
      "period_granularity": "daily",
      "source": "call_intelligence",
      "custom_source_key": "text",
      "event_types": [
        "text"
      ],
      "source_filter": "text",
      "extraction_mode": "static",
      "extract_path": "text",
      "ai_labels": [
        "text"
      ],
      "ai_schema": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      },
      "ai_query_endpoint": "text",
      "ai_query_prompt": "text",
      "sql_expression": "text",
      "aggregation": "count",
      "ratio_numerator_event": "text",
      "ratio_denominator_event": "text",
      "valid_range_min": 1,
      "valid_range_max": 1,
      "freshness_sla_minutes": 60,
      "unit": "text",
      "categories": [
        "text"
      ],
      "model_tier": "free",
      "channel_scope": "all",
      "applies_to_product_types": [
        "text"
      ],
      "prompt": "text",
      "granularity": "aggregate",
      "active": true,
      "builtin": false
    }
  ]
}

Get outreach settings

get

Get the workspace outreach settings.

Returns empty rules and templates when not configured.

Permissions: authenticated (any role).

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Responses
200

Successful Response

application/json
get/v1/{workspace_id}/settings/outreach
GET /v1/{workspace_id}/settings/outreach HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "rules": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "name": "text",
      "trigger": "appointment_window",
      "trigger_config": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      },
      "channel": "email",
      "consent_required": true,
      "quiet_hours": {
        "enabled": false,
        "start_hour": 21,
        "end_hour": 8,
        "timezone": "America/New_York"
      },
      "review_required": false,
      "message_template": "Hi {first_name}, please complete your form: {surface_url}",
      "data_template_id": "123e4567-e89b-12d3-a456-426614174000",
      "form_template_id": "123e4567-e89b-12d3-a456-426614174000",
      "active": true
    }
  ],
  "data_templates": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "name": "text",
      "fields": [
        {
          "key": "text",
          "label": "text",
          "field_type": "text",
          "required": true,
          "sensitive": false,
          "path": "text"
        }
      ]
    }
  ]
}

Update outreach settings

put

Update the workspace outreach settings.

Partial updates supported — only provided fields are changed. Rules and data_templates lists are replaced entirely when provided.

Validates that data_template_id references in rules point to templates that exist in the same payload or current settings.

Permissions: admin, owner.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Body

Partial update — only provided fields are changed.

Rules and data_templates lists are replaced entirely when provided.

Responses
200

Successful Response

application/json
put/v1/{workspace_id}/settings/outreach
PUT /v1/{workspace_id}/settings/outreach HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 712

{
  "rules": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "name": "text",
      "trigger": "appointment_window",
      "trigger_config": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      },
      "channel": "email",
      "consent_required": true,
      "quiet_hours": {
        "enabled": false,
        "start_hour": 21,
        "end_hour": 8,
        "timezone": "America/New_York"
      },
      "review_required": false,
      "message_template": "Hi {first_name}, please complete your form: {surface_url}",
      "data_template_id": "123e4567-e89b-12d3-a456-426614174000",
      "form_template_id": "123e4567-e89b-12d3-a456-426614174000",
      "active": true
    }
  ],
  "data_templates": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "name": "text",
      "fields": [
        {
          "key": "text",
          "label": "text",
          "field_type": "text",
          "required": true,
          "sensitive": false,
          "path": "text"
        }
      ]
    }
  ]
}
{
  "rules": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "name": "text",
      "trigger": "appointment_window",
      "trigger_config": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      },
      "channel": "email",
      "consent_required": true,
      "quiet_hours": {
        "enabled": false,
        "start_hour": 21,
        "end_hour": 8,
        "timezone": "America/New_York"
      },
      "review_required": false,
      "message_template": "Hi {first_name}, please complete your form: {surface_url}",
      "data_template_id": "123e4567-e89b-12d3-a456-426614174000",
      "form_template_id": "123e4567-e89b-12d3-a456-426614174000",
      "active": true
    }
  ],
  "data_templates": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "name": "text",
      "fields": [
        {
          "key": "text",
          "label": "text",
          "field_type": "text",
          "required": true,
          "sensitive": false,
          "path": "text"
        }
      ]
    }
  ]
}

Get workspace branding

get

Get the workspace default branding for surfaces.

Returns empty branding when not configured.

Permissions: authenticated (any role).

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Responses
200

Successful Response

application/json
get/v1/{workspace_id}/settings/branding
GET /v1/{workspace_id}/settings/branding HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "branding": {
    "logo_url": "text",
    "primary_color": "text",
    "background_color": "text",
    "font_family": "text"
  }
}

Update workspace branding

put

Update the workspace default branding for surfaces.

Surface-level branding takes precedence over workspace-level branding.

Permissions: admin, owner.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Body

Update workspace branding. All fields are optional — only provided fields are changed.

Responses
200

Successful Response

application/json
put/v1/{workspace_id}/settings/branding
PUT /v1/{workspace_id}/settings/branding HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 102

{
  "branding": {
    "logo_url": "text",
    "primary_color": "text",
    "background_color": "text",
    "font_family": "text"
  }
}
{
  "branding": {
    "logo_url": "text",
    "primary_color": "text",
    "background_color": "text",
    "font_family": "text"
  }
}

Get voice settings

get

Get the voice experience settings for a workspace.

Returns voice identity, domain vocabulary, and post-call intelligence configuration. These settings shape how the AI agent sounds and what domain-specific terms it recognizes accurately.

Permissions

  • Requires authenticated API key (any role).

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Responses
200

Successful Response

application/json

Voice experience state — what the PM configured.

voice_idstring · nullableRequired
tonestring · nullableRequired
speednumber · nullableRequired
volumenumber · nullableRequired
languagestringRequired
keytermsstring[]Required
pronunciation_dict_idstring · nullableRequired
sensitive_topicsstring[]Required
post_call_analysis_enabledbooleanRequired
stt_providerstring · enum · nullableRequiredPossible values:
tts_providerstring · enum · nullableRequiredPossible values:
get/v1/{workspace_id}/settings/voice
GET /v1/{workspace_id}/settings/voice HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "voice_id": "text",
  "tone": "text",
  "speed": 1,
  "volume": 1,
  "language": "text",
  "keyterms": [
    "text"
  ],
  "pronunciation_dict_id": "text",
  "sensitive_topics": [
    "text"
  ],
  "post_call_analysis_enabled": true,
  "stt_provider": "deepgram",
  "tts_provider": "cartesia",
  "tts_config": {
    "ANY_ADDITIONAL_PROPERTY": "anything"
  },
  "language_providers": {
    "ANY_ADDITIONAL_PROPERTY": {
      "provider": "cartesia",
      "config": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      }
    }
  }
}

Update voice settings

put

Update the voice experience settings for a workspace.

Only provided fields are updated; omitted fields retain their current values. Set a field to null to reset it to default.

Voice Identity & Style

  • voice_id: Voice identity UUID — determines the agent's voice persona

  • tone: Emotional baseline (calm, sympathetic, enthusiastic, content, curious, cheerful, serious, friendly). The system also adapts tone dynamically based on real-time caller emotion analysis; this setting provides the baseline when no strong emotional signal is detected.

  • speed: Speech rate multiplier (0.5-2.0)

  • volume: Volume multiplier (0.0-1.0)

  • language: BCP-47 language tag (default en)

Speech Recognition Boost

  • keyterms: Exact words the speech recognition engine should prioritize. Use for specific names, drug names, and org jargon. Example: ["Dr. Ramirez", "metformin", "HIPAA"]

Post-Call Intelligence

  • post_call_analysis_enabled: Run automated quality scoring after each call ends (default true)

Permissions

  • Requires admin or owner role.

Authorizations
AuthorizationstringRequired

API key issued via POST /v1/{workspace_id}/api-keys. Pass the returned api_key value as a Bearer token.

Path parameters
workspace_idstring · uuidRequired
Body

Voice experience control plane — PM-facing, high-level controls.

Controls the caller experience without exposing engineering internals. Emotion detection, filler speech, model selection, and buffer tuning are always-on internals managed by engineering.

voice_idstring · max: 128 · nullableOptional
tonestring · max: 2000 · nullableOptional
speednumber · nullableOptional
volumenumber · nullableOptional
languagestring · max: 32 · nullableOptional
keytermsstring[] · max: 200 · nullableOptional
pronunciation_dict_idstring · max: 128 · nullableOptional
sensitive_topicsstring[] · max: 50 · nullableOptional
post_call_analysis_enabledboolean · nullableOptional
stt_providerstring · enum · nullableOptionalPossible values:
tts_providerstring · enum · nullableOptionalPossible values:
Responses
200

Successful Response

application/json

Voice experience state — what the PM configured.

voice_idstring · nullableRequired
tonestring · nullableRequired
speednumber · nullableRequired
volumenumber · nullableRequired
languagestringRequired
keytermsstring[]Required
pronunciation_dict_idstring · nullableRequired
sensitive_topicsstring[]Required
post_call_analysis_enabledbooleanRequired
stt_providerstring · enum · nullableRequiredPossible values:
tts_providerstring · enum · nullableRequiredPossible values:
put/v1/{workspace_id}/settings/voice
PUT /v1/{workspace_id}/settings/voice HTTP/1.1
Host: platform.api-us.concurrence.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 410

{
  "voice_id": "text",
  "tone": "text",
  "speed": 1,
  "volume": 1,
  "language": "text",
  "keyterms": [
    "text"
  ],
  "pronunciation_dict_id": "text",
  "sensitive_topics": [
    "text"
  ],
  "post_call_analysis_enabled": true,
  "stt_provider": "deepgram",
  "tts_provider": "cartesia",
  "tts_config": {
    "ANY_ADDITIONAL_PROPERTY": "anything"
  },
  "language_providers": {
    "ANY_ADDITIONAL_PROPERTY": {
      "provider": "cartesia",
      "config": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      }
    }
  }
}
{
  "voice_id": "text",
  "tone": "text",
  "speed": 1,
  "volume": 1,
  "language": "text",
  "keyterms": [
    "text"
  ],
  "pronunciation_dict_id": "text",
  "sensitive_topics": [
    "text"
  ],
  "post_call_analysis_enabled": true,
  "stt_provider": "deepgram",
  "tts_provider": "cartesia",
  "tts_config": {
    "ANY_ADDITIONAL_PROPERTY": "anything"
  },
  "language_providers": {
    "ANY_ADDITIONAL_PROPERTY": {
      "provider": "cartesia",
      "config": {
        "ANY_ADDITIONAL_PROPERTY": "anything"
      }
    }
  }
}

Last updated

Was this helpful?