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

# Push changes to GitHub

> <Info>This API is in beta. Endpoints, fields, and behavior may still change, so avoid depending on it in production.</Info>

Pushes the app's latest saved version to the connected repository.

While automatic sync is on Base44 pushes each saved version by itself, so reach for this when a push failed or when you have turned automatic sync off: it pushes either way. It commits the app's latest saved version on the main line, so it publishes saved work rather than the current chat turn, and it never pushes a branch.

<Warning>A failed push still returns HTTP 200. Read `success` and `error` instead of the status code. An app with no active connection, or with no saved version carrying a commit, comes back `success: false` with the reason in `error` rather than a 404.</Warning>

`success: true` with `commits_pushed: false` means the repository already had that commit, so there was nothing new to send.

<Warning>The response includes fields beyond the ones documented here. Don't rely on undocumented response fields, as they can change at any time.</Warning>

<Note>This endpoint accepts a personal API key. Workspace API keys are not authorized for it and are rejected with a 403.</Note>



## OpenAPI

````yaml /developers/references/app-management/app-management-openapi.json post /api/apps/{app_id}/github/sync/manual
openapi: 3.1.0
info:
  title: Base44 App Management API
  version: 1.0.0
servers:
  - url: https://app.base44.com
security:
  - ApiKeyAuth: []
paths:
  /api/apps/{app_id}/github/sync/manual:
    post:
      summary: Push changes to GitHub
      description: >-
        <Info>This API is in beta. Endpoints, fields, and behavior may still
        change, so avoid depending on it in production.</Info>


        Pushes the app's latest saved version to the connected repository.


        While automatic sync is on Base44 pushes each saved version by itself,
        so reach for this when a push failed or when you have turned automatic
        sync off: it pushes either way. It commits the app's latest saved
        version on the main line, so it publishes saved work rather than the
        current chat turn, and it never pushes a branch.


        <Warning>A failed push still returns HTTP 200. Read `success` and
        `error` instead of the status code. An app with no active connection, or
        with no saved version carrying a commit, comes back `success: false`
        with the reason in `error` rather than a 404.</Warning>


        `success: true` with `commits_pushed: false` means the repository
        already had that commit, so there was nothing new to send.


        <Warning>The response includes fields beyond the ones documented here.
        Don't rely on undocumented response fields, as they can change at any
        time.</Warning>


        <Note>This endpoint accepts a personal API key. Workspace API keys are
        not authorized for it and are rejected with a 403.</Note>
      operationId: trigger_manual_sync_api_apps__app_id__github_sync_manual_post
      parameters:
        - name: app_id
          in: path
          required: true
          schema:
            type: string
            description: ID of the app whose GitHub sync this affects.
            title: App Id
          description: ID of the app whose GitHub sync this affects.
          example: 6820f3a4e7b91d003c45a1f2
      responses:
        '200':
          description: The outcome of the push.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GitHubPushResult'
        '401':
          description: Missing or invalid credentials.
        '403':
          description: >-
            You don't have access to this app, or you used a workspace API key.
            These endpoints take a personal API key.
        '404':
          description: App not found.
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    GitHubPushResult:
      properties:
        success:
          type: boolean
          title: Success
          description: Whether the push succeeded.
          example: true
        commit_hash:
          anyOf:
            - type: string
            - type: 'null'
          title: Commit Hash
          description: Commit pushed to the repository, or `null` when nothing was pushed.
          example: 4c7e1f90ab3d5628e1a0f7b24c9d8e6350a1b2c4
        commits_pushed:
          type: boolean
          title: Commits Pushed
          description: >-
            `true` when the push moved the repository forward. `false` both when
            the repository already had this commit and when nothing was pushed
            at all.
          example: true
        skipped:
          type: boolean
          title: Skipped
          description: >-
            `true` for exactly one reason: the connection carries no GitHub App
            installation. Every other reason nothing was pushed comes back
            `false`, including no connection at all and a connection in `error`
            or `revoked`, so read `error` rather than this flag.
          example: false
        error:
          anyOf:
            - type: string
            - type: 'null'
          title: Error
          description: >-
            Why the push didn't happen, or `null` when it succeeded. Plain text,
            not a code you can branch on.
          example: App not connected to GitHub
        duration_ms:
          anyOf:
            - type: integer
            - type: 'null'
          title: Duration Ms
          description: >-
            How long the push took, in milliseconds. `null` when Base44 rejected
            the request before starting one.
          example: 2860
      type: object
      required:
        - success
        - commits_pushed
        - skipped
      title: GitHubPushResult
      description: Outcome of a push to the connected repository.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: api_key
      description: Personal API key.

````