diff --git a/Cargo.lock b/Cargo.lock index 0dc101050..15dfc2300 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -832,7 +832,7 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "bencher_adapter" -version = "0.4.9" +version = "0.4.10" dependencies = [ "bencher_json", "criterion", @@ -849,7 +849,7 @@ dependencies = [ [[package]] name = "bencher_api" -version = "0.4.9" +version = "0.4.10" dependencies = [ "async-compression", "async-trait", @@ -900,7 +900,7 @@ dependencies = [ [[package]] name = "bencher_billing" -version = "0.4.9" +version = "0.4.10" dependencies = [ "async-stripe", "bencher_json", @@ -915,7 +915,7 @@ dependencies = [ [[package]] name = "bencher_bing_index" -version = "0.4.9" +version = "0.4.10" dependencies = [ "reqwest 0.11.27", "serde", @@ -926,7 +926,7 @@ dependencies = [ [[package]] name = "bencher_boundary" -version = "0.4.9" +version = "0.4.10" dependencies = [ "bencher_json", "bencher_logger", @@ -940,7 +940,7 @@ dependencies = [ [[package]] name = "bencher_cli" -version = "0.4.9" +version = "0.4.10" dependencies = [ "bencher_adapter", "bencher_client", @@ -968,7 +968,7 @@ dependencies = [ [[package]] name = "bencher_client" -version = "0.4.9" +version = "0.4.10" dependencies = [ "bencher_json", "bytes", @@ -988,7 +988,7 @@ dependencies = [ [[package]] name = "bencher_comment" -version = "0.4.9" +version = "0.4.10" dependencies = [ "bencher_json", "url", @@ -996,7 +996,7 @@ dependencies = [ [[package]] name = "bencher_github" -version = "0.4.9" +version = "0.4.10" dependencies = [ "bencher_valid", "oauth2", @@ -1009,7 +1009,7 @@ dependencies = [ [[package]] name = "bencher_google_index" -version = "0.4.9" +version = "0.4.10" dependencies = [ "http 0.2.12", "reqwest 0.11.27", @@ -1023,7 +1023,7 @@ dependencies = [ [[package]] name = "bencher_json" -version = "0.4.9" +version = "0.4.10" dependencies = [ "bencher_valid", "chrono", @@ -1048,7 +1048,7 @@ dependencies = [ [[package]] name = "bencher_license" -version = "0.4.9" +version = "0.4.10" dependencies = [ "bencher_json", "chrono", @@ -1062,7 +1062,7 @@ dependencies = [ [[package]] name = "bencher_logger" -version = "0.4.9" +version = "0.4.10" dependencies = [ "slog", "slog-term", @@ -1070,7 +1070,7 @@ dependencies = [ [[package]] name = "bencher_plot" -version = "0.4.9" +version = "0.4.10" dependencies = [ "bencher_json", "chrono", @@ -1085,7 +1085,7 @@ dependencies = [ [[package]] name = "bencher_rbac" -version = "0.4.9" +version = "0.4.10" dependencies = [ "bencher_json", "literally", @@ -1096,7 +1096,7 @@ dependencies = [ [[package]] name = "bencher_token" -version = "0.4.9" +version = "0.4.10" dependencies = [ "bencher_json", "chrono", @@ -1109,7 +1109,7 @@ dependencies = [ [[package]] name = "bencher_valid" -version = "0.4.9" +version = "0.4.10" dependencies = [ "base64 0.22.0", "chrono", @@ -8491,7 +8491,7 @@ checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" [[package]] name = "xtask" -version = "0.4.9" +version = "0.4.10" dependencies = [ "anyhow", "assert_cmd", diff --git a/Cargo.toml b/Cargo.toml index 7e6c313c3..28a2b1db2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,7 +3,7 @@ members = ["services/api", "services/cli", "lib/*", "plus/*", "xtask"] resolver = "2" [workspace.package] -version = "0.4.9" +version = "0.4.10" authors = ["Everett Pompeii "] edition = "2021" diff --git a/services/action/dist/index.js b/services/action/dist/index.js index ca816d9d8..f515bc0c9 100644 --- a/services/action/dist/index.js +++ b/services/action/dist/index.js @@ -30582,7 +30582,7 @@ module.exports = parseParams /***/ ((module) => { "use strict"; -module.exports = JSON.parse('{"openapi":"3.0.3","info":{"title":"Bencher API","version":"0.4.9"},"paths":{"/":{"get":{"tags":["server"],"operationId":"server_root_get","responses":{"200":{"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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 an admin on the server to use this route.","operationId":"organization_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewOrganization"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonOrganization"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"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.","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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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"}}],"responses":{"200":{"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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":"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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":"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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"}}],"responses":{"200":{"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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":"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMeasure"}}}},"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 256 permutations for a single request. Therefore, only the first 256 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":"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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":"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}/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.","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":"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/stats/alerts":{"get":{"tags":["projects","alerts"],"summary":"View the total number of active alerts for a project","description":"View the total number of active 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. Use this endpoint to monitor the number of active alerts for a project.","operationId":"proj_alert_stats_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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAlertStats"}}}},"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.","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":"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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":"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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 useful for viewing thresholds with historical models that have 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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonConsole"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/server/endpoint":{"get":{"tags":["server"],"summary":"DEPRECATED: View server endpoint","operationId":"server_endpoint_get","responses":{"200":{"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonEndpoint"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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":{"type":"string","enum":["active","dismissed"]},"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"},"IfExists":{"type":"string","enum":["fail","truncate","append"]},"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/JsonBenchmarkMetric"},"created":{"$ref":"#/components/schemas/DateTime"},"iteration":{"$ref":"#/components/schemas/Iteration"},"limit":{"$ref":"#/components/schemas/BoundaryLimit"},"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","created","iteration","limit","modified","report","status","threshold","uuid"]},"JsonAlertStats":{"type":"object","properties":{"active":{"$ref":"#/components/schemas/BigInt"}},"required":["active"]},"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":{"token":{"$ref":"#/components/schemas/Jwt"},"user":{"$ref":"#/components/schemas/JsonUser"}},"required":["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":{"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"]},"JsonBenchmarkMetric":{"type":"object","properties":{"boundary":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonBoundary"}]},"created":{"$ref":"#/components/schemas/DateTime"},"metric":{"$ref":"#/components/schemas/JsonMetric"},"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","metric","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":{"created":{"$ref":"#/components/schemas/DateTime"},"modified":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/BranchName"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"slug":{"$ref":"#/components/schemas/Slug"},"start_point":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonStartPoint"}]},"uuid":{"$ref":"#/components/schemas/BranchUuid"}},"required":["created","modified","name","project","slug","uuid"]},"JsonBranchVersion":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"},"modified":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/BranchName"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"slug":{"$ref":"#/components/schemas/Slug"},"start_point":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonStartPoint"}]},"uuid":{"$ref":"#/components/schemas/BranchUuid"},"version":{"$ref":"#/components/schemas/JsonVersion"}},"required":["created","modified","name","project","slug","uuid","version"]},"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"]},"JsonEndpoint":{"type":"object","properties":{"endpoint":{"$ref":"#/components/schemas/Url"}},"required":["endpoint"]},"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"]},"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":{"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":{"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"},"value":{"type":"number","format":"double"}},"required":["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"},"threshold":{"$ref":"#/components/schemas/ThresholdUuid"},"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","threshold","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"}]},"soft":{"nullable":true,"description":"If set to `true` and a branch with the same name already exits, the existing branch will be returned without an error. This is useful in cases where there may be a race condition to create a new branch, such as multiple jobs in a CI/CD pipeline.","type":"boolean"},"start_point":{"nullable":true,"description":"The start point for the new branch. All branch versions from the start point branch will be shallow copied over to the new branch. That is, all 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"]},"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.","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_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.","allOf":[{"$ref":"#/components/schemas/NameId"}]}},"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"}]},"hash":{"nullable":true,"description":"The full `git` hash of the branch to use as the start point.","allOf":[{"$ref":"#/components/schemas/GitHash"}]},"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.","type":"boolean"}},"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"}]},"soft":{"nullable":true,"description":"If set to `true` and a testbed with the same name already exits, the existing testbed will be returned without an error. This is useful in cases where there may be a race condition to create a new testbed, such as multiple jobs in a CI/CD pipeline.","type":"boolean"}},"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"]},"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"]},"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"}},"JsonReplica":{"oneOf":[{"type":"object","properties":{"path":{"type":"string"},"scheme":{"type":"string","enum":["file"]}},"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},"scheme":{"type":"string","enum":["sftp"]},"user":{"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"},"scheme":{"type":"string","enum":["s3"]},"secret_access_key":{"$ref":"#/components/schemas/Secret"}},"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"},"scheme":{"type":"string","enum":["abs"]}},"required":["account_key","account_name","bucket","path","scheme"]},{"type":"object","properties":{"bucket":{"type":"string"},"path":{"nullable":true,"type":"string"},"scheme":{"type":"string","enum":["gcs"]}},"required":["bucket","scheme"]}]},"JsonReport":{"type":"object","properties":{"adapter":{"$ref":"#/components/schemas/Adapter"},"alerts":{"type":"array","items":{"$ref":"#/components/schemas/JsonAlert"}},"branch":{"$ref":"#/components/schemas/JsonBranchVersion"},"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/JsonUser"},"uuid":{"$ref":"#/components/schemas/ReportUuid"}},"required":["adapter","alerts","branch","created","end_time","project","results","start_time","testbed","user","uuid"]},"JsonReportResult":{"type":"object","properties":{"benchmarks":{"type":"array","items":{"$ref":"#/components/schemas/JsonBenchmarkMetric"}},"iteration":{"$ref":"#/components/schemas/Iteration"},"measure":{"$ref":"#/components/schemas/JsonMeasure"},"threshold":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonThresholdModel"}]}},"required":["benchmarks","iteration","measure"]},"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"}]}}},"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"}},"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"}]},"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"},"version":{"$ref":"#/components/schemas/JsonVersion"}},"required":["branch","version"]},"JsonStats":{"type":"object","properties":{"enabled":{"nullable":true,"type":"boolean"},"offset":{"nullable":true,"type":"integer","format":"uint32","minimum":0}}},"JsonTestbed":{"type":"object","properties":{"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":{"$ref":"#/components/schemas/JsonModel"},"modified":{"$ref":"#/components/schemas/DateTime"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"statistic":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonModel"}]},"testbed":{"$ref":"#/components/schemas/JsonTestbed"},"uuid":{"$ref":"#/components/schemas/ThresholdUuid"}},"required":["branch","created","measure","model","modified","project","testbed","uuid"]},"JsonThresholdModel":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"},"model":{"$ref":"#/components/schemas/JsonModel"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"statistic":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonModel"}]},"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/AlertStatus"}]}}},"JsonUpdateBenchmark":{"type":"object","properties":{"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":{"hash":{"nullable":true,"description":"The full `git` commit hash for the next version of the branch. This is useful in cases where there may be a race condition when a start point branch has been updated but its benchmarks have not yet finished.","allOf":[{"$ref":"#/components/schemas/GitHash"}]},"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"}]}}},"JsonUpdateConfig":{"type":"object","properties":{"config":{"$ref":"#/components/schemas/JsonConfig"},"delay":{"nullable":true,"type":"integer","format":"uint64","minimum":0}},"required":["config"]},"JsonUpdateMeasure":{"type":"object","properties":{"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"}]}}},"JsonUpdateOrganization":{"anyOf":[{"$ref":"#/components/schemas/JsonOrganizationPatch"},{"$ref":"#/components/schemas/JsonOrganizationPatchNull"}]},"JsonUpdateProject":{"anyOf":[{"$ref":"#/components/schemas/JsonProjectPatch"},{"$ref":"#/components/schemas/JsonProjectPatchNull"}]},"JsonUpdateTestbed":{"type":"object","properties":{"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":{"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"]},"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"},"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"]},"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"},"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},"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"},"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":"models","description":"Models"},{"name":"organizations","description":"Organizations"},{"name":"perf","description":"Perf Metrics"},{"name":"plan"},{"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.10"},"paths":{"/":{"get":{"tags":["server"],"operationId":"server_root_get","responses":{"200":{"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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 an admin on the server to use this route.","operationId":"organization_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonNewOrganization"}}},"required":true},"responses":{"201":{"description":"successful creation","headers":{"Access-Control-Allow-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonOrganization"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"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.","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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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"}}],"responses":{"200":{"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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":"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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":"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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"}}],"responses":{"200":{"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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":"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonMeasure"}}}},"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 256 permutations for a single request. Therefore, only the first 256 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":"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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":"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}/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.","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":"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/projects/{project}/stats/alerts":{"get":{"tags":["projects","alerts"],"summary":"View the total number of active alerts for a project","description":"View the total number of active 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. Use this endpoint to monitor the number of active alerts for a project.","operationId":"proj_alert_stats_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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonAlertStats"}}}},"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.","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":"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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":"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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 useful for viewing thresholds with historical models that have 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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonConsole"}}}},"4XX":{"$ref":"#/components/responses/Error"},"5XX":{"$ref":"#/components/responses/Error"}}}},"/v0/server/endpoint":{"get":{"tags":["server"],"summary":"DEPRECATED: View server endpoint","operationId":"server_endpoint_get","responses":{"200":{"description":"successful operation","headers":{"Access-Control-Allow-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonEndpoint"}}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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.","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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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-Credentials":{"style":"simple","schema":{"nullable":true,"type":"boolean"}},"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"}}},"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":{"type":"string","enum":["active","dismissed"]},"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"},"IfExists":{"type":"string","enum":["fail","truncate","append"]},"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/JsonBenchmarkMetric"},"created":{"$ref":"#/components/schemas/DateTime"},"iteration":{"$ref":"#/components/schemas/Iteration"},"limit":{"$ref":"#/components/schemas/BoundaryLimit"},"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","created","iteration","limit","modified","report","status","threshold","uuid"]},"JsonAlertStats":{"type":"object","properties":{"active":{"$ref":"#/components/schemas/BigInt"}},"required":["active"]},"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":{"token":{"$ref":"#/components/schemas/Jwt"},"user":{"$ref":"#/components/schemas/JsonUser"}},"required":["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":{"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"]},"JsonBenchmarkMetric":{"type":"object","properties":{"boundary":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonBoundary"}]},"created":{"$ref":"#/components/schemas/DateTime"},"metric":{"$ref":"#/components/schemas/JsonMetric"},"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","metric","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":{"created":{"$ref":"#/components/schemas/DateTime"},"modified":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/BranchName"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"slug":{"$ref":"#/components/schemas/Slug"},"start_point":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonStartPoint"}]},"uuid":{"$ref":"#/components/schemas/BranchUuid"}},"required":["created","modified","name","project","slug","uuid"]},"JsonBranchVersion":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"},"modified":{"$ref":"#/components/schemas/DateTime"},"name":{"$ref":"#/components/schemas/BranchName"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"slug":{"$ref":"#/components/schemas/Slug"},"start_point":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonStartPoint"}]},"uuid":{"$ref":"#/components/schemas/BranchUuid"},"version":{"$ref":"#/components/schemas/JsonVersion"}},"required":["created","modified","name","project","slug","uuid","version"]},"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"]},"JsonEndpoint":{"type":"object","properties":{"endpoint":{"$ref":"#/components/schemas/Url"}},"required":["endpoint"]},"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"]},"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":{"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":{"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"},"value":{"type":"number","format":"double"}},"required":["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"},"threshold":{"$ref":"#/components/schemas/ThresholdUuid"},"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","threshold","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"}]},"soft":{"nullable":true,"description":"If set to `true` and a branch with the same name already exits, the existing branch will be returned without an error. This is useful in cases where there may be a race condition to create a new branch, such as multiple jobs in a CI/CD pipeline.","type":"boolean"},"start_point":{"nullable":true,"description":"The start point for the new branch. All branch versions from the start point branch will be shallow copied over to the new branch. That is, all 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"]},"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.","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_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.","allOf":[{"$ref":"#/components/schemas/NameId"}]}},"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"}]},"hash":{"nullable":true,"description":"The full `git` hash of the branch to use as the start point.","allOf":[{"$ref":"#/components/schemas/GitHash"}]},"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.","type":"boolean"}},"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"}]},"soft":{"nullable":true,"description":"If set to `true` and a testbed with the same name already exits, the existing testbed will be returned without an error. This is useful in cases where there may be a race condition to create a new testbed, such as multiple jobs in a CI/CD pipeline.","type":"boolean"}},"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"]},"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"]},"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"}},"JsonReplica":{"oneOf":[{"type":"object","properties":{"path":{"type":"string"},"scheme":{"type":"string","enum":["file"]}},"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},"scheme":{"type":"string","enum":["sftp"]},"user":{"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"},"scheme":{"type":"string","enum":["s3"]},"secret_access_key":{"$ref":"#/components/schemas/Secret"}},"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"},"scheme":{"type":"string","enum":["abs"]}},"required":["account_key","account_name","bucket","path","scheme"]},{"type":"object","properties":{"bucket":{"type":"string"},"path":{"nullable":true,"type":"string"},"scheme":{"type":"string","enum":["gcs"]}},"required":["bucket","scheme"]}]},"JsonReport":{"type":"object","properties":{"adapter":{"$ref":"#/components/schemas/Adapter"},"alerts":{"type":"array","items":{"$ref":"#/components/schemas/JsonAlert"}},"branch":{"$ref":"#/components/schemas/JsonBranchVersion"},"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/JsonUser"},"uuid":{"$ref":"#/components/schemas/ReportUuid"}},"required":["adapter","alerts","branch","created","end_time","project","results","start_time","testbed","user","uuid"]},"JsonReportResult":{"type":"object","properties":{"benchmarks":{"type":"array","items":{"$ref":"#/components/schemas/JsonBenchmarkMetric"}},"iteration":{"$ref":"#/components/schemas/Iteration"},"measure":{"$ref":"#/components/schemas/JsonMeasure"},"threshold":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonThresholdModel"}]}},"required":["benchmarks","iteration","measure"]},"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"}]}}},"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"}},"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"}]},"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"},"version":{"$ref":"#/components/schemas/JsonVersion"}},"required":["branch","version"]},"JsonStats":{"type":"object","properties":{"enabled":{"nullable":true,"type":"boolean"},"offset":{"nullable":true,"type":"integer","format":"uint32","minimum":0}}},"JsonTestbed":{"type":"object","properties":{"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":{"$ref":"#/components/schemas/JsonModel"},"modified":{"$ref":"#/components/schemas/DateTime"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"statistic":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonModel"}]},"testbed":{"$ref":"#/components/schemas/JsonTestbed"},"uuid":{"$ref":"#/components/schemas/ThresholdUuid"}},"required":["branch","created","measure","model","modified","project","testbed","uuid"]},"JsonThresholdModel":{"type":"object","properties":{"created":{"$ref":"#/components/schemas/DateTime"},"model":{"$ref":"#/components/schemas/JsonModel"},"project":{"$ref":"#/components/schemas/ProjectUuid"},"statistic":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/JsonModel"}]},"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/AlertStatus"}]}}},"JsonUpdateBenchmark":{"type":"object","properties":{"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":{"hash":{"nullable":true,"description":"The full `git` commit hash for the next version of the branch. This is useful in cases where there may be a race condition when a start point branch has been updated but its benchmarks have not yet finished.","allOf":[{"$ref":"#/components/schemas/GitHash"}]},"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"}]}}},"JsonUpdateConfig":{"type":"object","properties":{"config":{"$ref":"#/components/schemas/JsonConfig"},"delay":{"nullable":true,"type":"integer","format":"uint64","minimum":0}},"required":["config"]},"JsonUpdateMeasure":{"type":"object","properties":{"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"}]}}},"JsonUpdateOrganization":{"anyOf":[{"$ref":"#/components/schemas/JsonOrganizationPatch"},{"$ref":"#/components/schemas/JsonOrganizationPatchNull"}]},"JsonUpdateProject":{"anyOf":[{"$ref":"#/components/schemas/JsonProjectPatch"},{"$ref":"#/components/schemas/JsonProjectPatchNull"}]},"JsonUpdateTestbed":{"type":"object","properties":{"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":{"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"]},"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"},"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"]},"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"},"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},"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"},"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":"models","description":"Models"},{"name":"organizations","description":"Organizations"},{"name":"perf","description":"Perf Metrics"},{"name":"plan"},{"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/swagger.json b/services/api/swagger.json index f7ab01915..bc6dd667a 100644 --- a/services/api/swagger.json +++ b/services/api/swagger.json @@ -2,7 +2,7 @@ "openapi": "3.0.3", "info": { "title": "Bencher API", - "version": "0.4.9" + "version": "0.4.10" }, "paths": { "/": { diff --git a/services/cli/templates/output/install-cli.ps1 b/services/cli/templates/output/install-cli.ps1 index 823bdab34..a3575e49f 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.9 Installer +Bencher CLI v0.4.10 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.9', + [string]$ArtifactDownloadUrl = 'https://bencher.dev/download/0.4.10', [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.9' +$app_version = '0.4.10' 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.9-windows-x86-64.exe" + "artifact_name" = "bencher-v0.4.10-windows-x86-64.exe" "zip_ext" = "" "bins" = "bencher" "bin" = "bencher" } "aarch64-pc-windows-msvc" = @{ - "artifact_name" = "bencher-v0.4.9-windows-arm-64.exe" + "artifact_name" = "bencher-v0.4.10-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 4fccb8dd5..1cb33b614 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.9" -ARTIFACT_DOWNLOAD_URL="${INSTALLER_DOWNLOAD_URL:-https://bencher.dev/download/0.4.9}" +APP_VERSION="0.4.10" +ARTIFACT_DOWNLOAD_URL="${INSTALLER_DOWNLOAD_URL:-https://bencher.dev/download/0.4.10}" 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 <