Overview
Code Climate's API exposes user, organization and repository data displayed and used by our web application (and browser extension).
The API complies with REST standards and the JSON API specification. In addition to our documentation here, you may find additional help by consulting the JSON API specification.
As per the JSON API, clients should use the JSON API media type where appropriate (and the examples demonstrate this).
If your organization uses codeclimate.com, the URL for the api is: https://api.codeclimate.com/
.
For on premise customers, use your normal Code Climate host name, but prefix endpoints with /api
.
All endpoints are prefixed by the API version. The current version is /v1
.
Following this, here are the base URLs (assuming current version):
codeclimate.com: https://api.codeclimate.com/v1
On premise: https://{YOUR-CC-HOST-NAME}/api/v1
Authentication
All authenticated calls must include a Authorization header including a valid token.
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
https://api.codeclimate.com/v1/user
Make sure to replace
{TOKEN}
with your API access token.
Code Climate uses API access tokens to allow access to the API. You can generate a new Code Climate personal access token on codeclimate.com in the token settings area of your Code Climate user profile.
Code Climate expects for the API token to be included in all API requests to the server in a header that looks like the following (replace {TOKEN} with your own):
Authorization: Token token={TOKEN}
Data Types
Where possible, the Code Climate API uses consistent formats to represent common types. These are listed below.
Type | Format |
---|---|
id | stringified BSON object id |
timestamp | ISO8601-formatted timestamp (e.g. 2015-12-17T18:58:07.301Z ) |
Rate Limit
The API enforces a limit of 5,000 requests per token per hour.
Collection Pagination
Request for 3rd page with 10 items per page
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
--get \
--data-urlencode "page[size]=10" \
--data-urlencode "page[number]=3" \
https://api.codeclimate.com/v1/orgs
The Code Climate API supports pagination for resource collections.
As per the JSON API, paginate
through resources with a top level page[]
query parameter. In the Code Climate API
(JSON API is agnostic to how page[]
is used),
the page[]
parameter supports nested page
and size
parameters.
Query parameter | Description | Default | Max |
---|---|---|---|
page[size] | The number of items to return per page | 30 | 100 |
page[number] | The page number to request | 1 | n/a |
Collection Filtering
Filtering by basic key / value
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
--get \
--data-urlencode "filter[branch]=master" \
https://api.codeclimate.com/v1/repos/696a76232df2736347000001/ref_points
Filtering with
$in
operator, passing multiple values. Note that the parameter is specified more than once:
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
--get \
--data-urlencode "filter[branch][\$in][]=master" \
--data-urlencode "filter[branch][\$in][]=development" \
https://api.codeclimate.com/v1/repos/696a76232df2736347000001/ref_points
Filtering with the
$regex
operator. This can be used to find records with an attribute that matches a certain regular expression.
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
--get \
--data-urlencode "filter[path][\$regex]=.+\.yml" \
https://api.codeclimate.com/v1/repos/59371236d8638a029a0000ef/snapshots/623c2866a758be0001036c9f/files
In some cases, where specified, the Code Climate API supports filtering resource collections.
As per the JSON API, filter
resources with a top level filter[]
query parameter.
The JSON API is agnostic beyond the filter[]
key. In the Code Climate API,
filters can be of two basic formats (examples on the right):
- A basic key/value
- A more complex data structure with an operator. At this time only the
$in
and$regex
operators are supported.
See the Query Parameters
section of each endpoint for details about what filters are supported.
Fetching associated resources
Code Climate's API supports loading associated resources in a single API call.
To determine what associated resources can be loaded, inspect the relationships
section of the API response. For example, the GET repo endpoint returns a JSON response with a relationships
key, where one of the relationships is named latest_default_branch_snapshot
.
Fetch the associated resource(s) by using the include
query string parameter. Multiple included resources should use an include[]
parameter, with resources specified as a comma-delimited list.
For example:
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
--get \
--data-urlencode "include[]=latest_default_branch_snapshot,account" \
https://api.codeclimate.com/v1/repos/696a76232df2736347000001
Users
Get authenticated user
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
https://api.codeclimate.com/v1/user
JSON response:
{
"data": {
"id": "516342ca7e11a428b0025372",
"type": "users",
"attributes": {
"email": "dale@twinpeaks.com",
"enabled_features": [
"builder_pull_engines",
"disable_transactions",
"encrypted_ssh_private_keys"
],
"full_name": "Dale Cooper",
"staff": false,
"github_login": "dale_cooper"
},
"links": {
"avatar": "https:\/\/avatars.githubusercontent.com\/u\/122672"
}
}
}
Returns information about the authenticated user.
HTTP Request
GET https://api.codeclimate.com/v1/user
Query Parameters
N/A
Organizations
Get organizations
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
https://api.codeclimate.com/v1/orgs
JSON response:
{
"data": [
{
"id": "3334f0eaf3ea115e91218182",
"type": "orgs",
"attributes": {
"name": "Twin Peaks"
},
"meta": {
"counts": {
"repos": 6
},
"permissions": {
"admin": true
}
}
},
{
"id": "591d76793b8b820267111402",
"type": "orgs",
"attributes": {
"name": "FBI"
},
"meta": {
"counts": {
"repos": 0
},
"permissions": {
"admin": true
}
}
}
],
"links": {
}
}
Returns collection of organizations for the current user.
HTTP Request
GET https://api.codeclimate.com/v1/orgs
Query Parameters
Not filterable.
Get permissions
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
https://api.codeclimate.com/v1/orgs/596b70adb79d8f147b000002/permissions
JSON response:
{
"data": [
{
"id": "approve-pull-requests",
"type": "team_permissions",
"attributes": {
"name": "approve-pull-requests",
"granted_to": "members"
},
"meta": {
"options": [
"members",
"owners"
]
}
},
{
"id": "manage-issues",
"type": "team_permissions",
"attributes": {
"name": "manage-issues",
"granted_to": "members"
},
"meta": {
"options": [
"members",
"owners"
]
}
}
]
}
Retrieves permissions such as which members can manage issues and/or approve pull requests.
HTTP Request
POST https://api.codeclimate.com/v1/orgs/:org_id/permissions
Query Parameters
N/A
Get members
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
https://api.codeclimate.com/v1/orgs/596b70adb79d8f147b000002/members
JSON response
{
"data":[
{
"id": "602c2cfee9c14500fc000001",
"type": "users",
"attributes": {
"email": "lewis.oliver@example.com",
"full_name": "Lewis Oliver",
"staff": true,
"github_login": "lewis_oliver"
},
"links": {
"avatar": "https://avatars.githubusercontent.com/u/11605222"
}
},
{
"id": "602c2d13e9c14500fc000002",
"type": "users",
"attributes": {
"email": "bob.mendoza@example.com",
"full_name": "Bob Mendoza",
"staff": false,
"github_login": "bob_mendoza"
},
"links": {
"avatar": "https://avatars.githubusercontent.com/u/62915929"
}
}
]
}
Returns listing of active members for the specified organization that the authenticated user (user associated with the passed token) has access to.
HTTP Request
GET https://api.codeclimate.com/v1/orgs/:org_id/members
Query Parameters
Parameter | Default | Description |
---|---|---|
admin_only | false | If set to true, the result will only include administrator members. |
Remove member
curl \
-H "Accept: application/vnd.api+json"
-H "Authorization: Token token={TOKEN}"
-X DELETE \
https://api.codeclimate.com/v1/orgs/596b70adb79d8f147b000002/members/516342ca7e11a428b0025372
Removes the given user from the account members. Be aware that this endpoint is enabled on demand. You should contact our customer support team in order to be able to consume this endpoint, help@codeclimate.com.
HTTP Request
PUT https://api.codeclimate.com/v1/orgs/:org_id/members/:user_id
Query Parameters
N/A.
Create organization
Given a JSON file "create-org.json" with the following contents ...
{
"data": {
"type": "orgs",
"attributes": {
"name": "Twin Peaks",
"vcs_owner_attributes": {
"vcs_login": "your-github-org-name"
}
}
}
}
... issue the following after replacing {TOKEN} ...
$ curl \
-H "Accept: application/vnd.api+json" \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
-d @create-org.json \
https://api.codeclimate.com/v1/orgs
... which returns JSON like this:
{
"data": {
"id": "596b70adb79d8f147b000002",
"type": "orgs",
"attributes": {
"name": "Black Lodge"
},
"meta": {
"counts": {
"repos": 0
},
"permissions": {
"admin": true
}
}
}
}
Creates a new single-person organization with the specified attributes.
If the organization was created successfully, this endpoint responds with the
created organization and status 201
.
HTTP Request
POST https://api.codeclimate.com/v1/orgs
POST Parameters
Request is a JSON API document which complies with the specification for resource creation requests. See example POST in gutter for format.
For more details, consult Creating Resources.
Parameter | Description | Required? |
---|---|---|
name | Name of the new organization | Yes |
vcs_owner_attributes | Hash containing attributes to connect the organization to a version control system's organization (e.g. your GitHub organization) for authentication | No |
vcs_owner_attributes.vcs_login | The name of your GitHub organization to connect to the Code Climate organization | No |
Add private repository
Given a JSON file "create-private-repository.json" with the following contents ...
{
"data": {
"type": "repos",
"attributes": {
"url": "https://github.com/twinpeaks/ranchorosa"
}
}
}
.. issue the following after replacing {TOKEN} and the organization id ...
$ curl \
-H "Accept: application/vnd.api+json" \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
-d @create-private-repository.json \
https://api.codeclimate.com/v1/orgs/596b70adb79d8f147b000002/repos
... which returns JSON like this:
{
"data": {
"id": "696a76232df2736347000001",
"type": "repos",
"attributes": {
"analysis_version": 3385,
"badge_token": "16096d266f46b7c68dd4",
"branch": "master",
"created_at": "2017-07-15T20:08:03.731Z",
"github_slug": "twinpeaks\/ranchorosa",
"human_name": "ranchorosa",
"last_activity_at": "2017-07-15T20:08:03.731Z"
},
"relationships": {
"latest_default_branch_snapshot": {
"data": null
},
"latest_default_branch_test_report": {
"data": null
},
"account": {
"data": {
"id": "596b70adb79d8f147b000002",
"type": "orgs"
}
}
},
"links": {
"self": "https:\/\/codeclimate.com\/repos\/696a76232df2736347000001",
"services": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/services",
"web_coverage": "https:\/\/codeclimate.com\/repos\/696a76232df2736347000001\/coverage",
"web_issues": "https:\/\/codeclimate.com\/repos\/696a76232df2736347000001\/issues"
},
"meta": {
"permissions": {
"admin": true
}
}
}
}
Adds the repository to the specified organization.
If the repository was added successfully, this endpoint responds with the
added repository and status 201
.
HTTP Request
POST https://api.codeclimate.com/v1/orgs/:org_id/repos
POST Parameters
Request is a JSON API document which complies with the specification for resource creation requests. See example POST in gutter for format.
For more details, consult Creating Resources.
Parameter | Description | Required? |
---|---|---|
url | Code Climate uses the url parameter to determine where your repository is hosted and how to clone it. Currently, only repositories hosted on GitHub are supported, so we only accept https://github.com URLs. Once created, users will still find a Deploy Key added on GitHub and an SSH-based clone URL in their repo settings. |
Yes |
Get repositories
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
https://api.codeclimate.com/v1/orgs/596b70adb79d8f147b000002/repos
JSON response
{
"data": [
{
"id": "596a76232df1736777000001",
"type": "repos",
"attributes": {
"analysis_version": 3436,
"badge_token": "16096d266f46b7c68dc4",
"branch": "master",
"created_at": "2017-07-15T20:08:03.732Z",
"github_slug": "twinpeaks\/ranchorosa",
"human_name": "ranchorosa",
"last_activity_at": "2017-07-26T00:42:23.337Z"
},
"relationships": {
"latest_default_branch_snapshot": {
"data": {
"id": "5977e4cba2a8970001016f25",
"type": "snapshots"
}
},
"latest_default_branch_test_report": {
"data": null
},
"account": {
"data": {
"id": "596b70adb79d8f147b000002",
"type": "orgs"
}
}
},
"links": {
"self": "https:\/\/codeclimate.com\/repos\/596a76232df1736777000001",
"services": "https:\/\/api.codeclimate.com\/v1\/repos\/596a76232df1736777000001\/services",
"web_coverage": "https:\/\/codeclimate.com\/repos\/596a76232df1736777000001\/coverage",
"web_issues": "https:\/\/codeclimate.com\/repos\/596a76232df1736777000001\/issues"
},
"meta": {
"permissions": {
"admin": true
}
}
}
]
}
Returns listing of repositories for the specified organization that the authenticated user (user associated with the passed token) has access to.
HTTP Request
GET https://api.codeclimate.com/v1/orgs/:org_id/repos
Query Parameters
N/A
Repositories
Get repository
Retrieve a repo by github_slug:
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
https://api.codeclimate.com/v1/repos?github_slug=twinpeaks/ranchorosa
Alternatively, if you know the repo_id, you can issue the following:
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
https://api.codeclimate.com/v1/repos/696a76232df2736347000001
JSON response:
{
"data": [
{
"id": "696a76232df2736347000001",
"type": "repos",
"attributes": {
"analysis_version": 3385,
"badge_token": "16096d266f46b7c68dd4",
"branch": "master",
"created_at": "2017-07-15T20:08:03.732Z",
"github_slug": "twinpeaks\/ranchorosa",
"human_name": "ranchorosa",
"last_activity_at": "2017-07-15T20:09:41.846Z",
"test_reporter_id": "d8ffac8b9a787b957e70ca74b8cac2dff09ed537b8c6023ac0424c8a43381402",
"total_coverage_enforced": true,
"vcs_database_id": "92872343",
"vcs_host": "https://github.com"
},
"relationships": {
"latest_default_branch_snapshot": {
"data": {
"id": "596a762c9373ca000100177e",
"type": "snapshots"
}
},
"latest_default_branch_test_report": {
"data": null
},
"account": {
"data": {
"id": "596b70adb79d8f147b000002",
"type": "orgs"
}
}
},
"links": {
"self": "https:\/\/codeclimate.com\/repos\/696a76232df2736347000001",
"services": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/services",
"web_coverage": "https:\/\/codeclimate.com\/repos\/696a76232df2736347000001\/coverage",
"web_issues": "https:\/\/codeclimate.com\/repos\/696a76232df2736347000001\/issues"
},
"meta": {
"permissions": {
"admin": true
}
}
}
]
}
Retrieves information about the specified repository.
HTTP Request
GET https://api.codeclimate.com/v1/repos?github_slug={github_slug}
OR
GET https://api.codeclimate.com/v1/repos/:repo_id
Query Parameters
Parameter | Description | Required? |
---|---|---|
github_slug | GitHub slug in username/reponame format |
Yes if no :repo_id |
Get ref points
First page of ref points, for master branch only, which have completed Code Climate analysis.
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
--get \
--data-urlencode "filter[branch]=master" \
--data-urlencode "filter[analyzed]=true" \
--data-urlencode "page[size]=3" \
https://api.codeclimate.com/v1/repos/696a76232df2736347000001/ref_points
JSON response:
{
"data": [
{
"id": "596922da59abfc0001000170",
"type": "ref_points",
"attributes": {
"analyzed": true,
"branch": "master",
"commit_sha": "db36165a645dccb5ac78d3c70dffffa4aef7d8a2",
"created_at": "2017-07-14T20:00:26.765Z",
"ref": "refs\/heads\/master"
},
"relationships": {
"snapshot": {
"data": {
"id": "596922dbbf0ade0001004b86",
"type": "snapshots"
}
}
}
},
{
"id": "59691c63f4c69a0002001026",
"type": "ref_points",
"attributes": {
"analyzed": true,
"branch": "master",
"commit_sha": "e9a210203b43d1586ca1aa27884c86b914419bff",
"created_at": "2017-07-14T19:32:51.664Z",
"ref": "refs\/heads\/master"
},
"relationships": {
"snapshot": {
"data": {
"id": "60691c63bf0ade00010042c7",
"type": "snapshots"
}
}
}
},
{
"id": "6068ee85ce77bd0001000029",
"type": "ref_points",
"attributes": {
"analyzed": true,
"branch": "master",
"commit_sha": "6b21824ec86477884482b51284267af8dcfec233",
"created_at": "2017-07-14T16:17:09.936Z",
"ref": "refs\/heads\/master"
},
"relationships": {
"snapshot": {
"data": {
"id": "59744a9dbf0ade0001003fa3",
"type": "snapshots"
}
}
}
}
],
"links": {
"self": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/ref_points?filter%5Banalyzed%5D=true&filter%5Bbranch%5D=master&page%5Bnumber%5D=1&page%5Bsize%5D=3",
"next": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/ref_points?filter%5Banalyzed%5D=true&filter%5Bbranch%5D=master&page%5Bnumber%5D=2&page%5Bsize%5D=3",
"last": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/ref_points?filter%5Banalyzed%5D=true&filter%5Bbranch%5D=master&page%5Bnumber%5D=1760&page%5Bsize%5D=3"
}
}
Returns collection of ref points for the repository.
A ref point is an observation of a commit on a branch at a moment in time. Whenever Code Climate is notified about a new commit (e.g. through webhook events), Code Climate create a ref point for it. It's sort of like our own git log of the actions that occurred on the repository and won't change if you force-push and change history.
Ref points are sorted by creation date in reverse chronological order.
HTTP Request
GET https://api.codeclimate.com/v1/repos/:repo_id/ref_points
Query Parameters
Filters include:
Name | Description | Required? |
---|---|---|
filter[analyzed] | Only ref points which have been analyzed (or not analyzed) by Code Climate | No |
filter[branch] | Only ref points associated with the specified branch |
No |
filter[commit_sha] | Only ref points associated with the given commit_sha |
No |
filter[local_ref] | Only ref points associated with the given local_ref . Examples include refs/pulls/553/head and ref/heads/master |
No |
Get repository services
curl
-H "Accept: application/vnd.api+json"
-H "Authorization: Token token={TOKEN}"
https://api.codeclimate.com/v1/repos/696a76232df2736347000001/services
JSON response:
{
"data": [
{
"id": "58f0ee6f2f1eba0290004322",
"type": "services",
"attributes": {
"slug": "flowdock",
"title": "Flowdock",
"description": "Send messages to a Flowdock inbox"
},
"links": {
"events": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/services\/58f0ee6f2f1eba0290004322\/events"
}
},
{
"id": "53c97739e30ba123fd00abd3",
"type": "services",
"attributes": {
"slug": "githubpullrequests",
"title": "GitHub Pull Requests",
"description": "Update pull requests on GitHub"
},
"links": {
"events": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/services\/53c97739e30ba123fd00abd3\/events"
}
},
{
"id": "8953edc0e30ba06dfd0017d3",
"type": "services",
"attributes": {
"slug": "hipchat",
"title": "HipChat",
"description": "Send messages to a HipChat chat room"
},
"links": {
"events": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/services\/8953edc0e30ba06dfd0017d3\/events"
}
},
{
"id": "22272d8e6afbed290a0000eb",
"type": "services",
"attributes": {
"slug": "jira",
"title": "JIRA",
"description": "Create tickets in JIRA"
},
"links": {
"events": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/services\/22272d8e6afbed290a0000eb\/events"
}
},
{
"id": "666958c7695680518a002624",
"type": "services",
"attributes": {
"slug": "slack",
"title": "Slack",
"description": "Send messages to a Slack channel"
},
"links": {
"events": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/services\/666958c7695680518a002624\/events"
}
}
]
}
Returns a collection of (external) service integrations for a particular repository.
There are few types of integrations:
- Issue tracker
- Chat service
- Pull requests
HTTP Request
GET https://api.codeclimate.com/v1/repos/:repo_id/services
Query Parameters
Filters include:
Name | Description | Required? |
---|---|---|
filter[type] | Only integrations of this type. Only supports issue_tracker value at the moment. |
No |
Trigger new service event
Given a JSON file "trigger-event.json" with the following contents ...
{
"data": {
"attributes": {
"name": "issue",
"issue": {
"check_name": "Metrics/CyclomaticComplexity",
"description": "Cyclomatic complexity for method is too high.",
"details_url": "http://example.com/repos/1/issues#issue_12345",
"id": "12345",
"location": {
"path": "foo.rb"
}
}
}
}
}
... issue the following after replacing {TOKEN} ...
$ curl \
-H "Accept: application/vnd.api+json" \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
-d @trigger-event.json \
https://api.codeclimate.com/v1/repos/696a76232df2736347000001/services/666958c7695680518a002624/events
... which returns JSON like this:
{
"data": {
"attributes": {
"ok": true,
"message": "Success"
},
"id": "700a76232df2736347000201",
"type": "service_events",
"links": {
"external": "https://github.com/example/repo/issues/100"
}
}
}
Trigger an event to be consumed by one of the repository's service integrations.
HTTP Request
POST https://api.codeclimate.com/v1/repos/:repo_id/services/:service_id/events
POST Parameters
Request is a JSON API document which complies with the specification for resource creation requests. See example POST in gutter for format.
For more details, consult Creating Resources.
Add public (OSS) repository
Given a JSON file "create-public-repository.json" with the following contents ...
{
"data": {
"type": "repos",
"attributes": {
"url": "https://github.com/twinpeaks/ranchorosa"
}
}
}
.. issue the following after replacing {TOKEN} and the organization id ...
$ curl \
-H "Accept: application/vnd.api+json" \
-H "Content-Type: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
-d @create-public-repository.json \
https://api.codeclimate.com/v1/github/repos
... which returns JSON like this:
{
"data": {
"id": "5977b29ed9371b0266334433",
"type": "repos",
"attributes": {
"analysis_version": 3436,
"badge_token": "a5bf2eef77b257ea5bb8",
"branch": "master",
"created_at": "2017-07-25T21:05:34.827Z",
"github_slug": "twinpeaks\/ranchorosa",
"human_name": "brew",
"last_activity_at": "2017-07-25T21:05:34.827Z",
"vcs_database_id": "92872343",
"vcs_host": "https://github.com"
},
"relationships": {
"latest_default_branch_snapshot": {
"data": null
},
"latest_default_branch_test_report": {
"data": null
},
"account": {
"data": null
}
},
"links": {
"self": "https:\/\/codeclimate.com\/github\/twinpeaks\/ranchorosa",
"services": "https:\/\/api.codeclimate.com\/v1\/repos\/5977b29ed9371b0266334433\/services",
"web_coverage": "https:\/\/codeclimate.com\/github\/twinpeaks\/ranchorosa\/coverage",
"web_issues": "https:\/\/codeclimate.com\/github\/twinpeaks\/ranchorosa\/issues"
},
"meta": {
"permissions": {
"admin": true
}
}
}
}
Add a GitHub open source repository to Code Climate
If the repository was added successfully, this endpoint responds with the
added repository and status 201
.
HTTP Request
POST https://api.codeclimate.com/v1/github/repos
POST Parameters
Request is a JSON API document which complies with the specification for resource creation requests. See example POST in gutter for format.
For more details, consult Creating Resources.
Parameter | Description | Required? |
---|---|---|
url | Code Climate uses the url parameter to determine where your repository is hosted and how to clone it. Currently, only repositories hosted on GitHub are supported, so we only accept https://github.com URLs. Once created, users will still find a Deploy Key added on GitHub and an SSH-based clone URL in their repo settings. |
Yes |
Update private repository
# note: to remove a delegated configuration repository,
# pass the setting without a value
# --data "data[attributes][delegated_config_repo_id]"
curl \
-H "Accept: application/vnd.api+json"
-H "Authorization: Token token={TOKEN}"
-X PUT \
--data "data[attributes][delegated_config_repo_id]=5b3115402954870021000001"
https://api.codeclimate.com/v1/orgs/5a81d1bbbb0c5d026b000001/repos/696a76232df2736347000001
JSON response:
{
"data": {
"id": "696a76232df2736347000001",
"type": "repos",
"attributes": {
"analysis_version": 3385,
"badge_token": "16096d266f46b7c68dd4",
"branch": "master",
"created_at": "2017-07-15T20:08:03.732Z",
"delegated_config_repo_id": "5b3115402954870021000001",
"github_slug": "twinpeaks\/ranchorosa",
"human_name": "ranchorosa",
"last_activity_at": "2017-07-15T20:09:41.846Z",
"vcs_database_id": "92872343",
"vcs_host": "https://github.com"
},
"relationships": {
"latest_default_branch_snapshot": {
"data": {
"id": "596a762c9373ca000100177e",
"type": "snapshots"
}
},
"latest_default_branch_test_report": {
"data": null
},
"account": {
"data": {
"id": "5a81d1bbbb0c5d026b000001",
"type": "orgs"
}
}
},
"links": {
"self": "https:\/\/codeclimate.com\/repos\/696a76232df2736347000001",
"services": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/services",
"web_coverage": "https:\/\/codeclimate.com\/repos\/696a76232df2736347000001\/coverage",
"web_issues": "https:\/\/codeclimate.com\/repos\/696a76232df2736347000001\/issues"
},
"meta": {
"permissions": {
"admin": true
}
}
}
}
Update a private repository on Code Climate
Currently this endpoint can only be used to configure delegated analysis for private repositories.
If the repository is updated successfully, this endpoint responds with the
updated repository and status 200
.
HTTP Request
PUT https://api.codeclimate.com/v1/orgs/:org_id/repos/:repo_id
PUT Parameters
Request is a JSON API document which complies with the specification for resource update requests. See example PUT in gutter for format.
For more details, consult Updating Resources.
Permitted update parameters:
Parameter | Description | Required? |
---|---|---|
delegated_config_repo_id | The repo_id of another repository within the organization to be used as the configuration repository |
No |
Delete private repository
curl \
-H "Accept: application/vnd.api+json"
-H "Authorization: Token token={TOKEN}"
-X DELETE \
https://api.codeclimate.com/v1/repos/696a76232df2736347000001
Delete a private repository on Code Climate
If the repository is deleted successfully, this endpoint responds with status 204
.
HTTP Request
DELTE https://api.codeclimate.com/v1/repos/:repo_id
Repository Analysis
Get issues
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
--get \
--data-urlencode "page[size]=3" \
https://api.codeclimate.com/v1/repos/696a76232df2736347000001/snapshots/596922dbbf0ade0001004b87/issues
JSON response:
{
"data": [
{
"id": "59692f9909bf630001000046",
"type": "issues",
"attributes": {
"categories": [
"Complexity"
],
"check_name": "method_count",
"constant_name": "lib\/book.rb",
"content": {
"body": ""
},
"description": "Class `Check` has 22 methods (exceeds 20 allowed). Consider refactoring.",
"engine_name": "structure",
"fingerprint": "15447258442b0314aa1543ec0eced333",
"location": {
"path": "lib\/book.rb",
"end_line": 205,
"start_line": 7
},
"other_locations": [
],
"remediation_points": 1400000,
"severity": "minor"
},
"meta": {
"permissions": {
"manageable": true
}
}
},
{
"id": "59692f9c09bf630001000060",
"type": "issues",
"attributes": {
"categories": [
"Style"
],
"check_name": "Rubocop\/Style\/WordArray",
"constant_name": "lib\/book.rb",
"content": {
"body": "This cop can check for array literals made up of word-like\nstrings, that are not using the %w() syntax.\n\nAlternatively, it can check for uses of the %w() syntax, in projects\nwhich do not want to include that syntax."
},
"description": "Use `%w` or `%W` for an array of words.",
"engine_name": "rubocop",
"fingerprint": "f506a038288d1d6b9dab5f7bcc3528dd",
"location": {
"path": "lib\/book.rb",
"end_line": 31,
"start_line": 31
},
"other_locations": [
],
"remediation_points": 50000,
"severity": "minor",
"status": {
"details": "",
"name": "invalid",
"updated_at": "2017-07-11T22:04:32.145Z",
"updated_by_id": "57ae4e45a41eb700640014ec"
}
},
"meta": {
"permissions": {
"manageable": true
}
}
},
{
"id": "59692f9c09bf63000100005d",
"type": "issues",
"attributes": {
"categories": [
"Style"
],
"check_name": "Rubocop\/Style\/MethodName",
"constant_name": "lib\/book.rb",
"content": {
"body": "This cop makes sure that all methods use the configured style,\nsnake_case or camelCase, for their names. Some special arrangements\nhave to be made for operator methods."
},
"description": "Use snake_case for method names.",
"engine_name": "rubocop",
"fingerprint": "6a6479b6d3d525ad5a6543fc076b1711",
"location": {
"path": "lib\/book.rb",
"end_line": 11,
"start_line": 11
},
"other_locations": [
],
"remediation_points": 50000,
"severity": "minor",
"status": {
"details": "",
"name": "invalid",
"updated_at": "2017-07-11T22:03:30.320Z",
"updated_by_id": "57ae4e45a41eb700640014ec"
}
},
"meta": {
"permissions": {
"manageable": true
}
}
}
],
"links": {
"self": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/snapshots\/596922dbbf0ade0001004b87\/issues?page%5Bnumber%5D=1&page%5Bsize%5D=3",
"next": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/snapshots\/596922dbbf0ade0001004b87\/issues?page%5Bnumber%5D=2&page%5Bsize%5D=3",
"last": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/snapshots\/596922dbbf0ade0001004b87\/issues?page%5Bnumber%5D=9&page%5Bsize%5D=3"
},
"meta": {
"current_page": 1,
"total_pages": 9,
"total_count": 25
}
}
Returns a paginated collection of analysis issues found by the snapshot. Each issue found includes its status ("invalid", "won't fix" etc), location, fingerprint, severity and other details.
HTTP Request
GET https://api.codeclimate.com/v1/repos/:repo_id/snapshots/:snapshot_id/issues
Query Parameters
Paginated, Filterable, Sortable
Filters include:
Name | Description | Required? |
---|---|---|
filter[categories] | Single path or $in clause containing list of categories |
No |
filter[severity] | Single severity or $in clause containing list of severities |
No |
filter[status] | Single status or $in clause containing list of statuses |
No |
filter[location.path] | Single path or $in clause containing list of statuses |
No |
Get files
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
--get \
--data-urlencode "page[size]=3" \
https://api.codeclimate.com/v1/repos/696a76232df2736347000001/snapshots/596922dbbf0ade0001004b87/files
JSON response:
{
"data": [
{
"id": "59692f9709bf630001000004",
"type": "constants",
"attributes": {
"blob_id": "c101538850228bcb9a91916ce1ce33fe34a75658",
"path": "lib/book.rb",
"rating": []
}
},
{
"id": "59692f9709bf630001000043",
"type": "constants",
"attributes": {
"blob_id": "19e1f6c863dca39b1724b0007fbc8b3564411a14",
"path": "lib/group.rb",
"rating": [
{
"path": "lib/group.rb",
"letter": "A",
"measure": {
"value": 0,
"unit": "minute"
},
"pillar": "Maintainability"
},
{
"letter": "A",
"measure": {
"unit": "percent",
"value": 95.0,
},
"path": "lib/group.rb",
"pillar": "Test Coverage",
}
]
}
},
{
"id": "59692f9709bf630001000022",
"type": "constants",
"attributes": {
"blob_id": "e1166417d88ba5dad15a47564146a68ac3c50222",
"path": "lib/user.rb",
"rating": [
{
"path": "lib/user.rb",
"letter": "B",
"measure": {
"value": 400,
"unit": "minute"
},
"pillar": "Maintainability"
},
{
"letter": "B",
"measure": {
"unit": "percent",
"value": 80.0,
},
"path": "lib/user.rb",
"pillar": "Test Coverage",
}
]
}
}
],
"links": {
"self": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/snapshots\/596922dbbf0ade0001004b87\/files?page%5Bnumber%5D=1&page%5Bsize%5D=3",
"next": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/snapshots\/596922dbbf0ade0001004b87\/files?page%5Bnumber%5D=2&page%5Bsize%5D=3",
"last": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/snapshots\/596922dbbf0ade0001004b87\/files?page%5Bnumber%5D=20&page%5Bsize%5D=3"
}
}
Retrieve analysis of files associated with a given snapshot.
Sorted by path in ascending order.
HTTP Request
GET https://api.codeclimate.com/v1/repos/:repo_id/snapshots/:snapshot_id/files
Query Parameters
Filters include:
Name | Description | Required? |
---|---|---|
filter[path] | Single path, $in clause containing list of categories or $regex clause containing regular expressions |
No |
Get builds
Running builds:
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
--get \
--data-urlencode "filter[state]=running" \
https://api.codeclimate.com/v1/repos/696a76232df2736347000001/builds
JSON response:
{
"data": [
{
"id": "584ec7bb46607e0001004eda",
"type": "builds",
"attributes": {
"commit_sha": "42d2908f95610fd1ae429bbb7f4b09e50dbd0672",
"error_code": null,
"finished_at": null,
"local_ref": "refs\/pull\/3302\/head",
"number": 6723,
"state": "running"
},
"relationships": {
"pull_request": {
"data": {
"id": "584ec7bad211e6000103444e",
"type": "pull_requests"
}
},
"snapshot": {
"data": null
}
},
"links": {
"self": "https:\/\/codeclimate.com\/repos\/5017075af3ea000dc6000740\/builds\/6723"
}
},
{
"id": "56af8a388542010001002d11",
"type": "builds",
"attributes": {
"commit_sha": "5c44e9a9e70c17133b9f7473dd57b08eb91b111d",
"error_code": null,
"finished_at": null,
"local_ref": "refs\/pull\/2124\/head",
"number": 1624,
"state": "running"
},
"relationships": {
"pull_request": {
"data": {
"id": "56abdbcf8fdd16000103b200",
"type": "pull_requests"
}
},
"snapshot": {
"data": null
}
},
"links": {
"self": "https:\/\/codeclimate.com\/repos\/696a76232df2736347000001\/builds\/1624"
}
}
],
"links": {
}
}
Returns collection of builds for the repository, sorted in descending order by build number.
Builds represent an attempt to run analysis on a particular commit of a repository. Builds may not have started or finished, or finished successfully.
HTTP Request
GET https://api.codeclimate.com/v1/repos/:repo_id/builds
Query Parameters
Filters include:
Name | Description | Required? |
---|---|---|
filter[state] | Only builds in a particular state. Supports the states new or running |
No |
filter[local_ref] | Only builds associated with the given local_ref . Examples include refs/pulls/553/head and ref/heads/master |
No |
Get build
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
https://api.codeclimate.com/v1/repos/696a76232df2736347000001/builds/10678
JSON response:
{
"data": {
"id": "596922dccf0ade0001004b98",
"type": "builds",
"attributes": {
"commit_sha": "db36165a645accc5ac78d3c70dffffa4aef7d8a2",
"error_code": null,
"finished_at": "2017-07-14T20:03:14.050Z",
"local_ref": "refs\/heads\/master",
"number": 10678,
"state": "complete"
},
"relationships": {
"pull_request": {
"data": null
},
"snapshot": {
"data": {
"id": "596922dbbf0ade0001004b87",
"type": "snapshots"
}
}
},
"links": {
"self": "https:\/\/codeclimate.com\/repos\/696a76232df2736347000001\/builds\/10678"
}
}
}
A build represent an attempt to run analysis on a particular commit of a repository. Builds may not have started or finished, or finished successfully.
HTTP Request
GET https://api.codeclimate.com/v1/repos/:repo_id/builds/:number
Query Parameters
N/A
Get snapshot
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
https://api.codeclimate.com/v1/repos/696a76232df2736347000001/snapshots/596922dbbf0ade0001004b87
JSON response:
{
"data": {
"id": "596922dbbf0ade0001004b87",
"type": "snapshots",
"attributes": {
"commit_sha": "db36165a645accc5ac78d3c70dffffa4aef7d8a2",
"committed_at": "2017-07-14T20:00:26.765Z",
"created_at": "2017-07-14T20:03:14.042Z",
"lines_of_code": 456,
"ratings": [
{
"letter": "A",
"path": "\/",
"measure": {
"value": 3.0210800735343,
"unit": "percent"
},
"pillar": "Maintainability"
}
],
"gpa": null,
"worker_version": 33840
},
"meta": {
"issues_count": 6037,
"measures": {
"remediation": {
"value": 20007.3,
"unit": "minute"
},
"technical_debt_ratio": {
"value": 3.0210800735343,
"unit": "percent"
}
}
}
}
}
Retrieves information associated with a given snapshot.
A snapshot represents a successful completed analysis of a specific commit.
HTTP Request
GET https://api.codeclimate.com/v1/repos/:repo_id/snapshots/:snapshot_id
Query Parameters
N/A
Get time series
Retrieves the diff coverage for each week between
2017-04-01
and2017-05-01
.
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
--get
--data-urlencode "filter[from]=2017-04-01"
--data-urlencode "filter[to]=2017-05-01"
https://api.codeclimate.com/v1/repos/696a76232df2736347000001/metrics/diff_coverage
JSON response.
points
is an array of data points each containing atimestamp
andvalue
.
{
"data": {
"id": "58b05f886d9cd4bb01000123",
"type": "metrics",
"attributes": {
"name": "diff_coverage",
"points": [
{
"timestamp": 1490572800,
"value": 100.0
},
{
"timestamp": 1491177600,
"value": 97.08
},
{
"timestamp": 1491782400,
"value": 99.0
},
{
"timestamp": 1492387200,
"value": 100.0
},
{
"timestamp": 1492992000,
"value": 100.0
},
{
"timestamp": 1493596800,
"value": 100.0
}
]
}
}
}
Returns information about a particular repository metric as a time series. The time
series returned is an array of data points, each containing a timestamp
and a value
for the metric at that timestamp
. A range of time is required, provided by
passing query parameters filter[to]
and filter[from]
.
Currently, data points are captured and returned in weekly increments only. The timestamp for a particular data point represents the start of that time period.
HTTP Request
GET https://api.codeclimate.com/v1/repos/:repo_id/metrics/:metric
:metric
can take one of the following values:
Metric | Description |
---|---|
loc.[Language] | Lines of code for Language. Ex.: loc.JavaScript |
diff_coverage | Diff coverage for that data point |
remediation_minutes | Calculated minutes to fix issues for that data point |
technical_debt_ratio | Technical debt ratio for that data point |
test_coverage | Test coverage percentage for that data point |
Query Parameters
Filters include:
Name | Description | Required? |
---|---|---|
filter[from] | Start date of time series range, in YYYY-MM-DD format |
Yes |
filter[to] | End date of time series range, in YYYY-MM-DD format |
Yes |
Test Coverage
Get test coverage reports
curl
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
--get \
--data-urlencode "page[size]=3" \
https://api.codeclimate.com/v1/repos/696a76232df2736347000001/test_reports
JSON response
{
"data": [
{
"id": "596ad7629c5b3756bc000003",
"type": "test_reports",
"attributes": {
"branch": "master",
"commit_sha": "cd3811626d5f723130417735d10a132f285795cc",
"committed_at": "2017-07-16T02:55:52.000Z",
"covered_percent": 84.946657957762,
"lines_of_code": 456,
"rating": {
"path": "\/",
"letter": "B",
"measure": {
"value": 84.946657957762,
"unit": "percent"
},
"pillar": "Test Coverage"
},
"received_at": "2018-09-06T20:25:28.098Z",
"state": "done"
}
},
{
"id": "596ad4e7e13a1a079100000f",
"type": "test_reports",
"attributes": {
"branch": "master",
"commit_sha": "a06a461bd0659d733073024434c952445fa4ba77",
"committed_at": "2017-07-16T02:36:27.000Z",
"covered_percent": 84.946657957762,
"rating": {
"path": "\/",
"letter": "B",
"measure": {
"value": 84.946657957762,
"unit": "percent"
},
"pillar": "Test Coverage"
},
"received_at": "2018-09-05T20:25:28.098Z",
"state": "done"
}
},
{
"id": "5969249a7834e60266000001",
"type": "test_reports",
"attributes": {
"branch": "master",
"commit_sha": "db36165a645abbb5ac78d3c70dffffa4aef7d832",
"committed_at": "2017-07-14T20:00:24.000Z",
"covered_percent": 84.9460024386,
"rating": {
"path": "\/",
"letter": "B",
"measure": {
"value": 84.9460024386,
"unit": "percent"
},
"pillar": "Test Coverage"
},
"received_at": "2018-09-04T20:25:28.098Z",
"state": "done"
}
}
],
"links": {
"self": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/test_reports?page%5Bnumber%5D=1&page%5Bsize%5D=3",
"next": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/test_reports?page%5Bnumber%5D=2&page%5Bsize%5D=3",
"last": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/test_reports?page%5Bnumber%5D=163&page%5Bsize%5D=3"
}
}
Gets collection of test coverage reports, sorted by committed at descending.
Each test coverage report contains the overall coverage percentage and test coverage rating for the repository at a specific commit. Does not contain line by line coverage: line by line coverage is available via the test file reports endpoint.
HTTP Request
GET https://api.codeclimate.com/v1/repos/:repo_id/test_reports
Query Parameters
Filters include:
Name | Description | Required? |
---|---|---|
filter[branch] | Test reports associated with the specified branch |
No |
Get test coverage file reports
curl
-H "Accept: application/vnd.api+json"
-H "Authorization: Token token={TOKEN}"
--get
--data-urlencode "page[size]=3"
https://api.codeclimate.com/v1/repos/696a76232df2736347000001/test_reports/596ad7629c5b3756bc000003/test_file_reports
{
"data": [
{
"id": "596ad7622df1731de500015e",
"type": "test_file_reports",
"attributes": {
"coverage": [4, 4, 4, 4, null, 4, null, 4, 6, 2, null, 2, null, null, null, 1, null, null, 1, null, null, 4, 6, 3, null, 3, null, 3, 2, 2, null, 1, null, null, null, 4, null, 4, 6, null, null, 4, null, null, 3, null, null, 4, 2, 2, 2, null, 2, null, null, null, null, null, null, 4, 2, 1, null, 1, null, null, null, null],
"covered_percent": 100,
"covered_strength": 3.0606060606061,
"path": "lib\/book.rb",
"line_counts": {
"missed": 0,
"covered": 33,
"total": 33
}
}
},
{
"id": "596ad7622df1731de5000147",
"type": "test_file_reports",
"attributes": {
"coverage": [4, 4, 4, null, 4, null, 4, 12, 5, null, 5, 1, null, null, 4, 1, null, null, 3, 1, null, null, 2, 2, null, null, 4, null, 4, 1, 1, null, null, 4, 1, null, null, null, null, null, 4, 1, null, null, null, null, null, 4, 2, null, 2, null, null, null, 4, 24, null, null, 4, 1, 1, null, null, null, null, 1, null, null, 4, 5, null, null, null],
"covered_percent": 100,
"covered_strength": 3.7647058823529,
"path": "lib\/group.rb",
"line_counts": {
"missed": 0,
"covered": 34,
"total": 34
}
}
},
{
"id": "596ad762e13a1a6a9d0000a8",
"type": "test_file_reports",
"attributes": {
"coverage": [4, 4, 4, null, 4, null, 4, 4, 6, null, 2, null, null, null],
"covered_percent": 100,
"covered_strength": 4,
"path": "lib\/user.rb",
"line_counts": {
"missed": 0,
"covered": 8,
"total": 8
}
}
}
],
"links": {
"self": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/test_reports\/596ad7629c5b3756bc000003\/test_file_reports?page%5Bnumber%5D=1&page%5Bsize%5D=3",
"next": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/test_reports\/596ad7629c5b3756bc000003\/test_file_reports?page%5Bnumber%5D=2&page%5Bsize%5D=3",
"last": "https:\/\/api.codeclimate.com\/v1\/repos\/696a76232df2736347000001\/test_reports\/596ad7629c5b3756bc000003\/test_file_reports?page%5Bnumber%5D=307&page%5Bsize%5D=3"
}
}
Gets collection of test coverage file reports, containing line by line coverage information.
The coverage attribute contains an array of coverage information. null
in the array means that line is "uncoverable" (e.g. blank line or comment), a number in the array represents how many times that line was covered by tests.
Sorted by file paths in ascending order.
HTTP Request
GET https://api.codeclimate.com/v1/repos/:repo_id/test_reports/:test_report_id/test_file_reports
Query Parameters
Sending test coverage data
While the API also supports receiving test coverage data from your build, we generally do not recommend issuing calls against these endpoints yourself and as such have not documented them.
Instead, we recommend that you use our test reporter client which takes care of this plumbing for you.
If the test reporter doesn't suit your specific needs, open an issue or pull request on that repository.
Pull Requests
Get rating changes
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
--get \
--data-urlencode "filter[path]=lib/book.rb" \
https://api.codeclimate.com/v1/repos/696a76232df2736347000001/pulls/65/files
JSON response:
{
"data": [
{
"id": "69926c2c28352600010003db-59726c2f1e3c870001000312",
"type": "file_diffs",
"attributes": {
"to_rating": "unrated",
"from_rating": "unrated",
"path": "lib\/book.rb"
}
}
]
}
Returns rating changes for files in a pull request.
HTTP Request
GET https://api.codeclimate.com/v1/repos/:repo_id/pulls/:number/files
Query Parameters
Filters include:
Name | Description | Required? |
---|---|---|
filter[path] | Complete file path for file to filter by | Yes |
Approve PRs
curl \
-H "Accept: application/vnd.api+json" \
-H "Authorization: Token token={TOKEN}" \
--data-urlencode "data[attributes][reason]=merge" \
https://api.codeclimate.com/v1/repos/696a76232df2736347000001/pulls/65/approvals
JSON response:
{
"data": {
"id": "5a60de1a4668b4650a000b5a",
"type": "approvals",
"attributes": {
"reason": "merge",
"created_at": "2018-01-18T17:49:14.458Z"
},
"relationships": {
"author": {
"data": {
"id": "516341ca7e00a428b0015372",
"type": "users"
}
},
"pull_request": {
"data": {
"id": "5a60d683af0a490001000a71",
"type": "pull_requests"
}
},
"repo": {
"data": {
"id": "696a76232df2736347000001",
"type": "repos"
}
}
}
}
}
Approves a given pull request.
HTTP Request
POST https://api.codeclimate.com/v1/repos/:repo_id/pulls/:number/approvals