# Create a commit

From **GitHub v3 REST API**.

`POST /repos/{owner}/{repo}/git/commits`

Creates a new Git [commit object](https://git-scm.com/book/en/v1/Git-Internals-Git-Objects#Commit-Objects).

**Signature verification object**

The response will include a `verification` object that describes the result of verifying the commit's signature. The following fields are included in the `verification` object:

| Name | Type | Description |
| ---- | ---- | ----------- |
| `verified` | `boolean` | Indicates whether GitHub considers the signature in this commit to be verified. |
| `reason` | `string` | The reason for verified value. Possible values and their meanings are enumerated in table below. |
| `signature` | `string` | The signature that was extracted from the commit. |
| `payload` | `string` | The value that was signed. |

These are the possible values for `reason` in the `verification` object:

| Value | Description |
| ----- | ----------- |
| `expired_key` | The key that made the signature is expired. |
| `not_signing_key` | The "signing" flag is not among the usage flags in the GPG key that made the signature. |
| `gpgverify_error` | There was an error communicating with the signature verification service. |
| `gpgverify_unavailable` | The signature verification service is currently unavailable. |
| `unsigned` | The object does not include a signature. |
| `unknown_signature_type` | A non-PGP signature was found in the commit. |
| `no_user` | No user was associated with the `committer` email address in the commit. |
| `unverified_email` | The `committer` email address in the commit was associated with a user, but the email address is not verified on her/his account. |
| `bad_email` | The `committer` email address in the commit is not included in the identities of the PGP key that made the signature. |
| `unknown_key` | The key that made the signature has not been registered with any user's account. |
| `malformed_signature` | There was an error parsing the signature. |
| `invalid` | The signature could not be cryptographically verified using the key whose key-id was found in the signature. |
| `valid` | None of the above errors applied, so the signature is considered to be verified. |

## Parameters

### `owner`

- Location: path
- Required: true
- Type: `string`

### `repo`

- Location: path
- Required: true
- Type: `string`

## Request body

- Required: true
### `application/json`

- Type: `object`

```json
{
  "author": {
    "date": "2008-07-09T16:13:30+12:00",
    "email": "octocat@github.com",
    "name": "Mona Octocat"
  },
  "message": "my commit message",
  "parents": [
    "7d1b31e74ee336d15cbd21741bc88a537ed063a0"
  ],
  "signature": "-----BEGIN PGP SIGNATURE-----\n\niQIzBAABAQAdFiEESn/54jMNIrGSE6Tp6cQjvhfv7nAFAlnT71cACgkQ6cQjvhfv\n7nCWwA//XVqBKWO0zF+bZl6pggvky3Oc2j1pNFuRWZ29LXpNuD5WUGXGG209B0hI\nDkmcGk19ZKUTnEUJV2Xd0R7AW01S/YSub7OYcgBkI7qUE13FVHN5ln1KvH2all2n\n2+JCV1HcJLEoTjqIFZSSu/sMdhkLQ9/NsmMAzpf/iIM0nQOyU4YRex9eD1bYj6nA\nOQPIDdAuaTQj1gFPHYLzM4zJnCqGdRlg0sOM/zC5apBNzIwlgREatOYQSCfCKV7k\nnrU34X8b9BzQaUx48Qa+Dmfn5KQ8dl27RNeWAqlkuWyv3pUauH9UeYW+KyuJeMkU\n+NyHgAsWFaCFl23kCHThbLStMZOYEnGagrd0hnm1TPS4GJkV4wfYMwnI4KuSlHKB\njHl3Js9vNzEUQipQJbgCgTiWvRJoK3ENwBTMVkKHaqT4x9U4Jk/XZB6Q8MA09ezJ\n3QgiTjTAGcum9E9QiJqMYdWQPWkaBIRRz5cET6HPB48YNXAAUsfmuYsGrnVLYbG+\nUpC6I97VybYHTy2O9XSGoaLeMI9CsFn38ycAxxbWagk5mhclNTP5mezIq6wKSwmr\nX11FW3n1J23fWZn5HJMBsRnUCgzqzX3871IqLYHqRJ/bpZ4h20RhTyPj5c/z7QXp\neSakNQMfbbMcljkha+ZMuVQX1K9aRlVqbmv3ZMWh+OijLYVU2bc=\n=5Io4\n-----END PGP SIGNATURE-----\n",
  "tree": "827efc6d56897b048c772eb4087f854f46256132"
}
```

```json
{"properties":{"author":{"description":"Information about the author of the commit. By default, the `author` will be the authenticated user and the current date. See the `author` and `committer` object below for details.","properties":{"date":{"description":"Indicates when this commit was authored (or committed). This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.","format":"date-time","type":"string"},"email":{"description":"The email of the author (or committer) of the commit","type":"string"},"name":{"description":"The name of the author (or committer) of the commit","type":"string"}},"required":["name","email"],"type":"object"},"committer":{"description":"Information about the person who is making the commit. By default, `committer` will use the information set in `author`. See the `author` and `committer` object below for details.","properties":{"date":{"description":"Indicates when this commit was authored (or committed). This is a timestamp in [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DDTHH:MM:SSZ`.","format":"date-time","type":"string"},"email":{"description":"The email of the author (or committer) of the commit","type":"string"},"name":{"description":"The name of the author (or committer) of the commit","type":"string"}},"type":"object"},"message":{"description":"The commit message","type":"string"},"parents":{"description":"The SHAs of the commits that were the parents of this commit. If omitted or empty, the commit will be written as a root commit. For a single parent, an array of one SHA should be provided; for a merge commit, an array of more than one should be provided.","items":{"type":"string"},"type":"array"},"signature":{"description":"The [PGP signature](https://en.wikipedia.org/wiki/Pretty_Good_Privacy) of the commit. GitHub adds the signature to the `gpgsig` header of the created commit. For a commit signature to be verifiable by Git or GitHub, it must be an ASCII-armored detached PGP signature over the string commit as it would be written to the object database. To pass a `signature` parameter, you need to first manually create a valid PGP signature, which can be complicated. You may find it easier to [use the command line](https://git-scm.com/book/id/v2/Git-Tools-Signing-Your-Work) to create signed commits.","type":"string"},"tree":{"description":"The SHA of the tree object this commit points to","type":"string"}},"required":["message","tree"],"type":"object"}
```

## Responses

### `201`

Response

#### Headers

##### `Location`

- Type: `string`

- Example: `https://api.github.com/repos/octocat/Hello-World/git/commits/7638417db6d59f3c431d3e1f261cc637155684cd`

### `application/json`

- Type: `object`

Low-level Git commit operations within a repository

```json
{
  "author": {
    "date": "2014-11-07T22:01:45Z",
    "email": "octocat@github.com",
    "name": "Monalisa Octocat"
  },
  "committer": {
    "date": "2014-11-07T22:01:45Z",
    "email": "octocat@github.com",
    "name": "Monalisa Octocat"
  },
  "html_url": "https://github.com/octocat/Hello-World/commit/7638417db6d59f3c431d3e1f261cc637155684cd",
  "message": "my commit message",
  "node_id": "MDY6Q29tbWl0NzYzODQxN2RiNmQ1OWYzYzQzMWQzZTFmMjYxY2M2MzcxNTU2ODRjZA==",
  "parents": [
    {
      "html_url": "https://github.com/octocat/Hello-World/commit/7d1b31e74ee336d15cbd21741bc88a537ed063a0",
      "sha": "7d1b31e74ee336d15cbd21741bc88a537ed063a0",
      "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/7d1b31e74ee336d15cbd21741bc88a537ed063a0"
    }
  ],
  "sha": "7638417db6d59f3c431d3e1f261cc637155684cd",
  "tree": {
    "sha": "827efc6d56897b048c772eb4087f854f46256132",
    "url": "https://api.github.com/repos/octocat/Hello-World/git/trees/827efc6d56897b048c772eb4087f854f46256132"
  },
  "url": "https://api.github.com/repos/octocat/Hello-World/git/commits/7638417db6d59f3c431d3e1f261cc637155684cd",
  "verification": {
    "payload": null,
    "reason": "unsigned",
    "signature": null,
    "verified": false
  }
}
```

```json
{"description":"Low-level Git commit operations within a repository","properties":{"author":{"description":"Identifying information for the git-user","properties":{"date":{"description":"Timestamp of the commit","example":"2014-08-09T08:02:04+12:00","format":"date-time","type":"string"},"email":{"description":"Git email address of the user","example":"monalisa.octocat@example.com","type":"string"},"name":{"description":"Name of the git user","example":"Monalisa Octocat","type":"string"}},"required":["email","name","date"],"type":"object"},"committer":{"description":"Identifying information for the git-user","properties":{"date":{"description":"Timestamp of the commit","example":"2014-08-09T08:02:04+12:00","format":"date-time","type":"string"},"email":{"description":"Git email address of the user","example":"monalisa.octocat@example.com","type":"string"},"name":{"description":"Name of the git user","example":"Monalisa Octocat","type":"string"}},"required":["email","name","date"],"type":"object"},"html_url":{"format":"uri","type":"string"},"message":{"description":"Message describing the purpose of the commit","example":"Fix #42","type":"string"},"node_id":{"type":"string"},"parents":{"items":{"properties":{"html_url":{"format":"uri","type":"string"},"sha":{"description":"SHA for the commit","example":"7638417db6d59f3c431d3e1f261cc637155684cd","type":"string"},"url":{"format":"uri","type":"string"}},"required":["sha","url","html_url"],"type":"object"},"type":"array"},"sha":{"description":"SHA for the commit","example":"7638417db6d59f3c431d3e1f261cc637155684cd","type":"string"},"tree":{"properties":{"sha":{"description":"SHA for the commit","example":"7638417db6d59f3c431d3e1f261cc637155684cd","type":"string"},"url":{"format":"uri","type":"string"}},"required":["sha","url"],"type":"object"},"url":{"format":"uri","type":"string"},"verification":{"properties":{"payload":{"nullable":true,"type":"string"},"reason":{"type":"string"},"signature":{"nullable":true,"type":"string"},"verified":{"type":"boolean"}},"required":["verified","reason","signature","payload"],"type":"object"}},"required":["sha","node_id","url","html_url","author","committer","tree","message","parents","verification"],"title":"Git Commit","type":"object"}
```

### `404`

Resource not found

### `application/json`

- Type: `object`

Basic Error

```json
{"description":"Basic Error","properties":{"documentation_url":{"type":"string"},"message":{"type":"string"},"status":{"type":"string"},"url":{"type":"string"}},"title":"Basic Error","type":"object"}
```

### `422`

Validation failed

### `application/json`

- Type: `object`

Validation Error

```json
{"description":"Validation Error","properties":{"documentation_url":{"type":"string"},"errors":{"items":{"properties":{"code":{"type":"string"},"field":{"type":"string"},"index":{"type":"integer"},"message":{"type":"string"},"resource":{"type":"string"},"value":{"oneOf":[{"nullable":true,"type":"string"},{"nullable":true,"type":"integer"},{"items":{"type":"string"},"nullable":true,"type":"array"}]}},"required":["code"],"type":"object"},"type":"array"},"message":{"type":"string"}},"required":["message","documentation_url"],"title":"Validation Error","type":"object"}
```

## Request examples

### cURL

```shell
curl --request POST \
  --url {protocol}://{hostname}/api/v3/repos/{owner}/{repo}/git/commits \
  --header 'content-type: application/json' \
  --data '{
  "author": {
    "date": "2008-07-09T16:13:30+12:00",
    "email": "octocat@github.com",
    "name": "Mona Octocat"
  },
  "message": "my commit message",
  "parents": [
    "7d1b31e74ee336d15cbd21741bc88a537ed063a0"
  ],
  "signature": "-----BEGIN PGP SIGNATURE-----\n\niQIzBAABAQAdFiEESn/54jMNIrGSE6Tp6cQjvhfv7nAFAlnT71cACgkQ6cQjvhfv\n7nCWwA//XVqBKWO0zF+bZl6pggvky3Oc2j1pNFuRWZ29LXpNuD5WUGXGG209B0hI\nDkmcGk19ZKUTnEUJV2Xd0R7AW01S/YSub7OYcgBkI7qUE13FVHN5ln1KvH2all2n\n2+JCV1HcJLEoTjqIFZSSu/sMdhkLQ9/NsmMAzpf/iIM0nQOyU4YRex9eD1bYj6nA\nOQPIDdAuaTQj1gFPHYLzM4zJnCqGdRlg0sOM/zC5apBNzIwlgREatOYQSCfCKV7k\nnrU34X8b9BzQaUx48Qa+Dmfn5KQ8dl27RNeWAqlkuWyv3pUauH9UeYW+KyuJeMkU\n+NyHgAsWFaCFl23kCHThbLStMZOYEnGagrd0hnm1TPS4GJkV4wfYMwnI4KuSlHKB\njHl3Js9vNzEUQipQJbgCgTiWvRJoK3ENwBTMVkKHaqT4x9U4Jk/XZB6Q8MA09ezJ\n3QgiTjTAGcum9E9QiJqMYdWQPWkaBIRRz5cET6HPB48YNXAAUsfmuYsGrnVLYbG+\nUpC6I97VybYHTy2O9XSGoaLeMI9CsFn38ycAxxbWagk5mhclNTP5mezIq6wKSwmr\nX11FW3n1J23fWZn5HJMBsRnUCgzqzX3871IqLYHqRJ/bpZ4h20RhTyPj5c/z7QXp\neSakNQMfbbMcljkha+ZMuVQX1K9aRlVqbmv3ZMWh+OijLYVU2bc=\n=5Io4\n-----END PGP SIGNATURE-----\n",
  "tree": "827efc6d56897b048c772eb4087f854f46256132"
}'
```
