openapi: 3.2.0 info: title: APImetrics Project Access API description: API for the APImetrics platform termsOfService: http://apimetrics.io/tos/ contact: name: APIContext Support url: https://apicontext.io/ email: support@apicontext.com license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0.html version: v2026-09-02 tags: - name: Project Access description: Manage direct account access grants on projects. paths: /api/2/organizations/{org_id}/projects/access: get: tags: - Project Access summary: List-Project-Access-By-Org description: List all direct account access grants across an organization's projects. operationId: list-project-access-by-org security: - OAuth2: [] - ApiKey: [] parameters: - name: org_id in: path required: true schema: type: string pattern: ^[a-z0-9]{3,400}$ title: Organization ID - name: cursor in: query required: false schema: anyOf: - type: string - type: 'null' title: Cursor - name: limit in: query required: false schema: type: integer default: 25 title: Limit responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ProjectAccessListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/2/projects/{project_key_str}/access/: get: tags: - Project Access summary: List-Project-Access description: List direct account access grants for a project. operationId: list-project-access security: - OAuth2: [] - ApiKey: [] parameters: - name: project_key_str in: path required: true schema: type: string pattern: ^[A-Za-z0-9_-]+$ title: Resource ID - name: cursor in: query required: false schema: anyOf: - type: string - type: 'null' title: Cursor - name: limit in: query required: false schema: type: integer default: 25 title: Limit responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ProjectAccessListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' post: tags: - Project Access summary: Create-Project-Access description: Grant an account direct access to a project. operationId: create-project-access security: - OAuth2: [] - ApiKey: [] parameters: - name: project_key_str in: path required: true schema: type: string pattern: ^[A-Za-z0-9_-]+$ title: Resource ID requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CreateProjectAccessBody' responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/api2__projects__proj_access__ProjectAccessResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /api/2/projects/{project_key_str}/access/{project_access_id}/: get: tags: - Project Access summary: Get-Project-Access description: Get a project access grant by id. operationId: get-project-access security: - OAuth2: [] - ApiKey: [] parameters: - name: project_access_id in: path required: true schema: type: string pattern: ^[A-Za-z0-9_-]+$ title: Resource ID - name: project_key_str in: path required: true schema: type: string pattern: ^[A-Za-z0-9_-]+$ title: Resource ID responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/api2__projects__proj_access__ProjectAccessResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' post: tags: - Project Access summary: Update-Project-Access description: Update a project access grant. operationId: update-project-access security: - OAuth2: [] - ApiKey: [] parameters: - name: project_access_id in: path required: true schema: type: string pattern: ^[A-Za-z0-9_-]+$ title: Resource ID - name: project_key_str in: path required: true schema: type: string pattern: ^[A-Za-z0-9_-]+$ title: Resource ID requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateProjectAccessBody' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/api2__projects__proj_access__ProjectAccessResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - Project Access summary: Delete-Project-Access description: Delete a project access grant. operationId: delete-project-access security: - OAuth2: [] - ApiKey: [] parameters: - name: project_access_id in: path required: true schema: type: string pattern: ^[A-Za-z0-9_-]+$ title: Resource ID - name: project_key_str in: path required: true schema: type: string pattern: ^[A-Za-z0-9_-]+$ title: Resource ID responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/api2__projects__proj_access__ProjectAccessResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' components: schemas: ProjectAccessListMeta: properties: next_cursor: anyOf: - type: integer - type: string - type: 'null' title: Next Cursor more: type: boolean title: More project_id: anyOf: - type: string - type: 'null' title: Project Id type: object required: - next_cursor - more title: ProjectAccessListMeta ProjectResponse: properties: id: type: string title: Id name: type: string title: Name org_id: type: string title: Org Id tags: items: type: string type: array title: Tags system_tags: items: type: string type: array title: System Tags last_update: anyOf: - type: string format: date-time - type: 'null' title: Last Update created: anyOf: - type: string format: date-time - type: 'null' title: Created security_profile: anyOf: - type: string - type: 'null' title: Security Profile email: anyOf: - type: string - type: 'null' title: Email sub_info: anyOf: - additionalProperties: true type: object - type: 'null' title: Sub Info type: object required: - id - name - org_id - tags - system_tags - last_update - created - security_profile title: ProjectResponse examples: - created: '2026-06-19T09:06:47.046143Z' id: ahFkZXZ-YXBpbWV0cmljcy1xY3ILCxIEVXNlchieQgw last_update: '2026-06-19T09:06:47.046170Z' name: Project 1 org_id: apicontext sub_info: counts: org_test_run_count: 0 public_report_count: 0 scheduled_test_count: 288 test_setup_count: 4 user_test_run_count: 0 month_progress: 0.814 quotas: public_report_quota: 10 test_run_quota: 1000000 test_setup_quota: 1000 sub: backend: azure level: CONTRACT name: Enterprise org_id: apicontext plan: enterprise tags: [] api2__projects__proj_access__ProjectAccessResponse: properties: id: type: string title: Id project: $ref: '#/components/schemas/ProjectResponse' access_level: type: string title: Access Level account_id: type: string title: Account Id account_email: type: string title: Account Email last_update: type: string format: date-time title: Last Update created: type: string format: date-time title: Created type: object required: - id - project - access_level - account_id - account_email - last_update - created title: ProjectAccessResponse examples: - access_level: EDITOR account_email: user@example.com account_id: auth0|5f00000000000000000000aa created: '2026-06-25T10:13:37.546136Z' id: ahFkZXZ-YXBpbWV0cmljcy1xY3IVCxIOQWNjb3VudFByb2plY3QYq0IM last_update: '2026-06-25T10:13:37.597335Z' project: created: '2026-06-19T09:06:47.046143Z' id: ahFkZXZ-YXBpbWV0cmljcy1xY3ILCxIEVXNlchieQgw last_update: '2026-06-19T09:06:47.046170Z' name: Project 1 org_id: apicontext tags: [] CreateProjectAccessBody: properties: account_id: anyOf: - type: string - type: 'null' title: Account Id description: The account to grant access to; defaults to the caller. email: anyOf: - type: string - type: 'null' title: Email description: Informational email for the account. access_level: anyOf: - type: string - type: 'null' title: Access Level description: Defaults to VIEWER. type: object title: CreateProjectAccessBody examples: - access_level: EDITOR account_id: auth0|5f00000000000000000000aa email: user@example.com ProjectAccessListResponse: properties: meta: $ref: '#/components/schemas/ProjectAccessListMeta' results: items: $ref: '#/components/schemas/api2__projects__proj_access__ProjectAccessResponse' type: array title: Results type: object required: - meta - results title: ProjectAccessListResponse examples: - meta: more: false results: - access_level: EDITOR account_email: user@example.com account_id: auth0|5f00000000000000000000aa created: '2026-06-25T10:13:37.546136Z' id: ahFkZXZ-YXBpbWV0cmljcy1xY3IVCxIOQWNjb3VudFByb2plY3QYq0IM last_update: '2026-06-25T10:13:37.597335Z' project: created: '2026-06-19T09:06:47.046143Z' id: ahFkZXZ-YXBpbWV0cmljcy1xY3ILCxIEVXNlchieQgw last_update: '2026-06-19T09:06:47.046170Z' name: Project 1 org_id: apicontext tags: [] UpdateProjectAccessBody: properties: account_id: anyOf: - type: string - type: 'null' title: Account Id email: anyOf: - type: string - type: 'null' title: Email access_level: anyOf: - type: string - type: 'null' title: Access Level type: object title: UpdateProjectAccessBody examples: - access_level: OWNER HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' type: array title: Detail type: object title: HTTPValidationError ValidationError: properties: loc: items: anyOf: - type: string - type: integer type: array title: Location msg: type: string title: Message type: type: string title: Error Type input: title: Input ctx: type: object title: Context type: object required: - loc - msg - type title: ValidationError securitySchemes: OAuth2: type: oauth2 flows: authorizationCode: scopes: openid: OpenID Connect identity profile: User profile email: User email address authorizationUrl: https://auth.apimetrics.io/authorize?audience=https://client.apimetrics.io tokenUrl: https://auth.apimetrics.io/oauth/token ApiKey: type: apiKey in: header name: X-Api-Key