Properties
| Name | Type | Description |
|---|---|---|
| id | integer | |
| name | string | Name of the project Example: `"Default Project"` |
| members | array | |
| organization | object | |
| 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 org |
| 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 | 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 | 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_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 ( |
| 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 Gene |
| 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 legac |
| 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 | object | Configuration for no calls notification time periods, timeframes, exception numbers, and agents to exclude Example: ```json { "time_zone": "America/New_York", "time_periods": [ { "start_time": "09:00" |
| 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 | array | 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 | array | 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 |
| 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 | object | Project-level scoring rubric for evaluating call success. Each call log produced under this project is run against the rubric and gets a single pass/fail outcome based on its metric results. IMPORTANT |
| 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 | |
| updated_at | string |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/cekura-ai/json-schema/cekura-ai-project-schema.json",
"title": "Project",
"x-generated": "2026-10-29",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/cekura-ai-openapi.json#/components/schemas/Project",
"type": "object",
"properties": {
"id": {
"type": "integer",
"readOnly": true
},
"name": {
"type": "string",
"description": "\nName of the project\nExample: `\"Default Project\"`\n"
},
"members": {
"type": "array",
"items": {
"$ref": "#/$defs/MembershipInline"
},
"readOnly": true
},
"organization": {
"allOf": [
{
"$ref": "#/$defs/OrganizationInline"
}
],
"readOnly": true
},
"organization_id": {
"type": "integer",
"writeOnly": true,
"description": "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": {
"type": "integer",
"description": "\nOutbound timeout in seconds\nExample: `300`\n"
},
"max_call_duration": {
"type": "integer",
"description": "\nMax call duration in seconds\nExample: `300`\n"
},
"min_call_duration": {
"type": "integer",
"description": "\nMin call duration in seconds\nExample: `30`\n"
},
"sample_rate": {
"type": "number",
"format": "double",
"description": "\nMetric sampling rate (0.0 to 1.0). Default is 1.0 (100% of calls).\nExample: `0.5` (50%), `0.1` (10%), `0.001` (0.1%)\n"
},
"max_messages_chat_runs_limit": {
"type": "integer",
"description": "\nMax messages chat runs limit\nExample: `100`\n"
},
"webhook_url": {
"type": "string",
"format": "uri",
"description": "\nWebhook URL\nExample: `\"https://yourdomain.com/webhook\"`\n"
},
"webhook_secret": {
"type": "string",
"writeOnly": true,
"description": "\nWebhook secret. Sent in `X-CEKURA-SECRET` header when invoking `webhook_url`.\nWrite-only — never returned in API responses. Use `webhook_secret_configured`\nto check whether one is set.\nExample: `\"your-webhook-secret\"`\n"
},
"webhook_secret_configured": {
"type": "string",
"readOnly": true
},
"evaluate_relevant_metrics_enabled": {
"type": "boolean",
"description": "\nEvaluate relevant metrics enabled\nExample: `true` or `false`\n"
},
"end_call_enabled": {
"type": "boolean",
"description": "\nEnd call enabled\nExample: `true` or `false`\n"
},
"generate_scenario_auto_assign_numbers_enabled": {
"type": "boolean",
"description": "\nGenerate scenario auto assign numbers enabled\nExample: `true` or `false`\n"
},
"enable_client_side_testing": {
"type": "boolean",
"description": "\nEnable client side testing\nExample: `true` or `false`\n"
},
"use_provider_transcript": {
"type": "boolean",
"description": "When true, evaluations use the provider transcript instead of Cekura transcript with provider side tool calls. Defaults to false."
},
"reconcile_transcripts_with_cekura": {
"type": "boolean",
"description": "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": {
"type": "boolean",
"description": "\nShould show powered by\nExample: `true` or `false`\n"
},
"deep_research_enabled": {
"type": "boolean",
"description": "\nEnable Deep Research for this project. Customers own this from project\nsettings: turning it on surfaces the Deep Research section and opts the\nproject into the weekly audit cron and the on-demand Generate button.\nThe global DEEP_RESEARCH_ENABLED SettingValue remains a kill switch above\nit.\nExample: `true` or `false`\n"
},
"notify_results_completion": {
"type": "boolean",
"description": "\nNotify on result completion\nExample: `true` or `false`\n"
},
"notify_daily_report": {
"type": "boolean",
"description": "\nNotify daily report\nExample: `true` or `false`\n"
},
"notify_daily_report_no_calls": {
"type": "boolean",
"description": "\nNotify daily report even if there are no calls\nExample: `true` or `false`\n"
},
"daily_report_ai_summary_enabled": {
"type": "boolean",
"description": "\nReplace the default daily report data dump with an AI-narrated Top Issues\nsection in Slack and email. Off by default. When on, Slack also exposes a\n\"Show more\" button that opens a modal with the legacy detail sections.\nExample: `true` or `false`\n"
},
"notify_cron_failure": {
"type": "boolean",
"description": "\nNotify cron failure\nExample: `true` or `false`\n"
},
"notify_cron_success": {
"type": "boolean",
"description": "\nNotify cron success\nExample: `true` or `false`\n"
},
"notify_no_calls": {
"type": "boolean",
"description": "\nNotify no calls\nExample: `true` or `false`\n"
},
"no_calls_notify_time_period": {
"description": "\nConfiguration for no calls notification time periods, timeframes, exception numbers, and agents to exclude\nExample:\n```json\n{\n \"time_zone\": \"America/New_York\",\n \"time_periods\": [\n {\n \"start_time\": \"09:00\",\n \"end_time\": \"17:00\",\n \"time_frame\": 30\n },\n {\n \"start_time\": \"18:00\",\n \"end_time\": \"23:59\",\n \"time_frame\": 60\n }\n ],\n \"exception_numbers\": [\"+15551234567\", \"+14155552671\"],\n \"agents\": [1, 10, 90]\n}\n```\nNote:\n- Calls with customer_number in exception_numbers list will be ignored when checking for no calls alert.\n- If agents list is provided and not empty, those specific agents will be excluded from monitoring. All other agents in the project will be monitored. If omitted or empty, all agents in the project will be monitored.\n"
},
"notify_daily_report_webhook": {
"type": "boolean",
"description": "\nNotify daily report webhook\nExample: `true` or `false`\n"
},
"notify_pre_run_webhook": {
"type": "boolean",
"description": "\nSend a webhook at the start of a run (before calls dispatch) to configure the external test sandbox\nExample: `true` or `false`\n"
},
"daily_report_dashboard_ids": {
"type": "array",
"items": {
"type": "integer"
},
"description": "\nDashboard IDs to include as visual snapshots in the daily report\nExample: `[1, 2, 3]`\n"
},
"notify_result_webhook_failed": {
"type": "boolean",
"description": "\nNotify result webhook failed\nExample: `true` or `false`\n"
},
"notify_result_webhook_success": {
"type": "boolean",
"description": "\nNotify result webhook success\nExample: `true` or `false`\n"
},
"notify_result_webhook_error": {
"type": "boolean",
"description": "\nNotify result webhook for error runs (runs with error_message)\nExample: `true` or `false`\n"
},
"notify_cronjob_webhook_failed": {
"type": "boolean",
"description": "\nNotify cronjob webhook failed\nExample: `true` or `false`\n"
},
"notify_cronjob_webhook_success": {
"type": "boolean",
"description": "\nNotify cronjob webhook success\nExample: `true` or `false`\n"
},
"notify_cronjob_webhook_error": {
"type": "boolean",
"description": "\nNotify cronjob webhook for error runs (runs with error_message)\nExample: `true` or `false`\n"
},
"notify_call_log_webhook_failed": {
"type": "boolean",
"description": "\nNotify call log webhook failed\nExample: `true` or `false`\n"
},
"notify_call_log_webhook_success": {
"type": "boolean",
"description": "\nNotify call log webhook success\nExample: `true` or `false`\n"
},
"call_log_webhook_redact_fields": {
"type": "array",
"items": {
"enum": [
"person_name",
"age",
"phone_number",
"email_address",
"date",
"time",
"location",
"origin",
"gender_sexuality",
"physical_attribute",
"occupation",
"username",
"password",
"ip_address",
"url",
"filename",
"event",
"vehicle_id",
"dob",
"healthcare_number",
"medical_professional",
"credit_card",
"account_number",
"bank_account",
"money",
"ssn",
"passport_number",
"driver_license",
"numerical_pii"
],
"type": "string",
"description": "* `person_name` - person_name\n* `age` - age\n* `phone_number` - phone_number\n* `email_address` - email_address\n* `date` - date\n* `time` - time\n* `location` - location\n* `origin` - origin\n* `gender_sexuality` - gender_sexuality\n* `physical_attribute` - physical_attribute\n* `occupation` - occupation\n* `username` - username\n* `password` - password\n* `ip_address` - ip_address\n* `url` - url\n* `filename` - filename\n* `event` - event\n* `vehicle_id` - vehicle_id\n* `dob` - dob\n* `healthcare_number` - healthcare_number\n* `medical_professional` - medical_professional\n* `credit_card` - credit_card\n* `account_number` - account_number\n* `bank_account` - bank_account\n* `money` - money\n* `ssn` - ssn\n* `passport_number` - passport_number\n* `driver_license` - driver_license\n* `numerical_pii` - numerical_pii",
"x-spec-enum-id": "99d2b7efd95189c4"
},
"description": "\nPII fields to redact from outgoing call log webhook payloads (including metadata and dynamic variables).\nStored call logs are not changed. Empty list disables it.\n`voice_recording_url` is sent as null unless the agent's own `redact_fields` include every field listed here\n(recordings ingested before the agent enabled redaction are not redacted), and provider recording/log links in\n`metadata` are removed. Forwarded raw provider webhooks (`forward_vapi_webhook`, `forward_retell_webhook`) are not redacted.\nExample: `[\"ssn\", \"dob\", \"email_address\"]`\n"
},
"skip_call_log_webhook_no_content": {
"type": "boolean",
"description": "\nSkip call log webhooks for calls with no conversation content: no spoken transcript, or a busy / no-answer ended reason\nExample: `true` or `false`\n"
},
"notify_frequent_calls_for_number": {
"type": "boolean"
},
"frequent_calls_threshold": {
"type": "integer",
"maximum": 2147483647,
"minimum": -2147483648
},
"frequent_calls_time_period": {
"type": "integer",
"maximum": 2147483647,
"minimum": -2147483648
},
"frequent_calls_cooldown": {
"type": "integer",
"maximum": 2147483647,
"minimum": -2147483648
},
"forward_vapi_webhook": {
"type": "boolean",
"description": "\nForward vapi webhook\nExample: `true` or `false`\n"
},
"forward_retell_webhook": {
"type": "boolean",
"description": "\nForward retell webhook\nExample: `true` or `false`\n"
},
"is_send_emails_enabled": {
"type": "boolean",
"description": "\nIs send emails enabled\nExample: `true` or `false`\n"
},
"rubric_config": {
"description": "\nProject-level scoring rubric for evaluating call success. Each call log produced under this project is run against the rubric and gets a single pass/fail outcome based on its metric results.\n\nIMPORTANT (read before writing):\n- NEVER blindly overwrite this field. Always first GET the project, read the existing `rubric_config`, then merge in only the rule(s) you intend to add/update, and PATCH the full merged value. Sending a partial value will silently delete every rule you did not include.\n\nStructure:\n- `evaluation_logic`: MUST be `\"and\"`. All rules have to pass for a call to be marked successful. (Other values are not supported by the product currently.)\n- `rules`: List of rules. Use one rule per (metric, condition) — keep each rule simple, with a single condition inside.\n\nEach rule shape:\n```json\n{\n \"metric_id\": <metric id>,\n \"conditions\": {\n \"operator\": \"and\",\n \"conditions\": [\n {\"field\": <field>, \"op\": <op>, \"value\": <value>}\n ]\n }\n}\n```\n\nWhat `field`, `op`, and `value` to use depends on the metric type. The three supported cases:\n\n1. Numeric / score metrics (qualitative scores, numeric metrics, workflow adherence with a score, etc.):\n - `field`: `\"score\"`\n - `op`: one of `\"gt\"`, `\"gte\"`, `\"lt\"`, `\"lte\"`, `\"eq\"`\n - `value`: a number (qualitative scores are on a 0–5 scale)\n - Example (score must be at least 4): `{\"field\": \"score\", \"op\": \"gte\", \"value\": 4}`\n\n2. Boolean / binary metrics (eval_type `binary`, or `evaluate_expected_outcome`):\n - `field`: `\"score\"`\n - `op`: `\"eq\"` or `\"neq\"`\n - `value`: `true` for pass, `false` for fail\n - Example (must pass): `{\"field\": \"score\", \"op\": \"eq\", \"value\": true}`\n - Example (must fail): `{\"field\": \"score\", \"op\": \"eq\", \"value\": false}`\n - Legacy values `5` (pass) and `0` (fail) are still accepted for back-compat but new rules should use bool.\n\n3. Enum metrics (eval_type `enum`, or `observability_topics` / `observability_dropoff`):\n - `field`: `\"enum\"`\n - `op`: `\"eq\"`, `\"neq\"`, or `\"in\"`\n - `value`: a single string for `eq`/`neq`, or a list of strings for `in`. Must match one of the metric's defined `enum_values`.\n - Example: `{\"field\": \"enum\", \"op\": \"eq\", \"value\": \"resolved\"}`\n - Example (any of): `{\"field\": \"enum\", \"op\": \"in\", \"value\": [\"resolved\", \"partially_resolved\"]}`\n\nFull example:\n```json\n{\n \"evaluation_logic\": \"and\",\n \"rules\": [\n {\n \"metric_id\": 115164,\n \"conditions\": {\n \"operator\": \"and\",\n \"conditions\": [\n {\"op\": \"eq\", \"field\": \"score\", \"value\": true}\n ]\n }\n },\n {\n \"metric_id\": 5512,\n \"conditions\": {\n \"operator\": \"and\",\n \"conditions\": [\n {\"op\": \"gte\", \"field\": \"score\", \"value\": 4}\n ]\n }\n },\n {\n \"metric_id\": 8821,\n \"conditions\": {\n \"operator\": \"and\",\n \"conditions\": [\n {\"op\": \"in\", \"field\": \"enum\", \"value\": [\"resolved\", \"partially_resolved\"]}\n ]\n }\n }\n ]\n}\n```\n\nNotes:\n- `metric_id` must reference a metric belonging to this project (project-scoped or agent-scoped under this project); unknown ids are rejected.\n- Rules whose metric did not produce a value on a given call are skipped (neither pass nor fail) and do not affect the outcome.\n- Pass an empty object `{}` to clear the rubric.\n"
},
"timezone": {
"type": "string",
"description": "\nProject Timezone\n"
},
"vapi_api_key": {
"type": "string",
"writeOnly": true,
"description": "\nVAPI Private API Key. Used for all VAPI operations (calls, chat, and testing).\nExample: `\"vapi_api_key_123\"`\n"
},
"vapi_api_key_configured": {
"type": "string",
"readOnly": true
},
"vapi_public_key_configured": {
"type": "string",
"readOnly": true
},
"retell_api_key": {
"type": "string",
"writeOnly": true,
"description": "\nRetell API key\nExample: `\"retell_api_key_123\"`\n"
},
"retell_api_key_configured": {
"type": "string",
"readOnly": true
},
"syntflow_api_key": {
"type": "string",
"writeOnly": true,
"description": "\nSyntflow API key\nExample: `\"syntflow_api_key_123\"`\n"
},
"syntflow_api_key_configured": {
"type": "string",
"readOnly": true
},
"elevenlabs_api_key": {
"type": "string",
"writeOnly": true,
"description": "\nElevenLabs API key\nExample: `\"elevenlabs_api_key_123\"`\n"
},
"elevenlabs_api_key_configured": {
"type": "string",
"readOnly": true
},
"bland_api_key": {
"type": "string",
"writeOnly": true,
"description": "\nBland API key\nExample: `\"bland_api_key_123\"`\n"
},
"bland_api_key_configured": {
"type": "string",
"readOnly": true
},
"livekit_api_key": {
"type": "string",
"writeOnly": true,
"description": "\nLiveKit API key\nExample: `\"livekit_api_key_123\"`\n"
},
"livekit_api_key_configured": {
"type": "string",
"readOnly": true
},
"pipecat_api_key": {
"type": "string",
"writeOnly": true,
"description": "\nPipecat/Daily.co API key\nExample: `\"pipecat_api_key_123\"`\n"
},
"pipecat_api_key_configured": {
"type": "string",
"readOnly": true
},
"is_deleted": {
"type": "boolean"
},
"created_at": {
"type": "string",
"format": "date-time",
"readOnly": true
},
"updated_at": {
"type": "string",
"format": "date-time",
"readOnly": true
}
},
"required": [
"name"
],
"$defs": {
"MembershipInline": {
"type": "object",
"description": "",
"properties": {
"id": {
"type": "integer",
"readOnly": true
},
"user": {
"allOf": [
{
"$ref": "#/$defs/UserInline"
}
],
"readOnly": true
},
"role": {
"enum": [
"admin",
"member",
"view_only",
"internal_view",
"labs",
"labs_view_only",
"insights_view"
],
"type": "string",
"description": "* `admin` - Admin\n* `member` - Member\n* `view_only` - View Only\n* `internal_view` - Internal View Only\n* `labs` - Labs\n* `labs_view_only` - Labs View Only\n* `insights_view` - Insights View Only",
"x-spec-enum-id": "2068ae3fe31eed3a"
},
"is_email_notify_enabled": {
"type": "boolean"
},
"created_at": {
"type": "string",
"format": "date-time",
"readOnly": true
},
"updated_at": {
"type": "string",
"format": "date-time",
"readOnly": true
}
}
},
"OrganizationInline": {
"type": "object",
"description": "",
"properties": {
"id": {
"type": "integer",
"readOnly": true
},
"name": {
"type": "string",
"maxLength": 255
},
"members": {
"type": "array",
"items": {
"$ref": "#/$defs/MembershipInline"
},
"readOnly": true
},
"created_at": {
"type": "string",
"format": "date-time",
"readOnly": true
},
"updated_at": {
"type": "string",
"format": "date-time",
"readOnly": true
}
},
"required": [
"name"
]
},
"UserInline": {
"type": "object",
"description": "",
"properties": {
"id": {
"type": [
"integer",
"null"
],
"readOnly": true
},
"name": {
"type": "string",
"maxLength": 255
},
"email": {
"type": [
"string",
"null"
],
"format": "email",
"readOnly": true
}
},
"required": [
"name"
]
}
}
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/cekura-ai-project"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.