NAV Navbar
shell
  • Overview
  • Users
  • Organizations
  • Repositories
  • Repository Analysis
  • Test Coverage
  • Pull Requests
  • 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
    

    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):

    1. A basic key/value
    2. A more complex data structure with an operator. At this time only the $in operator is supported.

    See the Query Parameters section of each endpoint for details about what filters are supported.

    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
        },
        "links": {
          "avatar": "https:\/\/avatars.githubusercontent.com\/u\/122672"
        }
      }
    }
    

    Returns information about the authenticated user.

    HTTP Request

    GET http://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 http://api.codeclimate.com/v1/orgs

    Query Parameters

    Paginated

    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 http://api.codeclimate.com/v1/orgs/:org_id/permissions

    Query Parameters

    N/A

    Create organization

    Given a JSON file "create-org.json" with the following contents ...

    {
      "data": {
        "type": "orgs",
        "attributes": {
          "name": "Twin Peaks"
        }
      }
    }
    

    ... 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 http://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

    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",
          "score": null
        },
        "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 http://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",
            "score": 1.36
          },
          "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",
            "score": 1.36
          },
          "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 http://api.codeclimate.com/v1/repos?github_slug={github_slug}

    OR

    GET http://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

    Paginated, Filterable

    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:

    HTTP Request

    GET https://api.codeclimate.com/v1/repos/:repo_id/services

    Query Parameters

    Filterable

    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",
          "score": null
        },
        "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 http://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

    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[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": null
          }
        },
        {
          "id": "59692f9709bf630001000043",
          "type": "constants",
          "attributes": {
            "blob_id": "19e1f6c863dca39b1724b0007fbc8b3564411a14",
            "path": "lib/group.rb",
            "rating": null
          }
        },
        {
          "id": "59692f9709bf630001000022",
          "type": "constants",
          "attributes": {
            "blob_id": "e1166417d88ba5dad15a47564146a68ac3c50222",
            "path": "lib/user.rb",
            "rating": null
          }
        }
      ],
      "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

    Paginated

    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

    Paginated, Filterable

    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",
          "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 number of files rated with an A each week between 2017-04-01 and 2017-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/ratings.A
    

    JSON response. points is an array of data points each containing a timestamp and value.

    {
      "data": {
        "id": "58b05f886d9cd4bb01000123",
        "type": "metrics",
        "attributes": {
          "name": "ratings.A",
          "points": [
            {
              "timestamp": 1490572800,
              "value": 1398
            },
            {
              "timestamp": 1491177600,
              "value": 1387
            },
            {
              "timestamp": 1491782400,
              "value": 1389
            },
            {
              "timestamp": 1492387200,
              "value": 1389
            },
            {
              "timestamp": 1492992000,
              "value": 1389
            },
            {
              "timestamp": 1493596800,
              "value": 1392
            }
          ]
        }
      }
    }
    

    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
    gpa Grade point average of repository
    ratings.A Number of files with an A rating
    ratings.B Number of files with a B rating
    ratings.C Number of files with a C rating
    ratings.D Number of files with a D rating
    ratings.F Number of files with an F rating

    Query Parameters

    Paginated, Filterable

    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": {
            "commit_sha": "cd3811626d5f723130417735d10a132f285795cc",
            "committed_at": "2017-07-16T02:55:52.000Z",
            "covered_percent": 84.946657957762,
            "rating": {
              "path": "\/",
              "letter": "B",
              "measure": {
                "value": 84.946657957762,
                "unit": "percent"
              },
              "pillar": "Test Coverage"
            },
            "state": "done"
          }
        },
        {
          "id": "596ad4e7e13a1a079100000f",
          "type": "test_reports",
          "attributes": {
            "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"
            },
            "state": "done"
          }
        },
        {
          "id": "5969249a7834e60266000001",
          "type": "test_reports",
          "attributes": {
            "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"
            },
            "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

    Paginated

    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

    Paginated

    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

    Filterable

    Filters include:

    Name Description Required?
    filter[path] Complete file path for file to filter by Yes