---
title: "Update a project"
method: PATCH
path: "/user/v1/projects/{id}/"
tags: ["user"]
---

# Update a project

`PATCH /user/v1/projects/{id}/`

## Request

- Base URL: `https://api.cekura.ai`
- URL: `https://api.cekura.ai/user/v1/projects/{id}/`
- Auth: one of:
  - API key in header `X-CEKURA-API-KEY`
  - HTTP bearer
  - HTTP bearer

Update a project

## Path parameters

- `id` string, required

## Request body

- PatchedProject
  - `id` integer
  - `name` string: Name of the project Example: `"Default Project"`
  - `members` MembershipInline[]
    - `id` integer
    - `user` UserInline
      - `id` integer, nullable
      - `name` string, required
      - `email` string, email, nullable
    - `role` 'admin' | 'member' | 'view_only' | 'internal_view' | 'labs' | 'labs_view_only' | 'insights_view': * `admin` - Admin * `member` - Member * `view_only` - View Only * `internal_view` - Internal View Only * `labs` - Labs * `labs_view_only` - Labs View Only * `insights_view` - Insights View Only
    - `is_email_notify_enabled` boolean
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `organization` OrganizationInline
    - `id` integer
    - `name` string, required
    - `members` MembershipInline[]
      - `id` integer
      - `user` UserInline
        - `id` integer, nullable
        - `name` string, required
        - `email` string, email, nullable
      - `role` 'admin' | 'member' | 'view_only' | 'internal_view' | 'labs' | 'labs_view_only' | 'insights_view': * `admin` - Admin * `member` - Member * `view_only` - View Only * `internal_view` - Internal View Only * `labs` - Labs * `labs_view_only` - Labs View Only * `insights_view` - Insights View Only
      - `is_email_notify_enabled` boolean
      - `created_at` string, date-time
      - `updated_at` string, date-time
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `organization_id` integer: ID of the organization to create the project under. Required when authenticating as a user (you must be an admin of that organization); omit it when using an organization-scoped API key, where the organization is inferred from the key.
  - `outbound_timeout` integer: Outbound timeout in seconds Example: `300`
  - `max_call_duration` integer: Max call duration in seconds Example: `300`
  - `min_call_duration` integer: Min call duration in seconds Example: `30`
  - `sample_rate` number, double: Metric sampling rate (0.0 to 1.0). Default is 1.0 (100% of calls). Example: `0.5` (50%), `0.1` (10%), `0.001` (0.1%)
  - `max_messages_chat_runs_limit` integer: Max messages chat runs limit Example: `100`
  - `webhook_url` string, uri: Webhook URL Example: `"https://yourdomain.com/webhook"`
  - `webhook_secret` string: Webhook secret. Sent in `X-CEKURA-SECRET` header when invoking `webhook_url`. Write-only — never returned in API responses. Use `webhook_secret_configured` to check whether one is set. Example: `"your-webhook-secret"`
  - `webhook_secret_configured` string
  - `evaluate_relevant_metrics_enabled` boolean: Evaluate relevant metrics enabled Example: `true` or `false`
  - `end_call_enabled` boolean: End call enabled Example: `true` or `false`
  - `generate_scenario_auto_assign_numbers_enabled` boolean: Generate scenario auto assign numbers enabled Example: `true` or `false`
  - `enable_client_side_testing` boolean: Enable client side testing Example: `true` or `false`
  - `use_provider_transcript` boolean: When true, evaluations use the provider transcript instead of Cekura transcript with provider side tool calls. Defaults to false.
  - `reconcile_transcripts_with_cekura` boolean: When true, observability calls that arrive with both a recording and a provider transcript are transcribed by Cekura, and for dual-channel audio the Cekura transcript is published before metrics run (provider tool and system events are kept). Mono audio and transcription failures keep the provider transcript. Billed per minute of audio at the reconciliation rate whenever a Cekura transcript is published. The create-CallLog API field `reconcile_with_cekura_transcript` overrides this per request. Defaults to false.
  - `should_show_powered_by` boolean: Should show powered by Example: `true` or `false`
  - `deep_research_enabled` boolean: Enable Deep Research for this project. Customers own this from project settings: turning it on surfaces the Deep Research section and opts the project into the weekly audit cron and the on-demand Generate button. The global DEEP_RESEARCH_ENABLED SettingValue remains a kill switch above it. Example: `true` or `false`
  - `notify_results_completion` boolean: Notify on result completion Example: `true` or `false`
  - `notify_daily_report` boolean: Notify daily report Example: `true` or `false`
  - `notify_daily_report_no_calls` boolean: Notify daily report even if there are no calls Example: `true` or `false`
  - `daily_report_ai_summary_enabled` boolean: Replace the default daily report data dump with an AI-narrated Top Issues section in Slack and email. Off by default. When on, Slack also exposes a "Show more" button that opens a modal with the legacy detail sections. Example: `true` or `false`
  - `notify_cron_failure` boolean: Notify cron failure Example: `true` or `false`
  - `notify_cron_success` boolean: Notify cron success Example: `true` or `false`
  - `notify_no_calls` boolean: Notify no calls Example: `true` or `false`
  - `no_calls_notify_time_period` unknown
  - `notify_daily_report_webhook` boolean: Notify daily report webhook Example: `true` or `false`
  - `notify_pre_run_webhook` boolean: Send a webhook at the start of a run (before calls dispatch) to configure the external test sandbox Example: `true` or `false`
  - `daily_report_dashboard_ids` integer[]: Dashboard IDs to include as visual snapshots in the daily report Example: `[1, 2, 3]`
  - `notify_result_webhook_failed` boolean: Notify result webhook failed Example: `true` or `false`
  - `notify_result_webhook_success` boolean: Notify result webhook success Example: `true` or `false`
  - `notify_result_webhook_error` boolean: Notify result webhook for error runs (runs with error_message) Example: `true` or `false`
  - `notify_cronjob_webhook_failed` boolean: Notify cronjob webhook failed Example: `true` or `false`
  - `notify_cronjob_webhook_success` boolean: Notify cronjob webhook success Example: `true` or `false`
  - `notify_cronjob_webhook_error` boolean: Notify cronjob webhook for error runs (runs with error_message) Example: `true` or `false`
  - `notify_call_log_webhook_failed` boolean: Notify call log webhook failed Example: `true` or `false`
  - `notify_call_log_webhook_success` boolean: Notify call log webhook success Example: `true` or `false`
  - `call_log_webhook_redact_fields` string[]: PII fields to redact from outgoing call log webhook payloads (including metadata and dynamic variables). Stored call logs are not changed. Empty list disables it. `voice_recording_url` is sent as null unless the agent's own `redact_fields` include every field listed here (recordings ingested before the agent enabled redaction are not redacted), and provider recording/log links in `metadata` are removed. Forwarded raw provider webhooks (`forward_vapi_webhook`, `forward_retell_webhook`) are not redacted. Example: `["ssn", "dob", "email_address"]`
  - `skip_call_log_webhook_no_content` boolean: Skip call log webhooks for calls with no conversation content: no spoken transcript, or a busy / no-answer ended reason Example: `true` or `false`
  - `notify_frequent_calls_for_number` boolean
  - `frequent_calls_threshold` integer
  - `frequent_calls_time_period` integer
  - `frequent_calls_cooldown` integer
  - `forward_vapi_webhook` boolean: Forward vapi webhook Example: `true` or `false`
  - `forward_retell_webhook` boolean: Forward retell webhook Example: `true` or `false`
  - `is_send_emails_enabled` boolean: Is send emails enabled Example: `true` or `false`
  - `rubric_config` unknown
  - `timezone` string: Project Timezone
  - `vapi_api_key` string: VAPI Private API Key. Used for all VAPI operations (calls, chat, and testing). Example: `"vapi_api_key_123"`
  - `vapi_api_key_configured` string
  - `vapi_public_key_configured` string
  - `retell_api_key` string: Retell API key Example: `"retell_api_key_123"`
  - `retell_api_key_configured` string
  - `syntflow_api_key` string: Syntflow API key Example: `"syntflow_api_key_123"`
  - `syntflow_api_key_configured` string
  - `elevenlabs_api_key` string: ElevenLabs API key Example: `"elevenlabs_api_key_123"`
  - `elevenlabs_api_key_configured` string
  - `bland_api_key` string: Bland API key Example: `"bland_api_key_123"`
  - `bland_api_key_configured` string
  - `livekit_api_key` string: LiveKit API key Example: `"livekit_api_key_123"`
  - `livekit_api_key_configured` string
  - `pipecat_api_key` string: Pipecat/Daily.co API key Example: `"pipecat_api_key_123"`
  - `pipecat_api_key_configured` string
  - `is_deleted` boolean
  - `created_at` string, date-time
  - `updated_at` string, date-time

## Response `200`

- Project
  - `id` integer
  - `name` string, required: Name of the project Example: `"Default Project"`
  - `members` MembershipInline[]
    - `id` integer
    - `user` UserInline
      - `id` integer, nullable
      - `name` string, required
      - `email` string, email, nullable
    - `role` 'admin' | 'member' | 'view_only' | 'internal_view' | 'labs' | 'labs_view_only' | 'insights_view': * `admin` - Admin * `member` - Member * `view_only` - View Only * `internal_view` - Internal View Only * `labs` - Labs * `labs_view_only` - Labs View Only * `insights_view` - Insights View Only
    - `is_email_notify_enabled` boolean
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `organization` OrganizationInline
    - `id` integer
    - `name` string, required
    - `members` MembershipInline[]
      - `id` integer
      - `user` UserInline
        - `id` integer, nullable
        - `name` string, required
        - `email` string, email, nullable
      - `role` 'admin' | 'member' | 'view_only' | 'internal_view' | 'labs' | 'labs_view_only' | 'insights_view': * `admin` - Admin * `member` - Member * `view_only` - View Only * `internal_view` - Internal View Only * `labs` - Labs * `labs_view_only` - Labs View Only * `insights_view` - Insights View Only
      - `is_email_notify_enabled` boolean
      - `created_at` string, date-time
      - `updated_at` string, date-time
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `organization_id` integer: ID of the organization to create the project under. Required when authenticating as a user (you must be an admin of that organization); omit it when using an organization-scoped API key, where the organization is inferred from the key.
  - `outbound_timeout` integer: Outbound timeout in seconds Example: `300`
  - `max_call_duration` integer: Max call duration in seconds Example: `300`
  - `min_call_duration` integer: Min call duration in seconds Example: `30`
  - `sample_rate` number, double: Metric sampling rate (0.0 to 1.0). Default is 1.0 (100% of calls). Example: `0.5` (50%), `0.1` (10%), `0.001` (0.1%)
  - `max_messages_chat_runs_limit` integer: Max messages chat runs limit Example: `100`
  - `webhook_url` string, uri: Webhook URL Example: `"https://yourdomain.com/webhook"`
  - `webhook_secret` string: Webhook secret. Sent in `X-CEKURA-SECRET` header when invoking `webhook_url`. Write-only — never returned in API responses. Use `webhook_secret_configured` to check whether one is set. Example: `"your-webhook-secret"`
  - `webhook_secret_configured` string
  - `evaluate_relevant_metrics_enabled` boolean: Evaluate relevant metrics enabled Example: `true` or `false`
  - `end_call_enabled` boolean: End call enabled Example: `true` or `false`
  - `generate_scenario_auto_assign_numbers_enabled` boolean: Generate scenario auto assign numbers enabled Example: `true` or `false`
  - `enable_client_side_testing` boolean: Enable client side testing Example: `true` or `false`
  - `use_provider_transcript` boolean: When true, evaluations use the provider transcript instead of Cekura transcript with provider side tool calls. Defaults to false.
  - `reconcile_transcripts_with_cekura` boolean: When true, observability calls that arrive with both a recording and a provider transcript are transcribed by Cekura, and for dual-channel audio the Cekura transcript is published before metrics run (provider tool and system events are kept). Mono audio and transcription failures keep the provider transcript. Billed per minute of audio at the reconciliation rate whenever a Cekura transcript is published. The create-CallLog API field `reconcile_with_cekura_transcript` overrides this per request. Defaults to false.
  - `should_show_powered_by` boolean: Should show powered by Example: `true` or `false`
  - `deep_research_enabled` boolean: Enable Deep Research for this project. Customers own this from project settings: turning it on surfaces the Deep Research section and opts the project into the weekly audit cron and the on-demand Generate button. The global DEEP_RESEARCH_ENABLED SettingValue remains a kill switch above it. Example: `true` or `false`
  - `notify_results_completion` boolean: Notify on result completion Example: `true` or `false`
  - `notify_daily_report` boolean: Notify daily report Example: `true` or `false`
  - `notify_daily_report_no_calls` boolean: Notify daily report even if there are no calls Example: `true` or `false`
  - `daily_report_ai_summary_enabled` boolean: Replace the default daily report data dump with an AI-narrated Top Issues section in Slack and email. Off by default. When on, Slack also exposes a "Show more" button that opens a modal with the legacy detail sections. Example: `true` or `false`
  - `notify_cron_failure` boolean: Notify cron failure Example: `true` or `false`
  - `notify_cron_success` boolean: Notify cron success Example: `true` or `false`
  - `notify_no_calls` boolean: Notify no calls Example: `true` or `false`
  - `no_calls_notify_time_period` unknown
  - `notify_daily_report_webhook` boolean: Notify daily report webhook Example: `true` or `false`
  - `notify_pre_run_webhook` boolean: Send a webhook at the start of a run (before calls dispatch) to configure the external test sandbox Example: `true` or `false`
  - `daily_report_dashboard_ids` integer[]: Dashboard IDs to include as visual snapshots in the daily report Example: `[1, 2, 3]`
  - `notify_result_webhook_failed` boolean: Notify result webhook failed Example: `true` or `false`
  - `notify_result_webhook_success` boolean: Notify result webhook success Example: `true` or `false`
  - `notify_result_webhook_error` boolean: Notify result webhook for error runs (runs with error_message) Example: `true` or `false`
  - `notify_cronjob_webhook_failed` boolean: Notify cronjob webhook failed Example: `true` or `false`
  - `notify_cronjob_webhook_success` boolean: Notify cronjob webhook success Example: `true` or `false`
  - `notify_cronjob_webhook_error` boolean: Notify cronjob webhook for error runs (runs with error_message) Example: `true` or `false`
  - `notify_call_log_webhook_failed` boolean: Notify call log webhook failed Example: `true` or `false`
  - `notify_call_log_webhook_success` boolean: Notify call log webhook success Example: `true` or `false`
  - `call_log_webhook_redact_fields` string[]: PII fields to redact from outgoing call log webhook payloads (including metadata and dynamic variables). Stored call logs are not changed. Empty list disables it. `voice_recording_url` is sent as null unless the agent's own `redact_fields` include every field listed here (recordings ingested before the agent enabled redaction are not redacted), and provider recording/log links in `metadata` are removed. Forwarded raw provider webhooks (`forward_vapi_webhook`, `forward_retell_webhook`) are not redacted. Example: `["ssn", "dob", "email_address"]`
  - `skip_call_log_webhook_no_content` boolean: Skip call log webhooks for calls with no conversation content: no spoken transcript, or a busy / no-answer ended reason Example: `true` or `false`
  - `notify_frequent_calls_for_number` boolean
  - `frequent_calls_threshold` integer
  - `frequent_calls_time_period` integer
  - `frequent_calls_cooldown` integer
  - `forward_vapi_webhook` boolean: Forward vapi webhook Example: `true` or `false`
  - `forward_retell_webhook` boolean: Forward retell webhook Example: `true` or `false`
  - `is_send_emails_enabled` boolean: Is send emails enabled Example: `true` or `false`
  - `rubric_config` unknown
  - `timezone` string: Project Timezone
  - `vapi_api_key` string: VAPI Private API Key. Used for all VAPI operations (calls, chat, and testing). Example: `"vapi_api_key_123"`
  - `vapi_api_key_configured` string
  - `vapi_public_key_configured` string
  - `retell_api_key` string: Retell API key Example: `"retell_api_key_123"`
  - `retell_api_key_configured` string
  - `syntflow_api_key` string: Syntflow API key Example: `"syntflow_api_key_123"`
  - `syntflow_api_key_configured` string
  - `elevenlabs_api_key` string: ElevenLabs API key Example: `"elevenlabs_api_key_123"`
  - `elevenlabs_api_key_configured` string
  - `bland_api_key` string: Bland API key Example: `"bland_api_key_123"`
  - `bland_api_key_configured` string
  - `livekit_api_key` string: LiveKit API key Example: `"livekit_api_key_123"`
  - `livekit_api_key_configured` string
  - `pipecat_api_key` string: Pipecat/Daily.co API key Example: `"pipecat_api_key_123"`
  - `pipecat_api_key_configured` string
  - `is_deleted` boolean
  - `created_at` string, date-time
  - `updated_at` string, date-time

## Changes

- **2026-11-03** `a6fb6a739212`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/cekura/apis/cekura-api/changes/user/v1/projects/:id/patch.md)

---

[API](https://skmtc.dev/cekura/apis/cekura-api.md) - [All operations](https://skmtc.dev/cekura/apis/cekura-api/llms.txt) - [OpenAPI document](https://skmtc.dev/cekura/apis/cekura-api/revisions/a6fb6a739212?raw)
