Braintrust ProjectAutomations API
The ProjectAutomations API from Braintrust — 2 operation(s) for projectautomations.
The ProjectAutomations API from Braintrust — 2 operation(s) for projectautomations.
openapi: 3.1.1
info:
version: 1.0.0
title: Braintrust Acls ProjectAutomations API
description: 'API specification for the backend data server. The API is hosted globally at
https://api.braintrust.dev or in your own environment.
You can access the OpenAPI spec for this API at https://github.com/braintrustdata/braintrust-openapi.'
license:
name: Apache 2.0
servers:
- url: https://api.braintrust.dev
security:
- bearerAuth: []
- {}
tags:
- name: ProjectAutomations
paths:
/v1/project_automation:
post:
tags:
- ProjectAutomations
security:
- bearerAuth: []
- {}
operationId: postProjectAutomation
description: Create a new project_automation. If there is an existing project_automation with the same name as the one specified in the request, will return the existing project_automation unmodified
summary: Create project_automation
requestBody:
description: Any desired information about the new project_automation object
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/CreateProjectAutomation'
responses:
'200':
description: Returns the new project_automation object
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectAutomation'
'400':
description: The request was unacceptable, often due to missing a required parameter
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'401':
description: No valid API key provided
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'403':
description: The API key doesn’t have permissions to perform the request
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'429':
description: Too many requests hit the API too quickly. We recommend an exponential backoff of your requests
headers:
Retry-After:
schema:
type: string
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'500':
description: Something went wrong on Braintrust's end. (These are rare.)
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
put:
tags:
- ProjectAutomations
security:
- bearerAuth: []
- {}
operationId: putProjectAutomation
description: Create or replace project_automation. If there is an existing project_automation with the same name as the one specified in the request, will replace the existing project_automation with the provided fields
summary: Create or replace project_automation
requestBody:
description: Any desired information about the new project_automation object
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/CreateProjectAutomation'
responses:
'200':
description: Returns the new project_automation object
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectAutomation'
'400':
description: The request was unacceptable, often due to missing a required parameter
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'401':
description: No valid API key provided
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'403':
description: The API key doesn’t have permissions to perform the request
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'429':
description: Too many requests hit the API too quickly. We recommend an exponential backoff of your requests
headers:
Retry-After:
schema:
type: string
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'500':
description: Something went wrong on Braintrust's end. (These are rare.)
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
get:
operationId: getProjectAutomation
tags:
- ProjectAutomations
description: List out all project_automations. The project_automations are sorted by creation date, with the most recently-created project_automations coming first
summary: List project_automations
security:
- bearerAuth: []
- {}
parameters:
- $ref: '#/components/parameters/AppLimitParam'
- $ref: '#/components/parameters/StartingAfter'
- $ref: '#/components/parameters/EndingBefore'
- $ref: '#/components/parameters/Ids'
- $ref: '#/components/parameters/ProjectAutomationName'
- $ref: '#/components/parameters/OrgName'
responses:
'200':
description: Returns a list of project_automation objects
content:
application/json:
schema:
type: object
properties:
objects:
type: array
items:
$ref: '#/components/schemas/ProjectAutomation'
description: A list of project_automation objects
required:
- objects
additionalProperties: false
'400':
description: The request was unacceptable, often due to missing a required parameter
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'401':
description: No valid API key provided
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'403':
description: The API key doesn’t have permissions to perform the request
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'429':
description: Too many requests hit the API too quickly. We recommend an exponential backoff of your requests
headers:
Retry-After:
schema:
type: string
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'500':
description: Something went wrong on Braintrust's end. (These are rare.)
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
/v1/project_automation/{project_automation_id}:
get:
operationId: getProjectAutomationId
tags:
- ProjectAutomations
description: Get a project_automation object by its id
summary: Get project_automation
security:
- bearerAuth: []
- {}
parameters:
- $ref: '#/components/parameters/ProjectAutomationIdParam'
responses:
'200':
description: Returns the project_automation object
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectAutomation'
'400':
description: The request was unacceptable, often due to missing a required parameter
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'401':
description: No valid API key provided
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'403':
description: The API key doesn’t have permissions to perform the request
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'429':
description: Too many requests hit the API too quickly. We recommend an exponential backoff of your requests
headers:
Retry-After:
schema:
type: string
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'500':
description: Something went wrong on Braintrust's end. (These are rare.)
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
patch:
operationId: patchProjectAutomationId
tags:
- ProjectAutomations
description: Partially update a project_automation object. Specify the fields to update in the payload. Any object-type fields will be deep-merged with existing content. Currently we do not support removing fields or setting them to null.
summary: Partially update project_automation
security:
- bearerAuth: []
- {}
parameters:
- $ref: '#/components/parameters/ProjectAutomationIdParam'
requestBody:
description: Fields to update
required: false
content:
application/json:
schema:
$ref: '#/components/schemas/PatchProjectAutomation'
responses:
'200':
description: Returns the project_automation object
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectAutomation'
'400':
description: The request was unacceptable, often due to missing a required parameter
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'401':
description: No valid API key provided
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'403':
description: The API key doesn’t have permissions to perform the request
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'429':
description: Too many requests hit the API too quickly. We recommend an exponential backoff of your requests
headers:
Retry-After:
schema:
type: string
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'500':
description: Something went wrong on Braintrust's end. (These are rare.)
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
delete:
operationId: deleteProjectAutomationId
tags:
- ProjectAutomations
description: Delete a project_automation object by its id
summary: Delete project_automation
security:
- bearerAuth: []
- {}
parameters:
- $ref: '#/components/parameters/ProjectAutomationIdParam'
responses:
'200':
description: Returns the deleted project_automation object
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectAutomation'
'400':
description: The request was unacceptable, often due to missing a required parameter
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'401':
description: No valid API key provided
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'403':
description: The API key doesn’t have permissions to perform the request
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'429':
description: Too many requests hit the API too quickly. We recommend an exponential backoff of your requests
headers:
Retry-After:
schema:
type: string
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
'500':
description: Something went wrong on Braintrust's end. (These are rare.)
content:
text/plain:
schema:
type: string
application/json:
schema:
nullable: true
components:
schemas:
SpanScope:
type: object
properties:
type:
type: string
enum:
- span
required:
- type
description: Process individual spans
PatchProjectAutomation:
type: object
properties:
name:
type: string
nullable: true
description: Name of the project automation
description:
type: string
nullable: true
description: Textual description of the project automation
config:
oneOf:
- type: object
properties:
event_type:
type: string
enum:
- logs
description: The type of automation.
btql_filter:
type: string
description: BTQL filter to identify rows for the automation rule
interval_seconds:
type: number
minimum: 1
maximum: 2592000
description: Perform the triggered action at most once in this interval of seconds
action:
oneOf:
- type: object
properties:
type:
type: string
enum:
- webhook
description: The type of action to take
url:
type: string
description: The webhook URL to send the request to
required:
- type
- url
- type: object
properties:
type:
type: string
enum:
- slack
description: The type of action to take
workspace_id:
type: string
description: The Slack workspace ID to post to
channel:
type: string
description: The Slack channel ID to post to
message_template:
type: string
description: Custom message template for the alert
required:
- type
- workspace_id
- channel
description: The action to take when the automation rule is triggered
required:
- event_type
- btql_filter
- interval_seconds
- action
- type: object
properties:
event_type:
type: string
enum:
- btql_export
description: The type of automation.
export_definition:
oneOf:
- type: object
properties:
type:
type: string
enum:
- log_traces
required:
- type
- type: object
properties:
type:
type: string
enum:
- log_spans
required:
- type
- type: object
properties:
type:
type: string
enum:
- btql_query
btql_query:
type: string
description: The BTQL query to export
required:
- type
- btql_query
description: The definition of what to export
scope:
anyOf:
- $ref: '#/components/schemas/SpanScope'
- $ref: '#/components/schemas/TraceScope'
- $ref: '#/components/schemas/GroupScope'
- type: 'null'
description: Execution scope for export automation. Defaults to span-level execution.
export_path:
type: string
description: The path to export the results to. It should include the storage protocol and prefix, e.g. s3://bucket-name/path/to/export
format:
type: string
enum:
- jsonl
- parquet
description: The format to export the results in
interval_seconds:
type: number
minimum: 1
maximum: 2592000
description: Perform the triggered action at most once in this interval of seconds
credentials:
oneOf:
- type: object
properties:
type:
type: string
enum:
- aws_iam
role_arn:
type: string
description: The ARN of the IAM role to use
external_id:
type: string
description: The automation-specific external id component (auto-generated by default)
required:
- type
- role_arn
- external_id
- type: object
properties:
type:
type: string
enum:
- gcp_service_account
service_account_email:
type: string
description: The GCP service account email to impersonate
required:
- type
- service_account_email
batch_size:
type: number
nullable: true
description: The number of rows to export in each batch
required:
- event_type
- export_definition
- export_path
- format
- interval_seconds
- credentials
- type: object
properties:
event_type:
type: string
enum:
- retention
description: The type of automation.
object_type:
$ref: '#/components/schemas/RetentionObjectType'
retention_days:
type: number
minimum: 0
description: The number of days to retain the object
required:
- event_type
- object_type
- retention_days
- type: object
properties:
event_type:
type: string
enum:
- environment_update
description: The type of automation.
environment_filter:
type: array
items:
type: string
description: Optional list of environment slugs to filter by
action:
oneOf:
- type: object
properties:
type:
type: string
enum:
- webhook
description: The type of action to take
url:
type: string
description: The webhook URL to send the request to
required:
- type
- url
- type: object
properties:
type:
type: string
enum:
- slack
description: The type of action to take
workspace_id:
type: string
description: The Slack workspace ID to post to
channel:
type: string
description: The Slack channel ID to post to
message_template:
type: string
description: Custom message template for the alert
required:
- type
- workspace_id
- channel
description: The action to take when the automation rule is triggered
required:
- event_type
- action
- $ref: '#/components/schemas/TopicAutomationConfig'
- nullable: true
description: The configuration for the automation rule
TopicMapFunctionAutomation:
type: object
properties:
function:
allOf:
- $ref: '#/components/schemas/SavedFunctionId'
- anyOf:
- type: object
properties:
type:
type: string
enum:
- function
id:
type: string
version:
type: string
description: The version of the function
required:
- type
- id
title: function
- type: object
properties:
type:
type: string
enum:
- global
name:
type: string
function_type:
$ref: '#/components/schemas/FunctionTypeEnum'
required:
- type
- name
title: global
description: Topic map function
btql_filter:
type: string
nullable: true
description: Per-topic-map BTQL filter. For trace scope, a topic map runs when max(filter) over the trace is truthy. For span scope, it runs when the current span matches.
required:
- function
OrgName:
type: string
description: Filter search results to within a particular organization
TopicAutomationFacetModel:
type: string
nullable: true
enum:
- brain-facet-latest
- brain-facet-1
- brain-facet-2
- null
description: Optional facet model override for topic automation
GroupScope:
type: object
properties:
type:
type: string
enum:
- group
group_by:
type: string
description: Field path to group by, e.g. metadata.session_id
idle_seconds:
type: number
description: 'Optional: trigger after this many seconds of inactivity'
required:
- type
- group_by
description: Process spans/traces grouped by a field (e.g., session_id)
TraceScope:
type: object
properties:
type:
type: string
enum:
- trace
idle_seconds:
type: number
description: 'Consider trace complete after this many seconds of inactivity (default: 30)'
required:
- type
description: Process entire traces (all spans sharing the same root_span_id)
AppLimitParam:
type: integer
nullable: true
minimum: 0
description: Limit the number of objects to return
ProjectAutomation:
type: object
properties:
id:
type: string
format: uuid
description: Unique identifier for the project automation
project_id:
type: string
format: uuid
description: Unique identifier for the project that the project automation belongs under
user_id:
type: string
nullable: true
format: uuid
description: Identifies the user who created the project automation
created:
type: string
nullable: true
format: date-time
description: Date of project automation creation
name:
type: string
description: Name of the project automation
description:
type: string
nullable: true
description: Textual description of the project automation
config:
oneOf:
- type: object
properties:
event_type:
type: string
enum:
- logs
description: The type of automation.
btql_filter:
type: string
description: BTQL filter to identify rows for the automation rule
interval_seconds:
type: number
minimum: 1
maximum: 2592000
description: Perform the triggered action at most once in this interval of seconds
action:
oneOf:
- type: object
properties:
type:
type: string
enum:
- webhook
description: The type of action to take
url:
type: string
description: The webhook URL to send the request to
required:
- type
- url
- type: object
properties:
type:
type: string
enum:
- slack
description: The type of action to take
workspace_id:
type: string
description: The Slack workspace ID to post to
channel:
type: string
description: The Slack channel ID to post to
message_template:
type: string
description: Custom message template for the alert
required:
- type
- workspace_id
- channel
description: The action to take when the automation rule is triggered
required:
- event_type
- btql_filter
- interval_seconds
- action
- type: object
properties:
event_type:
type: string
enum:
- btql_export
description: The type of automation.
export_definition:
oneOf:
- type: object
properties:
type:
type: string
enum:
- log_traces
required:
- type
- type: object
properties:
type:
type: string
enum:
- log_spans
required:
- type
- type: object
properties:
type:
type: string
enum:
- btql_query
btql_query:
type: string
description: The BTQL query to export
required:
- type
- btql_query
description: The definition of what to export
scope:
anyOf:
- $ref: '#/components/schemas/SpanScope'
- $ref: '#/components/schemas/TraceScope'
- $ref: '#/components/schemas/GroupScope'
- type: 'null'
description: Execution scope for export automation. Defaults to span-level execution.
export_path:
type: string
description: The path to export the results to. It should include the storage protocol and prefix, e.g. s3://bucket-name/path/to/export
format:
type: string
enum:
- jsonl
- parquet
description: The format to export the results in
interval_seconds:
type: number
minimum: 1
maximum: 2592000
description: Perform the triggered action at most once in this interval of seconds
credentials:
oneOf:
- type: object
properties:
type:
type: string
enum:
- aws_iam
role_arn:
type: string
description: The ARN of the IAM role to use
external_id:
type: string
description: The automation-specific external id component (auto-generated by default)
required:
- type
- role_arn
- external_id
- type: object
properties:
type:
type: string
enum:
- gcp_service_account
service_account_email:
type: string
description: The GCP service account email to impersonate
required:
- type
- service_account_email
batch_size:
type: number
nullable: true
description: The number of rows to export in each batch
required:
- event_type
- export_definition
- export_path
- format
- interval_seconds
- credentials
- type: object
properties:
event_type:
type: string
enum:
- retention
# --- truncated at 32 KB (51 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/braintrust/refs/heads/main/openapi/braintrust-projectautomations-api-openapi.yml