From 25514f9d6841a257d4c9a7b5666822d46f093f99 Mon Sep 17 00:00:00 2001 From: Everett Pompeii Date: Sun, 13 Oct 2024 21:16:54 -0400 Subject: [PATCH] Release v0.4.22 --- Cargo.lock | 52 +++++++++---------- Cargo.toml | 2 +- services/action/dist/index.js | 2 +- services/api/openapi.json | 2 +- services/cli/templates/output/install-cli.ps1 | 10 ++-- services/cli/templates/output/install-cli.sh | 14 ++--- services/console/package-lock.json | 4 +- services/console/package.json | 2 +- .../src/chunks/reference/en/changelog.mdx | 2 +- 9 files changed, 45 insertions(+), 45 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3e4d12904..cbd82cb61 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -845,7 +845,7 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "bencher_adapter" -version = "0.4.21" +version = "0.4.22" dependencies = [ "bencher_json", "criterion", @@ -863,7 +863,7 @@ dependencies = [ [[package]] name = "bencher_api" -version = "0.4.21" +version = "0.4.22" dependencies = [ "async-compression", "async-trait", @@ -916,7 +916,7 @@ dependencies = [ [[package]] name = "bencher_billing" -version = "0.4.21" +version = "0.4.22" dependencies = [ "async-stripe", "bencher_json", @@ -931,7 +931,7 @@ dependencies = [ [[package]] name = "bencher_bing_index" -version = "0.4.21" +version = "0.4.22" dependencies = [ "reqwest 0.11.27", "serde", @@ -942,7 +942,7 @@ dependencies = [ [[package]] name = "bencher_boundary" -version = "0.4.21" +version = "0.4.22" dependencies = [ "bencher_json", "bencher_logger", @@ -956,7 +956,7 @@ dependencies = [ [[package]] name = "bencher_cli" -version = "0.4.21" +version = "0.4.22" dependencies = [ "bencher_adapter", "bencher_client", @@ -984,7 +984,7 @@ dependencies = [ [[package]] name = "bencher_client" -version = "0.4.21" +version = "0.4.22" dependencies = [ "bencher_json", "bytes", @@ -1004,7 +1004,7 @@ dependencies = [ [[package]] name = "bencher_comment" -version = "0.4.21" +version = "0.4.22" dependencies = [ "bencher_json", "serde_json", @@ -1013,7 +1013,7 @@ dependencies = [ [[package]] name = "bencher_github" -version = "0.4.21" +version = "0.4.22" dependencies = [ "bencher_valid", "oauth2", @@ -1026,7 +1026,7 @@ dependencies = [ [[package]] name = "bencher_google_index" -version = "0.4.21" +version = "0.4.22" dependencies = [ "http 0.2.12", "reqwest 0.11.27", @@ -1040,7 +1040,7 @@ dependencies = [ [[package]] name = "bencher_json" -version = "0.4.21" +version = "0.4.22" dependencies = [ "bencher_valid", "chrono", @@ -1065,7 +1065,7 @@ dependencies = [ [[package]] name = "bencher_license" -version = "0.4.21" +version = "0.4.22" dependencies = [ "bencher_json", "chrono", @@ -1079,7 +1079,7 @@ dependencies = [ [[package]] name = "bencher_logger" -version = "0.4.21" +version = "0.4.22" dependencies = [ "slog", "slog-term", @@ -1087,7 +1087,7 @@ dependencies = [ [[package]] name = "bencher_plot" -version = "0.4.21" +version = "0.4.22" dependencies = [ "bencher_json", "chrono", @@ -1102,7 +1102,7 @@ dependencies = [ [[package]] name = "bencher_rank" -version = "0.4.21" +version = "0.4.22" dependencies = [ "diesel", "thiserror", @@ -1110,7 +1110,7 @@ dependencies = [ [[package]] name = "bencher_rbac" -version = "0.4.21" +version = "0.4.22" dependencies = [ "bencher_json", "literally", @@ -1121,7 +1121,7 @@ dependencies = [ [[package]] name = "bencher_token" -version = "0.4.21" +version = "0.4.22" dependencies = [ "bencher_json", "chrono", @@ -1134,7 +1134,7 @@ dependencies = [ [[package]] name = "bencher_valid" -version = "0.4.21" +version = "0.4.22" dependencies = [ "base64 0.22.1", "chrono", @@ -1164,7 +1164,7 @@ dependencies = [ [[package]] name = "bin_version" -version = "0.4.21" +version = "0.4.22" [[package]] name = "bit-set" @@ -2769,7 +2769,7 @@ dependencies = [ [[package]] name = "gen_installer" -version = "0.4.21" +version = "0.4.22" dependencies = [ "anyhow", "clap", @@ -2780,7 +2780,7 @@ dependencies = [ [[package]] name = "gen_notes" -version = "0.4.21" +version = "0.4.22" dependencies = [ "anyhow", "camino", @@ -2789,7 +2789,7 @@ dependencies = [ [[package]] name = "gen_pkg" -version = "0.4.21" +version = "0.4.22" dependencies = [ "anyhow", "bencher_cli", @@ -2800,7 +2800,7 @@ dependencies = [ [[package]] name = "gen_types" -version = "0.4.21" +version = "0.4.22" dependencies = [ "anyhow", "bencher_api", @@ -7228,7 +7228,7 @@ checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "test_api" -version = "0.4.21" +version = "0.4.22" dependencies = [ "anyhow", "assert_cmd", @@ -7241,7 +7241,7 @@ dependencies = [ [[package]] name = "test_netlify" -version = "0.4.21" +version = "0.4.22" dependencies = [ "anyhow", "bencher_json", @@ -8417,7 +8417,7 @@ checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" [[package]] name = "xtask" -version = "0.4.21" +version = "0.4.22" dependencies = [ "anyhow", "async-openai", diff --git a/Cargo.toml b/Cargo.toml index e1a1ac5d8..13b3b961a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,7 +11,7 @@ exclude = ["services/benchers"] resolver = "2" [workspace.package] -version = "0.4.21" +version = "0.4.22" authors = ["Everett Pompeii "] edition = "2021" diff --git a/services/action/dist/index.js b/services/action/dist/index.js index d68c35a55..b85711741 100644 --- a/services/action/dist/index.js +++ b/services/action/dist/index.js @@ -30797,7 +30797,7 @@ module.exports = parseParams /***/ ((module) => { "use strict"; -module.exports = JSON.parse('{"openapi":"3.0.3","info":{"title":"Bencher API","version":"0.4.21"},"paths":{"/":{"get":{"tags":["server"],"operationId":"server_root_get","responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"title":"Null","type":"string","enum":[null]}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["server","stats"],"operationId":"root_server_stats_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonServerStats"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"title":"Null","type":"string","enum":[null]}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/auth/accept":{"post":{"tags":["auth","organizations"],"operationId":"auth_accept_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAccept"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAuthAck"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/auth/confirm":{"post":{"tags":["auth"],"operationId":"auth_confirm_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonConfirm"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAuthUser"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/auth/github":{"post":{"tags":["auth"],"operationId":"auth_github_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonOAuth"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAuthUser"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/auth/login":{"post":{"tags":["auth"],"operationId":"auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonLogin"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAuthAck"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/auth/signup":{"post":{"tags":["auth"],"summary":"When a user signs up, a new personal organization is automatically created.","description":"Except when a user signs up with an invitation, then the user is just added to the inviting organization.","operationId":"auth_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonSignup"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAuthAck"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/checkout":{"post":{"tags":["checkout"],"operationId":"checkouts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewCheckout"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonCheckout"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/organizations":{"get":{"tags":["organizations"],"summary":"List organizations","description":"List all organizations where the user is a member. The user must have `view` permissions for each organization. By default, the organizations are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of organizations.","operationId":"organizations_get","parameters":[{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/OrganizationsSort"}},{"in":"query","name":"name","description":"Filter by organization name, exact match.","schema":{"$ref":"#/components/schemas/ResourceName"}},{"in":"query","name":"search","description":"Search by organization name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonOrganizations"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["organizations"],"summary":"Create an organization","description":"Create a new organization. The user must be authenticated to use this route. ➕ Bencher Plus: This route can be limited to admins on self-hosted instances.","operationId":"organization_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewOrganization"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonOrganization"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/organizations/{organization}":{"get":{"tags":["organizations"],"summary":"View an organization","description":"View an organization where the user is a member. The user must have `view` permissions for the organization.","operationId":"organization_get","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonOrganization"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["organizations"],"summary":"Delete an organization","description":"Delete an organization where the user is a member. The user must have `delete` permissions for the organization.","operationId":"organization_delete","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["organizations"],"summary":"Update an organization","description":"Update an organization where the user is a member. The user must have `edit` permissions for the organization. If updating the license, the user must have `manage` permissions for the organization.","operationId":"organization_patch","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateOrganization"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonOrganization"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/organizations/{organization}/allowed/{permission}":{"get":{"tags":["organizations","allowed"],"operationId":"org_allowed_get","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"permission","description":"The permission to check.","required":true,"schema":{"$ref":"#/components/schemas/OrganizationPermission"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAllowed"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/organizations/{organization}/members":{"get":{"tags":["organizations","members"],"summary":"List organization members","description":"List members for an organization. The user must have `view_role` permissions for the organization. By default, the members are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of members.","operationId":"org_members_get","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/OrgMembersSort"}},{"in":"query","name":"name","description":"Filter by user name, exact match.","schema":{"$ref":"#/components/schemas/UserName"}},{"in":"query","name":"search","description":"Search by user name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMembers"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["organizations","members"],"summary":"Invite a user to an organization","description":"Invite another user to become a member of an organization. The user must have `create_role` permissions for the organization. The invitee is sent an email with a link to accept the invitation, and they are not added to the organization until they accept the invitation.","operationId":"org_member_post","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewMember"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAuthAck"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/organizations/{organization}/members/{user}":{"get":{"tags":["organizations","members"],"summary":"View an organization member","description":"View a member of an organization. The user must have `view_role` permissions for the organization.","operationId":"org_member_get","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"user","description":"The slug or UUID for an organization member.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMember"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["organizations","members"],"summary":"Remove an organization member","description":"Remove a member member of an organization. The user must have `delete_role` permissions for the organization.","operationId":"org_member_delete","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"user","description":"The slug or UUID for an organization member.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["organizations","members"],"summary":"Update an organization member","description":"Update the role for a member of an organization. The user must have `edit_role` permissions for the organization.","operationId":"org_member_patch","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"user","description":"The slug or UUID for an organization member.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateMember"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMember"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/organizations/{organization}/plan":{"get":{"tags":["organizations","plan"],"operationId":"org_plan_get","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonPlan"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["organizations","plan"],"operationId":"org_plan_post","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewPlan"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonPlan"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["organizations","plan"],"operationId":"org_plan_delete","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"remote","schema":{"nullable":true,"type":"boolean"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/organizations/{organization}/projects":{"get":{"tags":["organizations","projects"],"summary":"List organization projects","description":"List projects for an organization. The user must have `view` permissions for the organization. By default, the projects are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of organization projects.","operationId":"org_projects_get","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/OrgProjectsSort"}},{"in":"query","name":"name","description":"Filter by project name, exact match.","schema":{"$ref":"#/components/schemas/ResourceName"}},{"in":"query","name":"search","description":"Search by project name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonProjects"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["organizations","projects"],"summary":"Create a project for an organization","description":"Create a new project for an organization. The user must have `create` permissions for the organization. The new project will have a `main` branch, a `localhost` testbed, `latency` and `throughput` measures, and a threshold for both measures. ➕ Bencher Plus: The project visibility must be `public` unless the organization has a valid Bencher Plus subscription.","operationId":"org_project_post","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewProject"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonProject"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/organizations/{organization}/usage":{"get":{"tags":["organizations","usage"],"summary":"View organization metrics usage","description":"View the metrics usage of an organization. The user must have `manage` permissions for the organization. ➕ Bencher Plus: This endpoint offers an estimate of metered usage and exact usage for licensed organizations, both on Bencher Cloud and Bencher Self-Hosted.","operationId":"org_usage_get","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUsage"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects":{"get":{"tags":["projects"],"summary":"List projects","description":"List all projects. If the user is not authenticated, then only public projects are returned. If the user is authenticated, then all public projects and any private project where the user has `view` permissions are returned. By default, the projects are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of projects.","operationId":"projects_get","parameters":[{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjectsSort"}},{"in":"query","name":"name","description":"Filter by project name, exact match.","schema":{"$ref":"#/components/schemas/ResourceName"}},{"in":"query","name":"search","description":"Search by project name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonProjects"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}":{"get":{"tags":["projects"],"summary":"View a project","description":"View a project. If the user is not authenticated, then only a public project is available. If the user is authenticated, then any public project and any private project where the user has `view` permissions is available.","operationId":"project_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonProject"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["projects"],"summary":"Delete a project","description":"Delete a project. The user must have `delete` permissions for the project.","operationId":"project_delete","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["projects"],"summary":"Update a project","description":"Update a project. The user must have `edit` permissions for the project.","operationId":"project_patch","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateProject"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonProject"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/alerts":{"get":{"tags":["projects","alerts"],"summary":"List alerts for a project","description":"List all alerts for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project. By default, the alerts are sorted by status (active then dismissed) and modification date time in reverse chronological order. The HTTP response header `X-Total-Count` contains the total number of alerts.","operationId":"proj_alerts_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjAlertsSort"}},{"in":"query","name":"archived","description":"If set to `true`, only returns archived alerts. If not set or set to `false`, only returns alerts with non-archived branches, testbeds, or measures.","schema":{"nullable":true,"type":"boolean"}},{"in":"query","name":"status","description":"Filter alerts by their status. If not set, returns all alerts.","schema":{"$ref":"#/components/schemas/AlertStatus"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAlerts"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/alerts/{alert}":{"get":{"tags":["projects","alerts"],"summary":"View an alert","description":"View an alert for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_alert_get","parameters":[{"in":"path","name":"alert","description":"The UUID for an alert.","required":true,"schema":{"$ref":"#/components/schemas/AlertUuid"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAlert"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["projects","alerts"],"summary":"Update an alert","description":"Update an alert for a project. The user must have `edit` permissions for the project. Use this endpoint to dismiss an alert.","operationId":"proj_alert_patch","parameters":[{"in":"path","name":"alert","description":"The UUID for an alert.","required":true,"schema":{"$ref":"#/components/schemas/AlertUuid"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateAlert"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAlert"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/allowed/{permission}":{"get":{"tags":["projects","allowed"],"operationId":"proj_allowed_get","parameters":[{"in":"path","name":"permission","description":"The permission to check.","required":true,"schema":{"$ref":"#/components/schemas/ProjectPermission"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAllowed"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/benchmarks":{"get":{"tags":["projects","benchmarks"],"summary":"List benchmarks for a project","description":"List all benchmarks for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project. By default, the benchmarks are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of benchmarks.","operationId":"proj_benchmarks_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjBenchmarksSort"}},{"in":"query","name":"archived","description":"If set to `true`, only returns archived benchmarks. If not set or set to `false`, only returns non-archived benchmarks.","schema":{"nullable":true,"type":"boolean"}},{"in":"query","name":"name","description":"Filter by benchmark name, exact match.","schema":{"$ref":"#/components/schemas/BenchmarkName"}},{"in":"query","name":"search","description":"Search by benchmark name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBenchmarks"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["projects","benchmarks"],"summary":"Create a benchmark","description":"Create a benchmark for a project. The user must have `create` permissions for the project.","operationId":"proj_benchmark_post","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewBenchmark"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBenchmark"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/benchmarks/{benchmark}":{"get":{"tags":["projects","benchmarks"],"summary":"View a benchmark","description":"View a benchmark for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_benchmark_get","parameters":[{"in":"path","name":"benchmark","description":"The slug or UUID for a benchmark.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBenchmark"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["projects","benchmarks"],"summary":"Delete a benchmark","description":"Delete a benchmark for a project. The user must have `delete` permissions for the project. All reports that use this benchmark must be deleted first!","operationId":"proj_benchmark_delete","parameters":[{"in":"path","name":"benchmark","description":"The slug or UUID for a benchmark.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["projects","benchmarks"],"summary":"Update a benchmark","description":"Update a benchmark for a project. The user must have `edit` permissions for the project.","operationId":"proj_benchmark_patch","parameters":[{"in":"path","name":"benchmark","description":"The slug or UUID for a benchmark.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateBenchmark"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBenchmark"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/branches":{"get":{"tags":["projects","branches"],"summary":"List branches for a project","description":"List all branches for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project. By default, the branches are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of branches.","operationId":"proj_branches_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjBranchesSort"}},{"in":"query","name":"archived","description":"If set to `true`, only returns archived branches, if set to `true`. If not set or set to `false`, only returns non-archived branches.","schema":{"nullable":true,"type":"boolean"}},{"in":"query","name":"name","description":"Filter by branch name, exact match.","schema":{"$ref":"#/components/schemas/BranchName"}},{"in":"query","name":"search","description":"Search by branch name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBranches"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["projects","branches"],"summary":"Create a branch","description":"Create a branch for a project. The user must have `create` permissions for the project.","operationId":"proj_branch_post","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewBranch"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBranch"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/branches/{branch}":{"get":{"tags":["projects","branches"],"summary":"View a branch","description":"View a branch for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_branch_get","parameters":[{"in":"path","name":"branch","description":"The slug or UUID for a branch.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"head","description":"View the branch with the specified head UUID. This can be used to view a branch with a historical head that has since been replaced by a new head. If not specified, then the current head is used.","schema":{"$ref":"#/components/schemas/HeadUuid"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBranch"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["projects","branches"],"summary":"Delete a branch","description":"Delete a branch for a project. The user must have `delete` permissions for the project. All reports and thresholds that use this branch must be deleted first!","operationId":"proj_branch_delete","parameters":[{"in":"path","name":"branch","description":"The slug or UUID for a branch.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["projects","branches"],"summary":"Update a branch","description":"Update a branch for a project. The user must have `edit` permissions for the project.","operationId":"proj_branch_patch","parameters":[{"in":"path","name":"branch","description":"The slug or UUID for a branch.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateBranch"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBranch"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/measures":{"get":{"tags":["projects","measures"],"summary":"List measures for a project","description":"List all measures for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project. By default, the measures are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of measures.","operationId":"proj_measures_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjMeasuresSort"}},{"in":"query","name":"archived","description":"If set to `true`, only returns archived measures if set to `true`. If not set or set to `false`, only returns non-archived measures.","schema":{"nullable":true,"type":"boolean"}},{"in":"query","name":"name","description":"Filter by measure name, exact match.","schema":{"$ref":"#/components/schemas/ResourceName"}},{"in":"query","name":"search","description":"Search by measure name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMeasures"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["projects","measures"],"summary":"Create a measure","description":"Create a measure for a project. The user must have `create` permissions for the project.","operationId":"proj_measure_post","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewMeasure"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMeasure"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/measures/{measure}":{"get":{"tags":["projects","measures"],"summary":"View a measure","description":"View a measure for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_measure_get","parameters":[{"in":"path","name":"measure","description":"The slug or UUID for a measure.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMeasure"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["projects","measures"],"summary":"Delete a measure","description":"Delete a measure for a project. The user must have `delete` permissions for the project. All reports and thresholds that use this measure must be deleted first!","operationId":"proj_measure_delete","parameters":[{"in":"path","name":"measure","description":"The slug or UUID for a measure.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["projects","measures"],"summary":"Update a measure","description":"Update a measure for a project. The user must have `edit` permissions for the project.","operationId":"proj_measure_patch","parameters":[{"in":"path","name":"measure","description":"The slug or UUID for a measure.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateMeasure"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMeasure"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/metrics/{metric}":{"get":{"tags":["projects","metrics"],"summary":"View a metric","description":"View a metric for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_metric_get","parameters":[{"in":"path","name":"metric","description":"The UUID for a metric.","required":true,"schema":{"$ref":"#/components/schemas/MetricUuid"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonOneMetric"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/perf":{"get":{"tags":["projects","perf"],"summary":"Query project performance metrics","description":"Query the performance metrics for a project. The query results are every permutation of each branch, testbed, benchmark, and measure. There is a limit of 255 permutations for a single request. Therefore, only the first 255 permutations are returned. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_perf_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"benchmarks","description":"A comma separated list of benchmark UUIDs to query.","required":true,"schema":{"type":"string"}},{"in":"query","name":"branches","description":"A comma separated list of branch UUIDs to query.","required":true,"schema":{"type":"string"}},{"in":"query","name":"end_time","description":"Search for metrics before the given date time in milliseconds.","schema":{"$ref":"#/components/schemas/DateTimeMillis"}},{"in":"query","name":"heads","description":"An optional comma separated list of branch head UUIDs. To not specify a particular branch head leave an empty entry in the list.","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"measures","description":"A comma separated list of measure UUIDs to query.","required":true,"schema":{"type":"string"}},{"in":"query","name":"start_time","description":"Search for metrics after the given date time in milliseconds.","schema":{"$ref":"#/components/schemas/DateTimeMillis"}},{"in":"query","name":"testbeds","description":"A comma separated list of testbed UUIDs to query.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonPerf"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/perf/img":{"get":{"tags":["projects","perf"],"summary":"Generate a dynamic image of project performance metrics","description":"Generate a dynamic image of performance metrics for a project. The query results are every permutation of each branch, testbed, benchmark, and measure. There is a limit of 8 permutations for a single image. Therefore, only the first 8 permutations are plotted. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_perf_img_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"benchmarks","description":"A comma separated list of benchmark UUIDs to query.","required":true,"schema":{"type":"string"}},{"in":"query","name":"branches","description":"A comma separated list of branch UUIDs to query.","required":true,"schema":{"type":"string"}},{"in":"query","name":"end_time","description":"Search for metrics before the given date time in milliseconds.","schema":{"$ref":"#/components/schemas/DateTimeMillis"}},{"in":"query","name":"heads","description":"An optional comma separated list of branch head UUIDs. To not specify a particular branch head leave an empty entry in the list.","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"measures","description":"A comma separated list of measure UUIDs to query.","required":true,"schema":{"type":"string"}},{"in":"query","name":"start_time","description":"Search for metrics after the given date time in milliseconds.","schema":{"$ref":"#/components/schemas/DateTimeMillis"}},{"in":"query","name":"testbeds","description":"A comma separated list of testbed UUIDs to query.","required":true,"schema":{"type":"string"}},{"in":"query","name":"title","description":"The title for the perf plot. If not provided, the project name will be used.","schema":{"nullable":true,"type":"string"}}],"responses":{"default":{"description":"","content":{"*/*":{"schema":{}}}}}}},"/v0/projects/{project}/plots":{"get":{"tags":["projects","plots"],"summary":"List plots for a project","description":"List all plots for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project. By default, the plots are sorted in their index order. The HTTP response header `X-Total-Count` contains the total number of plots.","operationId":"proj_plots_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjPlotsSort"}},{"in":"query","name":"search","description":"Search by plot title or UUID.","schema":{"$ref":"#/components/schemas/Search"}},{"in":"query","name":"title","description":"Filter by plot title, exact match.","schema":{"$ref":"#/components/schemas/ResourceName"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonPlots"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["projects","plots"],"summary":"Create a plot","description":"Create a plot for a project. The user must have `create` permissions for the project. A project can have a maximum of 64 plots at a time.","operationId":"proj_plot_post","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewPlot"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonPlot"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/plots/{plot}":{"get":{"tags":["projects","plots"],"summary":"View a plot","description":"View a plot for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_plot_get","parameters":[{"in":"path","name":"plot","description":"The UUID for a plot.","required":true,"schema":{"$ref":"#/components/schemas/PlotUuid"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonPlot"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["projects","plots"],"summary":"Delete a plot","description":"Delete a plot for a project. The user must have `delete` permissions for the project.","operationId":"proj_plot_delete","parameters":[{"in":"path","name":"plot","description":"The UUID for a plot.","required":true,"schema":{"$ref":"#/components/schemas/PlotUuid"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["projects","plots"],"summary":"Update a plot","description":"Update a plot for a project. The user must have `edit` permissions for the project.","operationId":"proj_plot_patch","parameters":[{"in":"path","name":"plot","description":"The UUID for a plot.","required":true,"schema":{"$ref":"#/components/schemas/PlotUuid"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdatePlot"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonPlot"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/reports":{"get":{"tags":["projects","reports"],"summary":"List reports for a project","description":"List all reports for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project. By default, the reports are sorted by date time in reverse chronological order. The HTTP response header `X-Total-Count` contains the total number of reports.","operationId":"proj_reports_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjReportsSort"}},{"in":"query","name":"archived","description":"If set to `true`, only return reports with an archived branch or testbed. If not set or set to `false`, only returns reports with non-archived branches and testbeds.","schema":{"nullable":true,"type":"boolean"}},{"in":"query","name":"branch","description":"Filter by branch UUID, slug, or name exact match.","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"end_time","description":"Filter for reports before the given date time in milliseconds.","schema":{"$ref":"#/components/schemas/DateTimeMillis"}},{"in":"query","name":"start_time","description":"Filter for reports after the given date time in milliseconds.","schema":{"$ref":"#/components/schemas/DateTimeMillis"}},{"in":"query","name":"testbed","description":"Filter by testbed UUID, slug, or name exact match.","schema":{"nullable":true,"type":"string"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonReports"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["projects","reports"],"summary":"Create a report","description":"Create a report for a project. The user must have `create` permissions for the project. If using the Bencher CLI, it is recommended to use the `bencher run` subcommand instead of trying to create a report manually.","operationId":"proj_report_post","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewReport"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonReport"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/reports/{report}":{"get":{"tags":["projects","reports"],"summary":"View a report","description":"View a report for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_report_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"report","description":"The UUID for a report.","required":true,"schema":{"$ref":"#/components/schemas/ReportUuid"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonReport"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["projects","reports"],"summary":"Delete a report","description":"Delete a report for a project. The user must have `delete` permissions for the project. If there are no more reports for a branch version, then that version will be deleted. All later branch versions will have their version numbers decremented.","operationId":"proj_report_delete","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"report","description":"The UUID for a report.","required":true,"schema":{"$ref":"#/components/schemas/ReportUuid"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/testbeds":{"get":{"tags":["projects","testbeds"],"summary":"List testbeds for a project","description":"List all testbeds for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project. By default, the testbeds are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of testbeds.","operationId":"proj_testbeds_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjTestbedsSort"}},{"in":"query","name":"archived","description":"If set to `true`, only returns archived testbeds. If not set or set to `false`, only returns non-archived testbeds.","schema":{"nullable":true,"type":"boolean"}},{"in":"query","name":"name","description":"Filter by testbed name, exact match.","schema":{"$ref":"#/components/schemas/ResourceName"}},{"in":"query","name":"search","description":"Search by testbed name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonTestbeds"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["projects","testbeds"],"summary":"Create a testbed","description":"Create a testbed for a project. The user must have `create` permissions for the project.","operationId":"proj_testbed_post","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewTestbed"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonTestbed"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/testbeds/{testbed}":{"get":{"tags":["projects","testbeds"],"summary":"View a testbed","description":"View a testbed for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_testbed_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"testbed","description":"The slug or UUID for a testbed.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonTestbed"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["projects","testbeds"],"summary":"Delete a testbed","description":"Delete a testbed for a project. The user must have `delete` permissions for the project. All reports and thresholds that use this testbed must be deleted first!","operationId":"proj_testbed_delete","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"testbed","description":"The slug or UUID for a testbed.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["projects","testbeds"],"summary":"Update a testbed","description":"Update a testbed for a project. The user must have `edit` permissions for the project.","operationId":"proj_testbed_patch","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"testbed","description":"The slug or UUID for a testbed.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateTestbed"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonTestbed"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/thresholds":{"get":{"tags":["projects","thresholds"],"summary":"List thresholds for a project","description":"List all thresholds for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project. By default, the thresholds are sorted by creation date time in chronological order. The HTTP response header `X-Total-Count` contains the total number of thresholds.","operationId":"proj_thresholds_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjThresholdsSort"}},{"in":"query","name":"archived","description":"If set to `true`, only return thresholds with an archived branch, testbed, or measure. If not set or set to `false`, only returns thresholds with non-archived branches, testbeds, and measures.","schema":{"nullable":true,"type":"boolean"}},{"in":"query","name":"branch","description":"Filter by branch name, exact match.","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"measure","description":"Filter by measure name, exact match.","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"testbed","description":"Filter by testbed name, exact match.","schema":{"nullable":true,"type":"string"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonThresholds"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["projects","thresholds"],"summary":"Create a threshold","description":"Create a threshold for a project. The user must have `create` permissions for the project. There can only be one threshold for any unique combination of: branch, testbed, and measure.","operationId":"proj_threshold_post","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewThreshold"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonThreshold"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/thresholds/{threshold}":{"get":{"tags":["projects","thresholds"],"summary":"View a threshold","description":"View a threshold for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_threshold_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"threshold","description":"The UUID for a threshold.","required":true,"schema":{"$ref":"#/components/schemas/ThresholdUuid"}},{"in":"query","name":"model","description":"View the threshold with the specified model UUID. This can be used to view a threshold with a historical model that has since been replaced by a new model. If not specified, then the current model is used.","schema":{"$ref":"#/components/schemas/ModelUuid"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonThreshold"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"put":{"tags":["projects","thresholds"],"summary":"Update a threshold","description":"Update a threshold for a project. The user must have `edit` permissions for the project. The new model will be added to the threshold and used going forward. The old model will be replaced but still show up in the report history and alerts created when it was active.","operationId":"proj_threshold_put","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"threshold","description":"The UUID for a threshold.","required":true,"schema":{"$ref":"#/components/schemas/ThresholdUuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateThreshold"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonThreshold"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["projects","thresholds"],"summary":"Delete a threshold","description":"Delete a threshold for a project. The user must have `delete` permissions for the project. A thresholds must be deleted before its branch, testbed, or measure can be deleted.","operationId":"proj_threshold_delete","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"threshold","description":"The UUID for a threshold.","required":true,"schema":{"$ref":"#/components/schemas/ThresholdUuid"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/server/backup":{"post":{"tags":["server"],"summary":"Backup server","description":"Backup the API server database to blob storage. The user must be an admin on the server to use this route.","operationId":"server_backup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBackup"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBackupCreated"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/server/config":{"get":{"tags":["server"],"summary":"View server configuration","description":"View the API server configuration. The user must be an admin on the server to use this route.","operationId":"server_config_get","responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonConfig"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"put":{"tags":["server"],"summary":"Update server configuration","description":"Update the API server configuration. The user must be an admin on the server to use this route. Updating the configuration will cause the server to restart.","operationId":"server_config_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateConfig"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonConfig"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/server/config/console":{"get":{"tags":["server"],"summary":"View console configuration","description":"View the Bencher Console configuration managed by the API server. This is a public route and does not require authentication.","operationId":"server_config_console_get","responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonConsole"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/server/restart":{"post":{"tags":["server"],"summary":"Restart server","description":"Restart the API server. The user must be an admin on the server to use this route.","operationId":"server_restart_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRestart"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"title":"Null","type":"string","enum":[null]}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/server/spec":{"get":{"tags":["server"],"summary":"View server OpenAPI specification","description":"View the API server OpenAPI specification. The OpenAPI specification can be used to generate API client code.","operationId":"server_spec_get","responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonSpec"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/server/stats":{"get":{"tags":["server","stats"],"summary":"View server stats","description":"➕ Bencher Plus: View the API server stats. The user must be an admin on the server to use this route.","operationId":"server_stats_get","responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonServerStats"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["server","stats"],"operationId":"server_stats_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonServerStats"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"title":"Null","type":"string","enum":[null]}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/server/version":{"get":{"tags":["server"],"summary":"View server version","description":"View the API server version. This is used to verify that the CLI and API server are compatible. It can also be used as a simple endpoint to verify that the server is running.","operationId":"server_version_get","responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonApiVersion"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/users":{"get":{"tags":["users"],"summary":"List users","description":"List all users. The user must be an admin on the server to use this route. The HTTP response header `X-Total-Count` contains the total number of users.","operationId":"users_get","parameters":[{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/UsersSort"}},{"in":"query","name":"name","description":"Filter by user name, exact match.","schema":{"$ref":"#/components/schemas/UserName"}},{"in":"query","name":"search","description":"Search by user name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUsers"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/users/{user}":{"get":{"tags":["users"],"summary":"View a user","description":"View a user. Only the authenticated user themselves and server admins have access to this endpoint. To view users within your organization, use the organization members endpoints.","operationId":"user_get","parameters":[{"in":"path","name":"user","description":"The slug or UUID for a user.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUser"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["users"],"summary":"Update a user","description":"Update a user. Only the authenticated user themselves and server admins have access to this endpoint. Some fields can only be updated by an admin. To manage users within your organization, use the organization members endpoints.","operationId":"user_patch","parameters":[{"in":"path","name":"user","description":"The slug or UUID for a user.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateUser"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUser"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/users/{user}/tokens":{"get":{"tags":["users","tokens"],"summary":"List tokens for a user","description":"List all API tokens for a user. Only the authenticated user themselves and server admins have access to this endpoint. By default, the tokens are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of tokens.","operationId":"user_tokens_get","parameters":[{"in":"path","name":"user","description":"The slug or UUID for a user.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/UserTokensSort"}},{"in":"query","name":"name","description":"Filter by token name, exact match.","schema":{"$ref":"#/components/schemas/ResourceName"}},{"in":"query","name":"search","description":"Search by token name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonTokens"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["users","tokens"],"summary":"Create a token","description":"Create an API token for a user. Only the authenticated user themselves and server admins have access to this endpoint.","operationId":"user_token_post","parameters":[{"in":"path","name":"user","description":"The slug or UUID for a user.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewToken"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonToken"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/users/{user}/tokens/{token}":{"get":{"tags":["users","tokens"],"summary":"View a token","description":"View an API token for a user. Only the authenticated user themselves and server admins have access to this endpoint.","operationId":"user_token_get","parameters":[{"in":"path","name":"token","description":"The UUID for a token.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"path","name":"user","description":"The slug or UUID for a user.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonToken"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["users","tokens"],"summary":"Update a token","description":"Update an API token for a user. Only the authenticated user themselves and server admins have access to this endpoint.","operationId":"user_token_patch","parameters":[{"in":"path","name":"token","description":"The UUID for a token.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"path","name":"user","description":"The slug or UUID for a user.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateToken"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonToken"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}}},"components":{"schemas":{"Adapter":{"type":"string","enum":["magic","json","rust","rust_bench","rust_criterion","rust_iai","rust_iai_callgrind","cpp","cpp_google","cpp_catch2","go","go_bench","java","java_jmh","c_sharp","c_sharp_dot_net","js","js_benchmark","js_time","python","python_asv","python_pytest","ruby","ruby_benchmark","shell","shell_hyperfine"]},"AlertStatus":{"oneOf":[{"description":"The alert is active.","type":"string","enum":["active"]},{"description":"The alert has been dismissed by a user.","type":"string","enum":["dismissed"]},{"description":"The alert has been silenced by the system.","type":"string","enum":["silenced"]}]},"AlertUuid":{"type":"string","format":"uuid"},"BenchmarkName":{"type":"string"},"BenchmarkUuid":{"type":"string","format":"uuid"},"BigInt":{"type":"integer","format":"uint64","minimum":0},"Boundary":{"type":"number","format":"double"},"BoundaryLimit":{"type":"string","enum":["lower","upper"]},"BranchName":{"type":"string"},"BranchUuid":{"type":"string","format":"uuid"},"CardBrand":{"type":"string","enum":["amex","diners","discover","jcb","mastercard","unionpay","visa","unknown"]},"DataStore":{"oneOf":[{"type":"object","properties":{"access_key_id":{"type":"string"},"access_point":{"type":"string"},"secret_access_key":{"$ref":"#/components/schemas/Secret"},"service":{"type":"string","enum":["aws_s3"]}},"required":["access_key_id","access_point","secret_access_key","service"]}]},"DateTime":{"type":"string","format":"date-time"},"Email":{"type":"string"},"Entitlements":{"type":"integer","format":"uint32","minimum":0},"Error":{"description":"Error information from a response.","type":"object","properties":{"error_code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"required":["message","request_id"]},"ExpirationMonth":{"type":"integer","format":"int32"},"ExpirationYear":{"type":"integer","format":"int32"},"GitHash":{"type":"string"},"HeadUuid":{"type":"string","format":"uuid"},"IfExists":{"type":"string","enum":["fail","truncate","append"]},"Index":{"type":"integer","format":"uint8","minimum":0},"Iteration":{"type":"integer","format":"uint32","minimum":0},"JsonAccept":{"type":"object","properties":{"invite":{"$ref":"#/components/schemas/Jwt"}},"required":["invite"]},"JsonAlert":{"type":"object","properties":{"benchmark":{"$ref":"#/components/schemas/JsonBenchmark"},"boundary":{"$ref":"#/components/schemas/JsonBoundary"},"created":{"$ref":"#/components/schemas/DateTime"},"iteration":{"$ref":"#/components/schemas/Iteration"},"limit":{"$ref":"#/components/schemas/BoundaryLimit"},"metric":{"$ref":"#/components/schemas/JsonMetric"},"modified":{"$ref":"#/components/schemas/DateTime"},"report":{"$ref":"#/components/schemas/ReportUuid"},"status":{"$ref":"#/components/schemas/AlertStatus"},"threshold":{"$ref":"#/components/schemas/JsonThreshold"},"uuid":{"$ref":"#/components/schemas/AlertUuid"}},"required":["benchmark","boundary","created","iteration","limit","metric","modified","report","status","threshold","uuid"]},"JsonAlerts":{"type":"array","items":{"$ref":"#/components/schemas/JsonAlert"}},"JsonAllowed":{"type":"object","properties":{"allowed":{"type":"boolean"}},"required":["allowed"]},"JsonApiVersion":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"]},"JsonAuthAck":{"type":"object","properties":{"email":{"$ref":"#/components/schemas/Email"}},"required":["email"]},"JsonAuthUser":{"type":"object","properties":{"creation":{"$ref":"#/components/schemas/DateTime"},"expiration":{"$ref":"#/components/schemas/DateTime"},"token":{"$ref":"#/components/schemas/Jwt"},"user":{"$ref":"#/components/schemas/JsonUser"}},"required":["creation","expiration","token","user"]},"JsonAverage":{"type":"string","enum":["mean","median"]},"JsonBackup":{"type":"object","properties":{"compress":{"nullable":true,"type":"boolean"},"data_store":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonDataStore"}]},"rm":{"nullable":true,"type":"boolean"}}},"JsonBackupCreated":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"}},"required":["created"]},"JsonBenchmark":{"type":"object","properties":{"archived":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DateTime"}]},"created":{"$ref":"#/components/schemas/DateTime"},"modified":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/BenchmarkName"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"slug":{"$ref":"#/components/schemas/Slug"},"uuid":{"$ref":"#/components/schemas/BenchmarkUuid"}},"required":["created","modified","name","project","slug","uuid"]},"JsonBenchmarks":{"type":"array","items":{"$ref":"#/components/schemas/JsonBenchmark"}},"JsonBilling":{"type":"object","properties":{"products":{"$ref":"#/components/schemas/JsonProducts"},"secret_key":{"$ref":"#/components/schemas/Secret"}},"required":["products","secret_key"]},"JsonBingIndex":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/NonEmpty"},"key_location":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Url"}]}},"required":["key"]},"JsonBoundary":{"type":"object","properties":{"baseline":{"nullable":true,"type":"number","format":"double"},"lower_limit":{"nullable":true,"type":"number","format":"double"},"upper_limit":{"nullable":true,"type":"number","format":"double"}}},"JsonBranch":{"type":"object","properties":{"archived":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DateTime"}]},"created":{"$ref":"#/components/schemas/DateTime"},"head":{"$ref":"#/components/schemas/JsonHead"},"modified":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/BranchName"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"slug":{"$ref":"#/components/schemas/Slug"},"uuid":{"$ref":"#/components/schemas/BranchUuid"}},"required":["created","head","modified","name","project","slug","uuid"]},"JsonBranches":{"type":"array","items":{"$ref":"#/components/schemas/JsonBranch"}},"JsonCardDetails":{"type":"object","properties":{"brand":{"$ref":"#/components/schemas/CardBrand"},"exp_month":{"$ref":"#/components/schemas/ExpirationMonth"},"exp_year":{"$ref":"#/components/schemas/ExpirationYear"},"last_four":{"$ref":"#/components/schemas/LastFour"}},"required":["brand","exp_month","exp_year","last_four"]},"JsonCheckout":{"type":"object","properties":{"session":{"type":"string"},"url":{"type":"string"}},"required":["session","url"]},"JsonCloud":{"type":"object","properties":{"billing":{"$ref":"#/components/schemas/JsonBilling"},"index":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonIndex"}]},"license_pem":{"$ref":"#/components/schemas/Secret"},"sentry":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Secret"}]}},"required":["billing","license_pem"]},"JsonCohort":{"type":"object","properties":{"month":{"type":"integer","format":"uint64","minimum":0},"total":{"type":"integer","format":"uint64","minimum":0},"week":{"type":"integer","format":"uint64","minimum":0}},"required":["month","total","week"]},"JsonCohortAvg":{"type":"object","properties":{"month":{"type":"number","format":"double"},"total":{"type":"number","format":"double"},"week":{"type":"number","format":"double"}},"required":["month","total","week"]},"JsonConfig":{"type":"object","properties":{"console":{"$ref":"#/components/schemas/JsonConsole"},"database":{"$ref":"#/components/schemas/JsonDatabase"},"logging":{"$ref":"#/components/schemas/JsonLogging"},"plus":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonPlus"}]},"security":{"$ref":"#/components/schemas/JsonSecurity"},"server":{"$ref":"#/components/schemas/JsonServer2"},"smtp":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonSmtp"}]}},"required":["console","database","logging","security","server"]},"JsonConfirm":{"type":"object","properties":{"token":{"$ref":"#/components/schemas/Jwt"}},"required":["token"]},"JsonConsole":{"type":"object","properties":{"url":{"description":"The URL for the Bencher Console UI.","allOf":[{"$ref":"#/components/schemas/Url"}]}},"required":["url"]},"JsonCustomer":{"type":"object","properties":{"email":{"$ref":"#/components/schemas/Email"},"name":{"$ref":"#/components/schemas/NonEmpty"},"uuid":{"$ref":"#/components/schemas/UserUuid"}},"required":["email","name","uuid"]},"JsonDataStore":{"type":"string","enum":["aws_s3"]},"JsonDatabase":{"type":"object","properties":{"data_store":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DataStore"}]},"file":{"type":"string"}},"required":["file"]},"JsonFold":{"type":"string","enum":["min","max","mean","median"]},"JsonGitHub":{"type":"object","properties":{"client_id":{"$ref":"#/components/schemas/NonEmpty"},"client_secret":{"$ref":"#/components/schemas/Secret"}},"required":["client_id","client_secret"]},"JsonGoogleIndex":{"type":"object","properties":{"client_email":{"$ref":"#/components/schemas/NonEmpty"},"private_key":{"$ref":"#/components/schemas/Secret"},"token_uri":{"$ref":"#/components/schemas/NonEmpty"}},"required":["client_email","private_key","token_uri"]},"JsonHead":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"},"replaced":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DateTime"}]},"start_point":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonStartPoint"}]},"uuid":{"$ref":"#/components/schemas/HeadUuid"},"version":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonVersion"}]}},"required":["created","uuid"]},"JsonIndex":{"type":"object","properties":{"bing":{"$ref":"#/components/schemas/JsonBingIndex"},"google":{"$ref":"#/components/schemas/JsonGoogleIndex"}},"required":["bing","google"]},"JsonLicense":{"type":"object","properties":{"entitlements":{"$ref":"#/components/schemas/Entitlements"},"expiration":{"$ref":"#/components/schemas/DateTime"},"issued_at":{"$ref":"#/components/schemas/DateTime"},"key":{"$ref":"#/components/schemas/Jwt"},"level":{"$ref":"#/components/schemas/PlanLevel"},"organization":{"$ref":"#/components/schemas/OrganizationUuid"},"self_hosted":{"type":"boolean"}},"required":["entitlements","expiration","issued_at","key","level","organization","self_hosted"]},"JsonLitestream":{"type":"object","properties":{"busy_timeout":{"nullable":true,"description":"The database busy timeout in milliseconds","type":"integer","format":"uint32","minimum":0},"replicas":{"description":"Disaster recovery replicas","type":"array","items":{"$ref":"#/components/schemas/JsonReplica"}}},"required":["replicas"]},"JsonLogging":{"type":"object","properties":{"log":{"$ref":"#/components/schemas/ServerLog"},"name":{"type":"string"}},"required":["log","name"]},"JsonLogin":{"type":"object","properties":{"email":{"$ref":"#/components/schemas/Email"},"invite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Jwt"}]},"plan":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/PlanLevel"}]}},"required":["email"]},"JsonMeasure":{"type":"object","properties":{"archived":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DateTime"}]},"created":{"$ref":"#/components/schemas/DateTime"},"modified":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/ResourceName"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"slug":{"$ref":"#/components/schemas/Slug"},"units":{"$ref":"#/components/schemas/ResourceName"},"uuid":{"$ref":"#/components/schemas/MeasureUuid"}},"required":["created","modified","name","project","slug","units","uuid"]},"JsonMeasures":{"type":"array","items":{"$ref":"#/components/schemas/JsonMeasure"}},"JsonMember":{"type":"object","properties":{"created":{"description":"The date time the member was created.","allOf":[{"$ref":"#/components/schemas/DateTime"}]},"email":{"description":"The member email.","allOf":[{"$ref":"#/components/schemas/Email"}]},"modified":{"description":"The date time the member was last modified.","allOf":[{"$ref":"#/components/schemas/DateTime"}]},"name":{"description":"The member user name.","allOf":[{"$ref":"#/components/schemas/UserName"}]},"role":{"description":"The member organization role.","allOf":[{"$ref":"#/components/schemas/OrganizationRole"}]},"slug":{"description":"The member slug.","allOf":[{"$ref":"#/components/schemas/Slug"}]},"uuid":{"description":"The member UUID.","allOf":[{"$ref":"#/components/schemas/UserUuid"}]}},"required":["created","email","modified","name","role","slug","uuid"]},"JsonMembers":{"type":"array","items":{"$ref":"#/components/schemas/JsonMember"}},"JsonMetric":{"type":"object","properties":{"lower_value":{"nullable":true,"type":"number","format":"double"},"upper_value":{"nullable":true,"type":"number","format":"double"},"uuid":{"$ref":"#/components/schemas/MetricUuid"},"value":{"type":"number","format":"double"}},"required":["uuid","value"]},"JsonModel":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"},"lower_boundary":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Boundary"}]},"max_sample_size":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SampleSize"}]},"min_sample_size":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SampleSize"}]},"replaced":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DateTime"}]},"test":{"$ref":"#/components/schemas/ModelTest"},"upper_boundary":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Boundary"}]},"uuid":{"$ref":"#/components/schemas/ModelUuid"},"window":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Window"}]}},"required":["created","test","uuid"]},"JsonNewBenchmark":{"type":"object","properties":{"name":{"description":"The name of the benchmark. Maximum length is 1,024 characters.","allOf":[{"$ref":"#/components/schemas/BenchmarkName"}]},"slug":{"nullable":true,"description":"The preferred slug for the benchmark. If not provided, the slug will be generated from the name. If the provided or generated slug is already in use, a unique slug will be generated. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]}},"required":["name"]},"JsonNewBranch":{"type":"object","properties":{"name":{"description":"The name of the branch. Maximum length is 256 characters.","allOf":[{"$ref":"#/components/schemas/BranchName"}]},"slug":{"nullable":true,"description":"The preferred slug for the branch. If not provided, the slug will be generated from the name. If the provided or generated slug is already in use, a unique slug will be generated. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]},"start_point":{"nullable":true,"description":"The start point for the new branch. Historical branch versions from the start point branch will be shallow copied over to the new branch head. That is, historical metrics data for the start point branch will appear in queries for the new branch. For example, pull request branches often use their base branch as their start point branch. After the new branch is created, it is not kept in sync with the start point branch. If not provided, the new branch will have no historical data.","allOf":[{"$ref":"#/components/schemas/JsonNewStartPoint"}]}},"required":["name"]},"JsonNewCheckout":{"type":"object","properties":{"entitlements":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Entitlements"}]},"level":{"$ref":"#/components/schemas/PlanLevel"},"organization":{"$ref":"#/components/schemas/ResourceId"},"self_hosted":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/OrganizationUuid"}]}},"required":["level","organization"]},"JsonNewMeasure":{"type":"object","properties":{"name":{"description":"The name of the measure. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"description":"The preferred slug for the measure. If not provided, the slug will be generated from the name. If the provided or generated slug is already in use, a unique slug will be generated. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]},"units":{"description":"The units of measure. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]}},"required":["name","units"]},"JsonNewMember":{"type":"object","properties":{"email":{"description":"The email for the invitee. This will be used to both send the invite and to create the user account if they do not exist.","allOf":[{"$ref":"#/components/schemas/Email"}]},"name":{"nullable":true,"description":"The user name for the invitee.","allOf":[{"$ref":"#/components/schemas/UserName"}]},"role":{"description":"The organization role for the invitee.","allOf":[{"$ref":"#/components/schemas/OrganizationRole"}]}},"required":["email","role"]},"JsonNewOrganization":{"type":"object","properties":{"name":{"description":"The name of the organization. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"description":"The preferred slug for the organization. If not provided, the slug will be generated from the name. If the provided or generated slug is already in use, a unique slug will be generated. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]}},"required":["name"]},"JsonNewPlan":{"type":"object","properties":{"checkout":{"$ref":"#/components/schemas/NonEmpty"},"entitlements":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Entitlements"}]},"level":{"$ref":"#/components/schemas/PlanLevel"},"remote":{"nullable":true,"type":"boolean"},"self_hosted":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/OrganizationUuid"}]}},"required":["checkout","level"]},"JsonNewPlot":{"type":"object","properties":{"benchmarks":{"description":"The benchmarks to include in the plot. At least one benchmark must be specified.","type":"array","items":{"$ref":"#/components/schemas/BenchmarkUuid"}},"branches":{"description":"The branches to include in the plot. At least one branch must be specified.","type":"array","items":{"$ref":"#/components/schemas/BranchUuid"}},"index":{"nullable":true,"description":"The index of the plot. Maximum index is 64.","allOf":[{"$ref":"#/components/schemas/Index"}]},"lower_boundary":{"description":"Display lower boundary limits.","type":"boolean"},"lower_value":{"description":"Display metric lower values.","type":"boolean"},"measures":{"description":"The measures to include in the plot. At least one measure must be specified.","type":"array","items":{"$ref":"#/components/schemas/MeasureUuid"}},"testbeds":{"description":"The testbeds to include in the plot. At least one testbed must be specified.","type":"array","items":{"$ref":"#/components/schemas/TestbedUuid"}},"title":{"nullable":true,"description":"The title of the plot. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"upper_boundary":{"description":"Display upper boundary limits.","type":"boolean"},"upper_value":{"description":"Display metric upper values.","type":"boolean"},"window":{"description":"The window of time for the plot, in seconds. Metrics outside of this window will be omitted.","allOf":[{"$ref":"#/components/schemas/Window"}]},"x_axis":{"description":"The x-axis to use for the plot.","allOf":[{"$ref":"#/components/schemas/XAxis"}]}},"required":["benchmarks","branches","lower_boundary","lower_value","measures","testbeds","upper_boundary","upper_value","window","x_axis"]},"JsonNewProject":{"type":"object","properties":{"name":{"description":"The name of the project. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"description":"The preferred slug for the project. If not provided, the slug will be generated from the name. If the provided or generated slug is already in use, a unique slug will be generated. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]},"url":{"nullable":true,"description":"The URL for the project. If the project is public, the URL will be accessible listed on its Perf Page.","allOf":[{"$ref":"#/components/schemas/Url"}]},"visibility":{"nullable":true,"description":"➕ Bencher Plus: Set the visibility of the project. Creating a `private` project requires a valid Bencher Plus subscription.","allOf":[{"$ref":"#/components/schemas/Visibility"}]}},"required":["name"]},"JsonNewReport":{"type":"object","properties":{"branch":{"description":"Branch UUID, slug, or name. If the branch does not exist, it will be created.","allOf":[{"$ref":"#/components/schemas/NameId"}]},"end_time":{"description":"End time for the report. Must be an ISO 8601 formatted string.","allOf":[{"$ref":"#/components/schemas/DateTime"}]},"hash":{"nullable":true,"description":"Full `git` commit hash. All reports with the same `git` commit hash will be considered part of the same branch version. This can be useful for tracking the performance of a specific commit across multiple testbeds.","allOf":[{"$ref":"#/components/schemas/GitHash"}]},"results":{"description":"An array of benchmarks results.","type":"array","items":{"type":"string"}},"settings":{"nullable":true,"description":"Settings for how to handle the report.","allOf":[{"$ref":"#/components/schemas/JsonReportSettings"}]},"start_point":{"nullable":true,"description":"The start point for the report branch. If the branch does not exist, the start point will be used to create a new branch. If the branch already exists and the start point is not provided, the current branch will be used. If the branch already exists and the start point provided is different, a new branch head will be created from the new start point. If a new branch or new branch head is created with a start point, historical branch versions from the start point branch will be shallow copied over to the new branch. That is, historical metrics data for the start point branch will appear in queries for the branch. For example, pull request branches often use their base branch as their start point branch. If a new branch is created, it is not kept in sync with the start point branch.","allOf":[{"$ref":"#/components/schemas/JsonUpdateStartPoint"}]},"start_time":{"description":"Start time for the report. Must be an ISO 8601 formatted string.","allOf":[{"$ref":"#/components/schemas/DateTime"}]},"testbed":{"description":"Testbed UUID, slug, or name. If the testbed does not exist, it will be created.","allOf":[{"$ref":"#/components/schemas/NameId"}]},"thresholds":{"nullable":true,"description":"Thresholds to use for the branch, testbed, and measures in the report. If a threshold does not exist, it will be created. If a threshold exists and the model is different, it will be updated with the new model. If a measure name or slug is provided, the measure will be created if it does not exist.","allOf":[{"$ref":"#/components/schemas/JsonReportThresholds"}]}},"required":["branch","end_time","results","start_time","testbed"]},"JsonNewStartPoint":{"type":"object","properties":{"branch":{"description":"The UUID, slug, or name of the branch to use as the start point.","allOf":[{"$ref":"#/components/schemas/NameId"}]},"clone_thresholds":{"nullable":true,"description":"If set to `true`, the thresholds from the start point branch will be deep copied to the new branch. This can be useful for pull request branches that should have the same thresholds as their target branch. Requires the `branch` field to be set.","type":"boolean"},"hash":{"nullable":true,"description":"The full `git` hash of the branch to use as the start point. Requires the `branch` field to be set.","allOf":[{"$ref":"#/components/schemas/GitHash"}]},"max_versions":{"nullable":true,"description":"The maximum number of historical branch versions to include. Versions beyond this number will be omitted. The default is 255. Requires the `branch` field to be set.","type":"integer","format":"uint32","minimum":0}},"required":["branch"]},"JsonNewTestbed":{"type":"object","properties":{"name":{"description":"The name of the testbed. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"description":"The preferred slug for the testbed. If not provided, the slug will be generated from the name. If the provided or generated slug is already in use, a unique slug will be generated. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]}},"required":["name"]},"JsonNewThreshold":{"type":"object","properties":{"branch":{"description":"The UUID, slug, or name of the threshold branch.","allOf":[{"$ref":"#/components/schemas/NameId"}]},"lower_boundary":{"nullable":true,"description":"The lower boundary used to calculate the lower boundary limit. The requirements for this field depend on which `test` is selected.","allOf":[{"$ref":"#/components/schemas/Boundary"}]},"max_sample_size":{"nullable":true,"description":"The maximum number of samples used to perform the test. Only the most recent samples will be used if there are more.","allOf":[{"$ref":"#/components/schemas/SampleSize"}]},"measure":{"description":"The UUID, slug, or name of the threshold measure.","allOf":[{"$ref":"#/components/schemas/NameId"}]},"min_sample_size":{"nullable":true,"description":"The minimum number of samples required to perform the test. If there are fewer samples, the test will not be performed.","allOf":[{"$ref":"#/components/schemas/SampleSize"}]},"test":{"description":"The test used by the threshold model to calculate the baseline and boundary limits.","allOf":[{"$ref":"#/components/schemas/ModelTest"}]},"testbed":{"description":"The UUID, slug, or name of the threshold testbed.","allOf":[{"$ref":"#/components/schemas/NameId"}]},"upper_boundary":{"nullable":true,"description":"The upper boundary used to calculate the upper boundary limit. The requirements for this field depend on which `test` is selected.","allOf":[{"$ref":"#/components/schemas/Boundary"}]},"window":{"nullable":true,"description":"The window of time for samples used to perform the test, in seconds. Samples outside of this window will be omitted.","allOf":[{"$ref":"#/components/schemas/Window"}]}},"required":["branch","measure","test","testbed"]},"JsonNewToken":{"type":"object","properties":{"name":{"description":"The name of the token. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"ttl":{"nullable":true,"description":"The time-to-live (TTL) for the token in seconds. If not provided, the token will not expire for over 128 years.","type":"integer","format":"uint32","minimum":0}},"required":["name"]},"JsonOAuth":{"type":"object","properties":{"code":{"$ref":"#/components/schemas/Secret"},"invite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Jwt"}]},"plan":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/PlanLevel"}]}},"required":["code"]},"JsonOneMetric":{"type":"object","properties":{"alert":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonPerfAlert"}]},"benchmark":{"$ref":"#/components/schemas/JsonBenchmark"},"boundary":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonBoundary"}]},"branch":{"$ref":"#/components/schemas/JsonBranch"},"end_time":{"$ref":"#/components/schemas/DateTime"},"iteration":{"$ref":"#/components/schemas/Iteration"},"measure":{"$ref":"#/components/schemas/JsonMeasure"},"metric":{"$ref":"#/components/schemas/JsonMetric"},"report":{"$ref":"#/components/schemas/ReportUuid"},"start_time":{"$ref":"#/components/schemas/DateTime"},"testbed":{"$ref":"#/components/schemas/JsonTestbed"},"threshold":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonThresholdModel"}]},"uuid":{"$ref":"#/components/schemas/MetricUuid"}},"required":["benchmark","branch","end_time","iteration","measure","metric","report","start_time","testbed","uuid"]},"JsonOrganization":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"},"license":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Jwt"}]},"modified":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/ResourceName"},"slug":{"$ref":"#/components/schemas/Slug"},"uuid":{"$ref":"#/components/schemas/OrganizationUuid"}},"required":["created","modified","name","slug","uuid"]},"JsonOrganizationPatch":{"type":"object","properties":{"license":{"nullable":true,"description":"➕ Bencher Plus: The new license for the organization. Set to `null` to remove the current license.","allOf":[{"$ref":"#/components/schemas/Jwt"}]},"name":{"nullable":true,"description":"The new name of the organization. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"description":"The preferred new slug for the organization. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]}}},"JsonOrganizationPatchNull":{"type":"object","properties":{"license":{"type":"string","enum":[null]},"name":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Slug"}]}},"required":["license"]},"JsonOrganizations":{"type":"array","items":{"$ref":"#/components/schemas/JsonOrganization"}},"JsonPerf":{"type":"object","properties":{"end_time":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DateTime"}]},"project":{"$ref":"#/components/schemas/JsonProject"},"results":{"type":"array","items":{"$ref":"#/components/schemas/JsonPerfMetrics"}},"start_time":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DateTime"}]}},"required":["project","results"]},"JsonPerfAlert":{"type":"object","properties":{"limit":{"$ref":"#/components/schemas/BoundaryLimit"},"modified":{"$ref":"#/components/schemas/DateTime"},"status":{"$ref":"#/components/schemas/AlertStatus"},"uuid":{"$ref":"#/components/schemas/AlertUuid"}},"required":["limit","modified","status","uuid"]},"JsonPerfMetric":{"type":"object","properties":{"alert":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonPerfAlert"}]},"boundary":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonBoundary"}]},"end_time":{"$ref":"#/components/schemas/DateTime"},"iteration":{"$ref":"#/components/schemas/Iteration"},"metric":{"$ref":"#/components/schemas/JsonMetric"},"report":{"$ref":"#/components/schemas/ReportUuid"},"start_time":{"$ref":"#/components/schemas/DateTime"},"threshold":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonThresholdModel"}]},"version":{"$ref":"#/components/schemas/JsonVersion"}},"required":["end_time","iteration","metric","report","start_time","version"]},"JsonPerfMetrics":{"type":"object","properties":{"benchmark":{"$ref":"#/components/schemas/JsonBenchmark"},"branch":{"$ref":"#/components/schemas/JsonBranch"},"measure":{"$ref":"#/components/schemas/JsonMeasure"},"metrics":{"type":"array","items":{"$ref":"#/components/schemas/JsonPerfMetric"}},"testbed":{"$ref":"#/components/schemas/JsonTestbed"}},"required":["benchmark","branch","measure","metrics","testbed"]},"JsonPlan":{"type":"object","properties":{"card":{"$ref":"#/components/schemas/JsonCardDetails"},"current_period_end":{"$ref":"#/components/schemas/DateTime"},"current_period_start":{"$ref":"#/components/schemas/DateTime"},"customer":{"$ref":"#/components/schemas/JsonCustomer"},"level":{"$ref":"#/components/schemas/PlanLevel"},"license":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonLicense"}]},"organization":{"$ref":"#/components/schemas/OrganizationUuid"},"status":{"$ref":"#/components/schemas/PlanStatus"},"unit_amount":{"$ref":"#/components/schemas/BigInt"}},"required":["card","current_period_end","current_period_start","customer","level","organization","status","unit_amount"]},"JsonPlot":{"type":"object","properties":{"benchmarks":{"type":"array","items":{"$ref":"#/components/schemas/BenchmarkUuid"}},"branches":{"type":"array","items":{"$ref":"#/components/schemas/BranchUuid"}},"created":{"$ref":"#/components/schemas/DateTime"},"lower_boundary":{"type":"boolean"},"lower_value":{"type":"boolean"},"measures":{"type":"array","items":{"$ref":"#/components/schemas/MeasureUuid"}},"modified":{"$ref":"#/components/schemas/DateTime"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"testbeds":{"type":"array","items":{"$ref":"#/components/schemas/TestbedUuid"}},"title":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"upper_boundary":{"type":"boolean"},"upper_value":{"type":"boolean"},"uuid":{"$ref":"#/components/schemas/PlotUuid"},"window":{"$ref":"#/components/schemas/Window"},"x_axis":{"$ref":"#/components/schemas/XAxis"}},"required":["benchmarks","branches","created","lower_boundary","lower_value","measures","modified","project","testbeds","upper_boundary","upper_value","uuid","window","x_axis"]},"JsonPlotPatch":{"type":"object","properties":{"index":{"nullable":true,"description":"The new index for the plot. Maximum index is 64.","allOf":[{"$ref":"#/components/schemas/Index"}]},"title":{"nullable":true,"description":"The new title of the plot. Set to `null` to remove the current title. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"window":{"nullable":true,"description":"The window of time for the plot, in seconds. Metrics outside of this window will be omitted.","allOf":[{"$ref":"#/components/schemas/Window"}]}}},"JsonPlotPatchNull":{"type":"object","properties":{"index":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Index"}]},"title":{"type":"string","enum":[null]},"window":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Window"}]}},"required":["title"]},"JsonPlots":{"type":"array","items":{"$ref":"#/components/schemas/JsonPlot"}},"JsonPlus":{"type":"object","properties":{"cloud":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonCloud"}]},"github":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonGitHub"}]},"litestream":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonLitestream"}]},"stats":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonStats"}]}}},"JsonProduct":{"type":"object","properties":{"id":{"type":"string"},"licensed":{"type":"object","additionalProperties":{"type":"string"}},"metered":{"type":"object","additionalProperties":{"type":"string"}}},"required":["id","licensed","metered"]},"JsonProducts":{"type":"object","properties":{"enterprise":{"$ref":"#/components/schemas/JsonProduct"},"team":{"$ref":"#/components/schemas/JsonProduct"}},"required":["enterprise","team"]},"JsonProject":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"},"modified":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/ResourceName"},"organization":{"$ref":"#/components/schemas/OrganizationUuid"},"slug":{"$ref":"#/components/schemas/Slug"},"url":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Url"}]},"uuid":{"$ref":"#/components/schemas/ProjectUuid"},"visibility":{"$ref":"#/components/schemas/Visibility"}},"required":["created","modified","name","organization","slug","uuid","visibility"]},"JsonProjectPatch":{"type":"object","properties":{"name":{"nullable":true,"description":"The new name of the project. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"description":"The preferred new slug for the project. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]},"url":{"nullable":true,"description":"The new URL of the project. Set to `null` to remove the current URL.","allOf":[{"$ref":"#/components/schemas/Url"}]},"visibility":{"nullable":true,"description":"➕ Bencher Plus: Set the new visibility of the project. Moving to a `private` project requires a valid Bencher Plus subscription.","allOf":[{"$ref":"#/components/schemas/Visibility"}]}}},"JsonProjectPatchNull":{"type":"object","properties":{"name":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Slug"}]},"url":{"type":"string","enum":[null]},"visibility":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Visibility"}]}},"required":["url"]},"JsonProjects":{"type":"array","items":{"$ref":"#/components/schemas/JsonProject"}},"JsonPubUser":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/UserName"},"slug":{"$ref":"#/components/schemas/Slug"},"uuid":{"$ref":"#/components/schemas/UserUuid"}},"required":["name","slug","uuid"]},"JsonRemoveModel":{"type":"object","properties":{"test":{"type":"string","enum":[null]}},"required":["test"]},"JsonReplica":{"oneOf":[{"type":"object","properties":{"path":{"type":"string"},"retention":{"nullable":true,"type":"string"},"retention_check_interval":{"nullable":true,"type":"string"},"scheme":{"type":"string","enum":["file"]},"snapshot_interval":{"nullable":true,"type":"string"},"sync_interval":{"nullable":true,"type":"string"},"validation_interval":{"nullable":true,"type":"string"}},"required":["path","scheme"]},{"type":"object","properties":{"host":{"type":"string"},"key_path":{"nullable":true,"type":"string"},"password":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Secret"}]},"path":{"nullable":true,"type":"string"},"port":{"type":"integer","format":"uint16","minimum":0},"retention":{"nullable":true,"type":"string"},"retention_check_interval":{"nullable":true,"type":"string"},"scheme":{"type":"string","enum":["sftp"]},"snapshot_interval":{"nullable":true,"type":"string"},"sync_interval":{"nullable":true,"type":"string"},"user":{"type":"string"},"validation_interval":{"nullable":true,"type":"string"}},"required":["host","port","scheme","user"]},{"type":"object","properties":{"access_key_id":{"type":"string"},"bucket":{"type":"string"},"endpoint":{"nullable":true,"type":"string"},"path":{"nullable":true,"type":"string"},"region":{"nullable":true,"type":"string"},"retention":{"nullable":true,"type":"string"},"retention_check_interval":{"nullable":true,"type":"string"},"scheme":{"type":"string","enum":["s3"]},"secret_access_key":{"$ref":"#/components/schemas/Secret"},"snapshot_interval":{"nullable":true,"type":"string"},"sync_interval":{"nullable":true,"type":"string"},"validation_interval":{"nullable":true,"type":"string"}},"required":["access_key_id","bucket","scheme","secret_access_key"]},{"type":"object","properties":{"account_key":{"$ref":"#/components/schemas/Secret"},"account_name":{"type":"string"},"bucket":{"type":"string"},"path":{"type":"string"},"retention":{"nullable":true,"type":"string"},"retention_check_interval":{"nullable":true,"type":"string"},"scheme":{"type":"string","enum":["abs"]},"snapshot_interval":{"nullable":true,"type":"string"},"sync_interval":{"nullable":true,"type":"string"},"validation_interval":{"nullable":true,"type":"string"}},"required":["account_key","account_name","bucket","path","scheme"]},{"type":"object","properties":{"bucket":{"type":"string"},"path":{"nullable":true,"type":"string"},"retention":{"nullable":true,"type":"string"},"retention_check_interval":{"nullable":true,"type":"string"},"scheme":{"type":"string","enum":["gcs"]},"snapshot_interval":{"nullable":true,"type":"string"},"sync_interval":{"nullable":true,"type":"string"},"validation_interval":{"nullable":true,"type":"string"}},"required":["bucket","scheme"]}]},"JsonReport":{"type":"object","properties":{"adapter":{"$ref":"#/components/schemas/Adapter"},"alerts":{"type":"array","items":{"$ref":"#/components/schemas/JsonAlert"}},"branch":{"$ref":"#/components/schemas/JsonBranch"},"created":{"$ref":"#/components/schemas/DateTime"},"end_time":{"$ref":"#/components/schemas/DateTime"},"project":{"$ref":"#/components/schemas/JsonProject"},"results":{"type":"array","items":{"type":"array","items":{"$ref":"#/components/schemas/JsonReportResult"}}},"start_time":{"$ref":"#/components/schemas/DateTime"},"testbed":{"$ref":"#/components/schemas/JsonTestbed"},"user":{"$ref":"#/components/schemas/JsonPubUser"},"uuid":{"$ref":"#/components/schemas/ReportUuid"}},"required":["adapter","alerts","branch","created","end_time","project","results","start_time","testbed","user","uuid"]},"JsonReportMeasure":{"type":"object","properties":{"boundary":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonBoundary"}]},"measure":{"$ref":"#/components/schemas/JsonMeasure"},"metric":{"$ref":"#/components/schemas/JsonMetric"},"threshold":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonThresholdModel"}]}},"required":["measure","metric"]},"JsonReportResult":{"type":"object","properties":{"benchmark":{"$ref":"#/components/schemas/JsonBenchmark"},"iteration":{"$ref":"#/components/schemas/Iteration"},"measures":{"type":"array","items":{"$ref":"#/components/schemas/JsonReportMeasure"}}},"required":["benchmark","iteration","measures"]},"JsonReportSettings":{"type":"object","properties":{"adapter":{"nullable":true,"description":"The benchmark harness adapter for parsing the benchmark results. If no adapter is specified, then the Magic adapter will be used.","allOf":[{"$ref":"#/components/schemas/Adapter"}]},"average":{"nullable":true,"description":"Benchmark harness suggested central tendency (ie average). Some benchmarking harnesses provide multiple averages, such as mean and median.","allOf":[{"$ref":"#/components/schemas/JsonAverage"}]},"fold":{"nullable":true,"description":"Fold multiple results into a single result using the selected operation. This can be useful for taking the min, max, mean, or median of the benchmark results.","allOf":[{"$ref":"#/components/schemas/JsonFold"}]}}},"JsonReportThresholds":{"type":"object","properties":{"models":{"nullable":true,"description":"Map of measure UUID, slug, or name to the threshold model to use. If a measure name or slug is provided, the measure will be created if it does not exist.","type":"object","additionalProperties":{"$ref":"#/components/schemas/Model"}},"reset":{"nullable":true,"description":"Reset all thresholds for the branch and testbed. Any models present in the `models` field will still be updated accordingly. If a threshold already exists and is not present in the `models` field, its current model will be removed.","type":"boolean"}}},"JsonReports":{"type":"array","items":{"$ref":"#/components/schemas/JsonReport"}},"JsonRestart":{"type":"object","properties":{"delay":{"nullable":true,"description":"The delay in seconds before the server restarts. Defaults to 3 seconds, if not specified.","type":"integer","format":"uint64","minimum":0}}},"JsonSecurity":{"type":"object","properties":{"issuer":{"nullable":true,"type":"string"},"secret_key":{"$ref":"#/components/schemas/Secret"}},"required":["secret_key"]},"JsonServer":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"},"uuid":{"$ref":"#/components/schemas/ServerUuid"},"version":{"nullable":true,"type":"string"}},"required":["created","uuid"]},"JsonServer2":{"type":"object","properties":{"bind_address":{"type":"string"},"request_body_max_bytes":{"type":"integer","format":"uint","minimum":0},"tls":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonTls"}]}},"required":["bind_address","request_body_max_bytes"]},"JsonServerStats":{"type":"object","properties":{"active_projects":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonCohort"}]},"admins":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonUsers"}]},"metrics":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonCohort"}]},"metrics_per_report":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonCohortAvg"}]},"organizations":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonOrganizations"}]},"projects":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonCohort"}]},"reports":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonCohort"}]},"reports_per_project":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonCohortAvg"}]},"server":{"$ref":"#/components/schemas/JsonServer"},"timestamp":{"$ref":"#/components/schemas/DateTime"},"top_projects":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonTopCohort"}]},"users":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonCohort"}]}},"required":["server","timestamp"]},"JsonSignup":{"type":"object","properties":{"email":{"$ref":"#/components/schemas/Email"},"i_agree":{"description":"I agree to the Bencher Terms of Use (https://bencher.dev/legal/terms-of-use), Privacy Policy (https://bencher.dev/legal/privacy), and License Agreement (https://bencher.dev/legal/license)","type":"boolean"},"invite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Jwt"}]},"name":{"$ref":"#/components/schemas/UserName"},"plan":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/PlanLevel"}]},"slug":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Slug"}]}},"required":["email","i_agree","name"]},"JsonSmtp":{"type":"object","properties":{"from_email":{"$ref":"#/components/schemas/Email"},"from_name":{"$ref":"#/components/schemas/ResourceName"},"hostname":{"$ref":"#/components/schemas/ResourceName"},"port":{"nullable":true,"type":"integer","format":"uint16","minimum":0},"secret":{"$ref":"#/components/schemas/Secret"},"starttls":{"nullable":true,"type":"boolean"},"username":{"$ref":"#/components/schemas/ResourceName"}},"required":["from_email","from_name","hostname","secret","username"]},"JsonSpec":{},"JsonStartPoint":{"type":"object","properties":{"branch":{"$ref":"#/components/schemas/BranchUuid"},"head":{"$ref":"#/components/schemas/HeadUuid"},"version":{"$ref":"#/components/schemas/JsonVersion"}},"required":["branch","head","version"]},"JsonStats":{"type":"object","properties":{"enabled":{"nullable":true,"type":"boolean"},"offset":{"nullable":true,"type":"integer","format":"uint32","minimum":0}}},"JsonTestbed":{"type":"object","properties":{"archived":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DateTime"}]},"created":{"$ref":"#/components/schemas/DateTime"},"modified":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/ResourceName"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"slug":{"$ref":"#/components/schemas/Slug"},"uuid":{"$ref":"#/components/schemas/TestbedUuid"}},"required":["created","modified","name","project","slug","uuid"]},"JsonTestbeds":{"type":"array","items":{"$ref":"#/components/schemas/JsonTestbed"}},"JsonThreshold":{"type":"object","properties":{"branch":{"$ref":"#/components/schemas/JsonBranch"},"created":{"$ref":"#/components/schemas/DateTime"},"measure":{"$ref":"#/components/schemas/JsonMeasure"},"model":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonModel"}]},"modified":{"$ref":"#/components/schemas/DateTime"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"testbed":{"$ref":"#/components/schemas/JsonTestbed"},"uuid":{"$ref":"#/components/schemas/ThresholdUuid"}},"required":["branch","created","measure","modified","project","testbed","uuid"]},"JsonThresholdModel":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"},"model":{"$ref":"#/components/schemas/JsonModel"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"uuid":{"$ref":"#/components/schemas/ThresholdUuid"}},"required":["created","model","project","uuid"]},"JsonThresholds":{"type":"array","items":{"$ref":"#/components/schemas/JsonThreshold"}},"JsonTls":{"oneOf":[{"type":"object","properties":{"cert_file":{"type":"string"},"key_file":{"type":"string"},"type":{"type":"string","enum":["as_file"]}},"required":["cert_file","key_file","type"]},{"type":"object","properties":{"certs":{"type":"array","items":{"type":"integer","format":"uint8","minimum":0}},"key":{"type":"array","items":{"type":"integer","format":"uint8","minimum":0}},"type":{"type":"string","enum":["as_bytes"]}},"required":["certs","key","type"]}]},"JsonToken":{"type":"object","properties":{"creation":{"$ref":"#/components/schemas/DateTime"},"expiration":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/ResourceName"},"token":{"$ref":"#/components/schemas/Jwt"},"user":{"$ref":"#/components/schemas/UserUuid"},"uuid":{"$ref":"#/components/schemas/TokenUuid"}},"required":["creation","expiration","name","token","user","uuid"]},"JsonTokens":{"type":"array","items":{"$ref":"#/components/schemas/JsonToken"}},"JsonTopCohort":{"type":"object","properties":{"month":{"type":"array","items":{"$ref":"#/components/schemas/JsonTopProject"}},"total":{"type":"array","items":{"$ref":"#/components/schemas/JsonTopProject"}},"week":{"type":"array","items":{"$ref":"#/components/schemas/JsonTopProject"}}},"required":["month","total","week"]},"JsonTopProject":{"type":"object","properties":{"metrics":{"type":"integer","format":"uint64","minimum":0},"name":{"$ref":"#/components/schemas/ResourceName"},"percentage":{"type":"number","format":"double"},"uuid":{"$ref":"#/components/schemas/ProjectUuid"}},"required":["metrics","name","percentage","uuid"]},"JsonUpdateAlert":{"type":"object","properties":{"status":{"nullable":true,"description":"The new status of the alert.","allOf":[{"$ref":"#/components/schemas/UpdateAlertStatus"}]}}},"JsonUpdateBenchmark":{"type":"object","properties":{"archived":{"nullable":true,"description":"Set whether the benchmark is archived.","type":"boolean"},"name":{"nullable":true,"description":"The new name of the benchmark. Maximum length is 1,024 characters.","allOf":[{"$ref":"#/components/schemas/BenchmarkName"}]},"slug":{"nullable":true,"description":"The preferred new slug for the benchmark. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]}}},"JsonUpdateBranch":{"type":"object","properties":{"archived":{"nullable":true,"description":"Set whether the branch is archived.","type":"boolean"},"name":{"nullable":true,"description":"The new name of the branch. Maximum length is 256 characters.","allOf":[{"$ref":"#/components/schemas/BranchName"}]},"slug":{"nullable":true,"description":"The preferred new slug for the branch. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]},"start_point":{"nullable":true,"description":"The new start point for the branch.","allOf":[{"$ref":"#/components/schemas/JsonUpdateStartPoint"}]}}},"JsonUpdateConfig":{"type":"object","properties":{"config":{"$ref":"#/components/schemas/JsonConfig"},"delay":{"nullable":true,"type":"integer","format":"uint64","minimum":0}},"required":["config"]},"JsonUpdateMeasure":{"type":"object","properties":{"archived":{"nullable":true,"description":"Set whether the measure is archived.","type":"boolean"},"name":{"nullable":true,"description":"The new name of the measure. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"description":"The preferred new slug for the measure. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]},"units":{"nullable":true,"description":"The new units of measure. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]}}},"JsonUpdateMember":{"type":"object","properties":{"role":{"nullable":true,"description":"The new organization role for the member.","allOf":[{"$ref":"#/components/schemas/OrganizationRole"}]}}},"JsonUpdateModel":{"type":"object","properties":{"lower_boundary":{"nullable":true,"description":"The lower boundary used to calculate the lower boundary limit. The requirements for this field depend on which `test` is selected.","allOf":[{"$ref":"#/components/schemas/Boundary"}]},"max_sample_size":{"nullable":true,"description":"The maximum number of samples used to perform the test. Only the most recent samples will be used if there are more.","allOf":[{"$ref":"#/components/schemas/SampleSize"}]},"min_sample_size":{"nullable":true,"description":"The minimum number of samples required to perform the test. If there are fewer samples, the test will not be performed.","allOf":[{"$ref":"#/components/schemas/SampleSize"}]},"test":{"description":"The test used by the threshold model to calculate the baseline and boundary limits.","allOf":[{"$ref":"#/components/schemas/ModelTest"}]},"upper_boundary":{"nullable":true,"description":"The upper boundary used to calculate the upper boundary limit. The requirements for this field depend on which `test` is selected.","allOf":[{"$ref":"#/components/schemas/Boundary"}]},"window":{"nullable":true,"description":"The window of time for samples used to perform the test, in seconds. Samples outside of this window will be omitted.","allOf":[{"$ref":"#/components/schemas/Window"}]}},"required":["test"]},"JsonUpdateOrganization":{"anyOf":[{"$ref":"#/components/schemas/JsonOrganizationPatch"},{"$ref":"#/components/schemas/JsonOrganizationPatchNull"}]},"JsonUpdatePlot":{"anyOf":[{"$ref":"#/components/schemas/JsonPlotPatch"},{"$ref":"#/components/schemas/JsonPlotPatchNull"}]},"JsonUpdateProject":{"anyOf":[{"$ref":"#/components/schemas/JsonProjectPatch"},{"$ref":"#/components/schemas/JsonProjectPatchNull"}]},"JsonUpdateStartPoint":{"type":"object","properties":{"branch":{"nullable":true,"description":"The UUID, slug, or name of the branch to use as the start point.","allOf":[{"$ref":"#/components/schemas/NameId"}]},"clone_thresholds":{"nullable":true,"description":"If set to `true`, the thresholds from the start point branch will be deep copied to the branch. This can be useful for pull request branches that should have the same thresholds as their target branch. Requires the `branch` field to be set.","type":"boolean"},"hash":{"nullable":true,"description":"The full git hash of the branch to use as the start point. Requires the `branch` field to be set.","allOf":[{"$ref":"#/components/schemas/GitHash"}]},"max_versions":{"nullable":true,"description":"The maximum number of historical branch versions to include. Versions beyond this number will be omitted. The default is 255. Requires the `branch` field to be set.","type":"integer","format":"uint32","minimum":0},"reset":{"nullable":true,"description":"Reset the branch head to an empty state. If the start point `branch` is specified, the new branch head will begin at that start point. Otherwise, the branch head will be reset to an empty state.","type":"boolean"}}},"JsonUpdateTestbed":{"type":"object","properties":{"archived":{"nullable":true,"description":"Set whether the testbed is archived.","type":"boolean"},"name":{"nullable":true,"description":"The new name of the testbed. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"description":"The preferred new slug for the testbed. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]}}},"JsonUpdateThreshold":{"anyOf":[{"$ref":"#/components/schemas/JsonUpdateModel"},{"$ref":"#/components/schemas/JsonRemoveModel"}]},"JsonUpdateToken":{"type":"object","properties":{"name":{"nullable":true,"description":"The new name of the token. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]}}},"JsonUpdateUser":{"type":"object","properties":{"admin":{"nullable":true,"description":"Update whether the user is an admin. Must be an admin to update this field.","type":"boolean"},"email":{"nullable":true,"description":"The new email for the user.","allOf":[{"$ref":"#/components/schemas/Email"}]},"locked":{"nullable":true,"description":"Update whether the user is locked. Must be an admin to update this field.","type":"boolean"},"name":{"nullable":true,"description":"The new name of the user. Maximum length is 64 characters. May only contain alphanumeric characters, non-leading or trailing spaces, and the following characters: , . - \'","allOf":[{"$ref":"#/components/schemas/UserName"}]},"slug":{"nullable":true,"description":"The preferred new slug for the user. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]}}},"JsonUsage":{"type":"object","properties":{"end_time":{"description":"The end time of the usage.","allOf":[{"$ref":"#/components/schemas/DateTime"}]},"kind":{"description":"The kind of usage.","allOf":[{"$ref":"#/components/schemas/UsageKind"}]},"license":{"nullable":true,"description":"The organization license.","allOf":[{"$ref":"#/components/schemas/JsonLicense"}]},"organization":{"description":"The organization UUID.","allOf":[{"$ref":"#/components/schemas/OrganizationUuid"}]},"plan":{"nullable":true,"description":"The organization plan.","allOf":[{"$ref":"#/components/schemas/JsonPlan"}]},"start_time":{"description":"The start time of the usage.","allOf":[{"$ref":"#/components/schemas/DateTime"}]},"usage":{"nullable":true,"description":"The metrics usage amount.","type":"integer","format":"uint32","minimum":0}},"required":["end_time","kind","organization","start_time"]},"JsonUser":{"type":"object","properties":{"admin":{"type":"boolean"},"email":{"$ref":"#/components/schemas/Email"},"locked":{"type":"boolean"},"name":{"$ref":"#/components/schemas/UserName"},"slug":{"$ref":"#/components/schemas/Slug"},"uuid":{"$ref":"#/components/schemas/UserUuid"}},"required":["admin","email","locked","name","slug","uuid"]},"JsonUsers":{"type":"array","items":{"$ref":"#/components/schemas/JsonUser"}},"JsonVersion":{"type":"object","properties":{"hash":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/GitHash"}]},"number":{"$ref":"#/components/schemas/VersionNumber"}},"required":["number"]},"Jwt":{"type":"string"},"LastFour":{"type":"string"},"LogLevel":{"type":"string","enum":["trace","debug","info","warn","error","critical"]},"MeasureUuid":{"type":"string","format":"uuid"},"MetricUuid":{"type":"string","format":"uuid"},"Model":{"type":"object","properties":{"lower_boundary":{"nullable":true,"description":"The lower boundary used to calculate the lower boundary limit. The requirements for this field depend on which `test` is selected.","allOf":[{"$ref":"#/components/schemas/Boundary"}]},"max_sample_size":{"nullable":true,"description":"The maximum number of samples used to perform the test. Only the most recent samples will be used if there are more.","allOf":[{"$ref":"#/components/schemas/SampleSize"}]},"min_sample_size":{"nullable":true,"description":"The minimum number of samples required to perform the test. If there are fewer samples, the test will not be performed.","allOf":[{"$ref":"#/components/schemas/SampleSize"}]},"test":{"description":"The test used by the threshold model to calculate the baseline and boundary limits.","allOf":[{"$ref":"#/components/schemas/ModelTest"}]},"upper_boundary":{"nullable":true,"description":"The upper boundary used to calculate the upper boundary limit. The requirements for this field depend on which `test` is selected.","allOf":[{"$ref":"#/components/schemas/Boundary"}]},"window":{"nullable":true,"description":"The window of time for samples used to perform the test, in seconds. Samples outside of this window will be omitted.","allOf":[{"$ref":"#/components/schemas/Window"}]}},"required":["test"]},"ModelTest":{"type":"string","enum":["static","percentage","z_score","t_test","log_normal","iqr","delta_iqr"]},"ModelUuid":{"type":"string","format":"uuid"},"NameId":{"type":"string"},"NonEmpty":{"type":"string"},"OrganizationRole":{"oneOf":[{"description":"The organization leader role.","type":"string","enum":["leader"]}]},"OrganizationUuid":{"type":"string","format":"uuid"},"PlanLevel":{"type":"string","enum":["free","team","enterprise"]},"PlanStatus":{"type":"string","enum":["active","canceled","incomplete","incomplete_expired","past_due","paused","trialing","unpaid"]},"PlotUuid":{"type":"string","format":"uuid"},"ProjectUuid":{"type":"string","format":"uuid"},"ReportUuid":{"type":"string","format":"uuid"},"ResourceId":{"type":"string"},"ResourceName":{"type":"string"},"SampleSize":{"type":"integer","format":"uint32","minimum":0},"Secret":{"type":"string"},"ServerLog":{"oneOf":[{"type":"object","properties":{"stderr_terminal":{"type":"object","properties":{"level":{"$ref":"#/components/schemas/LogLevel"}},"required":["level"]}},"required":["stderr_terminal"],"additionalProperties":false},{"type":"object","properties":{"file":{"type":"object","properties":{"if_exists":{"$ref":"#/components/schemas/IfExists"},"level":{"$ref":"#/components/schemas/LogLevel"},"path":{"type":"string"}},"required":["if_exists","level","path"]}},"required":["file"],"additionalProperties":false}]},"ServerUuid":{"type":"string","format":"uuid"},"Slug":{"type":"string"},"TestbedUuid":{"type":"string","format":"uuid"},"ThresholdUuid":{"type":"string","format":"uuid"},"TokenUuid":{"type":"string","format":"uuid"},"UpdateAlertStatus":{"oneOf":[{"description":"The alert is active.","type":"string","enum":["active"]},{"description":"The alert has been dismissed by a user.","type":"string","enum":["dismissed"]}]},"Url":{"type":"string"},"UsageKind":{"oneOf":[{"description":"Bencher Cloud (Free)","type":"string","enum":["cloud_free"]},{"description":"Bencher Cloud (Metered)","type":"string","enum":["cloud_metered"]},{"description":"Bencher Cloud (Licensed)","type":"string","enum":["cloud_licensed"]},{"description":"Bencher Self-Hosted (Licensed) via Bencher Cloud","type":"string","enum":["cloud_self_hosted_licensed"]},{"description":"Bencher Self-Hosted (Free)","type":"string","enum":["self_hosted_free"]},{"description":"Bencher Self-Hosted (Licensed)","type":"string","enum":["self_hosted_licensed"]}]},"UserName":{"type":"string"},"UserUuid":{"type":"string","format":"uuid"},"VersionNumber":{"type":"integer","format":"uint32","minimum":0},"Visibility":{"type":"string","enum":["public","private"]},"Window":{"type":"integer","format":"uint32","minimum":0},"XAxis":{"type":"string","enum":["date_time","version"]},"JsonDirection":{"type":"string","enum":["asc","desc"]},"OrganizationsSort":{"oneOf":[{"description":"Sort by organization name.","type":"string","enum":["name"]}]},"Search":{"type":"string"},"OrganizationPermission":{"type":"string","enum":["view","create","edit","delete","manage","view_role","create_role","edit_role","delete_role"]},"OrgMembersSort":{"oneOf":[{"description":"Sort by user name.","type":"string","enum":["name"]}]},"OrgProjectsSort":{"oneOf":[{"description":"Sort by project name.","type":"string","enum":["name"]}]},"ProjectsSort":{"oneOf":[{"description":"Sort by project name.","type":"string","enum":["name"]}]},"ProjAlertsSort":{"oneOf":[{"description":"Sort by alert creation date time.","type":"string","enum":["created"]},{"description":"Sort by alert modified date time.","type":"string","enum":["modified"]}]},"ProjectPermission":{"type":"string","enum":["view","create","edit","delete","manage","view_role","create_role","edit_role","delete_role"]},"ProjBenchmarksSort":{"oneOf":[{"description":"Sort by benchmark name.","type":"string","enum":["name"]}]},"ProjBranchesSort":{"oneOf":[{"description":"Sort by branch name.","type":"string","enum":["name"]}]},"ProjMeasuresSort":{"oneOf":[{"description":"Sort by measure name.","type":"string","enum":["name"]}]},"DateTimeMillis":{"$ref":"#/components/schemas/TimestampMillis"},"TimestampMillis":{"type":"integer","format":"int64"},"ProjPlotsSort":{"oneOf":[{"description":"Sort by plot index.","type":"string","enum":["index"]},{"description":"Sort by plot title.","type":"string","enum":["title"]}]},"ProjReportsSort":{"oneOf":[{"description":"Sort by date time.","type":"string","enum":["date_time"]}]},"ProjTestbedsSort":{"oneOf":[{"description":"Sort by testbed name.","type":"string","enum":["name"]}]},"ProjThresholdsSort":{"oneOf":[{"description":"Sort by threshold creation date time.","type":"string","enum":["created"]},{"description":"Sort by threshold modified date time.","type":"string","enum":["modified"]}]},"UsersSort":{"oneOf":[{"description":"Sort by user name.","type":"string","enum":["name"]}]},"UserTokensSort":{"oneOf":[{"description":"Sort by token name.","type":"string","enum":["name"]}]}},"responses":{"Error":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"tags":[{"name":"alerts","description":"Alerts"},{"name":"allowed"},{"name":"auth","description":"Auth"},{"name":"benchmarks","description":"Benchmarks"},{"name":"branches","description":"Branches"},{"name":"checkout"},{"name":"measures","description":"Measures"},{"name":"members"},{"name":"metrics","description":"Metrics"},{"name":"models","description":"Models"},{"name":"organizations","description":"Organizations"},{"name":"perf","description":"Perf Metrics"},{"name":"plan"},{"name":"plots","description":"Plots"},{"name":"projects","description":"Projects"},{"name":"reports","description":"Reports"},{"name":"server","description":"Server"},{"name":"stats"},{"name":"testbeds","description":"Testbeds"},{"name":"thresholds","description":"Thresholds"},{"name":"tokens","description":"API Tokens"},{"name":"usage"},{"name":"users","description":"Users"}]}'); +module.exports = JSON.parse('{"openapi":"3.0.3","info":{"title":"Bencher API","version":"0.4.22"},"paths":{"/":{"get":{"tags":["server"],"operationId":"server_root_get","responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"title":"Null","type":"string","enum":[null]}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["server","stats"],"operationId":"root_server_stats_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonServerStats"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"title":"Null","type":"string","enum":[null]}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/auth/accept":{"post":{"tags":["auth","organizations"],"operationId":"auth_accept_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAccept"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAuthAck"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/auth/confirm":{"post":{"tags":["auth"],"operationId":"auth_confirm_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonConfirm"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAuthUser"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/auth/github":{"post":{"tags":["auth"],"operationId":"auth_github_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonOAuth"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAuthUser"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/auth/login":{"post":{"tags":["auth"],"operationId":"auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonLogin"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAuthAck"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/auth/signup":{"post":{"tags":["auth"],"summary":"When a user signs up, a new personal organization is automatically created.","description":"Except when a user signs up with an invitation, then the user is just added to the inviting organization.","operationId":"auth_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonSignup"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAuthAck"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/checkout":{"post":{"tags":["checkout"],"operationId":"checkouts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewCheckout"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonCheckout"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/organizations":{"get":{"tags":["organizations"],"summary":"List organizations","description":"List all organizations where the user is a member. The user must have `view` permissions for each organization. By default, the organizations are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of organizations.","operationId":"organizations_get","parameters":[{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/OrganizationsSort"}},{"in":"query","name":"name","description":"Filter by organization name, exact match.","schema":{"$ref":"#/components/schemas/ResourceName"}},{"in":"query","name":"search","description":"Search by organization name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonOrganizations"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["organizations"],"summary":"Create an organization","description":"Create a new organization. The user must be authenticated to use this route. ➕ Bencher Plus: This route can be limited to admins on self-hosted instances.","operationId":"organization_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewOrganization"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonOrganization"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/organizations/{organization}":{"get":{"tags":["organizations"],"summary":"View an organization","description":"View an organization where the user is a member. The user must have `view` permissions for the organization.","operationId":"organization_get","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonOrganization"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["organizations"],"summary":"Delete an organization","description":"Delete an organization where the user is a member. The user must have `delete` permissions for the organization.","operationId":"organization_delete","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["organizations"],"summary":"Update an organization","description":"Update an organization where the user is a member. The user must have `edit` permissions for the organization. If updating the license, the user must have `manage` permissions for the organization.","operationId":"organization_patch","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateOrganization"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonOrganization"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/organizations/{organization}/allowed/{permission}":{"get":{"tags":["organizations","allowed"],"operationId":"org_allowed_get","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"permission","description":"The permission to check.","required":true,"schema":{"$ref":"#/components/schemas/OrganizationPermission"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAllowed"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/organizations/{organization}/members":{"get":{"tags":["organizations","members"],"summary":"List organization members","description":"List members for an organization. The user must have `view_role` permissions for the organization. By default, the members are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of members.","operationId":"org_members_get","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/OrgMembersSort"}},{"in":"query","name":"name","description":"Filter by user name, exact match.","schema":{"$ref":"#/components/schemas/UserName"}},{"in":"query","name":"search","description":"Search by user name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMembers"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["organizations","members"],"summary":"Invite a user to an organization","description":"Invite another user to become a member of an organization. The user must have `create_role` permissions for the organization. The invitee is sent an email with a link to accept the invitation, and they are not added to the organization until they accept the invitation.","operationId":"org_member_post","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewMember"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAuthAck"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/organizations/{organization}/members/{user}":{"get":{"tags":["organizations","members"],"summary":"View an organization member","description":"View a member of an organization. The user must have `view_role` permissions for the organization.","operationId":"org_member_get","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"user","description":"The slug or UUID for an organization member.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMember"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["organizations","members"],"summary":"Remove an organization member","description":"Remove a member member of an organization. The user must have `delete_role` permissions for the organization.","operationId":"org_member_delete","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"user","description":"The slug or UUID for an organization member.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["organizations","members"],"summary":"Update an organization member","description":"Update the role for a member of an organization. The user must have `edit_role` permissions for the organization.","operationId":"org_member_patch","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"user","description":"The slug or UUID for an organization member.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateMember"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMember"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/organizations/{organization}/plan":{"get":{"tags":["organizations","plan"],"operationId":"org_plan_get","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonPlan"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["organizations","plan"],"operationId":"org_plan_post","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewPlan"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonPlan"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["organizations","plan"],"operationId":"org_plan_delete","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"remote","schema":{"nullable":true,"type":"boolean"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/organizations/{organization}/projects":{"get":{"tags":["organizations","projects"],"summary":"List organization projects","description":"List projects for an organization. The user must have `view` permissions for the organization. By default, the projects are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of organization projects.","operationId":"org_projects_get","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/OrgProjectsSort"}},{"in":"query","name":"name","description":"Filter by project name, exact match.","schema":{"$ref":"#/components/schemas/ResourceName"}},{"in":"query","name":"search","description":"Search by project name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonProjects"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["organizations","projects"],"summary":"Create a project for an organization","description":"Create a new project for an organization. The user must have `create` permissions for the organization. The new project will have a `main` branch, a `localhost` testbed, `latency` and `throughput` measures, and a threshold for both measures. ➕ Bencher Plus: The project visibility must be `public` unless the organization has a valid Bencher Plus subscription.","operationId":"org_project_post","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewProject"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonProject"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/organizations/{organization}/usage":{"get":{"tags":["organizations","usage"],"summary":"View organization metrics usage","description":"View the metrics usage of an organization. The user must have `manage` permissions for the organization. ➕ Bencher Plus: This endpoint offers an estimate of metered usage and exact usage for licensed organizations, both on Bencher Cloud and Bencher Self-Hosted.","operationId":"org_usage_get","parameters":[{"in":"path","name":"organization","description":"The slug or UUID for an organization.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUsage"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects":{"get":{"tags":["projects"],"summary":"List projects","description":"List all projects. If the user is not authenticated, then only public projects are returned. If the user is authenticated, then all public projects and any private project where the user has `view` permissions are returned. By default, the projects are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of projects.","operationId":"projects_get","parameters":[{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjectsSort"}},{"in":"query","name":"name","description":"Filter by project name, exact match.","schema":{"$ref":"#/components/schemas/ResourceName"}},{"in":"query","name":"search","description":"Search by project name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonProjects"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}":{"get":{"tags":["projects"],"summary":"View a project","description":"View a project. If the user is not authenticated, then only a public project is available. If the user is authenticated, then any public project and any private project where the user has `view` permissions is available.","operationId":"project_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonProject"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["projects"],"summary":"Delete a project","description":"Delete a project. The user must have `delete` permissions for the project.","operationId":"project_delete","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["projects"],"summary":"Update a project","description":"Update a project. The user must have `edit` permissions for the project.","operationId":"project_patch","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateProject"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonProject"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/alerts":{"get":{"tags":["projects","alerts"],"summary":"List alerts for a project","description":"List all alerts for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project. By default, the alerts are sorted by status (active then dismissed) and modification date time in reverse chronological order. The HTTP response header `X-Total-Count` contains the total number of alerts.","operationId":"proj_alerts_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjAlertsSort"}},{"in":"query","name":"archived","description":"If set to `true`, only returns archived alerts. If not set or set to `false`, only returns alerts with non-archived branches, testbeds, or measures.","schema":{"nullable":true,"type":"boolean"}},{"in":"query","name":"status","description":"Filter alerts by their status. If not set, returns all alerts.","schema":{"$ref":"#/components/schemas/AlertStatus"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAlerts"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/alerts/{alert}":{"get":{"tags":["projects","alerts"],"summary":"View an alert","description":"View an alert for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_alert_get","parameters":[{"in":"path","name":"alert","description":"The UUID for an alert.","required":true,"schema":{"$ref":"#/components/schemas/AlertUuid"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAlert"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["projects","alerts"],"summary":"Update an alert","description":"Update an alert for a project. The user must have `edit` permissions for the project. Use this endpoint to dismiss an alert.","operationId":"proj_alert_patch","parameters":[{"in":"path","name":"alert","description":"The UUID for an alert.","required":true,"schema":{"$ref":"#/components/schemas/AlertUuid"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateAlert"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAlert"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/allowed/{permission}":{"get":{"tags":["projects","allowed"],"operationId":"proj_allowed_get","parameters":[{"in":"path","name":"permission","description":"The permission to check.","required":true,"schema":{"$ref":"#/components/schemas/ProjectPermission"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAllowed"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/benchmarks":{"get":{"tags":["projects","benchmarks"],"summary":"List benchmarks for a project","description":"List all benchmarks for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project. By default, the benchmarks are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of benchmarks.","operationId":"proj_benchmarks_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjBenchmarksSort"}},{"in":"query","name":"archived","description":"If set to `true`, only returns archived benchmarks. If not set or set to `false`, only returns non-archived benchmarks.","schema":{"nullable":true,"type":"boolean"}},{"in":"query","name":"name","description":"Filter by benchmark name, exact match.","schema":{"$ref":"#/components/schemas/BenchmarkName"}},{"in":"query","name":"search","description":"Search by benchmark name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBenchmarks"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["projects","benchmarks"],"summary":"Create a benchmark","description":"Create a benchmark for a project. The user must have `create` permissions for the project.","operationId":"proj_benchmark_post","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewBenchmark"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBenchmark"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/benchmarks/{benchmark}":{"get":{"tags":["projects","benchmarks"],"summary":"View a benchmark","description":"View a benchmark for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_benchmark_get","parameters":[{"in":"path","name":"benchmark","description":"The slug or UUID for a benchmark.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBenchmark"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["projects","benchmarks"],"summary":"Delete a benchmark","description":"Delete a benchmark for a project. The user must have `delete` permissions for the project. All reports that use this benchmark must be deleted first!","operationId":"proj_benchmark_delete","parameters":[{"in":"path","name":"benchmark","description":"The slug or UUID for a benchmark.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["projects","benchmarks"],"summary":"Update a benchmark","description":"Update a benchmark for a project. The user must have `edit` permissions for the project.","operationId":"proj_benchmark_patch","parameters":[{"in":"path","name":"benchmark","description":"The slug or UUID for a benchmark.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateBenchmark"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBenchmark"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/branches":{"get":{"tags":["projects","branches"],"summary":"List branches for a project","description":"List all branches for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project. By default, the branches are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of branches.","operationId":"proj_branches_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjBranchesSort"}},{"in":"query","name":"archived","description":"If set to `true`, only returns archived branches, if set to `true`. If not set or set to `false`, only returns non-archived branches.","schema":{"nullable":true,"type":"boolean"}},{"in":"query","name":"name","description":"Filter by branch name, exact match.","schema":{"$ref":"#/components/schemas/BranchName"}},{"in":"query","name":"search","description":"Search by branch name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBranches"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["projects","branches"],"summary":"Create a branch","description":"Create a branch for a project. The user must have `create` permissions for the project.","operationId":"proj_branch_post","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewBranch"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBranch"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/branches/{branch}":{"get":{"tags":["projects","branches"],"summary":"View a branch","description":"View a branch for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_branch_get","parameters":[{"in":"path","name":"branch","description":"The slug or UUID for a branch.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"head","description":"View the branch with the specified head UUID. This can be used to view a branch with a historical head that has since been replaced by a new head. If not specified, then the current head is used.","schema":{"$ref":"#/components/schemas/HeadUuid"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBranch"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["projects","branches"],"summary":"Delete a branch","description":"Delete a branch for a project. The user must have `delete` permissions for the project. All reports and thresholds that use this branch must be deleted first!","operationId":"proj_branch_delete","parameters":[{"in":"path","name":"branch","description":"The slug or UUID for a branch.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["projects","branches"],"summary":"Update a branch","description":"Update a branch for a project. The user must have `edit` permissions for the project.","operationId":"proj_branch_patch","parameters":[{"in":"path","name":"branch","description":"The slug or UUID for a branch.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateBranch"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBranch"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/measures":{"get":{"tags":["projects","measures"],"summary":"List measures for a project","description":"List all measures for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project. By default, the measures are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of measures.","operationId":"proj_measures_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjMeasuresSort"}},{"in":"query","name":"archived","description":"If set to `true`, only returns archived measures if set to `true`. If not set or set to `false`, only returns non-archived measures.","schema":{"nullable":true,"type":"boolean"}},{"in":"query","name":"name","description":"Filter by measure name, exact match.","schema":{"$ref":"#/components/schemas/ResourceName"}},{"in":"query","name":"search","description":"Search by measure name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMeasures"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["projects","measures"],"summary":"Create a measure","description":"Create a measure for a project. The user must have `create` permissions for the project.","operationId":"proj_measure_post","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewMeasure"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMeasure"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/measures/{measure}":{"get":{"tags":["projects","measures"],"summary":"View a measure","description":"View a measure for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_measure_get","parameters":[{"in":"path","name":"measure","description":"The slug or UUID for a measure.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMeasure"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["projects","measures"],"summary":"Delete a measure","description":"Delete a measure for a project. The user must have `delete` permissions for the project. All reports and thresholds that use this measure must be deleted first!","operationId":"proj_measure_delete","parameters":[{"in":"path","name":"measure","description":"The slug or UUID for a measure.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["projects","measures"],"summary":"Update a measure","description":"Update a measure for a project. The user must have `edit` permissions for the project.","operationId":"proj_measure_patch","parameters":[{"in":"path","name":"measure","description":"The slug or UUID for a measure.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateMeasure"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMeasure"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/metrics/{metric}":{"get":{"tags":["projects","metrics"],"summary":"View a metric","description":"View a metric for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_metric_get","parameters":[{"in":"path","name":"metric","description":"The UUID for a metric.","required":true,"schema":{"$ref":"#/components/schemas/MetricUuid"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonOneMetric"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/perf":{"get":{"tags":["projects","perf"],"summary":"Query project performance metrics","description":"Query the performance metrics for a project. The query results are every permutation of each branch, testbed, benchmark, and measure. There is a limit of 255 permutations for a single request. Therefore, only the first 255 permutations are returned. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_perf_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"benchmarks","description":"A comma separated list of benchmark UUIDs to query.","required":true,"schema":{"type":"string"}},{"in":"query","name":"branches","description":"A comma separated list of branch UUIDs to query.","required":true,"schema":{"type":"string"}},{"in":"query","name":"end_time","description":"Search for metrics before the given date time in milliseconds.","schema":{"$ref":"#/components/schemas/DateTimeMillis"}},{"in":"query","name":"heads","description":"An optional comma separated list of branch head UUIDs. To not specify a particular branch head leave an empty entry in the list.","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"measures","description":"A comma separated list of measure UUIDs to query.","required":true,"schema":{"type":"string"}},{"in":"query","name":"start_time","description":"Search for metrics after the given date time in milliseconds.","schema":{"$ref":"#/components/schemas/DateTimeMillis"}},{"in":"query","name":"testbeds","description":"A comma separated list of testbed UUIDs to query.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonPerf"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/perf/img":{"get":{"tags":["projects","perf"],"summary":"Generate a dynamic image of project performance metrics","description":"Generate a dynamic image of performance metrics for a project. The query results are every permutation of each branch, testbed, benchmark, and measure. There is a limit of 8 permutations for a single image. Therefore, only the first 8 permutations are plotted. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_perf_img_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"benchmarks","description":"A comma separated list of benchmark UUIDs to query.","required":true,"schema":{"type":"string"}},{"in":"query","name":"branches","description":"A comma separated list of branch UUIDs to query.","required":true,"schema":{"type":"string"}},{"in":"query","name":"end_time","description":"Search for metrics before the given date time in milliseconds.","schema":{"$ref":"#/components/schemas/DateTimeMillis"}},{"in":"query","name":"heads","description":"An optional comma separated list of branch head UUIDs. To not specify a particular branch head leave an empty entry in the list.","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"measures","description":"A comma separated list of measure UUIDs to query.","required":true,"schema":{"type":"string"}},{"in":"query","name":"start_time","description":"Search for metrics after the given date time in milliseconds.","schema":{"$ref":"#/components/schemas/DateTimeMillis"}},{"in":"query","name":"testbeds","description":"A comma separated list of testbed UUIDs to query.","required":true,"schema":{"type":"string"}},{"in":"query","name":"title","description":"The title for the perf plot. If not provided, the project name will be used.","schema":{"nullable":true,"type":"string"}}],"responses":{"default":{"description":"","content":{"*/*":{"schema":{}}}}}}},"/v0/projects/{project}/plots":{"get":{"tags":["projects","plots"],"summary":"List plots for a project","description":"List all plots for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project. By default, the plots are sorted in their index order. The HTTP response header `X-Total-Count` contains the total number of plots.","operationId":"proj_plots_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjPlotsSort"}},{"in":"query","name":"search","description":"Search by plot title or UUID.","schema":{"$ref":"#/components/schemas/Search"}},{"in":"query","name":"title","description":"Filter by plot title, exact match.","schema":{"$ref":"#/components/schemas/ResourceName"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonPlots"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["projects","plots"],"summary":"Create a plot","description":"Create a plot for a project. The user must have `create` permissions for the project. A project can have a maximum of 64 plots at a time.","operationId":"proj_plot_post","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewPlot"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonPlot"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/plots/{plot}":{"get":{"tags":["projects","plots"],"summary":"View a plot","description":"View a plot for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_plot_get","parameters":[{"in":"path","name":"plot","description":"The UUID for a plot.","required":true,"schema":{"$ref":"#/components/schemas/PlotUuid"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonPlot"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["projects","plots"],"summary":"Delete a plot","description":"Delete a plot for a project. The user must have `delete` permissions for the project.","operationId":"proj_plot_delete","parameters":[{"in":"path","name":"plot","description":"The UUID for a plot.","required":true,"schema":{"$ref":"#/components/schemas/PlotUuid"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["projects","plots"],"summary":"Update a plot","description":"Update a plot for a project. The user must have `edit` permissions for the project.","operationId":"proj_plot_patch","parameters":[{"in":"path","name":"plot","description":"The UUID for a plot.","required":true,"schema":{"$ref":"#/components/schemas/PlotUuid"}},{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdatePlot"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonPlot"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/reports":{"get":{"tags":["projects","reports"],"summary":"List reports for a project","description":"List all reports for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project. By default, the reports are sorted by date time in reverse chronological order. The HTTP response header `X-Total-Count` contains the total number of reports.","operationId":"proj_reports_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjReportsSort"}},{"in":"query","name":"archived","description":"If set to `true`, only return reports with an archived branch or testbed. If not set or set to `false`, only returns reports with non-archived branches and testbeds.","schema":{"nullable":true,"type":"boolean"}},{"in":"query","name":"branch","description":"Filter by branch UUID, slug, or name exact match.","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"end_time","description":"Filter for reports before the given date time in milliseconds.","schema":{"$ref":"#/components/schemas/DateTimeMillis"}},{"in":"query","name":"start_time","description":"Filter for reports after the given date time in milliseconds.","schema":{"$ref":"#/components/schemas/DateTimeMillis"}},{"in":"query","name":"testbed","description":"Filter by testbed UUID, slug, or name exact match.","schema":{"nullable":true,"type":"string"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonReports"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["projects","reports"],"summary":"Create a report","description":"Create a report for a project. The user must have `create` permissions for the project. If using the Bencher CLI, it is recommended to use the `bencher run` subcommand instead of trying to create a report manually.","operationId":"proj_report_post","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewReport"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonReport"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/reports/{report}":{"get":{"tags":["projects","reports"],"summary":"View a report","description":"View a report for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_report_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"report","description":"The UUID for a report.","required":true,"schema":{"$ref":"#/components/schemas/ReportUuid"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonReport"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["projects","reports"],"summary":"Delete a report","description":"Delete a report for a project. The user must have `delete` permissions for the project. If there are no more reports for a branch version, then that version will be deleted. All later branch versions will have their version numbers decremented.","operationId":"proj_report_delete","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"report","description":"The UUID for a report.","required":true,"schema":{"$ref":"#/components/schemas/ReportUuid"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/testbeds":{"get":{"tags":["projects","testbeds"],"summary":"List testbeds for a project","description":"List all testbeds for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project. By default, the testbeds are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of testbeds.","operationId":"proj_testbeds_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjTestbedsSort"}},{"in":"query","name":"archived","description":"If set to `true`, only returns archived testbeds. If not set or set to `false`, only returns non-archived testbeds.","schema":{"nullable":true,"type":"boolean"}},{"in":"query","name":"name","description":"Filter by testbed name, exact match.","schema":{"$ref":"#/components/schemas/ResourceName"}},{"in":"query","name":"search","description":"Search by testbed name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonTestbeds"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["projects","testbeds"],"summary":"Create a testbed","description":"Create a testbed for a project. The user must have `create` permissions for the project.","operationId":"proj_testbed_post","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewTestbed"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonTestbed"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/testbeds/{testbed}":{"get":{"tags":["projects","testbeds"],"summary":"View a testbed","description":"View a testbed for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_testbed_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"testbed","description":"The slug or UUID for a testbed.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonTestbed"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["projects","testbeds"],"summary":"Delete a testbed","description":"Delete a testbed for a project. The user must have `delete` permissions for the project. All reports and thresholds that use this testbed must be deleted first!","operationId":"proj_testbed_delete","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"testbed","description":"The slug or UUID for a testbed.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["projects","testbeds"],"summary":"Update a testbed","description":"Update a testbed for a project. The user must have `edit` permissions for the project.","operationId":"proj_testbed_patch","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"testbed","description":"The slug or UUID for a testbed.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateTestbed"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonTestbed"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/thresholds":{"get":{"tags":["projects","thresholds"],"summary":"List thresholds for a project","description":"List all thresholds for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project. By default, the thresholds are sorted by creation date time in chronological order. The HTTP response header `X-Total-Count` contains the total number of thresholds.","operationId":"proj_thresholds_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/ProjThresholdsSort"}},{"in":"query","name":"archived","description":"If set to `true`, only return thresholds with an archived branch, testbed, or measure. If not set or set to `false`, only returns thresholds with non-archived branches, testbeds, and measures.","schema":{"nullable":true,"type":"boolean"}},{"in":"query","name":"branch","description":"Filter by branch name, exact match.","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"measure","description":"Filter by measure name, exact match.","schema":{"nullable":true,"type":"string"}},{"in":"query","name":"testbed","description":"Filter by testbed name, exact match.","schema":{"nullable":true,"type":"string"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonThresholds"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["projects","thresholds"],"summary":"Create a threshold","description":"Create a threshold for a project. The user must have `create` permissions for the project. There can only be one threshold for any unique combination of: branch, testbed, and measure.","operationId":"proj_threshold_post","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewThreshold"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonThreshold"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/thresholds/{threshold}":{"get":{"tags":["projects","thresholds"],"summary":"View a threshold","description":"View a threshold for a project. If the project is public, then the user does not need to be authenticated. If the project is private, then the user must be authenticated and have `view` permissions for the project.","operationId":"proj_threshold_get","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"threshold","description":"The UUID for a threshold.","required":true,"schema":{"$ref":"#/components/schemas/ThresholdUuid"}},{"in":"query","name":"model","description":"View the threshold with the specified model UUID. This can be used to view a threshold with a historical model that has since been replaced by a new model. If not specified, then the current model is used.","schema":{"$ref":"#/components/schemas/ModelUuid"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonThreshold"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"put":{"tags":["projects","thresholds"],"summary":"Update a threshold","description":"Update a threshold for a project. The user must have `edit` permissions for the project. The new model will be added to the threshold and used going forward. The old model will be replaced but still show up in the report history and alerts created when it was active.","operationId":"proj_threshold_put","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"threshold","description":"The UUID for a threshold.","required":true,"schema":{"$ref":"#/components/schemas/ThresholdUuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateThreshold"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonThreshold"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"delete":{"tags":["projects","thresholds"],"summary":"Delete a threshold","description":"Delete a threshold for a project. The user must have `delete` permissions for the project. A thresholds must be deleted before its branch, testbed, or measure can be deleted.","operationId":"proj_threshold_delete","parameters":[{"in":"path","name":"project","description":"The slug or UUID for a project.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"path","name":"threshold","description":"The UUID for a threshold.","required":true,"schema":{"$ref":"#/components/schemas/ThresholdUuid"}}],"responses":{"204":{"description":"successful deletion","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/server/backup":{"post":{"tags":["server"],"summary":"Backup server","description":"Backup the API server database to blob storage. The user must be an admin on the server to use this route.","operationId":"server_backup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBackup"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonBackupCreated"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/server/config":{"get":{"tags":["server"],"summary":"View server configuration","description":"View the API server configuration. The user must be an admin on the server to use this route.","operationId":"server_config_get","responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonConfig"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"put":{"tags":["server"],"summary":"Update server configuration","description":"Update the API server configuration. The user must be an admin on the server to use this route. Updating the configuration will cause the server to restart.","operationId":"server_config_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateConfig"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonConfig"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/server/config/console":{"get":{"tags":["server"],"summary":"View console configuration","description":"View the Bencher Console configuration managed by the API server. This is a public route and does not require authentication.","operationId":"server_config_console_get","responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonConsole"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/server/restart":{"post":{"tags":["server"],"summary":"Restart server","description":"Restart the API server. The user must be an admin on the server to use this route.","operationId":"server_restart_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonRestart"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"title":"Null","type":"string","enum":[null]}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/server/spec":{"get":{"tags":["server"],"summary":"View server OpenAPI specification","description":"View the API server OpenAPI specification. The OpenAPI specification can be used to generate API client code.","operationId":"server_spec_get","responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonSpec"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/server/stats":{"get":{"tags":["server","stats"],"summary":"View server stats","description":"➕ Bencher Plus: View the API server stats. The user must be an admin on the server to use this route.","operationId":"server_stats_get","responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonServerStats"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["server","stats"],"operationId":"server_stats_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonServerStats"}}},"required":true},"responses":{"202":{"description":"successfully enqueued operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"title":"Null","type":"string","enum":[null]}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/server/version":{"get":{"tags":["server"],"summary":"View server version","description":"View the API server version. This is used to verify that the CLI and API server are compatible. It can also be used as a simple endpoint to verify that the server is running.","operationId":"server_version_get","responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonApiVersion"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/users":{"get":{"tags":["users"],"summary":"List users","description":"List all users. The user must be an admin on the server to use this route. The HTTP response header `X-Total-Count` contains the total number of users.","operationId":"users_get","parameters":[{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/UsersSort"}},{"in":"query","name":"name","description":"Filter by user name, exact match.","schema":{"$ref":"#/components/schemas/UserName"}},{"in":"query","name":"search","description":"Search by user name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUsers"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/users/{user}":{"get":{"tags":["users"],"summary":"View a user","description":"View a user. Only the authenticated user themselves and server admins have access to this endpoint. To view users within your organization, use the organization members endpoints.","operationId":"user_get","parameters":[{"in":"path","name":"user","description":"The slug or UUID for a user.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUser"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["users"],"summary":"Update a user","description":"Update a user. Only the authenticated user themselves and server admins have access to this endpoint. Some fields can only be updated by an admin. To manage users within your organization, use the organization members endpoints.","operationId":"user_patch","parameters":[{"in":"path","name":"user","description":"The slug or UUID for a user.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateUser"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUser"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/users/{user}/tokens":{"get":{"tags":["users","tokens"],"summary":"List tokens for a user","description":"List all API tokens for a user. Only the authenticated user themselves and server admins have access to this endpoint. By default, the tokens are sorted in alphabetical order by name. The HTTP response header `X-Total-Count` contains the total number of tokens.","operationId":"user_tokens_get","parameters":[{"in":"path","name":"user","description":"The slug or UUID for a user.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}},{"in":"query","name":"direction","description":"The direction to sort by. If not specified, the default sort direction is used.","schema":{"$ref":"#/components/schemas/JsonDirection"}},{"in":"query","name":"page","description":"The page number to return. If not specified, the first page is returned.","schema":{"nullable":true,"type":"integer","format":"uint32","minimum":0}},{"in":"query","name":"per_page","description":"The number of items to return per page. If not specified, the default number of items per page (8) is used.","schema":{"nullable":true,"type":"integer","format":"uint8","minimum":0}},{"in":"query","name":"sort","description":"The field to sort by. If not specified, the default sort field is used.","schema":{"$ref":"#/components/schemas/UserTokensSort"}},{"in":"query","name":"name","description":"Filter by token name, exact match.","schema":{"$ref":"#/components/schemas/ResourceName"}},{"in":"query","name":"search","description":"Search by token name, slug, or UUID.","schema":{"$ref":"#/components/schemas/Search"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonTokens"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"post":{"tags":["users","tokens"],"summary":"Create a token","description":"Create an API token for a user. Only the authenticated user themselves and server admins have access to this endpoint.","operationId":"user_token_post","parameters":[{"in":"path","name":"user","description":"The slug or UUID for a user.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewToken"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonToken"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/users/{user}/tokens/{token}":{"get":{"tags":["users","tokens"],"summary":"View a token","description":"View an API token for a user. Only the authenticated user themselves and server admins have access to this endpoint.","operationId":"user_token_get","parameters":[{"in":"path","name":"token","description":"The UUID for a token.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"path","name":"user","description":"The slug or UUID for a user.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonToken"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}},"patch":{"tags":["users","tokens"],"summary":"Update a token","description":"Update an API token for a user. Only the authenticated user themselves and server admins have access to this endpoint.","operationId":"user_token_patch","parameters":[{"in":"path","name":"token","description":"The UUID for a token.","required":true,"schema":{"type":"string","format":"uuid"}},{"in":"path","name":"user","description":"The slug or UUID for a user.","required":true,"schema":{"$ref":"#/components/schemas/ResourceId"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonUpdateToken"}}},"required":true},"responses":{"200":{"description":"successful operation","headers":{"access-control-allow-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-methods":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-allow-origin":{"style":"simple","required":true,"schema":{"type":"string"}},"access-control-expose-headers":{"style":"simple","required":true,"schema":{"type":"string"}},"x-total-count":{"style":"simple","required":true,"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonToken"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}}},"components":{"schemas":{"Adapter":{"type":"string","enum":["magic","json","rust","rust_bench","rust_criterion","rust_iai","rust_iai_callgrind","cpp","cpp_google","cpp_catch2","go","go_bench","java","java_jmh","c_sharp","c_sharp_dot_net","js","js_benchmark","js_time","python","python_asv","python_pytest","ruby","ruby_benchmark","shell","shell_hyperfine"]},"AlertStatus":{"oneOf":[{"description":"The alert is active.","type":"string","enum":["active"]},{"description":"The alert has been dismissed by a user.","type":"string","enum":["dismissed"]},{"description":"The alert has been silenced by the system.","type":"string","enum":["silenced"]}]},"AlertUuid":{"type":"string","format":"uuid"},"BenchmarkName":{"type":"string"},"BenchmarkUuid":{"type":"string","format":"uuid"},"BigInt":{"type":"integer","format":"uint64","minimum":0},"Boundary":{"type":"number","format":"double"},"BoundaryLimit":{"type":"string","enum":["lower","upper"]},"BranchName":{"type":"string"},"BranchUuid":{"type":"string","format":"uuid"},"CardBrand":{"type":"string","enum":["amex","diners","discover","jcb","mastercard","unionpay","visa","unknown"]},"DataStore":{"oneOf":[{"type":"object","properties":{"access_key_id":{"type":"string"},"access_point":{"type":"string"},"secret_access_key":{"$ref":"#/components/schemas/Secret"},"service":{"type":"string","enum":["aws_s3"]}},"required":["access_key_id","access_point","secret_access_key","service"]}]},"DateTime":{"type":"string","format":"date-time"},"Email":{"type":"string"},"Entitlements":{"type":"integer","format":"uint32","minimum":0},"Error":{"description":"Error information from a response.","type":"object","properties":{"error_code":{"type":"string"},"message":{"type":"string"},"request_id":{"type":"string"}},"required":["message","request_id"]},"ExpirationMonth":{"type":"integer","format":"int32"},"ExpirationYear":{"type":"integer","format":"int32"},"GitHash":{"type":"string"},"HeadUuid":{"type":"string","format":"uuid"},"IfExists":{"type":"string","enum":["fail","truncate","append"]},"Index":{"type":"integer","format":"uint8","minimum":0},"Iteration":{"type":"integer","format":"uint32","minimum":0},"JsonAccept":{"type":"object","properties":{"invite":{"$ref":"#/components/schemas/Jwt"}},"required":["invite"]},"JsonAlert":{"type":"object","properties":{"benchmark":{"$ref":"#/components/schemas/JsonBenchmark"},"boundary":{"$ref":"#/components/schemas/JsonBoundary"},"created":{"$ref":"#/components/schemas/DateTime"},"iteration":{"$ref":"#/components/schemas/Iteration"},"limit":{"$ref":"#/components/schemas/BoundaryLimit"},"metric":{"$ref":"#/components/schemas/JsonMetric"},"modified":{"$ref":"#/components/schemas/DateTime"},"report":{"$ref":"#/components/schemas/ReportUuid"},"status":{"$ref":"#/components/schemas/AlertStatus"},"threshold":{"$ref":"#/components/schemas/JsonThreshold"},"uuid":{"$ref":"#/components/schemas/AlertUuid"}},"required":["benchmark","boundary","created","iteration","limit","metric","modified","report","status","threshold","uuid"]},"JsonAlerts":{"type":"array","items":{"$ref":"#/components/schemas/JsonAlert"}},"JsonAllowed":{"type":"object","properties":{"allowed":{"type":"boolean"}},"required":["allowed"]},"JsonApiVersion":{"type":"object","properties":{"version":{"type":"string"}},"required":["version"]},"JsonAuthAck":{"type":"object","properties":{"email":{"$ref":"#/components/schemas/Email"}},"required":["email"]},"JsonAuthUser":{"type":"object","properties":{"creation":{"$ref":"#/components/schemas/DateTime"},"expiration":{"$ref":"#/components/schemas/DateTime"},"token":{"$ref":"#/components/schemas/Jwt"},"user":{"$ref":"#/components/schemas/JsonUser"}},"required":["creation","expiration","token","user"]},"JsonAverage":{"type":"string","enum":["mean","median"]},"JsonBackup":{"type":"object","properties":{"compress":{"nullable":true,"type":"boolean"},"data_store":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonDataStore"}]},"rm":{"nullable":true,"type":"boolean"}}},"JsonBackupCreated":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"}},"required":["created"]},"JsonBenchmark":{"type":"object","properties":{"archived":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DateTime"}]},"created":{"$ref":"#/components/schemas/DateTime"},"modified":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/BenchmarkName"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"slug":{"$ref":"#/components/schemas/Slug"},"uuid":{"$ref":"#/components/schemas/BenchmarkUuid"}},"required":["created","modified","name","project","slug","uuid"]},"JsonBenchmarks":{"type":"array","items":{"$ref":"#/components/schemas/JsonBenchmark"}},"JsonBilling":{"type":"object","properties":{"products":{"$ref":"#/components/schemas/JsonProducts"},"secret_key":{"$ref":"#/components/schemas/Secret"}},"required":["products","secret_key"]},"JsonBingIndex":{"type":"object","properties":{"key":{"$ref":"#/components/schemas/NonEmpty"},"key_location":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Url"}]}},"required":["key"]},"JsonBoundary":{"type":"object","properties":{"baseline":{"nullable":true,"type":"number","format":"double"},"lower_limit":{"nullable":true,"type":"number","format":"double"},"upper_limit":{"nullable":true,"type":"number","format":"double"}}},"JsonBranch":{"type":"object","properties":{"archived":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DateTime"}]},"created":{"$ref":"#/components/schemas/DateTime"},"head":{"$ref":"#/components/schemas/JsonHead"},"modified":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/BranchName"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"slug":{"$ref":"#/components/schemas/Slug"},"uuid":{"$ref":"#/components/schemas/BranchUuid"}},"required":["created","head","modified","name","project","slug","uuid"]},"JsonBranches":{"type":"array","items":{"$ref":"#/components/schemas/JsonBranch"}},"JsonCardDetails":{"type":"object","properties":{"brand":{"$ref":"#/components/schemas/CardBrand"},"exp_month":{"$ref":"#/components/schemas/ExpirationMonth"},"exp_year":{"$ref":"#/components/schemas/ExpirationYear"},"last_four":{"$ref":"#/components/schemas/LastFour"}},"required":["brand","exp_month","exp_year","last_four"]},"JsonCheckout":{"type":"object","properties":{"session":{"type":"string"},"url":{"type":"string"}},"required":["session","url"]},"JsonCloud":{"type":"object","properties":{"billing":{"$ref":"#/components/schemas/JsonBilling"},"index":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonIndex"}]},"license_pem":{"$ref":"#/components/schemas/Secret"},"sentry":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Secret"}]}},"required":["billing","license_pem"]},"JsonCohort":{"type":"object","properties":{"month":{"type":"integer","format":"uint64","minimum":0},"total":{"type":"integer","format":"uint64","minimum":0},"week":{"type":"integer","format":"uint64","minimum":0}},"required":["month","total","week"]},"JsonCohortAvg":{"type":"object","properties":{"month":{"type":"number","format":"double"},"total":{"type":"number","format":"double"},"week":{"type":"number","format":"double"}},"required":["month","total","week"]},"JsonConfig":{"type":"object","properties":{"console":{"$ref":"#/components/schemas/JsonConsole"},"database":{"$ref":"#/components/schemas/JsonDatabase"},"logging":{"$ref":"#/components/schemas/JsonLogging"},"plus":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonPlus"}]},"security":{"$ref":"#/components/schemas/JsonSecurity"},"server":{"$ref":"#/components/schemas/JsonServer2"},"smtp":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonSmtp"}]}},"required":["console","database","logging","security","server"]},"JsonConfirm":{"type":"object","properties":{"token":{"$ref":"#/components/schemas/Jwt"}},"required":["token"]},"JsonConsole":{"type":"object","properties":{"url":{"description":"The URL for the Bencher Console UI.","allOf":[{"$ref":"#/components/schemas/Url"}]}},"required":["url"]},"JsonCustomer":{"type":"object","properties":{"email":{"$ref":"#/components/schemas/Email"},"name":{"$ref":"#/components/schemas/NonEmpty"},"uuid":{"$ref":"#/components/schemas/UserUuid"}},"required":["email","name","uuid"]},"JsonDataStore":{"type":"string","enum":["aws_s3"]},"JsonDatabase":{"type":"object","properties":{"data_store":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DataStore"}]},"file":{"type":"string"}},"required":["file"]},"JsonFold":{"type":"string","enum":["min","max","mean","median"]},"JsonGitHub":{"type":"object","properties":{"client_id":{"$ref":"#/components/schemas/NonEmpty"},"client_secret":{"$ref":"#/components/schemas/Secret"}},"required":["client_id","client_secret"]},"JsonGoogleIndex":{"type":"object","properties":{"client_email":{"$ref":"#/components/schemas/NonEmpty"},"private_key":{"$ref":"#/components/schemas/Secret"},"token_uri":{"$ref":"#/components/schemas/NonEmpty"}},"required":["client_email","private_key","token_uri"]},"JsonHead":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"},"replaced":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DateTime"}]},"start_point":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonStartPoint"}]},"uuid":{"$ref":"#/components/schemas/HeadUuid"},"version":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonVersion"}]}},"required":["created","uuid"]},"JsonIndex":{"type":"object","properties":{"bing":{"$ref":"#/components/schemas/JsonBingIndex"},"google":{"$ref":"#/components/schemas/JsonGoogleIndex"}},"required":["bing","google"]},"JsonLicense":{"type":"object","properties":{"entitlements":{"$ref":"#/components/schemas/Entitlements"},"expiration":{"$ref":"#/components/schemas/DateTime"},"issued_at":{"$ref":"#/components/schemas/DateTime"},"key":{"$ref":"#/components/schemas/Jwt"},"level":{"$ref":"#/components/schemas/PlanLevel"},"organization":{"$ref":"#/components/schemas/OrganizationUuid"},"self_hosted":{"type":"boolean"}},"required":["entitlements","expiration","issued_at","key","level","organization","self_hosted"]},"JsonLitestream":{"type":"object","properties":{"busy_timeout":{"nullable":true,"description":"The database busy timeout in milliseconds","type":"integer","format":"uint32","minimum":0},"replicas":{"description":"Disaster recovery replicas","type":"array","items":{"$ref":"#/components/schemas/JsonReplica"}}},"required":["replicas"]},"JsonLogging":{"type":"object","properties":{"log":{"$ref":"#/components/schemas/ServerLog"},"name":{"type":"string"}},"required":["log","name"]},"JsonLogin":{"type":"object","properties":{"email":{"$ref":"#/components/schemas/Email"},"invite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Jwt"}]},"plan":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/PlanLevel"}]}},"required":["email"]},"JsonMeasure":{"type":"object","properties":{"archived":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DateTime"}]},"created":{"$ref":"#/components/schemas/DateTime"},"modified":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/ResourceName"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"slug":{"$ref":"#/components/schemas/Slug"},"units":{"$ref":"#/components/schemas/ResourceName"},"uuid":{"$ref":"#/components/schemas/MeasureUuid"}},"required":["created","modified","name","project","slug","units","uuid"]},"JsonMeasures":{"type":"array","items":{"$ref":"#/components/schemas/JsonMeasure"}},"JsonMember":{"type":"object","properties":{"created":{"description":"The date time the member was created.","allOf":[{"$ref":"#/components/schemas/DateTime"}]},"email":{"description":"The member email.","allOf":[{"$ref":"#/components/schemas/Email"}]},"modified":{"description":"The date time the member was last modified.","allOf":[{"$ref":"#/components/schemas/DateTime"}]},"name":{"description":"The member user name.","allOf":[{"$ref":"#/components/schemas/UserName"}]},"role":{"description":"The member organization role.","allOf":[{"$ref":"#/components/schemas/OrganizationRole"}]},"slug":{"description":"The member slug.","allOf":[{"$ref":"#/components/schemas/Slug"}]},"uuid":{"description":"The member UUID.","allOf":[{"$ref":"#/components/schemas/UserUuid"}]}},"required":["created","email","modified","name","role","slug","uuid"]},"JsonMembers":{"type":"array","items":{"$ref":"#/components/schemas/JsonMember"}},"JsonMetric":{"type":"object","properties":{"lower_value":{"nullable":true,"type":"number","format":"double"},"upper_value":{"nullable":true,"type":"number","format":"double"},"uuid":{"$ref":"#/components/schemas/MetricUuid"},"value":{"type":"number","format":"double"}},"required":["uuid","value"]},"JsonModel":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"},"lower_boundary":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Boundary"}]},"max_sample_size":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SampleSize"}]},"min_sample_size":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/SampleSize"}]},"replaced":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DateTime"}]},"test":{"$ref":"#/components/schemas/ModelTest"},"upper_boundary":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Boundary"}]},"uuid":{"$ref":"#/components/schemas/ModelUuid"},"window":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Window"}]}},"required":["created","test","uuid"]},"JsonNewBenchmark":{"type":"object","properties":{"name":{"description":"The name of the benchmark. Maximum length is 1,024 characters.","allOf":[{"$ref":"#/components/schemas/BenchmarkName"}]},"slug":{"nullable":true,"description":"The preferred slug for the benchmark. If not provided, the slug will be generated from the name. If the provided or generated slug is already in use, a unique slug will be generated. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]}},"required":["name"]},"JsonNewBranch":{"type":"object","properties":{"name":{"description":"The name of the branch. Maximum length is 256 characters.","allOf":[{"$ref":"#/components/schemas/BranchName"}]},"slug":{"nullable":true,"description":"The preferred slug for the branch. If not provided, the slug will be generated from the name. If the provided or generated slug is already in use, a unique slug will be generated. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]},"start_point":{"nullable":true,"description":"The start point for the new branch. Historical branch versions from the start point branch will be shallow copied over to the new branch head. That is, historical metrics data for the start point branch will appear in queries for the new branch. For example, pull request branches often use their base branch as their start point branch. After the new branch is created, it is not kept in sync with the start point branch. If not provided, the new branch will have no historical data.","allOf":[{"$ref":"#/components/schemas/JsonNewStartPoint"}]}},"required":["name"]},"JsonNewCheckout":{"type":"object","properties":{"entitlements":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Entitlements"}]},"level":{"$ref":"#/components/schemas/PlanLevel"},"organization":{"$ref":"#/components/schemas/ResourceId"},"self_hosted":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/OrganizationUuid"}]}},"required":["level","organization"]},"JsonNewMeasure":{"type":"object","properties":{"name":{"description":"The name of the measure. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"description":"The preferred slug for the measure. If not provided, the slug will be generated from the name. If the provided or generated slug is already in use, a unique slug will be generated. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]},"units":{"description":"The units of measure. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]}},"required":["name","units"]},"JsonNewMember":{"type":"object","properties":{"email":{"description":"The email for the invitee. This will be used to both send the invite and to create the user account if they do not exist.","allOf":[{"$ref":"#/components/schemas/Email"}]},"name":{"nullable":true,"description":"The user name for the invitee.","allOf":[{"$ref":"#/components/schemas/UserName"}]},"role":{"description":"The organization role for the invitee.","allOf":[{"$ref":"#/components/schemas/OrganizationRole"}]}},"required":["email","role"]},"JsonNewOrganization":{"type":"object","properties":{"name":{"description":"The name of the organization. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"description":"The preferred slug for the organization. If not provided, the slug will be generated from the name. If the provided or generated slug is already in use, a unique slug will be generated. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]}},"required":["name"]},"JsonNewPlan":{"type":"object","properties":{"checkout":{"$ref":"#/components/schemas/NonEmpty"},"entitlements":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Entitlements"}]},"level":{"$ref":"#/components/schemas/PlanLevel"},"remote":{"nullable":true,"type":"boolean"},"self_hosted":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/OrganizationUuid"}]}},"required":["checkout","level"]},"JsonNewPlot":{"type":"object","properties":{"benchmarks":{"description":"The benchmarks to include in the plot. At least one benchmark must be specified.","type":"array","items":{"$ref":"#/components/schemas/BenchmarkUuid"}},"branches":{"description":"The branches to include in the plot. At least one branch must be specified.","type":"array","items":{"$ref":"#/components/schemas/BranchUuid"}},"index":{"nullable":true,"description":"The index of the plot. Maximum index is 64.","allOf":[{"$ref":"#/components/schemas/Index"}]},"lower_boundary":{"description":"Display lower boundary limits.","type":"boolean"},"lower_value":{"description":"Display metric lower values.","type":"boolean"},"measures":{"description":"The measures to include in the plot. At least one measure must be specified.","type":"array","items":{"$ref":"#/components/schemas/MeasureUuid"}},"testbeds":{"description":"The testbeds to include in the plot. At least one testbed must be specified.","type":"array","items":{"$ref":"#/components/schemas/TestbedUuid"}},"title":{"nullable":true,"description":"The title of the plot. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"upper_boundary":{"description":"Display upper boundary limits.","type":"boolean"},"upper_value":{"description":"Display metric upper values.","type":"boolean"},"window":{"description":"The window of time for the plot, in seconds. Metrics outside of this window will be omitted.","allOf":[{"$ref":"#/components/schemas/Window"}]},"x_axis":{"description":"The x-axis to use for the plot.","allOf":[{"$ref":"#/components/schemas/XAxis"}]}},"required":["benchmarks","branches","lower_boundary","lower_value","measures","testbeds","upper_boundary","upper_value","window","x_axis"]},"JsonNewProject":{"type":"object","properties":{"name":{"description":"The name of the project. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"description":"The preferred slug for the project. If not provided, the slug will be generated from the name. If the provided or generated slug is already in use, a unique slug will be generated. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]},"url":{"nullable":true,"description":"The URL for the project. If the project is public, the URL will be accessible listed on its Perf Page.","allOf":[{"$ref":"#/components/schemas/Url"}]},"visibility":{"nullable":true,"description":"➕ Bencher Plus: Set the visibility of the project. Creating a `private` project requires a valid Bencher Plus subscription.","allOf":[{"$ref":"#/components/schemas/Visibility"}]}},"required":["name"]},"JsonNewReport":{"type":"object","properties":{"branch":{"description":"Branch UUID, slug, or name. If the branch does not exist, it will be created.","allOf":[{"$ref":"#/components/schemas/NameId"}]},"end_time":{"description":"End time for the report. Must be an ISO 8601 formatted string.","allOf":[{"$ref":"#/components/schemas/DateTime"}]},"hash":{"nullable":true,"description":"Full `git` commit hash. All reports with the same `git` commit hash will be considered part of the same branch version. This can be useful for tracking the performance of a specific commit across multiple testbeds.","allOf":[{"$ref":"#/components/schemas/GitHash"}]},"results":{"description":"An array of benchmarks results.","type":"array","items":{"type":"string"}},"settings":{"nullable":true,"description":"Settings for how to handle the report.","allOf":[{"$ref":"#/components/schemas/JsonReportSettings"}]},"start_point":{"nullable":true,"description":"The start point for the report branch. If the branch does not exist, the start point will be used to create a new branch. If the branch already exists and the start point is not provided, the current branch will be used. If the branch already exists and the start point provided is different, a new branch head will be created from the new start point. If a new branch or new branch head is created with a start point, historical branch versions from the start point branch will be shallow copied over to the new branch. That is, historical metrics data for the start point branch will appear in queries for the branch. For example, pull request branches often use their base branch as their start point branch. If a new branch is created, it is not kept in sync with the start point branch.","allOf":[{"$ref":"#/components/schemas/JsonUpdateStartPoint"}]},"start_time":{"description":"Start time for the report. Must be an ISO 8601 formatted string.","allOf":[{"$ref":"#/components/schemas/DateTime"}]},"testbed":{"description":"Testbed UUID, slug, or name. If the testbed does not exist, it will be created.","allOf":[{"$ref":"#/components/schemas/NameId"}]},"thresholds":{"nullable":true,"description":"Thresholds to use for the branch, testbed, and measures in the report. If a threshold does not exist, it will be created. If a threshold exists and the model is different, it will be updated with the new model. If a measure name or slug is provided, the measure will be created if it does not exist.","allOf":[{"$ref":"#/components/schemas/JsonReportThresholds"}]}},"required":["branch","end_time","results","start_time","testbed"]},"JsonNewStartPoint":{"type":"object","properties":{"branch":{"description":"The UUID, slug, or name of the branch to use as the start point.","allOf":[{"$ref":"#/components/schemas/NameId"}]},"clone_thresholds":{"nullable":true,"description":"If set to `true`, the thresholds from the start point branch will be deep copied to the new branch. This can be useful for pull request branches that should have the same thresholds as their target branch. Requires the `branch` field to be set.","type":"boolean"},"hash":{"nullable":true,"description":"The full `git` hash of the branch to use as the start point. Requires the `branch` field to be set.","allOf":[{"$ref":"#/components/schemas/GitHash"}]},"max_versions":{"nullable":true,"description":"The maximum number of historical branch versions to include. Versions beyond this number will be omitted. The default is 255. Requires the `branch` field to be set.","type":"integer","format":"uint32","minimum":0}},"required":["branch"]},"JsonNewTestbed":{"type":"object","properties":{"name":{"description":"The name of the testbed. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"description":"The preferred slug for the testbed. If not provided, the slug will be generated from the name. If the provided or generated slug is already in use, a unique slug will be generated. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]}},"required":["name"]},"JsonNewThreshold":{"type":"object","properties":{"branch":{"description":"The UUID, slug, or name of the threshold branch.","allOf":[{"$ref":"#/components/schemas/NameId"}]},"lower_boundary":{"nullable":true,"description":"The lower boundary used to calculate the lower boundary limit. The requirements for this field depend on which `test` is selected.","allOf":[{"$ref":"#/components/schemas/Boundary"}]},"max_sample_size":{"nullable":true,"description":"The maximum number of samples used to perform the test. Only the most recent samples will be used if there are more.","allOf":[{"$ref":"#/components/schemas/SampleSize"}]},"measure":{"description":"The UUID, slug, or name of the threshold measure.","allOf":[{"$ref":"#/components/schemas/NameId"}]},"min_sample_size":{"nullable":true,"description":"The minimum number of samples required to perform the test. If there are fewer samples, the test will not be performed.","allOf":[{"$ref":"#/components/schemas/SampleSize"}]},"test":{"description":"The test used by the threshold model to calculate the baseline and boundary limits.","allOf":[{"$ref":"#/components/schemas/ModelTest"}]},"testbed":{"description":"The UUID, slug, or name of the threshold testbed.","allOf":[{"$ref":"#/components/schemas/NameId"}]},"upper_boundary":{"nullable":true,"description":"The upper boundary used to calculate the upper boundary limit. The requirements for this field depend on which `test` is selected.","allOf":[{"$ref":"#/components/schemas/Boundary"}]},"window":{"nullable":true,"description":"The window of time for samples used to perform the test, in seconds. Samples outside of this window will be omitted.","allOf":[{"$ref":"#/components/schemas/Window"}]}},"required":["branch","measure","test","testbed"]},"JsonNewToken":{"type":"object","properties":{"name":{"description":"The name of the token. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"ttl":{"nullable":true,"description":"The time-to-live (TTL) for the token in seconds. If not provided, the token will not expire for over 128 years.","type":"integer","format":"uint32","minimum":0}},"required":["name"]},"JsonOAuth":{"type":"object","properties":{"code":{"$ref":"#/components/schemas/Secret"},"invite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Jwt"}]},"plan":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/PlanLevel"}]}},"required":["code"]},"JsonOneMetric":{"type":"object","properties":{"alert":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonPerfAlert"}]},"benchmark":{"$ref":"#/components/schemas/JsonBenchmark"},"boundary":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonBoundary"}]},"branch":{"$ref":"#/components/schemas/JsonBranch"},"end_time":{"$ref":"#/components/schemas/DateTime"},"iteration":{"$ref":"#/components/schemas/Iteration"},"measure":{"$ref":"#/components/schemas/JsonMeasure"},"metric":{"$ref":"#/components/schemas/JsonMetric"},"report":{"$ref":"#/components/schemas/ReportUuid"},"start_time":{"$ref":"#/components/schemas/DateTime"},"testbed":{"$ref":"#/components/schemas/JsonTestbed"},"threshold":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonThresholdModel"}]},"uuid":{"$ref":"#/components/schemas/MetricUuid"}},"required":["benchmark","branch","end_time","iteration","measure","metric","report","start_time","testbed","uuid"]},"JsonOrganization":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"},"license":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Jwt"}]},"modified":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/ResourceName"},"slug":{"$ref":"#/components/schemas/Slug"},"uuid":{"$ref":"#/components/schemas/OrganizationUuid"}},"required":["created","modified","name","slug","uuid"]},"JsonOrganizationPatch":{"type":"object","properties":{"license":{"nullable":true,"description":"➕ Bencher Plus: The new license for the organization. Set to `null` to remove the current license.","allOf":[{"$ref":"#/components/schemas/Jwt"}]},"name":{"nullable":true,"description":"The new name of the organization. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"description":"The preferred new slug for the organization. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]}}},"JsonOrganizationPatchNull":{"type":"object","properties":{"license":{"type":"string","enum":[null]},"name":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Slug"}]}},"required":["license"]},"JsonOrganizations":{"type":"array","items":{"$ref":"#/components/schemas/JsonOrganization"}},"JsonPerf":{"type":"object","properties":{"end_time":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DateTime"}]},"project":{"$ref":"#/components/schemas/JsonProject"},"results":{"type":"array","items":{"$ref":"#/components/schemas/JsonPerfMetrics"}},"start_time":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DateTime"}]}},"required":["project","results"]},"JsonPerfAlert":{"type":"object","properties":{"limit":{"$ref":"#/components/schemas/BoundaryLimit"},"modified":{"$ref":"#/components/schemas/DateTime"},"status":{"$ref":"#/components/schemas/AlertStatus"},"uuid":{"$ref":"#/components/schemas/AlertUuid"}},"required":["limit","modified","status","uuid"]},"JsonPerfMetric":{"type":"object","properties":{"alert":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonPerfAlert"}]},"boundary":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonBoundary"}]},"end_time":{"$ref":"#/components/schemas/DateTime"},"iteration":{"$ref":"#/components/schemas/Iteration"},"metric":{"$ref":"#/components/schemas/JsonMetric"},"report":{"$ref":"#/components/schemas/ReportUuid"},"start_time":{"$ref":"#/components/schemas/DateTime"},"threshold":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonThresholdModel"}]},"version":{"$ref":"#/components/schemas/JsonVersion"}},"required":["end_time","iteration","metric","report","start_time","version"]},"JsonPerfMetrics":{"type":"object","properties":{"benchmark":{"$ref":"#/components/schemas/JsonBenchmark"},"branch":{"$ref":"#/components/schemas/JsonBranch"},"measure":{"$ref":"#/components/schemas/JsonMeasure"},"metrics":{"type":"array","items":{"$ref":"#/components/schemas/JsonPerfMetric"}},"testbed":{"$ref":"#/components/schemas/JsonTestbed"}},"required":["benchmark","branch","measure","metrics","testbed"]},"JsonPlan":{"type":"object","properties":{"card":{"$ref":"#/components/schemas/JsonCardDetails"},"current_period_end":{"$ref":"#/components/schemas/DateTime"},"current_period_start":{"$ref":"#/components/schemas/DateTime"},"customer":{"$ref":"#/components/schemas/JsonCustomer"},"level":{"$ref":"#/components/schemas/PlanLevel"},"license":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonLicense"}]},"organization":{"$ref":"#/components/schemas/OrganizationUuid"},"status":{"$ref":"#/components/schemas/PlanStatus"},"unit_amount":{"$ref":"#/components/schemas/BigInt"}},"required":["card","current_period_end","current_period_start","customer","level","organization","status","unit_amount"]},"JsonPlot":{"type":"object","properties":{"benchmarks":{"type":"array","items":{"$ref":"#/components/schemas/BenchmarkUuid"}},"branches":{"type":"array","items":{"$ref":"#/components/schemas/BranchUuid"}},"created":{"$ref":"#/components/schemas/DateTime"},"lower_boundary":{"type":"boolean"},"lower_value":{"type":"boolean"},"measures":{"type":"array","items":{"$ref":"#/components/schemas/MeasureUuid"}},"modified":{"$ref":"#/components/schemas/DateTime"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"testbeds":{"type":"array","items":{"$ref":"#/components/schemas/TestbedUuid"}},"title":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"upper_boundary":{"type":"boolean"},"upper_value":{"type":"boolean"},"uuid":{"$ref":"#/components/schemas/PlotUuid"},"window":{"$ref":"#/components/schemas/Window"},"x_axis":{"$ref":"#/components/schemas/XAxis"}},"required":["benchmarks","branches","created","lower_boundary","lower_value","measures","modified","project","testbeds","upper_boundary","upper_value","uuid","window","x_axis"]},"JsonPlotPatch":{"type":"object","properties":{"index":{"nullable":true,"description":"The new index for the plot. Maximum index is 64.","allOf":[{"$ref":"#/components/schemas/Index"}]},"title":{"nullable":true,"description":"The new title of the plot. Set to `null` to remove the current title. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"window":{"nullable":true,"description":"The window of time for the plot, in seconds. Metrics outside of this window will be omitted.","allOf":[{"$ref":"#/components/schemas/Window"}]}}},"JsonPlotPatchNull":{"type":"object","properties":{"index":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Index"}]},"title":{"type":"string","enum":[null]},"window":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Window"}]}},"required":["title"]},"JsonPlots":{"type":"array","items":{"$ref":"#/components/schemas/JsonPlot"}},"JsonPlus":{"type":"object","properties":{"cloud":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonCloud"}]},"github":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonGitHub"}]},"litestream":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonLitestream"}]},"stats":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonStats"}]}}},"JsonProduct":{"type":"object","properties":{"id":{"type":"string"},"licensed":{"type":"object","additionalProperties":{"type":"string"}},"metered":{"type":"object","additionalProperties":{"type":"string"}}},"required":["id","licensed","metered"]},"JsonProducts":{"type":"object","properties":{"enterprise":{"$ref":"#/components/schemas/JsonProduct"},"team":{"$ref":"#/components/schemas/JsonProduct"}},"required":["enterprise","team"]},"JsonProject":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"},"modified":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/ResourceName"},"organization":{"$ref":"#/components/schemas/OrganizationUuid"},"slug":{"$ref":"#/components/schemas/Slug"},"url":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Url"}]},"uuid":{"$ref":"#/components/schemas/ProjectUuid"},"visibility":{"$ref":"#/components/schemas/Visibility"}},"required":["created","modified","name","organization","slug","uuid","visibility"]},"JsonProjectPatch":{"type":"object","properties":{"name":{"nullable":true,"description":"The new name of the project. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"description":"The preferred new slug for the project. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]},"url":{"nullable":true,"description":"The new URL of the project. Set to `null` to remove the current URL.","allOf":[{"$ref":"#/components/schemas/Url"}]},"visibility":{"nullable":true,"description":"➕ Bencher Plus: Set the new visibility of the project. Moving to a `private` project requires a valid Bencher Plus subscription.","allOf":[{"$ref":"#/components/schemas/Visibility"}]}}},"JsonProjectPatchNull":{"type":"object","properties":{"name":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Slug"}]},"url":{"type":"string","enum":[null]},"visibility":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Visibility"}]}},"required":["url"]},"JsonProjects":{"type":"array","items":{"$ref":"#/components/schemas/JsonProject"}},"JsonPubUser":{"type":"object","properties":{"name":{"$ref":"#/components/schemas/UserName"},"slug":{"$ref":"#/components/schemas/Slug"},"uuid":{"$ref":"#/components/schemas/UserUuid"}},"required":["name","slug","uuid"]},"JsonRemoveModel":{"type":"object","properties":{"test":{"type":"string","enum":[null]}},"required":["test"]},"JsonReplica":{"oneOf":[{"type":"object","properties":{"path":{"type":"string"},"retention":{"nullable":true,"type":"string"},"retention_check_interval":{"nullable":true,"type":"string"},"scheme":{"type":"string","enum":["file"]},"snapshot_interval":{"nullable":true,"type":"string"},"sync_interval":{"nullable":true,"type":"string"},"validation_interval":{"nullable":true,"type":"string"}},"required":["path","scheme"]},{"type":"object","properties":{"host":{"type":"string"},"key_path":{"nullable":true,"type":"string"},"password":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Secret"}]},"path":{"nullable":true,"type":"string"},"port":{"type":"integer","format":"uint16","minimum":0},"retention":{"nullable":true,"type":"string"},"retention_check_interval":{"nullable":true,"type":"string"},"scheme":{"type":"string","enum":["sftp"]},"snapshot_interval":{"nullable":true,"type":"string"},"sync_interval":{"nullable":true,"type":"string"},"user":{"type":"string"},"validation_interval":{"nullable":true,"type":"string"}},"required":["host","port","scheme","user"]},{"type":"object","properties":{"access_key_id":{"type":"string"},"bucket":{"type":"string"},"endpoint":{"nullable":true,"type":"string"},"path":{"nullable":true,"type":"string"},"region":{"nullable":true,"type":"string"},"retention":{"nullable":true,"type":"string"},"retention_check_interval":{"nullable":true,"type":"string"},"scheme":{"type":"string","enum":["s3"]},"secret_access_key":{"$ref":"#/components/schemas/Secret"},"snapshot_interval":{"nullable":true,"type":"string"},"sync_interval":{"nullable":true,"type":"string"},"validation_interval":{"nullable":true,"type":"string"}},"required":["access_key_id","bucket","scheme","secret_access_key"]},{"type":"object","properties":{"account_key":{"$ref":"#/components/schemas/Secret"},"account_name":{"type":"string"},"bucket":{"type":"string"},"path":{"type":"string"},"retention":{"nullable":true,"type":"string"},"retention_check_interval":{"nullable":true,"type":"string"},"scheme":{"type":"string","enum":["abs"]},"snapshot_interval":{"nullable":true,"type":"string"},"sync_interval":{"nullable":true,"type":"string"},"validation_interval":{"nullable":true,"type":"string"}},"required":["account_key","account_name","bucket","path","scheme"]},{"type":"object","properties":{"bucket":{"type":"string"},"path":{"nullable":true,"type":"string"},"retention":{"nullable":true,"type":"string"},"retention_check_interval":{"nullable":true,"type":"string"},"scheme":{"type":"string","enum":["gcs"]},"snapshot_interval":{"nullable":true,"type":"string"},"sync_interval":{"nullable":true,"type":"string"},"validation_interval":{"nullable":true,"type":"string"}},"required":["bucket","scheme"]}]},"JsonReport":{"type":"object","properties":{"adapter":{"$ref":"#/components/schemas/Adapter"},"alerts":{"type":"array","items":{"$ref":"#/components/schemas/JsonAlert"}},"branch":{"$ref":"#/components/schemas/JsonBranch"},"created":{"$ref":"#/components/schemas/DateTime"},"end_time":{"$ref":"#/components/schemas/DateTime"},"project":{"$ref":"#/components/schemas/JsonProject"},"results":{"type":"array","items":{"type":"array","items":{"$ref":"#/components/schemas/JsonReportResult"}}},"start_time":{"$ref":"#/components/schemas/DateTime"},"testbed":{"$ref":"#/components/schemas/JsonTestbed"},"user":{"$ref":"#/components/schemas/JsonPubUser"},"uuid":{"$ref":"#/components/schemas/ReportUuid"}},"required":["adapter","alerts","branch","created","end_time","project","results","start_time","testbed","user","uuid"]},"JsonReportMeasure":{"type":"object","properties":{"boundary":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonBoundary"}]},"measure":{"$ref":"#/components/schemas/JsonMeasure"},"metric":{"$ref":"#/components/schemas/JsonMetric"},"threshold":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonThresholdModel"}]}},"required":["measure","metric"]},"JsonReportResult":{"type":"object","properties":{"benchmark":{"$ref":"#/components/schemas/JsonBenchmark"},"iteration":{"$ref":"#/components/schemas/Iteration"},"measures":{"type":"array","items":{"$ref":"#/components/schemas/JsonReportMeasure"}}},"required":["benchmark","iteration","measures"]},"JsonReportSettings":{"type":"object","properties":{"adapter":{"nullable":true,"description":"The benchmark harness adapter for parsing the benchmark results. If no adapter is specified, then the Magic adapter will be used.","allOf":[{"$ref":"#/components/schemas/Adapter"}]},"average":{"nullable":true,"description":"Benchmark harness suggested central tendency (ie average). Some benchmarking harnesses provide multiple averages, such as mean and median.","allOf":[{"$ref":"#/components/schemas/JsonAverage"}]},"fold":{"nullable":true,"description":"Fold multiple results into a single result using the selected operation. This can be useful for taking the min, max, mean, or median of the benchmark results.","allOf":[{"$ref":"#/components/schemas/JsonFold"}]}}},"JsonReportThresholds":{"type":"object","properties":{"models":{"nullable":true,"description":"Map of measure UUID, slug, or name to the threshold model to use. If a measure name or slug is provided, the measure will be created if it does not exist.","type":"object","additionalProperties":{"$ref":"#/components/schemas/Model"}},"reset":{"nullable":true,"description":"Reset all thresholds for the branch and testbed. Any models present in the `models` field will still be updated accordingly. If a threshold already exists and is not present in the `models` field, its current model will be removed.","type":"boolean"}}},"JsonReports":{"type":"array","items":{"$ref":"#/components/schemas/JsonReport"}},"JsonRestart":{"type":"object","properties":{"delay":{"nullable":true,"description":"The delay in seconds before the server restarts. Defaults to 3 seconds, if not specified.","type":"integer","format":"uint64","minimum":0}}},"JsonSecurity":{"type":"object","properties":{"issuer":{"nullable":true,"type":"string"},"secret_key":{"$ref":"#/components/schemas/Secret"}},"required":["secret_key"]},"JsonServer":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"},"uuid":{"$ref":"#/components/schemas/ServerUuid"},"version":{"nullable":true,"type":"string"}},"required":["created","uuid"]},"JsonServer2":{"type":"object","properties":{"bind_address":{"type":"string"},"request_body_max_bytes":{"type":"integer","format":"uint","minimum":0},"tls":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonTls"}]}},"required":["bind_address","request_body_max_bytes"]},"JsonServerStats":{"type":"object","properties":{"active_projects":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonCohort"}]},"admins":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonUsers"}]},"metrics":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonCohort"}]},"metrics_per_report":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonCohortAvg"}]},"organizations":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonOrganizations"}]},"projects":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonCohort"}]},"reports":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonCohort"}]},"reports_per_project":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonCohortAvg"}]},"server":{"$ref":"#/components/schemas/JsonServer"},"timestamp":{"$ref":"#/components/schemas/DateTime"},"top_projects":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonTopCohort"}]},"users":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonCohort"}]}},"required":["server","timestamp"]},"JsonSignup":{"type":"object","properties":{"email":{"$ref":"#/components/schemas/Email"},"i_agree":{"description":"I agree to the Bencher Terms of Use (https://bencher.dev/legal/terms-of-use), Privacy Policy (https://bencher.dev/legal/privacy), and License Agreement (https://bencher.dev/legal/license)","type":"boolean"},"invite":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Jwt"}]},"name":{"$ref":"#/components/schemas/UserName"},"plan":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/PlanLevel"}]},"slug":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/Slug"}]}},"required":["email","i_agree","name"]},"JsonSmtp":{"type":"object","properties":{"from_email":{"$ref":"#/components/schemas/Email"},"from_name":{"$ref":"#/components/schemas/ResourceName"},"hostname":{"$ref":"#/components/schemas/ResourceName"},"port":{"nullable":true,"type":"integer","format":"uint16","minimum":0},"secret":{"$ref":"#/components/schemas/Secret"},"starttls":{"nullable":true,"type":"boolean"},"username":{"$ref":"#/components/schemas/ResourceName"}},"required":["from_email","from_name","hostname","secret","username"]},"JsonSpec":{},"JsonStartPoint":{"type":"object","properties":{"branch":{"$ref":"#/components/schemas/BranchUuid"},"head":{"$ref":"#/components/schemas/HeadUuid"},"version":{"$ref":"#/components/schemas/JsonVersion"}},"required":["branch","head","version"]},"JsonStats":{"type":"object","properties":{"enabled":{"nullable":true,"type":"boolean"},"offset":{"nullable":true,"type":"integer","format":"uint32","minimum":0}}},"JsonTestbed":{"type":"object","properties":{"archived":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/DateTime"}]},"created":{"$ref":"#/components/schemas/DateTime"},"modified":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/ResourceName"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"slug":{"$ref":"#/components/schemas/Slug"},"uuid":{"$ref":"#/components/schemas/TestbedUuid"}},"required":["created","modified","name","project","slug","uuid"]},"JsonTestbeds":{"type":"array","items":{"$ref":"#/components/schemas/JsonTestbed"}},"JsonThreshold":{"type":"object","properties":{"branch":{"$ref":"#/components/schemas/JsonBranch"},"created":{"$ref":"#/components/schemas/DateTime"},"measure":{"$ref":"#/components/schemas/JsonMeasure"},"model":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonModel"}]},"modified":{"$ref":"#/components/schemas/DateTime"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"testbed":{"$ref":"#/components/schemas/JsonTestbed"},"uuid":{"$ref":"#/components/schemas/ThresholdUuid"}},"required":["branch","created","measure","modified","project","testbed","uuid"]},"JsonThresholdModel":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"},"model":{"$ref":"#/components/schemas/JsonModel"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"uuid":{"$ref":"#/components/schemas/ThresholdUuid"}},"required":["created","model","project","uuid"]},"JsonThresholds":{"type":"array","items":{"$ref":"#/components/schemas/JsonThreshold"}},"JsonTls":{"oneOf":[{"type":"object","properties":{"cert_file":{"type":"string"},"key_file":{"type":"string"},"type":{"type":"string","enum":["as_file"]}},"required":["cert_file","key_file","type"]},{"type":"object","properties":{"certs":{"type":"array","items":{"type":"integer","format":"uint8","minimum":0}},"key":{"type":"array","items":{"type":"integer","format":"uint8","minimum":0}},"type":{"type":"string","enum":["as_bytes"]}},"required":["certs","key","type"]}]},"JsonToken":{"type":"object","properties":{"creation":{"$ref":"#/components/schemas/DateTime"},"expiration":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/ResourceName"},"token":{"$ref":"#/components/schemas/Jwt"},"user":{"$ref":"#/components/schemas/UserUuid"},"uuid":{"$ref":"#/components/schemas/TokenUuid"}},"required":["creation","expiration","name","token","user","uuid"]},"JsonTokens":{"type":"array","items":{"$ref":"#/components/schemas/JsonToken"}},"JsonTopCohort":{"type":"object","properties":{"month":{"type":"array","items":{"$ref":"#/components/schemas/JsonTopProject"}},"total":{"type":"array","items":{"$ref":"#/components/schemas/JsonTopProject"}},"week":{"type":"array","items":{"$ref":"#/components/schemas/JsonTopProject"}}},"required":["month","total","week"]},"JsonTopProject":{"type":"object","properties":{"metrics":{"type":"integer","format":"uint64","minimum":0},"name":{"$ref":"#/components/schemas/ResourceName"},"percentage":{"type":"number","format":"double"},"uuid":{"$ref":"#/components/schemas/ProjectUuid"}},"required":["metrics","name","percentage","uuid"]},"JsonUpdateAlert":{"type":"object","properties":{"status":{"nullable":true,"description":"The new status of the alert.","allOf":[{"$ref":"#/components/schemas/UpdateAlertStatus"}]}}},"JsonUpdateBenchmark":{"type":"object","properties":{"archived":{"nullable":true,"description":"Set whether the benchmark is archived.","type":"boolean"},"name":{"nullable":true,"description":"The new name of the benchmark. Maximum length is 1,024 characters.","allOf":[{"$ref":"#/components/schemas/BenchmarkName"}]},"slug":{"nullable":true,"description":"The preferred new slug for the benchmark. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]}}},"JsonUpdateBranch":{"type":"object","properties":{"archived":{"nullable":true,"description":"Set whether the branch is archived.","type":"boolean"},"name":{"nullable":true,"description":"The new name of the branch. Maximum length is 256 characters.","allOf":[{"$ref":"#/components/schemas/BranchName"}]},"slug":{"nullable":true,"description":"The preferred new slug for the branch. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]},"start_point":{"nullable":true,"description":"The new start point for the branch.","allOf":[{"$ref":"#/components/schemas/JsonUpdateStartPoint"}]}}},"JsonUpdateConfig":{"type":"object","properties":{"config":{"$ref":"#/components/schemas/JsonConfig"},"delay":{"nullable":true,"type":"integer","format":"uint64","minimum":0}},"required":["config"]},"JsonUpdateMeasure":{"type":"object","properties":{"archived":{"nullable":true,"description":"Set whether the measure is archived.","type":"boolean"},"name":{"nullable":true,"description":"The new name of the measure. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"description":"The preferred new slug for the measure. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]},"units":{"nullable":true,"description":"The new units of measure. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]}}},"JsonUpdateMember":{"type":"object","properties":{"role":{"nullable":true,"description":"The new organization role for the member.","allOf":[{"$ref":"#/components/schemas/OrganizationRole"}]}}},"JsonUpdateModel":{"type":"object","properties":{"lower_boundary":{"nullable":true,"description":"The lower boundary used to calculate the lower boundary limit. The requirements for this field depend on which `test` is selected.","allOf":[{"$ref":"#/components/schemas/Boundary"}]},"max_sample_size":{"nullable":true,"description":"The maximum number of samples used to perform the test. Only the most recent samples will be used if there are more.","allOf":[{"$ref":"#/components/schemas/SampleSize"}]},"min_sample_size":{"nullable":true,"description":"The minimum number of samples required to perform the test. If there are fewer samples, the test will not be performed.","allOf":[{"$ref":"#/components/schemas/SampleSize"}]},"test":{"description":"The test used by the threshold model to calculate the baseline and boundary limits.","allOf":[{"$ref":"#/components/schemas/ModelTest"}]},"upper_boundary":{"nullable":true,"description":"The upper boundary used to calculate the upper boundary limit. The requirements for this field depend on which `test` is selected.","allOf":[{"$ref":"#/components/schemas/Boundary"}]},"window":{"nullable":true,"description":"The window of time for samples used to perform the test, in seconds. Samples outside of this window will be omitted.","allOf":[{"$ref":"#/components/schemas/Window"}]}},"required":["test"]},"JsonUpdateOrganization":{"anyOf":[{"$ref":"#/components/schemas/JsonOrganizationPatch"},{"$ref":"#/components/schemas/JsonOrganizationPatchNull"}]},"JsonUpdatePlot":{"anyOf":[{"$ref":"#/components/schemas/JsonPlotPatch"},{"$ref":"#/components/schemas/JsonPlotPatchNull"}]},"JsonUpdateProject":{"anyOf":[{"$ref":"#/components/schemas/JsonProjectPatch"},{"$ref":"#/components/schemas/JsonProjectPatchNull"}]},"JsonUpdateStartPoint":{"type":"object","properties":{"branch":{"nullable":true,"description":"The UUID, slug, or name of the branch to use as the start point.","allOf":[{"$ref":"#/components/schemas/NameId"}]},"clone_thresholds":{"nullable":true,"description":"If set to `true`, the thresholds from the start point branch will be deep copied to the branch. This can be useful for pull request branches that should have the same thresholds as their target branch. Requires the `branch` field to be set.","type":"boolean"},"hash":{"nullable":true,"description":"The full git hash of the branch to use as the start point. Requires the `branch` field to be set.","allOf":[{"$ref":"#/components/schemas/GitHash"}]},"max_versions":{"nullable":true,"description":"The maximum number of historical branch versions to include. Versions beyond this number will be omitted. The default is 255. Requires the `branch` field to be set.","type":"integer","format":"uint32","minimum":0},"reset":{"nullable":true,"description":"Reset the branch head to an empty state. If the start point `branch` is specified, the new branch head will begin at that start point. Otherwise, the branch head will be reset to an empty state.","type":"boolean"}}},"JsonUpdateTestbed":{"type":"object","properties":{"archived":{"nullable":true,"description":"Set whether the testbed is archived.","type":"boolean"},"name":{"nullable":true,"description":"The new name of the testbed. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]},"slug":{"nullable":true,"description":"The preferred new slug for the testbed. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]}}},"JsonUpdateThreshold":{"anyOf":[{"$ref":"#/components/schemas/JsonUpdateModel"},{"$ref":"#/components/schemas/JsonRemoveModel"}]},"JsonUpdateToken":{"type":"object","properties":{"name":{"nullable":true,"description":"The new name of the token. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/ResourceName"}]}}},"JsonUpdateUser":{"type":"object","properties":{"admin":{"nullable":true,"description":"Update whether the user is an admin. Must be an admin to update this field.","type":"boolean"},"email":{"nullable":true,"description":"The new email for the user.","allOf":[{"$ref":"#/components/schemas/Email"}]},"locked":{"nullable":true,"description":"Update whether the user is locked. Must be an admin to update this field.","type":"boolean"},"name":{"nullable":true,"description":"The new name of the user. Maximum length is 64 characters. May only contain alphanumeric characters, non-leading or trailing spaces, and the following characters: , . - \'","allOf":[{"$ref":"#/components/schemas/UserName"}]},"slug":{"nullable":true,"description":"The preferred new slug for the user. Maximum length is 64 characters.","allOf":[{"$ref":"#/components/schemas/Slug"}]}}},"JsonUsage":{"type":"object","properties":{"end_time":{"description":"The end time of the usage.","allOf":[{"$ref":"#/components/schemas/DateTime"}]},"kind":{"description":"The kind of usage.","allOf":[{"$ref":"#/components/schemas/UsageKind"}]},"license":{"nullable":true,"description":"The organization license.","allOf":[{"$ref":"#/components/schemas/JsonLicense"}]},"organization":{"description":"The organization UUID.","allOf":[{"$ref":"#/components/schemas/OrganizationUuid"}]},"plan":{"nullable":true,"description":"The organization plan.","allOf":[{"$ref":"#/components/schemas/JsonPlan"}]},"start_time":{"description":"The start time of the usage.","allOf":[{"$ref":"#/components/schemas/DateTime"}]},"usage":{"nullable":true,"description":"The metrics usage amount.","type":"integer","format":"uint32","minimum":0}},"required":["end_time","kind","organization","start_time"]},"JsonUser":{"type":"object","properties":{"admin":{"type":"boolean"},"email":{"$ref":"#/components/schemas/Email"},"locked":{"type":"boolean"},"name":{"$ref":"#/components/schemas/UserName"},"slug":{"$ref":"#/components/schemas/Slug"},"uuid":{"$ref":"#/components/schemas/UserUuid"}},"required":["admin","email","locked","name","slug","uuid"]},"JsonUsers":{"type":"array","items":{"$ref":"#/components/schemas/JsonUser"}},"JsonVersion":{"type":"object","properties":{"hash":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/GitHash"}]},"number":{"$ref":"#/components/schemas/VersionNumber"}},"required":["number"]},"Jwt":{"type":"string"},"LastFour":{"type":"string"},"LogLevel":{"type":"string","enum":["trace","debug","info","warn","error","critical"]},"MeasureUuid":{"type":"string","format":"uuid"},"MetricUuid":{"type":"string","format":"uuid"},"Model":{"type":"object","properties":{"lower_boundary":{"nullable":true,"description":"The lower boundary used to calculate the lower boundary limit. The requirements for this field depend on which `test` is selected.","allOf":[{"$ref":"#/components/schemas/Boundary"}]},"max_sample_size":{"nullable":true,"description":"The maximum number of samples used to perform the test. Only the most recent samples will be used if there are more.","allOf":[{"$ref":"#/components/schemas/SampleSize"}]},"min_sample_size":{"nullable":true,"description":"The minimum number of samples required to perform the test. If there are fewer samples, the test will not be performed.","allOf":[{"$ref":"#/components/schemas/SampleSize"}]},"test":{"description":"The test used by the threshold model to calculate the baseline and boundary limits.","allOf":[{"$ref":"#/components/schemas/ModelTest"}]},"upper_boundary":{"nullable":true,"description":"The upper boundary used to calculate the upper boundary limit. The requirements for this field depend on which `test` is selected.","allOf":[{"$ref":"#/components/schemas/Boundary"}]},"window":{"nullable":true,"description":"The window of time for samples used to perform the test, in seconds. Samples outside of this window will be omitted.","allOf":[{"$ref":"#/components/schemas/Window"}]}},"required":["test"]},"ModelTest":{"type":"string","enum":["static","percentage","z_score","t_test","log_normal","iqr","delta_iqr"]},"ModelUuid":{"type":"string","format":"uuid"},"NameId":{"type":"string"},"NonEmpty":{"type":"string"},"OrganizationRole":{"oneOf":[{"description":"The organization leader role.","type":"string","enum":["leader"]}]},"OrganizationUuid":{"type":"string","format":"uuid"},"PlanLevel":{"type":"string","enum":["free","team","enterprise"]},"PlanStatus":{"type":"string","enum":["active","canceled","incomplete","incomplete_expired","past_due","paused","trialing","unpaid"]},"PlotUuid":{"type":"string","format":"uuid"},"ProjectUuid":{"type":"string","format":"uuid"},"ReportUuid":{"type":"string","format":"uuid"},"ResourceId":{"type":"string"},"ResourceName":{"type":"string"},"SampleSize":{"type":"integer","format":"uint32","minimum":0},"Secret":{"type":"string"},"ServerLog":{"oneOf":[{"type":"object","properties":{"stderr_terminal":{"type":"object","properties":{"level":{"$ref":"#/components/schemas/LogLevel"}},"required":["level"]}},"required":["stderr_terminal"],"additionalProperties":false},{"type":"object","properties":{"file":{"type":"object","properties":{"if_exists":{"$ref":"#/components/schemas/IfExists"},"level":{"$ref":"#/components/schemas/LogLevel"},"path":{"type":"string"}},"required":["if_exists","level","path"]}},"required":["file"],"additionalProperties":false}]},"ServerUuid":{"type":"string","format":"uuid"},"Slug":{"type":"string"},"TestbedUuid":{"type":"string","format":"uuid"},"ThresholdUuid":{"type":"string","format":"uuid"},"TokenUuid":{"type":"string","format":"uuid"},"UpdateAlertStatus":{"oneOf":[{"description":"The alert is active.","type":"string","enum":["active"]},{"description":"The alert has been dismissed by a user.","type":"string","enum":["dismissed"]}]},"Url":{"type":"string"},"UsageKind":{"oneOf":[{"description":"Bencher Cloud (Free)","type":"string","enum":["cloud_free"]},{"description":"Bencher Cloud (Metered)","type":"string","enum":["cloud_metered"]},{"description":"Bencher Cloud (Licensed)","type":"string","enum":["cloud_licensed"]},{"description":"Bencher Self-Hosted (Licensed) via Bencher Cloud","type":"string","enum":["cloud_self_hosted_licensed"]},{"description":"Bencher Self-Hosted (Free)","type":"string","enum":["self_hosted_free"]},{"description":"Bencher Self-Hosted (Licensed)","type":"string","enum":["self_hosted_licensed"]}]},"UserName":{"type":"string"},"UserUuid":{"type":"string","format":"uuid"},"VersionNumber":{"type":"integer","format":"uint32","minimum":0},"Visibility":{"type":"string","enum":["public","private"]},"Window":{"type":"integer","format":"uint32","minimum":0},"XAxis":{"type":"string","enum":["date_time","version"]},"JsonDirection":{"type":"string","enum":["asc","desc"]},"OrganizationsSort":{"oneOf":[{"description":"Sort by organization name.","type":"string","enum":["name"]}]},"Search":{"type":"string"},"OrganizationPermission":{"type":"string","enum":["view","create","edit","delete","manage","view_role","create_role","edit_role","delete_role"]},"OrgMembersSort":{"oneOf":[{"description":"Sort by user name.","type":"string","enum":["name"]}]},"OrgProjectsSort":{"oneOf":[{"description":"Sort by project name.","type":"string","enum":["name"]}]},"ProjectsSort":{"oneOf":[{"description":"Sort by project name.","type":"string","enum":["name"]}]},"ProjAlertsSort":{"oneOf":[{"description":"Sort by alert creation date time.","type":"string","enum":["created"]},{"description":"Sort by alert modified date time.","type":"string","enum":["modified"]}]},"ProjectPermission":{"type":"string","enum":["view","create","edit","delete","manage","view_role","create_role","edit_role","delete_role"]},"ProjBenchmarksSort":{"oneOf":[{"description":"Sort by benchmark name.","type":"string","enum":["name"]}]},"ProjBranchesSort":{"oneOf":[{"description":"Sort by branch name.","type":"string","enum":["name"]}]},"ProjMeasuresSort":{"oneOf":[{"description":"Sort by measure name.","type":"string","enum":["name"]}]},"DateTimeMillis":{"$ref":"#/components/schemas/TimestampMillis"},"TimestampMillis":{"type":"integer","format":"int64"},"ProjPlotsSort":{"oneOf":[{"description":"Sort by plot index.","type":"string","enum":["index"]},{"description":"Sort by plot title.","type":"string","enum":["title"]}]},"ProjReportsSort":{"oneOf":[{"description":"Sort by date time.","type":"string","enum":["date_time"]}]},"ProjTestbedsSort":{"oneOf":[{"description":"Sort by testbed name.","type":"string","enum":["name"]}]},"ProjThresholdsSort":{"oneOf":[{"description":"Sort by threshold creation date time.","type":"string","enum":["created"]},{"description":"Sort by threshold modified date time.","type":"string","enum":["modified"]}]},"UsersSort":{"oneOf":[{"description":"Sort by user name.","type":"string","enum":["name"]}]},"UserTokensSort":{"oneOf":[{"description":"Sort by token name.","type":"string","enum":["name"]}]}},"responses":{"Error":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"tags":[{"name":"alerts","description":"Alerts"},{"name":"allowed"},{"name":"auth","description":"Auth"},{"name":"benchmarks","description":"Benchmarks"},{"name":"branches","description":"Branches"},{"name":"checkout"},{"name":"measures","description":"Measures"},{"name":"members"},{"name":"metrics","description":"Metrics"},{"name":"models","description":"Models"},{"name":"organizations","description":"Organizations"},{"name":"perf","description":"Perf Metrics"},{"name":"plan"},{"name":"plots","description":"Plots"},{"name":"projects","description":"Projects"},{"name":"reports","description":"Reports"},{"name":"server","description":"Server"},{"name":"stats"},{"name":"testbeds","description":"Testbeds"},{"name":"thresholds","description":"Thresholds"},{"name":"tokens","description":"API Tokens"},{"name":"usage"},{"name":"users","description":"Users"}]}'); /***/ }) diff --git a/services/api/openapi.json b/services/api/openapi.json index 1e3df41f4..ab258db20 100644 --- a/services/api/openapi.json +++ b/services/api/openapi.json @@ -2,7 +2,7 @@ "openapi": "3.0.3", "info": { "title": "Bencher API", - "version": "0.4.21" + "version": "0.4.22" }, "paths": { "/": { diff --git a/services/cli/templates/output/install-cli.ps1 b/services/cli/templates/output/install-cli.ps1 index e9b455ae4..72f450de4 100755 --- a/services/cli/templates/output/install-cli.ps1 +++ b/services/cli/templates/output/install-cli.ps1 @@ -5,7 +5,7 @@ <# .SYNOPSIS -Bencher CLI v0.4.21 Installer +Bencher CLI v0.4.22 Installer .DESCRIPTION @@ -33,7 +33,7 @@ Print help param ( [Parameter(HelpMessage = "The URL of the directory where artifacts can be fetched from")] - [string]$ArtifactDownloadUrl = 'https://bencher.dev/download/0.4.21', + [string]$ArtifactDownloadUrl = 'https://bencher.dev/download/0.4.22', [Parameter(HelpMessage = "Don't add the install directory to PATH")] [switch]$NoModifyPath, [Parameter(HelpMessage = "Print Help")] @@ -41,7 +41,7 @@ param ( ) $app_name = 'bencher' -$app_version = '0.4.21' +$app_version = '0.4.22' function Install-Binary($install_args) { if ($Help) { @@ -53,13 +53,13 @@ function Install-Binary($install_args) { $platforms = @{ "x86_64-pc-windows-msvc" = @{ - "artifact_name" = "bencher-v0.4.21-windows-x86-64.exe" + "artifact_name" = "bencher-v0.4.22-windows-x86-64.exe" "zip_ext" = "" "bins" = "bencher" "bin" = "bencher" } "aarch64-pc-windows-msvc" = @{ - "artifact_name" = "bencher-v0.4.21-windows-arm-64.exe" + "artifact_name" = "bencher-v0.4.22-windows-arm-64.exe" "zip_ext" = "" "bins" = "bencher" "bin" = "bencher" diff --git a/services/cli/templates/output/install-cli.sh b/services/cli/templates/output/install-cli.sh index fca148f1e..f187eae56 100755 --- a/services/cli/templates/output/install-cli.sh +++ b/services/cli/templates/output/install-cli.sh @@ -16,8 +16,8 @@ fi set -u APP_NAME=bencher -APP_VERSION="0.4.21" -ARTIFACT_DOWNLOAD_URL="${INSTALLER_DOWNLOAD_URL:-https://bencher.dev/download/0.4.21}" +APP_VERSION="0.4.22" +ARTIFACT_DOWNLOAD_URL="${INSTALLER_DOWNLOAD_URL:-https://bencher.dev/download/0.4.22}" PRINT_VERBOSE=${INSTALLER_PRINT_VERBOSE:-0} PRINT_QUIET=${INSTALLER_PRINT_QUIET:-0} NO_MODIFY_PATH=${INSTALLER_NO_MODIFY_PATH:-0} @@ -33,7 +33,7 @@ usage() { cat <