GitHub: Create a deployment status
GitHub repos.reposCreateDeploymentStatus: arguments, response, policy and SDK examples.
← Repos operations · Get started
Operation github.repos_create_deployment_status
Provider route: POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses. Alter supplies the connection’s credentials and routing.
Call through Alter
Section titled “Call through Alter”Install @alter-ai/sdk @alter-ai/github with npm, or alter-sdk-github with pip. Supply your connected customer’s grant ID and the arguments described below.
import { App } from "@alter-ai/sdk";import { GitHubIntegration } from "@alter-ai/github";
async function execute(input: Parameters<GitHubIntegration["repos"]["reposCreateDeploymentStatus"]>[0]) { const app = new App({ apiKey: process.env.ALTER_API_KEY! }); try { const provider = new GitHubIntegration(app, { grantId: process.env.PROVIDER_GRANT_ID! }); const call = await provider.repos.reposCreateDeploymentStatus(input); const result = await call.wait(); return result.bodyJson(); } finally { await app.close(); }}import osfrom alter_sdk import Appfrom alter_sdk_github import GitHubIntegration
async def execute(arguments): async with App(api_key=os.environ["ALTER_API_KEY"]) as app: provider = GitHubIntegration(app, {"grant_id": os.environ["PROVIDER_GRANT_ID"]}) call = await provider.repos.repos_create_deployment_status(arguments) result = await call.wait() return result.body_json()| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | Additional keys: not allowed |
path | object | Required within parent | Additional keys: not allowed |
path.owner | string | Required within parent | |
path.repo | string | Required within parent | |
path.deployment_id | integer | Required within parent | |
body | object | Required within parent | |
body.auto_inactive | boolean | Optional | Adds a new `inactive` status to all prior non-transient, non-production environment deployments with the same repository and `environment` name as the created status’s deployment. An `inactive` status is only added to deployments that had a `success` state. Default: `true` |
body.description | string | Optional | A short description of the status. The maximum description length is 140 characters. Default: |
body.environment | string | Optional | Name for the target deployment environment, which can be changed when setting a deploy status. For example, `production`, `staging`, or `qa`. If not defined, the environment of the previous status on the deployment will be used, if it exists. Otherwise, the environment of the deployment will be used. |
body.environment_url | string | Optional | Sets the URL for accessing your environment. Default: `""` Default: |
body.log_url | string | Optional | The full URL of the deployment’s output. This parameter replaces `target_url`. We will continue to accept `target_url` to support legacy uses, but we recommend replacing `target_url` with `log_url`. Setting `log_url` will automatically set `target_url` to the same value. Default: `""` Default: |
body.state | string | Required within parent | The state of the status. When you set a transient deployment to `inactive`, the deployment will be shown as `destroyed` in GitHub. One of: error, failure, inactive, in_progress, queued, pending, success |
body.target_url | string | Optional | The target URL to associate with this status. This URL should contain output to keep the user updated while the task is running or serve as historical information for what happened in the deployment. > [!NOTE] > It’s recommended to use the `log_url` parameter, which replaces `target_url`. Default: |
Response
Section titled “Response”Response media type: application/json. The table describes the pinned successful response. Referenced models link to their complete fields.
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | Model | Root | Expand Get a deployment status — response body |
Referenced models: Get a deployment status — response body
Schemas
Section titled “Schemas”1 more schema is linked from the tables above, on the schema pages.
Get a deployment status — response body
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | The status of a deployment. |
created_at | string | Required within parent | Format: date-time |
creator | Model | Required within parent | Expand Get an issue — response body — user |
deployment_url | string | Required within parent | Format: uri |
description | string | Required within parent | A short description of the status. Default: Maximum length: 140 |
environment | string | Optional | The environment of the deployment that the status is for. Default: |
environment_url | string | Optional | The URL for accessing your environment. Default: Format: uri |
id | JSON | Required within parent | |
id (anyOf 1) | integer | Alternative | Format: int64 |
id (anyOf 2) | string | Alternative | Pattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$ |
log_url | string | Optional | The URL to associate with this status. Default: Format: uri |
node_id | string | Required within parent | |
performed_via_github_app | Model | Optional | Expand Get an app — response body |
repository_url | string | Required within parent | Format: uri |
state | string | Required within parent | The state of the status. Known values: error, failure, inactive, pending, success, queued, in_progress |
target_url | string | Required within parent | Closing down notice: the URL to associate with this status. Default: Format: uri |
updated_at | string | Required within parent | Format: date-time |
url | string | Required within parent | Format: uri |
Referenced models: Get an app — response body, Get an issue — response body — user
Get an app — response body
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | JSON | Root | |
$ (anyOf 1) | object | Alternative | GitHub apps are a new way to extend GitHub. They can be installed directly on organizations and user accounts and granted access to specific repositories. They come with granular permissions and built-in webhooks. GitHub apps are first class actors within GitHub. |
$ (anyOf 1).client_id | string | Optional | |
$ (anyOf 1).created_at | string | Required within parent | Format: date-time |
$ (anyOf 1).description | JSON | Required within parent | |
$ (anyOf 1).description (anyOf 1) | string | Alternative | |
$ (anyOf 1).description (anyOf 2) | null | Alternative | |
$ (anyOf 1).events | array | Required within parent | The list of events for the GitHub app. Note that the `installation_target`, `security_advisory`, and `meta` events are not included because they are global events and not specific to an installation. |
$ (anyOf 1).events[] | string | Each item | |
$ (anyOf 1).external_url | string | Required within parent | Format: uri |
$ (anyOf 1).html_url | string | Required within parent | Format: uri |
$ (anyOf 1).id | JSON | Required within parent | |
$ (anyOf 1).id (anyOf 1) | integer | Alternative | Unique identifier of the GitHub app |
$ (anyOf 1).id (anyOf 2) | string | Alternative | Pattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$ |
$ (anyOf 1).installations_count | JSON | Optional | |
$ (anyOf 1).installations_count (anyOf 1) | integer | Alternative | The number of installations associated with the GitHub app. Only returned when the integration is requesting details about itself. |
$ (anyOf 1).installations_count (anyOf 2) | string | Alternative | Pattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$ |
$ (anyOf 1).name | string | Required within parent | The name of the GitHub app |
$ (anyOf 1).node_id | string | Required within parent | |
$ (anyOf 1).owner | JSON | Required within parent | |
$ (anyOf 1).owner (anyOf 1) | Model | Alternative | Expand List users — response body — item |
$ (anyOf 1).owner (anyOf 2) | Model | Alternative | Expand Get an app — response body — client id, created at, description, events, external url, html url, id, installations count, name, node id, owner, permissions, slug, updated at owner Enterprise |
$ (anyOf 1).permissions | object | Required within parent | The set of permissions for the GitHub app Additional keys: see wildcard field |
$ (anyOf 1).permissions.checks | string | Optional | |
$ (anyOf 1).permissions.contents | string | Optional | |
$ (anyOf 1).permissions.deployments | string | Optional | |
$ (anyOf 1).permissions.issues | string | Optional | |
$ (anyOf 1).permissions.metadata | string | Optional | |
$ (anyOf 1).permissions.* | string | Additional keys | |
$ (anyOf 1).slug | string | Optional | The slug name of the GitHub app |
$ (anyOf 1).updated_at | string | Required within parent | Format: date-time |
$ (anyOf 2) | null | Alternative |
Referenced models: Get an app — response body — client id, created at, description, events, external url, html url, id, installations count, name, node id, owner, permissions, slug, updated at owner Enterprise, List users — response body — item
Get an issue — response body — user
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | JSON | Root | |
$ (anyOf 1) | Model | Alternative | Expand Get an issue — response body — user A Git Hub user |
$ (anyOf 2) | null | Alternative |
Referenced models: Get an issue — response body — user A Git Hub user
Get an app — response body — client id, created at, description, events, external url, html url, id, installations count, name, node id, owner, permissions, slug, updated at owner Enterprise
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | An enterprise on GitHub. |
avatar_url | string | Required within parent | Format: uri |
created_at | JSON | Required within parent | |
created_at (anyOf 1) | string | Alternative | Format: date-time |
created_at (anyOf 2) | null | Alternative | |
description | JSON | Optional | |
description (anyOf 1) | string | Alternative | A short description of the enterprise. |
description (anyOf 2) | null | Alternative | |
html_url | string | Required within parent | Format: uri |
id | JSON | Required within parent | |
id (anyOf 1) | integer | Alternative | Unique identifier of the enterprise |
id (anyOf 2) | string | Alternative | Pattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$ |
name | string | Required within parent | The name of the enterprise. |
node_id | string | Required within parent | |
slug | string | Required within parent | The slug url identifier for the enterprise. |
updated_at | JSON | Required within parent | |
updated_at (anyOf 1) | string | Alternative | Format: date-time |
updated_at (anyOf 2) | null | Alternative | |
website_url | JSON | Optional | |
website_url (anyOf 1) | string | Alternative | The enterprise's website URL. Format: uri |
website_url (anyOf 2) | null | Alternative |
List users — response body — item
| Field | Type | Presence | Description and constraints |
|---|---|---|---|
$ | object | Root | A GitHub user. |
avatar_url | string | Required within parent | Format: uri |
email | JSON | Optional | |
email (anyOf 1) | string | Alternative | |
email (anyOf 2) | null | Alternative | |
events_url | string | Required within parent | |
followers_url | string | Required within parent | Format: uri |
following_url | string | Required within parent | |
gists_url | string | Required within parent | |
gravatar_id | JSON | Required within parent | |
gravatar_id (anyOf 1) | string | Alternative | |
gravatar_id (anyOf 2) | null | Alternative | |
html_url | string | Required within parent | Format: uri |
id | JSON | Required within parent | |
id (anyOf 1) | integer | Alternative | Format: int64 |
id (anyOf 2) | string | Alternative | Pattern: ^-?[0-9]+(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?$ |
login | string | Required within parent | |
name | JSON | Optional | |
name (anyOf 1) | string | Alternative | |
name (anyOf 2) | null | Alternative | |
node_id | string | Required within parent | |
organizations_url | string | Required within parent | Format: uri |
received_events_url | string | Required within parent | Format: uri |
repos_url | string | Required within parent | Format: uri |
site_admin | boolean | Required within parent | |
starred_at | string | Optional | |
starred_url | string | Required within parent | |
subscriptions_url | string | Required within parent | Format: uri |
type | string | Required within parent | |
url | string | Required within parent | Format: uri |
user_view_type | string | Optional |
Policy, approvals and errors
Section titled “Policy, approvals and errors”SDK function policy ID: github.repos_create_deployment_status. Catalog operation: repos/create-deployment-status. Rules can name either ID; function rules distinguish managed calls and conservatively cover raw calls sharing the route. Existing grant permissions and policy rules apply. wait() returns an immediate result or waits for a required approval; it never approves the request itself. Persist the approval ID to resume after a restart.
Provider errors retain their response; JSON decoding raises ProviderAPIError for provider failures. ManagedOperationError identifies contract/input/retention errors. See error handling and provider-specific behavior. Sensitive input may be refused before approval storage. A decoding error never resubmits a write.
Pinned headers: {"X-GitHub-Api-Version": "2026-03-10", "User-Agent": "Alter", "Accept": "application/vnd.github+json"}