openapi: 3.0.3 info: title: PostHog actions evaluations API version: 1.0.0 description: '' tags: - name: evaluations paths: /api/environments/{project_id}/evaluations/: get: operationId: evaluations_list parameters: - in: query name: enabled schema: type: boolean description: Filter by enabled status - in: query name: id__in schema: type: array items: type: string format: uuid description: Multiple values may be separated by commas. explode: false style: form - name: limit required: false in: query description: Number of results to return per page. schema: type: integer - name: offset required: false in: query description: The initial index from which to return the results. schema: type: integer - in: query name: order_by schema: type: array items: type: string enum: - -created_at - -name - -updated_at - created_at - name - updated_at description: 'Ordering * `created_at` - Created At * `-created_at` - Created At (descending) * `updated_at` - Updated At * `-updated_at` - Updated At (descending) * `name` - Name * `-name` - Name (descending)' explode: false style: form - $ref: '#/components/parameters/ProjectIdPath' - in: query name: search schema: type: string description: Search in name or description tags: - evaluations security: - PersonalAPIKeyAuth: - evaluation:read responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedEvaluationList' description: '' x-explicit-tags: - llm_analytics post: operationId: evaluations_create parameters: - $ref: '#/components/parameters/ProjectIdPath' tags: - evaluations requestBody: content: application/json: schema: $ref: '#/components/schemas/Evaluation' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Evaluation' multipart/form-data: schema: $ref: '#/components/schemas/Evaluation' required: true security: - PersonalAPIKeyAuth: - evaluation:write responses: '201': content: application/json: schema: $ref: '#/components/schemas/Evaluation' description: '' x-explicit-tags: - llm_analytics /api/environments/{project_id}/evaluations/{id}/: get: operationId: evaluations_retrieve parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this evaluation. required: true - $ref: '#/components/parameters/ProjectIdPath' tags: - evaluations security: - PersonalAPIKeyAuth: - evaluation:read responses: '200': content: application/json: schema: $ref: '#/components/schemas/Evaluation' description: '' x-explicit-tags: - llm_analytics put: operationId: evaluations_update parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this evaluation. required: true - $ref: '#/components/parameters/ProjectIdPath' tags: - evaluations requestBody: content: application/json: schema: $ref: '#/components/schemas/Evaluation' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/Evaluation' multipart/form-data: schema: $ref: '#/components/schemas/Evaluation' required: true security: - PersonalAPIKeyAuth: - evaluation:write responses: '200': content: application/json: schema: $ref: '#/components/schemas/Evaluation' description: '' x-explicit-tags: - llm_analytics patch: operationId: evaluations_partial_update parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this evaluation. required: true - $ref: '#/components/parameters/ProjectIdPath' tags: - evaluations requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedEvaluation' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedEvaluation' multipart/form-data: schema: $ref: '#/components/schemas/PatchedEvaluation' security: - PersonalAPIKeyAuth: - evaluation:write responses: '200': content: application/json: schema: $ref: '#/components/schemas/Evaluation' description: '' x-explicit-tags: - llm_analytics delete: operationId: evaluations_destroy description: Hard delete of this model is not allowed. Use a patch API call to set "deleted" to true parameters: - in: path name: id schema: type: string format: uuid description: A UUID string identifying this evaluation. required: true - $ref: '#/components/parameters/ProjectIdPath' tags: - evaluations security: - PersonalAPIKeyAuth: - evaluation:write responses: '405': description: No response body x-explicit-tags: - llm_analytics /api/environments/{project_id}/evaluations/test_hog/: post: operationId: evaluations_test_hog_create description: Test Hog evaluation code against sample events without saving. parameters: - $ref: '#/components/parameters/ProjectIdPath' tags: - evaluations requestBody: content: application/json: schema: $ref: '#/components/schemas/TestHogRequest' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/TestHogRequest' multipart/form-data: schema: $ref: '#/components/schemas/TestHogRequest' required: true security: - PersonalAPIKeyAuth: - evaluation:read responses: '200': content: application/json: schema: $ref: '#/components/schemas/TestHogResponse' description: '' x-explicit-tags: - llm_analytics components: schemas: TestHogResponse: type: object properties: results: type: array items: $ref: '#/components/schemas/TestHogResultItem' message: type: string description: Optional message, e.g. when no recent events were found. required: - results BlankEnum: enum: - '' TestHogRequest: type: object properties: source: type: string description: Hog source code to test. Must return a boolean (true = pass, false = fail) or null for N/A. minLength: 1 sample_count: type: integer maximum: 10 minimum: 1 default: 5 description: Number of recent $ai_generation events to test against (1–10, default 5). allows_na: type: boolean default: false description: Whether the evaluation can return N/A for non-applicable generations. conditions: type: array items: type: object additionalProperties: true description: Optional trigger conditions to filter which events are sampled. required: - source TestHogResultItem: type: object properties: event_uuid: type: string description: UUID of the $ai_generation event. trace_id: type: string nullable: true description: Trace ID if available. input_preview: type: string description: First 200 chars of the generation input. output_preview: type: string description: First 200 chars of the generation output. result: type: boolean nullable: true description: True = pass, False = fail, null = N/A or error. reasoning: type: string nullable: true description: Hog evaluation reasoning string, if any. error: type: string nullable: true description: Error message if the Hog code raised an exception. required: - error - event_uuid - input_preview - output_preview - reasoning - result LLMProviderEnum: enum: - openai - anthropic - gemini - openrouter - fireworks - azure_openai - together_ai type: string description: '* `openai` - Openai * `anthropic` - Anthropic * `gemini` - Gemini * `openrouter` - Openrouter * `fireworks` - Fireworks * `azure_openai` - Azure OpenAI * `together_ai` - Together AI' UserBasic: type: object properties: id: type: integer readOnly: true uuid: type: string format: uuid readOnly: true distinct_id: type: string nullable: true maxLength: 200 first_name: type: string maxLength: 150 last_name: type: string maxLength: 150 email: type: string format: email title: Email address maxLength: 254 is_email_verified: type: boolean nullable: true hedgehog_config: type: object additionalProperties: true nullable: true readOnly: true role_at_organization: nullable: true oneOf: - $ref: '#/components/schemas/RoleAtOrganizationEnum' - $ref: '#/components/schemas/BlankEnum' - $ref: '#/components/schemas/NullEnum' required: - email - hedgehog_config - id - uuid EvaluationTypeEnum: enum: - llm_judge - hog type: string description: '* `llm_judge` - LLM as a judge * `hog` - Hog' StatusReasonEnum: enum: - trial_limit_reached - model_not_allowed - provider_key_deleted type: string description: '* `trial_limit_reached` - Trial evaluation limit reached * `model_not_allowed` - Model not available on the trial plan * `provider_key_deleted` - Provider API key was deleted' Evaluation: type: object properties: id: type: string format: uuid readOnly: true name: type: string description: Name of the evaluation. maxLength: 400 description: type: string description: Optional description of what this evaluation checks. enabled: type: boolean description: Whether the evaluation runs automatically on new $ai_generation events. status: allOf: - $ref: '#/components/schemas/EvaluationStatusEnum' readOnly: true status_reason: readOnly: true nullable: true oneOf: - $ref: '#/components/schemas/StatusReasonEnum' - $ref: '#/components/schemas/NullEnum' evaluation_type: allOf: - $ref: '#/components/schemas/EvaluationTypeEnum' description: '''llm_judge'' uses an LLM to score outputs against a prompt; ''hog'' runs deterministic Hog code. * `llm_judge` - LLM as a judge * `hog` - Hog' evaluation_config: oneOf: - type: object title: LLM judge config required: - prompt properties: prompt: type: string description: Evaluation criteria for the LLM judge. Describe what makes a good vs bad response. minLength: 1 additionalProperties: false - type: object title: Hog config required: - source properties: source: type: string description: Hog source code. Must return true (pass), false (fail), or null for N/A. minLength: 1 additionalProperties: false description: 'Configuration dict. For ''llm_judge'': {prompt}. For ''hog'': {source}.' output_type: allOf: - $ref: '#/components/schemas/OutputTypeEnum' description: 'Output format. Currently only ''boolean'' is supported. * `boolean` - Boolean (Pass/Fail)' output_config: type: object properties: allows_na: type: boolean description: Whether the evaluation can return N/A for non-applicable generations. default: false additionalProperties: false description: 'Output config. For ''boolean'' output_type: {allows_na} to permit N/A results.' conditions: description: Optional trigger conditions to filter which events are evaluated. OR between condition sets, AND within each. model_configuration: allOf: - $ref: '#/components/schemas/ModelConfiguration' nullable: true created_at: type: string format: date-time readOnly: true updated_at: type: string format: date-time readOnly: true created_by: allOf: - $ref: '#/components/schemas/UserBasic' readOnly: true deleted: type: boolean description: Set to true to soft-delete the evaluation. required: - created_at - created_by - evaluation_type - id - name - output_type - status - status_reason - updated_at RoleAtOrganizationEnum: enum: - engineering - data - product - founder - leadership - marketing - sales - other type: string description: '* `engineering` - Engineering * `data` - Data * `product` - Product Management * `founder` - Founder * `leadership` - Leadership * `marketing` - Marketing * `sales` - Sales / Success * `other` - Other' EvaluationStatusEnum: enum: - active - paused - error type: string description: '* `active` - Active * `paused` - Paused * `error` - Error' ModelConfiguration: type: object description: Nested serializer for model configuration. properties: provider: $ref: '#/components/schemas/LLMProviderEnum' model: type: string maxLength: 100 provider_key_id: type: string format: uuid nullable: true provider_key_name: type: string nullable: true readOnly: true required: - model - provider - provider_key_name OutputTypeEnum: enum: - boolean type: string description: '* `boolean` - Boolean (Pass/Fail)' PatchedEvaluation: type: object properties: id: type: string format: uuid readOnly: true name: type: string description: Name of the evaluation. maxLength: 400 description: type: string description: Optional description of what this evaluation checks. enabled: type: boolean description: Whether the evaluation runs automatically on new $ai_generation events. status: allOf: - $ref: '#/components/schemas/EvaluationStatusEnum' readOnly: true status_reason: readOnly: true nullable: true oneOf: - $ref: '#/components/schemas/StatusReasonEnum' - $ref: '#/components/schemas/NullEnum' evaluation_type: allOf: - $ref: '#/components/schemas/EvaluationTypeEnum' description: '''llm_judge'' uses an LLM to score outputs against a prompt; ''hog'' runs deterministic Hog code. * `llm_judge` - LLM as a judge * `hog` - Hog' evaluation_config: oneOf: - type: object title: LLM judge config required: - prompt properties: prompt: type: string description: Evaluation criteria for the LLM judge. Describe what makes a good vs bad response. minLength: 1 additionalProperties: false - type: object title: Hog config required: - source properties: source: type: string description: Hog source code. Must return true (pass), false (fail), or null for N/A. minLength: 1 additionalProperties: false description: 'Configuration dict. For ''llm_judge'': {prompt}. For ''hog'': {source}.' output_type: allOf: - $ref: '#/components/schemas/OutputTypeEnum' description: 'Output format. Currently only ''boolean'' is supported. * `boolean` - Boolean (Pass/Fail)' output_config: type: object properties: allows_na: type: boolean description: Whether the evaluation can return N/A for non-applicable generations. default: false additionalProperties: false description: 'Output config. For ''boolean'' output_type: {allows_na} to permit N/A results.' conditions: description: Optional trigger conditions to filter which events are evaluated. OR between condition sets, AND within each. model_configuration: allOf: - $ref: '#/components/schemas/ModelConfiguration' nullable: true created_at: type: string format: date-time readOnly: true updated_at: type: string format: date-time readOnly: true created_by: allOf: - $ref: '#/components/schemas/UserBasic' readOnly: true deleted: type: boolean description: Set to true to soft-delete the evaluation. PaginatedEvaluationList: type: object required: - count - results properties: count: type: integer example: 123 next: type: string nullable: true format: uri example: http://api.example.org/accounts/?offset=400&limit=100 previous: type: string nullable: true format: uri example: http://api.example.org/accounts/?offset=200&limit=100 results: type: array items: $ref: '#/components/schemas/Evaluation' NullEnum: enum: - null parameters: ProjectIdPath: in: path name: project_id required: true schema: type: string description: Project ID of the project you're trying to access. To find the ID of the project, make a call to /api/projects/. securitySchemes: PersonalAPIKeyAuth: type: http scheme: bearer x-tagGroups: - name: All endpoints tags: - LLM Analytics - actions - activity_log - activity_logs - advanced_activity_logs - alerts - annotations - approval_policies - batch_exports - cdp - change_requests - code - code-invites - cohorts - comments - conversations - core - customer_analytics - customer_journeys - customer_profile_configs - dashboard_templates - dashboards - data_color_themes - data_modeling_jobs - data_warehouse - dataset_items - datasets - desktop_recordings - domains - early_access_feature - early_access_features - elements - endpoints - environments - error_tracking - evaluation_runs - evaluations - event_definitions - event_filter - event_schemas - events - experiment_holdouts - experiment_saved_metrics - experiments - exports - external_data_schemas - external_data_sources - feature_flags - file_system - file_system_shortcut - flag_value - groups - groups_types - health_issues - heatmap_screenshots - heatmaps - hog_flows - hog_function_templates - hog_functions - insight_variables - insights - integrations - invites - js-snippet - legal_documents - lineage - live_debugger_breakpoints - llm_analytics - llm_prompts - llm_skills - logs - managed_viewsets - max - max_tools - mcp_server_installations - mcp_servers - mcp_store - mcp_tools - members - notebooks - oauth_applications - object_media_previews - organizations - persisted_folder - persons - platform_features - plugin_configs - product_analytics - product_tours - project_secret_api_keys - projects - property_definitions - proxy_records - public_hog_function_templates - query - replay - reverse_proxy - role_external_references - roles - sandbox-environments - sandbox_environments - saved - schema_property_groups - sdk_doctor - session_group_summaries - session_recording_playlists - session_recordings - session_summaries - sessions - signals - subscriptions - surveys - taggers - task-automations - task-runs - task_automations - tasks - uploaded_media - user_home_settings - user_interviews - users - visual_review - warehouse_dag - warehouse_model_paths - warehouse_saved_queries - warehouse_saved_query_folders - warehouse_tables - warehouse_view_link - warehouse_view_links - web_analytics - web_experiments - web_vitals - welcome - workflows