> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sparkles.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Create or update a draft pull request

> Publishes sandbox changes through the sanctioned short-lived GitHub App token pipeline and returns the resulting draft pull request status.



## OpenAPI

````yaml /openapi.json post /api/public/v1/sandboxes/{sandboxId}/pull-request
openapi: 3.1.0
info:
  title: Sparkles Sandbox API
  version: 1.0.0
  description: Create coding sandboxes, stream their work, and control their lifecycle.
servers:
  - url: https://sparkles.dev
security: []
paths:
  /api/public/v1/sandboxes/{sandboxId}/pull-request:
    post:
      tags:
        - sandbox pull requests
      summary: Create or update a draft pull request
      description: >-
        Publishes sandbox changes through the sanctioned short-lived GitHub App
        token pipeline and returns the resulting draft pull request status.
      operationId: createSandboxPullRequest
      parameters:
        - in: path
          name: sandboxId
          schema:
            type: string
            pattern: ^c_[a-z2-9]{12}$
          required: true
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                repo:
                  type: string
                  maxLength: 201
                  pattern: ^[A-Za-z0-9._-]+\/[A-Za-z0-9._-]+$
              additionalProperties: false
      responses:
        '200':
          description: Current draft pull request and check status
          content:
            application/json:
              schema:
                type: object
                properties:
                  actionState:
                    type: string
                    enum:
                      - idle
                      - draft
                      - ready
                      - merged
                      - closed
                  checks:
                    type: object
                    properties:
                      error:
                        type: string
                      label:
                        type: string
                      runs:
                        type: array
                        items:
                          type: object
                          properties:
                            conclusion:
                              type:
                                - string
                                - 'null'
                            createdAt:
                              type:
                                - string
                                - 'null'
                            event:
                              type:
                                - string
                                - 'null'
                            headBranch:
                              type:
                                - string
                                - 'null'
                            headSha:
                              type:
                                - string
                                - 'null'
                            id:
                              type: integer
                              exclusiveMinimum: 0
                              maximum: 9007199254740991
                            name:
                              type: string
                            runNumber:
                              anyOf:
                                - type: integer
                                  minimum: -9007199254740991
                                  maximum: 9007199254740991
                                - type: 'null'
                            status:
                              type:
                                - string
                                - 'null'
                            updatedAt:
                              type:
                                - string
                                - 'null'
                            url:
                              anyOf:
                                - type: string
                                  format: uri
                                - type: 'null'
                          required:
                            - id
                            - name
                          additionalProperties: false
                      checkRuns:
                        type: array
                        items:
                          type: object
                          properties:
                            completedAt:
                              type:
                                - string
                                - 'null'
                            conclusion:
                              type:
                                - string
                                - 'null'
                            id:
                              type: integer
                              exclusiveMinimum: 0
                              maximum: 9007199254740991
                            name:
                              type: string
                            startedAt:
                              type:
                                - string
                                - 'null'
                            status:
                              type:
                                - string
                                - 'null'
                            url:
                              anyOf:
                                - type: string
                                  format: uri
                                - type: 'null'
                          required:
                            - id
                            - name
                          additionalProperties: false
                      state:
                        type: string
                        enum:
                          - idle
                          - pending
                          - active
                          - success
                          - failure
                          - error
                      updatedAt:
                        type:
                          - string
                          - 'null'
                    required:
                      - label
                      - runs
                      - checkRuns
                      - state
                    additionalProperties: false
                  comments:
                    type: array
                    items:
                      type: object
                      properties:
                        author:
                          type:
                            - string
                            - 'null'
                        authorAvatarUrl:
                          anyOf:
                            - type: string
                              format: uri
                            - type: 'null'
                        createdAt:
                          type:
                            - string
                            - 'null'
                        id:
                          type: integer
                          exclusiveMinimum: 0
                          maximum: 9007199254740991
                        title:
                          type: string
                        updatedAt:
                          type:
                            - string
                            - 'null'
                        url:
                          anyOf:
                            - type: string
                              format: uri
                            - type: 'null'
                      required:
                        - id
                        - title
                      additionalProperties: false
                  detailsPending:
                    type: boolean
                  pullRequest:
                    anyOf:
                      - type: object
                        properties:
                          id:
                            type: integer
                            exclusiveMinimum: 0
                            maximum: 9007199254740991
                          nodeId:
                            type: string
                          number:
                            type: integer
                            exclusiveMinimum: 0
                            maximum: 9007199254740991
                          url:
                            type: string
                            format: uri
                          title:
                            type: string
                          state:
                            type: string
                            enum:
                              - open
                              - closed
                          draft:
                            type: boolean
                          merged:
                            type: boolean
                          baseRef:
                            type: string
                          headRef:
                            type: string
                          headSha:
                            type: string
                          createdAt:
                            type: string
                          updatedAt:
                            type: string
                          additions:
                            type: integer
                            minimum: 0
                            maximum: 9007199254740991
                          deletions:
                            type: integer
                            minimum: 0
                            maximum: 9007199254740991
                          changedFiles:
                            type: integer
                            minimum: 0
                            maximum: 9007199254740991
                        required:
                          - id
                          - nodeId
                          - number
                          - url
                          - title
                          - state
                          - draft
                          - merged
                          - baseRef
                          - headRef
                          - headSha
                          - createdAt
                          - updatedAt
                        additionalProperties: false
                      - type: 'null'
                  repository:
                    type: string
                required:
                  - actionState
                  - checks
                  - comments
                  - pullRequest
                  - repository
                additionalProperties: false
        '400':
          description: The repository selector or request body failed validation
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                    required:
                      - code
                      - message
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
        '401':
          description: Missing, malformed, revoked, or otherwise invalid API key
          headers:
            WWW-Authenticate:
              required: true
              description: Bearer authentication challenge for the Sparkles Sandbox API
              schema:
                type: string
                description: Bearer authentication challenge for the Sparkles Sandbox API
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                    required:
                      - code
                      - message
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
        '403':
          description: >-
            The API key lacks the sandboxes scope or its user is no longer an
            active organization member
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                    required:
                      - code
                      - message
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
        '404':
          description: Sandbox, repository, or pull request not found
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                    required:
                      - code
                      - message
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
        '409':
          description: The sandbox is not ready or has no changes to publish
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                    required:
                      - code
                      - message
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
        '413':
          description: Request body exceeded 16 KiB
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                    required:
                      - code
                      - message
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
        '415':
          description: Content-Type was not application/json
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                    required:
                      - code
                      - message
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
        '429':
          description: The API key exceeded its distributed per-minute request limit
          headers:
            Retry-After:
              required: true
              description: Seconds until another request may be made
              schema:
                type: string
                pattern: ^\d+$
                description: Seconds until another request may be made
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                    required:
                      - code
                      - message
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
        '500':
          description: The request could not be completed because of an internal error
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                      message:
                        type: string
                    required:
                      - code
                      - message
                    additionalProperties: false
                required:
                  - error
                additionalProperties: false
      security:
        - apiKey: []
components:
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      bearerFormat: spk_live_…
      description: >-
        Long-lived opaque API key minted by an approved user at /api. The secret
        is shown once, stored only as a SHA-256 digest, and disabled immediately
        when either the key or its API access grant is revoked.

````