openapi: 3.0.3
info:
contact:
email: admin@athenian.co
name: the administrator by email
description: 'Server version: {{ server_version }} built on {{ build_date }} @ [{{ commit }}](https://github.com/athenianco/athenian-api/commit/{{ commit }})
Origin GitHub repository: [athenianco/api-spec](https://github.com/athenianco/api-spec).
Authorization persists between sessions. Marks:
* 🛡️ endpoint requires account admin privileges.
* 👤 endpoint only works with JWT authentication.
List of common server errors.
* __500__ endpoint crashed. We reported the incident to Sentry and will fix it soon! Please include the value of `instance` in the response if you contact the support. Repeating the request will not help, most probably.
* __501__ some functions are missing, either because they are not implemented yet or a non-critical runtime dependency is not satisfied. Repeating the request will not help, guaranteed.
* __502__ server crashed badly, either due to a memory access violation in native code or running out of memory. We reported this incident to Sentry and will fix it soon! Try repeating the request.
* __503__ server has not fully launched yet, e.g. hasn''t connected to the database; server is shutting down; we are experiencing a partial outage. Try repeating the request.
* __504__ endpoint took too much time and was interrupted. We reported the incident to Sentry and will see how to improve the performance. Repeating the request will not help, most probably.
'
license:
name: CC-BY-4.0
title: '{{ title }} align user API'
version: 2.1.86
servers:
- description: '{{ server_description }} - {{ server_url }}'
url: '{{ server_url }}/v1'
tags:
- name: user
paths:
/account/user:
put:
operationId: change_user
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AccountUserChangeRequest'
x-body-name: body
responses:
200:
content:
application/json:
schema:
$ref: '#/components/schemas/Account'
description: Effective account members.
403:
content:
application/json:
schema:
$ref: '#/components/schemas/GenericError'
description: Requesting user is not an admin of the account.
404:
content:
application/json:
schema:
$ref: '#/components/schemas/GenericError'
description: The account was not found.
security:
- bearerAuth: []
summary: '🛡️👤 Change the status of an account member: regular, admin, or banished (deleted). This endpoint is allowed only for account admins.'
tags:
- user
x-codegen-request-body-name: body
x-openapi-router-controller: athenian.api.controllers.user_controller
/account/{id}/details:
get:
operationId: get_account_details
parameters:
- description: Numeric identifier of the account. The user must belong to that account. To find out which accounts the user belongs to, see `/user`.
explode: false
in: path
name: id
required: true
schema:
type: integer
style: simple
responses:
200:
content:
application/json:
schema:
$ref: '#/components/schemas/Account'
description: List of the account members and installed GitHub and JIRA organizations.
403:
content:
application/json:
schema:
$ref: '#/components/schemas/GenericError'
description: The user does not have access to this account.
404:
content:
application/json:
schema:
$ref: '#/components/schemas/GenericError'
description: The account was not found.
security:
- bearerAuth: []
- apiKeyAuth: []
summary: List the calling user's account members and installed GitHub and JIRA organizations.
tags:
- user
x-codegen-request-body-name: body
x-openapi-router-controller: athenian.api.controllers.user_controller
/account/{id}/features:
get:
operationId: get_account_features
parameters:
- description: Numeric identifier of the account. The user must belong to that account. To find out which accounts the user belongs to, see `/user`.
explode: false
in: path
name: id
required: true
schema:
type: integer
style: simple
responses:
200:
content:
application/json:
schema:
$ref: '#/components/schemas/ProductFeatures'
description: List of the enabled product features for the account.
403:
content:
application/json:
schema:
$ref: '#/components/schemas/GenericError'
description: The user does not have access to this account.
404:
content:
application/json:
schema:
$ref: '#/components/schemas/GenericError'
description: The account was not found.
security:
- bearerAuth: []
- apiKeyAuth: []
summary: List the product features enabled for the account.
tags:
- user
x-codegen-request-body-name: body
x-openapi-router-controller: athenian.api.controllers.user_controller
/share:
post:
operationId: save_share
requestBody:
content:
application/json:
schema:
type: object
x-body-name: body
responses:
200:
content:
application/json:
schema:
type: string
description: Saved share identifier.
400:
$ref: '#/components/responses/InvalidRequestErrorResponse'
security:
- bearerAuth: []
summary: 👤 Save the state of UI views and return a reference.
tags:
- user
x-codegen-request-body-name: body
x-openapi-router-controller: athenian.api.controllers.share_controller
/share/{id}:
get:
operationId: get_share
parameters:
- description: Reference to the share previously saved by `PUT /share`.
explode: false
in: path
name: id
required: true
schema:
type: string
style: simple
responses:
200:
content:
application/json:
schema:
$ref: '#/components/schemas/Share'
description: Saved state of the UI views.
404:
content:
application/json:
schema:
$ref: '#/components/schemas/GenericError'
description: Share does not exist or the user is not allowed to access.
security:
- bearerAuth: []
summary: 👤 Load the previously saved state of the UI views.
tags:
- user
x-codegen-request-body-name: body
x-openapi-router-controller: athenian.api.controllers.share_controller
/user:
get:
operationId: get_user
responses:
200:
content:
application/json:
schema:
$ref: '#/components/schemas/User'
description: 'Information about the calling user: name, email, login, etc.'
security:
- bearerAuth: []
- apiKeyAuth: []
summary: Show details about the calling user.
tags:
- user
x-codegen-request-body-name: body
x-openapi-router-controller: athenian.api.controllers.user_controller
components:
schemas:
User:
additionalProperties: false
description: User details. "updated" and "accounts" are populated only for the calling user.
example:
id: github|60340680
native_id: '60340680'
login: gkwillie
name: Groundskeeper Willie
email: bot@athenian.co
picture: https://avatars0.githubusercontent.com/u/60340680?v=4
updated: 2020-01-23 12:00:00+00:00
accounts:
1:
is_admin: true
expired: false
has_jira: true
has_ci: true
has_deployments: true
stale: false
2:
is_admin: false
expired: false
has_jira: false
has_ci: true
has_deployments: false
stale: false
properties:
accounts:
additionalProperties:
$ref: '#/components/schemas/AccountStatus'
description: Mapping from user's account ID the membership status.
type: object
email:
description: Email of the user.
type: string
id:
description: Auth0 user identifier.
type: string
impersonated_by:
description: Identifier of the super admin user who is acting on behalf of.
type: string
login:
description: Auth backend user login name.
type: string
native_id:
description: Auth backend user identifier.
type: string
name:
description: Full name of the user.
type: string
picture:
description: Avatar URL of the user.
type: string
updated:
description: Date and time of the last profile update.
format: date-time
type: string
required:
- id
- login
- native_id
type: object
AccountUserChangeRequest:
additionalProperties: false
description: Request to change an account member's status.
example:
user: github|60340680
account: 1
status: regular
properties:
account:
description: Account ID.
type: integer
user:
description: Account member ID.
type: string
status:
description: Account membership role.
enum:
- regular
- admin
- banished
type: string
required:
- account
- status
- user
type: object
JIRAInstallation:
additionalProperties: false
description: Information about a link with JIRA.
example:
url: https://athenianco.atlassian.net
projects:
- DEV
- ENG
properties:
url:
description: JIRA base URL.
format: url
type: string
projects:
description: List of accessible project keys.
items:
type: string
type: array
required:
- projects
- url
type: object
ProductFeature:
additionalProperties: false
description: Client-side product feature definition.
example:
name: jira
parameters:
epics: true
labels: false
properties:
name:
type: string
parameters:
oneOf:
- type: number
- type: string
- type: object
required:
- name
- parameters
type: object
Share:
additionalProperties: false
description: Saved UI views state with metadata.
example:
author: Vadim Markovtsev
created: 2022-05-05 12:00:00+00:00
data:
whatever: 777
properties:
author:
description: User name who submitted.
type: string
created:
description: Submission timestamp.
format: date-time
type: string
data:
description: Saved object.
type: object
required:
- author
- created
- data
type: object
Datasource:
description: A datasource configured for the account.
enum:
- github
- jira
Organization:
additionalProperties: false
description: GitHub organization details.
example:
name: Athenian
login: athenianco
avatar_url: https://avatars3.githubusercontent.com/u/58329504?s=200&v=4
properties:
name:
type: string
avatar_url:
type: string
login:
type: string
required:
- avatar_url
- login
- name
type: object
AccountStatus:
additionalProperties: false
description: Status of the user's account membership.
example:
is_admin: true
expired: false
stale: false
has_jira: true
has_ci: true
has_deployments: true
properties:
is_admin:
description: Indicates whether the user is an account administrator.
type: boolean
expired:
description: Indicates whether the account is disabled.
type: boolean
stale:
description: Indicates whether the account is temporarily not receiving data updates.
type: boolean
has_jira:
description: Indicates whether the account installed the integration with JIRA.
type: boolean
has_ci:
description: Indicates whether the account permitted the access to check suites.
type: boolean
has_deployments:
description: Indicates whether the account has submitted at least one deployment.
type: boolean
required:
- expired
- has_ci
- has_deployments
- has_jira
- is_admin
- stale
type: object
InvalidRequestError:
allOf:
- $ref: '#/components/schemas/GenericError'
- properties:
pointer:
description: Path to the offending request item.
example: .granularity
type: string
type: object
ProductFeatures:
description: Enabled client-side product features.
example:
- name: expires_at
parameters: '2030-01-01T00:00:00Z'
- name: jira
parameters:
epics: true
labels: false
items:
$ref: '#/components/schemas/ProductFeature'
type: array
GenericError:
example:
detail: 'Unsupported metric: pr-xxx-time'
status: 400
title: Bad request syntax or unsupported method.
type: /errors/InvalidRequestError
properties:
detail:
description: Human-readable explanation specific to this occurrence of the problem.
example: 'Unsupported metric: pr-xxx-time'
type: string
instance:
description: URI reference that identifies the specific occurrence of the problem. It is `null` for 4xx, Sentry event ID for 5xx.
example: 2763c4eabd7240f59829ee1a02546293
type: string
status:
description: Duplicated HTTP status code.
example: 400
type: integer
title:
description: Short, human-readable summary of the problem type.
example: Bad request syntax or unsupported method.
type: string
type:
description: URI reference that identifies the problem type (RFC 7807).
example: /errors/InvalidRequestError
type: string
required:
- status
- title
- type
type: object
Account:
additionalProperties: false
description: Account members ("updated" and "accounts" are not populated) and installed GitHub organizations.
example:
regulars:
- id: github|24828976
native_id: '24828976'
login: jjdoe
name: Jane Josephine Doe
email: janedoe@exampleco.com
picture: https://exampleco.com/janedoe/me.jpg
updated: 2020-01-23 12:00:00+00:00
- id: github|24828977
native_id: '24828977'
login: jjdoe
name: Jane Josephine Doe
email: janedoe@exampleco.com
picture: https://exampleco.com/janedoe/me.jpg
updated: 2020-01-23 12:00:00+00:00
admins:
- id: github|24828978
native_id: '24828978'
login: jjdoe
name: Jane Josephine Doe
email: janedoe@exampleco.com
picture: https://exampleco.com/janedoe/me.jpg
updated: 2020-01-23 12:00:00+00:00
- id: github|24828979
native_id: '24828979'
login: jjdoe
name: Jane Josephine Doe
email: janedoe@exampleco.com
picture: https://exampleco.com/janedoe/me.jpg
updated: 2020-01-23 12:00:00+00:00
organizations:
- name: Athenian
login: athenianco
avatar_url: https://avatars3.githubusercontent.com/u/58329504?s=200&v=4
datasources:
- github
- jira
jira:
url: https://athenianco.atlassian.net
projects:
- DEV
- ENG
properties:
admins:
description: List of admin users.
items:
$ref: '#/components/schemas/User'
type: array
regulars:
description: List of non-admin users.
items:
$ref: '#/components/schemas/User'
type: array
organizations:
description: List of installed GitHub organizations.
items:
$ref: '#/components/schemas/Organization'
type: array
datasources:
description: The list of datasources configured for the account.
items:
$ref: '#/components/schemas/Datasource'
type: array
jira:
$ref: '#/components/schemas/JIRAInstallation'
required:
- admins
- organizations
- regulars
- datasources
type: object
responses:
InvalidRequestErrorResponse:
content:
application/json:
schema:
$ref: '#/components/schemas/InvalidRequestError'
description: The request is invalid.
securitySchemes:
apiKeyAuth:
description: 'Authorization by the value of `X-API-Key` header aka API token.
The tokens are user- and account-specific. Create them by calling `/token/create`.
The server automatically inserts `account` in the request''s body if it was not
supplied by the user.'
in: header
name: X-API-Key
type: apiKey
x-apikeyInfoFunc: athenian.api.controllers.security_controller.info_from_apiKeyAuth
bearerAuth:
bearerFormat: JWT
description: 'Regular JSON Web Token authorization powered by Auth0.
The server expects an `Authorization: Bearer ` header and checks `` by
sending it to Auth0. Visit [{{ server_url | replace("api", "app") }}/bearer]({{ server_url | replace("api", "app") }}/bearer)
to copy your current JWT that will expire within 24 hours.'
scheme: bearer
type: http
x-bearerInfoFunc: athenian.api.controllers.security_controller.info_from_bearerAuth