---
title: "Create Custom Metrics"
method: POST
path: "/v1/create-custom-metrics"
tags: ["Custom Metrics"]
deprecated: true
---

# Create Custom Metrics

`POST /v1/create-custom-metrics`

> **Deprecated.**

Create multiple custom metrics synchronously using a single bulk insert.

## Headers

- `X-API-Key` string, required

## Request body

- CreateMetricsBulkRequest — Request model for creating multiple custom metrics
  - `metrics` CreateMetricRequest[], required — List of custom metrics to create
    - `bluejay_as_code_id` string, uuid, nullable — Stable code-addressable identifier
    - `agent_id` integer, nullable — ID of the agent this metric belongs to (deprecated, use agent_ids instead)
    - `agent_ids` integer[], nullable — List of agent IDs to associate this metric with
    - `name` string, required — Name of the custom metric
    - `prompt` string, nullable — LLM-judge system prompt (required for llm_judge; null for other types)
    - `summary` string, nullable — Short plain-English description of the metric (LLM-generated)
    - `metric_type` string — Specific metric kind (llm_judge, tool_call, audio_*, vocal_fry); legacy alias: type
    - `settings` object — Type-specific config (e.g. tool_call: {tool_names: [...]})
    - `eval_segment` 'agent' | 'user' | 'all' — Which side of the conversation is evaluated
    - `scope` 'observability' | 'simulations' | 'all' — Which pipeline runs this metric
    - `response_type` 'pass_fail' | 'yes_no' | 'qualitative' | 'quantitative' | 'json' | 'enum' | 'int' | 'float' | 'boolean' | 'tool_call', required — Enum representing the possible response types for custom metrics.
    - `min_value` number, nullable — Minimum value for quantitative metrics
    - `max_value` number, nullable — Maximum value for quantitative metrics
    - `category` string, nullable — Category for organizing metrics
    - `tags` string[], nullable — Tags for categorizing the metric
    - `scoring_guidance` string, nullable — Guidance on how to score this metric
    - `eval_modality` 'AUDIO' | 'TEXT' | 'AUTO' — Enum representing the evaluation route of a call.
    - `model` string, nullable — Model to use for text evaluation of the metric
    - `audio_model` string, nullable — Model to use for audio evaluation of the metric
    - `temperature` number, nullable — Temperature for evaluating the metric
    - `enum_options` string[], nullable — Options for enum metrics
    - `tool_names` string[], nullable — Expected tool names for tool_call metrics
    - `json_schema` object, nullable — JSON Schema describing the object the judge must return (required for json metrics)
    - `allow_not_applicable` boolean — Whether this metric allows 'not applicable' responses.
    - `template_id` string, uuid, nullable — Library template this metric was created from

## Response `200`

Successful Response

- CreateMetricsBulkResponse — Response model for bulk creating custom metrics
  - `metrics` MetricResponse[], required — List of created custom metrics
    - `id` string, required — Unique identifier for the custom metric
    - `bluejay_as_code_id` string, nullable — Stable code-addressable identifier (same as id for custom metrics)
    - `name` string, required — Name of the custom metric
    - `prompt` string, nullable — LLM-judge system prompt for this metric (null for non-judge types)
    - `description` string, nullable — Deprecated: same value as prompt
    - `summary` string, nullable — Short plain-English description of the metric (LLM-generated)
    - `metric_type` string — Specific metric kind
    - `eval_method` string — Evaluation category (llm_judge|statistical|ml_model|deterministic)
    - `settings` object — Type-specific config
    - `eval_segment` string — Which side of the conversation is evaluated (agent|user|all)
    - `scope` string — Which pipeline runs this metric (observability|simulations|all)
    - `response_type` 'pass_fail' | 'yes_no' | 'qualitative' | 'quantitative' | 'json' | 'enum' | 'int' | 'float' | 'boolean' | 'tool_call', required — Enum representing the possible response types for custom metrics.
    - `agent_ids` integer[] — List of agent IDs this metric belongs to
    - `min_value` number, nullable — Minimum value for quantitative metrics
    - `max_value` number, nullable — Maximum value for quantitative metrics
    - `category` string, nullable — Category for organizing metrics
    - `tags` string[], nullable — Tags for categorizing the metric
    - `scoring_guidance` string, nullable — Guidance on how to score this metric
    - `created_at` string, date-time, required — When this metric was created
    - `updated_at` string, date-time, nullable — When this metric was last updated
    - `updated_by` string, nullable — User who last updated this metric
    - `created_by` string, nullable — User who created this metric
    - `eval_modality` 'AUDIO' | 'TEXT' | 'AUTO' — Enum representing the evaluation route of a call.
    - `model` string, nullable — Model to use for text evaluation of the metric
    - `audio_model` string, nullable — Model to use for audio evaluation of the metric
    - `temperature` number, nullable — Temperature for evaluating the metric
    - `enum_options` string[], nullable — Options for enum metrics
    - `tool_names` string[], nullable — Deprecated: mirror of settings.tool_names for tool_call metrics
    - `json_schema` object, nullable — JSON Schema describing the object the judge must return (json metrics only)
    - `allow_not_applicable` boolean — Whether this metric allows 'not applicable' responses.
    - `eval_modality_auto_selected` boolean — Deprecated: always false (column removed).
    - `template_id` string, nullable — Library template this metric was created from

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/getbluejay/apis/bluejay-api.md) · [All operations](https://skmtc.net/getbluejay/apis/bluejay-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/getbluejay/bluejay-api/versions/f48cef80963f/schema)
