POST
POST /repos/{owner}/{repo}/check-runs — GitHub API
GitHub token (required); https://api.github.com
GitHub APICreate a check run
- Base URL
- https://api.github.com
- Auth
- Authorization: Bearer <GITHUB_API_KEY>
- Last verified
- 2026-10-20 · upstream hash matched
Actions Try in browser→
Agents: curl -H "Accept: text/markdown" this URL
→ 390 tokens · Vary: Accept
→ 390 tokens · Vary: Accept
Critical gotchas
GitHub recommends an Accept: application/vnd.github+json header and an explicit X-GitHub-Api-Version header.
Fine-grained tokens only authorize repositories and permissions selected when the token is created.
cURL
curl -X POST 'https://api.github.com/repos/example-owner/example-repo/check-runs' \ -H "Authorization: Bearer $GITHUB_TOKEN" \ -H 'Accept: application/vnd.github+json' \ -H 'X-GitHub-Api-Version: 2026-03-10' \ -H 'Content-Type: application/json' \ -d '{ "name": "example-name", "head_sha": "example-head-sha"}'
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| owner | path | string | Yes | The account owner of the repository. The name is not case sensitive. |
| repo | path | string | Yes | The name of the repository without the `.git` extension. The name is not case sensitive. |
| name | body | string | Yes | The name of the check. For example, "code-coverage". |
| head_sha | body | string | Yes | The SHA of the commit. |
| details_url | body | string | No | The URL of the integrator's site that has the full details of the check. If the integrator does not provide this, then the homepage of the GitHub app is used. |
| external_id | body | string | No | A reference for the run on the integrator's system. |
| status | body | string | No | The current status of the check run. Only GitHub Actions can set a status of `waiting`, `pending`, or `requested`. |
| started_at | body | string | No | The time that the check run began. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. |
| conclusion | body | string | No | **Required if you provide `completed_at` or a `status` of `completed`**. The final conclusion of the check. **Note:** Providing `conclusion` will automatically set the `status` parameter to `completed`. You cannot change a check run conclusion to `stale`, only GitHub can set this. |
| completed_at | body | string | No | The time the check completed. This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`. |
| output | body | object | No | Check runs can accept a variety of data in the `output` object, including a `title` and `summary` and can optionally provide descriptive details about the run. |
| actions | body | object[] | No | Displays a button on GitHub that can be clicked to alert your app to do additional tasks. For example, a code linting app can display a button that automatically fixes detected errors. The button created in this object is displayed after the check run completes. When a user clicks the button, GitHub sends the [`check_run.requested_action` webhook](https://docs.github.com/webhooks/event-payloads/#check_run) to your app. Each action includes a `label`, `identifier` and `description`. A maximum of three actions are accepted. To learn more about check runs and requested actions, see "[Check runs and requested actions](https://docs.github.com/rest/guides/using-the-rest-api-to-interact-with-checks#check-runs-and-requested-actions)." |
Response 200 OK
{
"id": 21,
"head_sha": "009b8a3a9ccbb128af87f9b1c0f4c62e8a304f6d",
"node_id": "MDg6Q2hlY2tSdW40",
"external_id": "42",
"url": "https://api.github.com/repos/github/hello-world/check-runs/4",
"html_url": "https://github.com/github/hello-world/runs/4",
"details_url": "https://example.com",
"status": "queued",
"conclusion": "neutral",
"started_at": "2018-05-04T01:14:52Z",
"completed_at": "2018-05-04T01:14:52Z",
"output": {
"title": "string",
"summary": "string",
"text": "string",
"annotations_count": 0,
"annotations_url": "https://example.com"
},
"name": "test-coverage",
"check_suite": {
"id": 0
},
"app": {
"id": 37,
"slug": "probot-owners",
"node_id": "MDExOkludGVncmF0aW9uMQ==",
"client_id": "\"Iv1.25b5d1e65ffc4022\"",
"owner": {
"name": "string",
"email": "string",
"login": "octocat",
"id": 1,
"node_id": "MDQ6VXNlcjE=",
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"gravatar_id": "41d064eb2195891e12d0413f63227ea7",
"url": "https://api.github.com/users/octocat",
"html_url": "https://github.com/octocat",
"followers_url": "https://api.github.com/users/octocat/followers",
"following_url": "https://api.github.com/users/octocat/following{/other_user}",
"gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
"starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
"organizations_url": "https://api.github.com/users/octocat/orgs",
"repos_url": "https://api.github.com/users/octocat/repos",
"events_url": "https://api.github.com/users/octocat/events{/privacy}",
"received_events_url": "https://api.github.com/users/octocat/received_events",
"type": "User",
"site_admin": true,
"starred_at": "\"2020-07-09T00:17:55Z\"",
"user_view_type": "public"
},
"name": "Probot Owners",
"description": "The description of the app.",
"external_url": "https://example.com",
"html_url": "https://github.com/apps/super-ci",
"created_at": "2017-07-08T16:18:44-04:00",
"updated_at": "2017-07-08T16:18:44-04:00",
"permissions": {
"issues": "read",
"deployments": "write"
},
"events": [
"label",
"deployment"
],
"installations_count": 5
},
"pull_requests": [
{
"id": 0,
"number": 0,
"url": "string",
"head": {
"ref": "string",
"sha": "string",
"repo": {
"id": 0,
"url": "string",
"name": "string"
}
},
"base": {
"ref": "string",
"sha": "string",
"repo": {
"id": 0,
"url": "string",
"name": "string"
}
}
}
],
"deployment": {
"url": "https://api.github.com/repos/octocat/example/deployments/1",
"id": 42,
"node_id": "MDEwOkRlcGxveW1lbnQx",
"task": "deploy",
"original_environment": "staging",
"environment": "production",
"description": "Deploy request from hubot",
"created_at": "2012-07-20T01:19:13Z",
"updated_at": "2012-07-20T01:19:13Z",
"statuses_url": "https://api.github.com/repos/octocat/example/deployments/1/statuses",
"repository_url": "https://api.github.com/repos/octocat/example",
"transient_environment": true,
"production_environment": true,
"performed_via_github_app": {
"id": 37,
"slug": "probot-owners",
"node_id": "MDExOkludGVncmF0aW9uMQ==",
"client_id": "\"Iv1.25b5d1e65ffc4022\"",
"owner": {
"name": "string",
"email": "string",
"login": "octocat",
"id": 1,
"node_id": "MDQ6VXNlcjE=",
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"gravatar_id": "41d064eb2195891e12d0413f63227ea7",
"url": "https://api.github.com/users/octocat",
"html_url": "https://github.com/octocat",
"followers_url": "https://api.github.com/users/octocat/followers",
"following_url": "https://api.github.com/users/octocat/following{/other_user}",
"gists_url": "https://api.github.com/users/octocat/gists{/gist_id}",
"starred_url": "https://api.github.com/users/octocat/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/octocat/subscriptions",
"organizations_url": "https://api.github.com/users/octocat/orgs",
"repos_url": "https://api.github.com/users/octocat/repos",
"events_url": "https://api.github.com/users/octocat/events{/privacy}",
"received_events_url": "https://api.github.com/users/octocat/received_events",
"type": "User",
"site_admin": true,
"starred_at": "\"2020-07-09T00:17:55Z\"",
"user_view_type": "public"
},
"name": "Probot Owners",
"description": "The description of the app.",
"external_url": "https://example.com",
"html_url": "https://github.com/apps/super-ci",
"created_at": "2017-07-08T16:18:44-04:00",
"updated_at": "2017-07-08T16:18:44-04:00",
"permissions": {
"issues": "read",
"deployments": "write"
},
"events": [
"label",
"deployment"
],
"installations_count": 5
}
}
} Get a free GitHub API key → sponsored Affiliate link - we may earn a commission, at no extra cost to you.