# Source (https://developer.godaddy.com/en/docs/references/rest/nodejs-hosting/source)

***

title: Source
description: Upload app source as a zip and poll the upload job.
full: true
\_openapi:
toc:

* depth: 2
  title: Upload app source (zip)
  url: '#upload-app-source-zip'
* depth: 2
  title: Poll zip upload status
  url: '#poll-zip-upload-status'
  structuredData:
  headings:
  * content: Upload app source (zip)
    id: upload-app-source-zip
  * content: Poll zip upload status
    id: poll-zip-upload-status
    contents: \[]

***

## POST /apps/{appId}/source

Upload app source (zip)

### Path parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `appId` | string | yes |  |

### Request body (required)

Content-Type: `multipart/form-data`

Schema:

- object
  - `zipFile` (required): string

### Responses

**200** — Upload accepted

Content-Type: `application/json`

Schema:

- object
  - `jobId` (required): string

**401** — Unauthorized (missing session, invalid API key or Bearer token, or insufficient OAuth scope)

**404** — Not found

**429** — Too many requests. Limit: 10 requests per minute per client IP. X-RateLimit-* headers are returned on successful responses as well.

Content-Type: `application/json`

Schema:

- object
  - `error` (required): string
  - `code` (required): string
    - enum: "RATE_LIMITED"
  - `detail` (required): string

**Security:** requires `oauth2`; scopes `hosting.paas.code:write`.

## GET /apps/{appId}/source/status

Poll zip upload status

### Path parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `appId` | string | yes |  |

### Query parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `jobId` | string | yes |  |

### Responses

**200** — Upload status

Content-Type: `application/json`

Schema:

- object
  - `status` (required): string
  - `progressMessage`: string
  - `errorMessage`: string
  - `errorStage`: string

**401** — Unauthorized (missing session, invalid API key or Bearer token, or insufficient OAuth scope)

**404** — Not found

**429** — Too many requests. Limit: 120 requests per minute per client IP. X-RateLimit-* headers are returned on successful responses as well.

Content-Type: `application/json`

Schema:

- object
  - `error` (required): string
  - `code` (required): string
    - enum: "RATE_LIMITED"
  - `detail` (required): string

**Security:** requires `oauth2`; scopes `hosting.paas.code:write`.
