---
title: "Create a codespace from a pull request"
method: POST
path: "/repos/{owner}/{repo}/pulls/{pull_number}/codespaces"
tags: ["codespaces"]
---

# Create a codespace from a pull request

`POST /repos/{owner}/{repo}/pulls/{pull_number}/codespaces`

Creates a codespace owned by the authenticated user for the specified pull request.

OAuth app tokens and personal access tokens (classic) need the `codespace` scope to use this endpoint.

## Path parameters

- `owner` string, required
- `repo` string, required
- `pull_number` integer, required

## Request body

- object, nullable
  - `location` string — The requested location for a new codespace. Best efforts are made to respect this upon creation. Assigned by IP if not provided.
  - `geo` 'EuropeWest' | 'SoutheastAsia' | 'UsEast' | 'UsWest' — The geographic area for this codespace. If not specified, the value is assigned by IP. This property replaces `location`, which is closing down.
  - `client_ip` string — IP for location auto-detection when proxying a request
  - `machine` string — Machine type to use for this codespace
  - `devcontainer_path` string — Path to devcontainer.json config to use for this codespace
  - `multi_repo_permissions_opt_out` boolean — Whether to authorize requested permissions from devcontainer.json
  - `working_directory` string — Working directory for this codespace
  - `idle_timeout_minutes` integer — Time in minutes before codespace stops from inactivity
  - `display_name` string — Display name for this codespace
  - `retention_period_minutes` integer — Duration in minutes after codespace has gone idle in which it will be deleted. Must be integer minutes between 0 and 43200 (30 days).

## Response `201`

Response when the codespace was successfully created

- Codespace — A codespace.
  - `id` integer, required
  - `name` string, required — Automatically generated name of this codespace.
  - `display_name` string, nullable — Display name for this codespace.
  - `environment_id` string, nullable, required — UUID identifying this codespace's environment.
  - `owner` SimpleUser, required — A GitHub user.
    - `name` string, nullable
    - `email` string, nullable
    - `login` string, required
    - `id` integer, required
    - `node_id` string, required
    - `avatar_url` string, uri, required
    - `gravatar_id` string, nullable, required
    - `url` string, uri, required
    - `html_url` string, uri, required
    - `followers_url` string, uri, required
    - `following_url` string, required
    - `gists_url` string, required
    - `starred_url` string, required
    - `subscriptions_url` string, uri, required
    - `organizations_url` string, uri, required
    - `repos_url` string, uri, required
    - `events_url` string, required
    - `received_events_url` string, uri, required
    - `type` string, required
    - `site_admin` boolean, required
    - `starred_at` string
    - `user_view_type` string
  - `billable_owner` SimpleUser, required — A GitHub user.
    - `name` string, nullable
    - `email` string, nullable
    - `login` string, required
    - `id` integer, required
    - `node_id` string, required
    - `avatar_url` string, uri, required
    - `gravatar_id` string, nullable, required
    - `url` string, uri, required
    - `html_url` string, uri, required
    - `followers_url` string, uri, required
    - `following_url` string, required
    - `gists_url` string, required
    - `starred_url` string, required
    - `subscriptions_url` string, uri, required
    - `organizations_url` string, uri, required
    - `repos_url` string, uri, required
    - `events_url` string, required
    - `received_events_url` string, uri, required
    - `type` string, required
    - `site_admin` boolean, required
    - `starred_at` string
    - `user_view_type` string
  - `repository` MinimalRepository, required — Minimal Repository
    - `id` integer, required
    - `node_id` string, required
    - `name` string, required
    - `full_name` string, required
    - `owner` SimpleUser, required — A GitHub user.
      - `name` string, nullable
      - `email` string, nullable
      - `login` string, required
      - `id` integer, required
      - `node_id` string, required
      - `avatar_url` string, uri, required
      - `gravatar_id` string, nullable, required
      - `url` string, uri, required
      - `html_url` string, uri, required
      - `followers_url` string, uri, required
      - `following_url` string, required
      - `gists_url` string, required
      - `starred_url` string, required
      - `subscriptions_url` string, uri, required
      - `organizations_url` string, uri, required
      - `repos_url` string, uri, required
      - `events_url` string, required
      - `received_events_url` string, uri, required
      - `type` string, required
      - `site_admin` boolean, required
      - `starred_at` string
      - `user_view_type` string
    - `private` boolean, required
    - `html_url` string, uri, required
    - `description` string, nullable, required
    - `fork` boolean, required
    - `url` string, uri, required
    - `archive_url` string, required
    - `assignees_url` string, required
    - `blobs_url` string, required
    - `branches_url` string, required
    - `collaborators_url` string, required
    - `comments_url` string, required
    - `commits_url` string, required
    - `compare_url` string, required
    - `contents_url` string, required
    - `contributors_url` string, uri, required
    - `deployments_url` string, uri, required
    - `downloads_url` string, uri, required
    - `events_url` string, uri, required
    - `forks_url` string, uri, required
    - `git_commits_url` string, required
    - `git_refs_url` string, required
    - `git_tags_url` string, required
    - `git_url` string
    - `issue_comment_url` string, required
    - `issue_events_url` string, required
    - `issues_url` string, required
    - `keys_url` string, required
    - `labels_url` string, required
    - `languages_url` string, uri, required
    - `merges_url` string, uri, required
    - `milestones_url` string, required
    - `notifications_url` string, required
    - `pulls_url` string, required
    - `releases_url` string, required
    - `ssh_url` string
    - `stargazers_url` string, uri, required
    - `statuses_url` string, required
    - `subscribers_url` string, uri, required
    - `subscription_url` string, uri, required
    - `tags_url` string, uri, required
    - `teams_url` string, uri, required
    - `trees_url` string, required
    - `clone_url` string
    - `mirror_url` string, nullable
    - `hooks_url` string, uri, required
    - `svn_url` string
    - `homepage` string, nullable
    - `language` string, nullable
    - `forks_count` integer
    - `stargazers_count` integer
    - `watchers_count` integer
    - `size` integer — The size of the repository, in kilobytes. Size is calculated hourly. When a repository is initially created, the size is 0.
    - `default_branch` string
    - `open_issues_count` integer
    - `is_template` boolean
    - `topics` string[]
    - `has_issues` boolean
    - `has_projects` boolean
    - `has_wiki` boolean
    - `has_pages` boolean
    - `has_downloads` boolean
    - `has_discussions` boolean
    - `has_pull_requests` boolean
    - `pull_request_creation_policy` 'all' | 'collaborators_only' — The policy controlling who can create pull requests: all or collaborators_only.
    - `archived` boolean
    - `disabled` boolean
    - `visibility` string
    - `pushed_at` string, date-time, nullable
    - `created_at` string, date-time, nullable
    - `updated_at` string, date-time, nullable
    - `permissions` object
      - `admin` boolean
      - `maintain` boolean
      - `push` boolean
      - `triage` boolean
      - `pull` boolean
    - `role_name` string
    - `temp_clone_token` string
    - `delete_branch_on_merge` boolean
    - `subscribers_count` integer
    - `network_count` integer
    - `code_of_conduct` CodeOfConduct — Code Of Conduct
      - `key` string, required
      - `name` string, required
      - `url` string, uri, required
      - `body` string
      - `html_url` string, uri, nullable, required
    - `license` object, nullable
      - `key` string
      - `name` string
      - `spdx_id` string
      - `url` string, nullable
      - `node_id` string
    - `forks` integer
    - `open_issues` integer
    - `watchers` integer
    - `allow_forking` boolean
    - `web_commit_signoff_required` boolean
    - `security_and_analysis` SecurityAndAnalysis, nullable
      - `advanced_security` object — Enable or disable GitHub Advanced Security for the repository. For standalone Code Scanning or Secret Protection products, this parameter cannot be used.
        - `status` 'enabled' | 'disabled'
      - `code_security` object
        - `status` 'enabled' | 'disabled'
      - `dependabot_security_updates` object — Enable or disable Dependabot security updates for the repository.
        - `status` 'enabled' | 'disabled' — The enablement status of Dependabot security updates for the repository.
      - `secret_scanning` object
        - `status` 'enabled' | 'disabled'
      - `secret_scanning_push_protection` object
        - `status` 'enabled' | 'disabled'
      - `secret_scanning_non_provider_patterns` object
        - `status` 'enabled' | 'disabled'
      - `secret_scanning_ai_detection` object
        - `status` 'enabled' | 'disabled'
      - `secret_scanning_delegated_alert_dismissal` object
        - `status` 'enabled' | 'disabled'
      - `secret_scanning_delegated_bypass` object
        - `status` 'enabled' | 'disabled'
      - `secret_scanning_delegated_bypass_options` object
        - `reviewers` object[] — The bypass reviewers for secret scanning delegated bypass
          - `reviewer_id` integer, required — The ID of the team or role selected as a bypass reviewer
          - `reviewer_type` 'TEAM' | 'ROLE', required — The type of the bypass reviewer
          - `mode` 'ALWAYS' | 'EXEMPT' — The bypass mode for the reviewer
    - `custom_properties` object — The custom properties that were defined for the repository. The keys are the custom property names, and the values are the corresponding custom property values.
  - `machine` NullableCodespaceMachine, nullable, required — A description of the machine powering a codespace.
    - `name` string, required — The name of the machine.
    - `display_name` string, required — The display name of the machine includes cores, memory, and storage.
    - `operating_system` string, required — The operating system of the machine.
    - `storage_in_bytes` integer, required — How much storage is available to the codespace.
    - `memory_in_bytes` integer, required — How much memory is available to the codespace.
    - `cpus` integer, required — How many cores are available to the codespace.
    - `prebuild_availability` 'none' | 'ready' | 'in_progress', nullable, required — Whether a prebuild is currently available when creating a codespace for this machine and repository. If a branch was not specified as a ref, the default branch will be assumed. Value will be "null" if prebuilds are not supported or prebuild availability could not be determined. Value will be "none" if no prebuild is available. Latest values "ready" and "in_progress" indicate the prebuild availability status.
  - `devcontainer_path` string, nullable — Path to devcontainer.json from repo root used to create Codespace.
  - `prebuild` boolean, nullable, required — Whether the codespace was created from a prebuild.
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `last_used_at` string, date-time, required — Last known time this codespace was started.
  - `state` 'Unknown' | 'Created' | 'Queued' | 'Provisioning' | 'Available' | 'Awaiting' | 'Unavailable' | 'Deleted' | 'Moved' | 'Shutdown' | 'Archived' | 'Starting' | 'ShuttingDown' | 'Failed' | 'Exporting' | 'Updating' | 'Rebuilding', required — State of this codespace.
  - `url` string, uri, required — API URL for this codespace.
  - `git_status` object, required — Details about the codespace's git repository.
    - `ahead` integer — The number of commits the local repository is ahead of the remote.
    - `behind` integer — The number of commits the local repository is behind the remote.
    - `has_unpushed_changes` boolean — Whether the local repository has unpushed changes.
    - `has_uncommitted_changes` boolean — Whether the local repository has uncommitted changes.
    - `ref` string — The current branch (or SHA if in detached HEAD state) of the local repository.
  - `location` 'EastUs' | 'SouthEastAsia' | 'WestEurope' | 'WestUs2', required — The initally assigned location of a new codespace.
  - `idle_timeout_minutes` integer, nullable, required — The number of minutes of inactivity after which this codespace will be automatically stopped.
  - `web_url` string, uri, required — URL to access this codespace on the web.
  - `machines_url` string, uri, required — API URL to access available alternate machine types for this codespace.
  - `start_url` string, uri, required — API URL to start this codespace.
  - `stop_url` string, uri, required — API URL to stop this codespace.
  - `publish_url` string, uri, nullable — API URL to publish this codespace to a new repository.
  - `pulls_url` string, uri, nullable, required — API URL for the Pull Request associated with this codespace, if any.
  - `recent_folders` string[], required
  - `runtime_constraints` object
    - `allowed_port_privacy_settings` string[], nullable — The privacy settings a user can select from when forwarding a port.
  - `pending_operation` boolean, nullable — Whether or not a codespace has a pending async operation. This would mean that the codespace is temporarily unavailable. The only thing that you can do with a codespace in this state is delete it.
  - `pending_operation_disabled_reason` string, nullable — Text to show user when codespace is disabled by a pending operation
  - `idle_timeout_notice` string, nullable — Text to show user when codespace idle timeout minutes has been overriden by an organization policy
  - `retention_period_minutes` integer, nullable — Duration in minutes after codespace has gone idle in which it will be deleted. Must be integer minutes between 0 and 43200 (30 days).
  - `retention_expires_at` string, date-time, nullable — When a codespace will be auto-deleted based on the "retention_period_minutes" and "last_used_at"
  - `last_known_stop_notice` string, nullable — The text to display to a user when a codespace has been stopped for a potentially actionable reason.

## Other responses

- `202` — Response when the codespace creation partially failed but is being retried in the background
- `401` — Requires authentication
- `403` — Forbidden
- `404` — Resource not found
- `503` — Service unavailable

---

[API](https://skmtc.net/github/apis/rest-api.md) · [All operations](https://skmtc.net/github/apis/rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/github/rest-api/versions/80850db290cd/schema)
