Code Climate Repos API
Manage and read repositories under an organization, including adding private repos, listing repos, and retrieving repository metadata and analysis relationships.
Manage and read repositories under an organization, including adding private repos, listing repos, and retrieving repository metadata and analysis relationships.
openapi: 3.0.1
info:
title: Code Climate Quality API
description: >-
The Code Climate Quality REST API (v1) complies with REST conventions and
the JSON API specification. It exposes organizations, repositories,
maintainability and test-coverage analysis, snapshots, and issues.
Authenticated calls require an Authorization header carrying a personal
access token in the form `Authorization: Token token={TOKEN}`.
termsOfService: https://codeclimate.com/terms
contact:
name: Code Climate Support
email: hello@codeclimate.com
version: 'v1'
servers:
- url: https://api.codeclimate.com/v1
security:
- TokenAuth: []
tags:
- name: Organizations
- name: Repositories
- name: Snapshots
- name: Issues
- name: Test Coverage
- name: Services
paths:
/user:
get:
operationId: getCurrentUser
tags:
- Organizations
summary: Get the authenticated user
description: Returns the user associated with the supplied access token.
responses:
'200':
description: OK
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/UserDocument'
/orgs:
get:
operationId: listOrgs
tags:
- Organizations
summary: List organizations
description: Lists the organizations the authenticated user belongs to.
responses:
'200':
description: OK
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/OrgCollection'
/orgs/{org_id}/repos:
get:
operationId: listOrgRepos
tags:
- Repositories
summary: List repositories in an organization
parameters:
- $ref: '#/components/parameters/OrgId'
- name: page[number]
in: query
required: false
schema:
type: integer
description: Page number for paginated results.
- name: github_slug
in: query
required: false
schema:
type: string
description: Filter repositories by GitHub slug (owner/name).
responses:
'200':
description: OK
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/RepoCollection'
post:
operationId: createRepo
tags:
- Repositories
summary: Add a private repository to an organization
parameters:
- $ref: '#/components/parameters/OrgId'
requestBody:
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/RepoCreateRequest'
responses:
'201':
description: Created
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/RepoDocument'
/orgs/{org_id}/repos/{repo_id}:
put:
operationId: updateRepo
tags:
- Repositories
summary: Update a repository
parameters:
- $ref: '#/components/parameters/OrgId'
- $ref: '#/components/parameters/RepoId'
requestBody:
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/RepoUpdateRequest'
responses:
'200':
description: OK
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/RepoDocument'
/repos:
get:
operationId: getRepoBySlug
tags:
- Repositories
summary: Look up a repository by GitHub slug
parameters:
- name: github_slug
in: query
required: true
schema:
type: string
description: GitHub slug in the form owner/name.
responses:
'200':
description: OK
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/RepoCollection'
/repos/{repo_id}:
get:
operationId: getRepo
tags:
- Repositories
summary: Get a repository
parameters:
- $ref: '#/components/parameters/RepoId'
responses:
'200':
description: OK
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/RepoDocument'
/repos/{repo_id}/services:
get:
operationId: listRepoServices
tags:
- Services
summary: List services configured on a repository
parameters:
- $ref: '#/components/parameters/RepoId'
responses:
'200':
description: OK
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/ServiceCollection'
/repos/{repo_id}/snapshots/{snapshot_id}:
get:
operationId: getSnapshot
tags:
- Snapshots
summary: Get a repository snapshot
description: >-
Returns a snapshot, which groups the issues, ratings, and metrics
produced for a particular commit on a repository.
parameters:
- $ref: '#/components/parameters/RepoId'
- $ref: '#/components/parameters/SnapshotId'
responses:
'200':
description: OK
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/SnapshotDocument'
/repos/{repo_id}/snapshots/{snapshot_id}/issues:
get:
operationId: listSnapshotIssues
tags:
- Issues
summary: List issues in a snapshot
description: >-
Lists the code quality issues contained in a snapshot, optionally
filtered by engine, category, severity, or location path.
parameters:
- $ref: '#/components/parameters/RepoId'
- $ref: '#/components/parameters/SnapshotId'
- name: filter[severity]
in: query
required: false
schema:
type: string
description: Filter issues by severity.
- name: filter[category]
in: query
required: false
schema:
type: string
description: Filter issues by category.
- name: page[number]
in: query
required: false
schema:
type: integer
description: Page number for paginated results.
responses:
'200':
description: OK
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/IssueCollection'
/test_reports:
post:
operationId: createTestReport
tags:
- Test Coverage
summary: Create a test report (coverage upload)
description: >-
Default endpoint used by the Code Climate test reporter to upload test
coverage information. Authenticated with the repository-scoped reporter
identifier (CC_TEST_REPORTER_ID) rather than a personal access token.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TestReportUploadRequest'
responses:
'200':
description: OK
'201':
description: Created
/repos/{repo_id}/test_reports:
get:
operationId: listTestReports
tags:
- Test Coverage
summary: List test reports for a repository
parameters:
- $ref: '#/components/parameters/RepoId'
responses:
'200':
description: OK
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/TestReportCollection'
/repos/{repo_id}/test_reports/{test_report_id}:
get:
operationId: getTestReport
tags:
- Test Coverage
summary: Get a test report
parameters:
- $ref: '#/components/parameters/RepoId'
- name: test_report_id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/TestReportDocument'
/repos/{repo_id}/test_reports/{test_report_id}/test_file_reports:
get:
operationId: listTestFileReports
tags:
- Test Coverage
summary: List per-file test coverage reports
parameters:
- $ref: '#/components/parameters/RepoId'
- name: test_report_id
in: path
required: true
schema:
type: string
responses:
'200':
description: OK
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/TestFileReportCollection'
/repos/{repo_id}/test_reports/{test_report_id}/test_file_reports/batch:
post:
operationId: createTestFileReportsBatch
tags:
- Test Coverage
summary: Create a batch of test file reports
description: >-
Uploads a batch of up to 500 source-file coverage records for a test
report.
parameters:
- $ref: '#/components/parameters/RepoId'
- name: test_report_id
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/vnd.api+json:
schema:
$ref: '#/components/schemas/TestFileReportBatchRequest'
responses:
'201':
description: Created
components:
securitySchemes:
TokenAuth:
type: apiKey
in: header
name: Authorization
description: >-
Personal access token passed as `Authorization: Token token={TOKEN}`.
parameters:
OrgId:
name: org_id
in: path
required: true
description: The organization identifier.
schema:
type: string
RepoId:
name: repo_id
in: path
required: true
description: The repository identifier.
schema:
type: string
SnapshotId:
name: snapshot_id
in: path
required: true
description: The snapshot identifier.
schema:
type: string
schemas:
ResourceIdentifier:
type: object
properties:
id:
type: string
type:
type: string
User:
type: object
properties:
id:
type: string
type:
type: string
example: users
attributes:
type: object
properties:
name:
type: string
email:
type: string
UserDocument:
type: object
properties:
data:
$ref: '#/components/schemas/User'
Org:
type: object
properties:
id:
type: string
type:
type: string
example: orgs
attributes:
type: object
properties:
name:
type: string
OrgCollection:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Org'
Repo:
type: object
properties:
id:
type: string
type:
type: string
example: repos
attributes:
type: object
properties:
human_name:
type: string
github_slug:
type: string
url:
type: string
score:
type: string
last_activity_at:
type: string
format: date-time
relationships:
type: object
properties:
latest_default_branch_snapshot:
type: object
properties:
data:
$ref: '#/components/schemas/ResourceIdentifier'
latest_default_branch_test_report:
type: object
properties:
data:
$ref: '#/components/schemas/ResourceIdentifier'
RepoDocument:
type: object
properties:
data:
$ref: '#/components/schemas/Repo'
RepoCollection:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Repo'
RepoCreateRequest:
type: object
properties:
data:
type: object
properties:
type:
type: string
example: repos
attributes:
type: object
properties:
url:
type: string
description: Git URL of the private repository to add.
RepoUpdateRequest:
type: object
properties:
data:
type: object
properties:
type:
type: string
example: repos
attributes:
type: object
Snapshot:
type: object
properties:
id:
type: string
type:
type: string
example: snapshots
attributes:
type: object
properties:
commit_sha:
type: string
committed_at:
type: string
format: date-time
created_at:
type: string
format: date-time
ratings:
type: array
items:
type: object
properties:
measure:
type: string
letter:
type: string
SnapshotDocument:
type: object
properties:
data:
$ref: '#/components/schemas/Snapshot'
Issue:
type: object
properties:
id:
type: string
type:
type: string
example: issues
attributes:
type: object
properties:
check_name:
type: string
description:
type: string
categories:
type: array
items:
type: string
severity:
type: string
engine_name:
type: string
fingerprint:
type: string
location:
type: object
properties:
path:
type: string
lines:
type: object
properties:
begin:
type: integer
end:
type: integer
IssueCollection:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Issue'
meta:
type: object
properties:
total_count:
type: integer
Service:
type: object
properties:
id:
type: string
type:
type: string
example: services
attributes:
type: object
properties:
name:
type: string
options:
type: object
ServiceCollection:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Service'
TestReport:
type: object
properties:
id:
type: string
type:
type: string
example: test_reports
attributes:
type: object
properties:
commit_sha:
type: string
covered_percent:
type: number
received_at:
type: string
format: date-time
state:
type: string
TestReportDocument:
type: object
properties:
data:
$ref: '#/components/schemas/TestReport'
TestReportCollection:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/TestReport'
TestReportUploadRequest:
type: object
properties:
data:
type: object
properties:
covered_percent:
type: number
line_counts:
type: object
properties:
covered:
type: integer
missed:
type: integer
total:
type: integer
TestFileReport:
type: object
properties:
id:
type: string
type:
type: string
example: test_file_reports
attributes:
type: object
properties:
path:
type: string
covered_percent:
type: number
line_counts:
type: object
properties:
covered:
type: integer
missed:
type: integer
total:
type: integer
TestFileReportCollection:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/TestFileReport'
TestFileReportBatchRequest:
type: object
properties:
data:
type: array
maxItems: 500
items:
type: object
properties:
type:
type: string
example: test_file_reports
attributes:
type: object
properties:
path:
type: string
coverage:
type: string
covered_percent:
type: number