@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api Service Accounts API
@version 1.0.0
@endpoints 7
@toc organizations(6), projects(1)

@group organizations
@endpoint GET /organizations/{organizationId}/service-accounts
@returns(200) {results: [map], status: any}
@errors {401, 403, 404}

@endpoint POST /organizations/{organizationId}/service-accounts
@required {username: str}
@optional {role: str(owner/admin/analyst/consumer), expires: str(date-time), projects: [map{id: int, role: str}]}
@returns(201) {results: any, status: any}
@errors {400, 401, 403, 404}

@endpoint GET /organizations/{organizationId}/service-accounts/{serviceAccountId}
@returns(200) {id: int, username: str, last_used: str(date-time), expires: str(date-time), creator: int, created: str(date-time), user: int}
@errors {401, 403, 404}

@endpoint DELETE /organizations/{organizationId}/service-accounts/{serviceAccountId}
@returns(200)
@errors {401, 403, 404}

@endgroup

@group projects
@endpoint GET /projects/{projectId}/service-accounts
@returns(200) {results: [any], status: any}
@errors {401, 403, 404}

@endgroup

@group organizations
@endpoint POST /organizations/{organizationId}/service-accounts/add-to-project
@required {projects: [map{id!: int, role!: str}], service_account_ids: [int]}
@returns(200) {status: any}
@errors {400, 401, 403, 404}

@endpoint POST /organizations/{organizationId}/service-accounts/remove-from-project
@required {projects: [map{id!: int, service_account_ids!: [int]}]}
@returns(200) {status: any}
@errors {400, 401, 403, 404}

@endgroup

@end
