{"openapi":"3.1.0","info":{"title":"Braintrust (BYOK) API","version":"0.1.0","description":"Braintrust (BYOK) lets an AI assistant read your own Braintrust data through the Braintrust API with a key you supply (API key). Read-only: 11 tools (list_projects, get_project, list_experiments, get_experiment, summarize_experiment, list_datasets, list_prompts, list_functions, list_project_scores, fetch_project_logs, list_users). The BYOK key travels with each request, is used for that one call...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-braintrust.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-braintrust/docs"},"termsOfService":"https://connectorbay.com/byok-braintrust/terms"},"servers":[{"url":"https://byok-braintrust.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-braintrust/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_projects":{"post":{"operationId":"list_projects","summary":"List Braintrust projects, newest first, with id, name, description and creation time. Use for \"Which Braintrust projects","description":"List Braintrust projects, newest first, with id, name, description and creation time. Use for \"Which Braintrust projects do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of the project with this name.","title":"Project Name"},"org_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Organization name, needed only when your key can access several organizations.","title":"Org Name"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 100).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: the id of the last item of the previous page; returns the items after it.","title":"Starting After"}},"title":"list_projectsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_project":{"post":{"operationId":"get_project","summary":"Get one Braintrust project by ID. Use for \"Show the Braintrust project with a given ID\".","description":"Get one Braintrust project by ID. Use for \"Show the Braintrust project with a given ID\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Project ID as returned by list_projects (id).","maxLength":80,"title":"Project Id","type":"string"}},"required":["project_id"],"title":"get_projectArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_experiments":{"post":{"operationId":"list_experiments","summary":"List experiments (evaluation runs), newest first, with project, dataset, git commit info, tags and creation time. Use fo","description":"List experiments (evaluation runs), newest first, with project, dataset, git commit info, tags and creation time. Use for \"What are my latest Braintrust experiments\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of the project with this name.","title":"Project Name"},"project_id":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of the project with this ID (from list_projects).","title":"Project Id"},"experiment_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only experiments with this exact name.","title":"Experiment Name"},"org_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Organization name, needed only when your key can access several organizations.","title":"Org Name"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 100).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: the id of the last item of the previous page; returns the items after it.","title":"Starting After"}},"title":"list_experimentsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_experiment":{"post":{"operationId":"get_experiment","summary":"Get one experiment: name, project, dataset, repository info, tags and metadata. Use for \"Show the details of one Braintr","description":"Get one experiment: name, project, dataset, repository info, tags and metadata. Use for \"Show the details of one Braintrust experiment\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"experiment_id":{"description":"Experiment ID as returned by list_experiments (id).","maxLength":80,"title":"Experiment Id","type":"string"}},"required":["experiment_id"],"title":"get_experimentArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/summarize_experiment":{"post":{"operationId":"summarize_experiment","summary":"Summarize an experiment: average scores and metrics, optionally compared with another experiment, plus links to the proj","description":"Summarize an experiment: average scores and metrics, optionally compared with another experiment, plus links to the project and experiment. Use for \"How did my Braintrust experiment score\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"experiment_id":{"description":"Experiment ID as returned by list_experiments (id).","maxLength":80,"title":"Experiment Id","type":"string"},"summarize_scores":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":true,"description":"True to include the score summaries.","title":"Summarize Scores"},"comparison_experiment_id":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Experiment ID to compare against (default: the project's baseline).","title":"Comparison Experiment Id"}},"required":["experiment_id"],"title":"summarize_experimentArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_datasets":{"post":{"operationId":"list_datasets","summary":"List datasets, newest first, with project, description, tags and creation time. Use for \"Which Braintrust datasets do I ","description":"List datasets, newest first, with project, description, tags and creation time. Use for \"Which Braintrust datasets do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of the project with this name.","title":"Project Name"},"project_id":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of the project with this ID (from list_projects).","title":"Project Id"},"dataset_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only datasets with this exact name.","title":"Dataset Name"},"org_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Organization name, needed only when your key can access several organizations.","title":"Org Name"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 100).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: the id of the last item of the previous page; returns the items after it.","title":"Starting After"}},"title":"list_datasetsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_prompts":{"post":{"operationId":"list_prompts","summary":"List saved prompts, newest first, with slug, project, description, tags and function type. Filter by project or slug. Us","description":"List saved prompts, newest first, with slug, project, description, tags and function type. Filter by project or slug. Use for \"Which prompts are saved in my Braintrust project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of the project with this name.","title":"Project Name"},"project_id":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of the project with this ID (from list_projects).","title":"Project Id"},"slug":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only the prompt with this slug.","title":"Slug"},"prompt_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only prompts with this exact name.","title":"Prompt Name"},"org_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Organization name, needed only when your key can access several organizations.","title":"Org Name"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 100).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: the id of the last item of the previous page; returns the items after it.","title":"Starting After"}},"title":"list_promptsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_functions":{"post":{"operationId":"list_functions","summary":"List functions (tools, scorers, prompts-as-functions) with slug, project, type, description and creation time. Use for \"","description":"List functions (tools, scorers, prompts-as-functions) with slug, project, type, description and creation time. Use for \"Which scorers and tools exist in my Braintrust project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of the project with this name.","title":"Project Name"},"project_id":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of the project with this ID (from list_projects).","title":"Project Id"},"slug":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only the function with this slug.","title":"Slug"},"function_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only functions with this exact name.","title":"Function Name"},"org_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Organization name, needed only when your key can access several organizations.","title":"Org Name"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 100).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: the id of the last item of the previous page; returns the items after it.","title":"Starting After"}},"title":"list_functionsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_project_scores":{"post":{"operationId":"list_project_scores","summary":"List a project's score definitions (scorers and human-review scores) with type and creation time. Use for \"What scores a","description":"List a project's score definitions (scorers and human-review scores) with type and creation time. Use for \"What scores are configured in my Braintrust project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of the project with this name.","title":"Project Name"},"project_id":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of the project with this ID (from list_projects).","title":"Project Id"},"score_type":{"anyOf":[{"enum":["slider","categorical","weighted","minimum","maximum","online","free-form"],"type":"string"},{"type":"null"}],"default":null,"description":"Only scores of this type.","title":"Score Type"},"org_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Organization name, needed only when your key can access several organizations.","title":"Org Name"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 100).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: the id of the last item of the previous page; returns the items after it.","title":"Starting After"}},"title":"list_project_scoresArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/fetch_project_logs":{"post":{"operationId":"fetch_project_logs","summary":"Fetch recent production log events (traces) of a project with input, output, scores, tokens, errors and tags; page with ","description":"Fetch recent production log events (traces) of a project with input, output, scores, tokens, errors and tags; page with the returned cursor. Use for \"Show the latest logged LLM calls in my Braintrust project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Project ID as returned by list_projects (id).","maxLength":80,"title":"Project Id","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many events to return (1 to 100).","title":"Limit"},"max_root_span_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: cursor part from the previous answer.","title":"Max Root Span Id"},"max_xact_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: transaction cursor part from the previous answer.","title":"Max Xact Id"}},"required":["project_id"],"title":"fetch_project_logsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_users":{"post":{"operationId":"list_users","summary":"List members of your Braintrust organization with name, email and join date. Use for \"Who is in my Braintrust organizati","description":"List members of your Braintrust organization with name, email and join date. Use for \"Who is in my Braintrust organization\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"org_name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Organization name, needed only when your key can access several organizations.","title":"Org Name"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 100).","title":"Limit"},"starting_after":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":null,"description":"Paging: the id of the last item of the previous page; returns the items after it.","title":"Starting After"}},"title":"list_usersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}