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>

post/api/apps/{app_id}/github/sync/manual

Path parameters

app_idstring required

ID of the app whose GitHub sync this affects.

ID of the app whose GitHub sync this affects.

Response

The outcome of the push.

successboolean required

Whether the push succeeded.

commit_hashstring nullable

Commit pushed to the repository, or null when nothing was pushed.

commits_pushedboolean required

true when the push moved the repository forward. false both when the repository already had this commit and when nothing was pushed at all.

skippedboolean required

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.

errorstring nullable

Why the push didn't happen, or null when it succeeded. Plain text, not a code you can branch on.

duration_msinteger nullable

How long the push took, in milliseconds. null when Base44 rejected the request before starting one.

Example response

{
  "success": true,
  "commit_hash": "4c7e1f90ab3d5628e1a0f7b24c9d8e6350a1b2c4",
  "commits_pushed": true,
  "error": "App not connected to GitHub",
  "duration_ms": 2860
}

Changes