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

***

title: Apps
description: Create, read, update, and delete apps.
full: true
\_openapi:
toc:

* depth: 2
  title: List apps
  url: '#list-apps'
* depth: 2
  title: Create app
  url: '#create-app'
* depth: 2
  title: Get app creation status
  url: '#get-app-creation-status'
* depth: 2
  title: Get app
  url: '#get-app'
* depth: 2
  title: Update app metadata
  url: '#update-app-metadata'
* depth: 2
  title: Delete app
  url: '#delete-app'
  structuredData:
  headings:
  * content: List apps
    id: list-apps
  * content: Create app
    id: create-app
  * content: Get app creation status
    id: get-app-creation-status
  * content: Get app
    id: get-app
  * content: Update app metadata
    id: update-app-metadata
  * content: Delete app
    id: delete-app
    contents: \[]

***

## GET /apps

List apps

### Responses

**200** — App list

Content-Type: `application/json`

Schema:

- object
  - `apps` (required): array
      - items:
          - `id` (required): string
          - `name` (required): string
          - `status` (required): string
          - `createdAt` (required): string
          - `updatedAt` (required): string
          - `urls` (required): object
              - `preview`: string
              - `publish`: string
          - `variants`: array
              - items:
                  - `name` (required): string
                  - `status` (required): string

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

**429** — Too many requests. Limit: 60 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.apps:read`.

## POST /apps

Create app

### Request body (required)

Content-Type: `application/json`

Schema:

- object
  - `name` (required): string
  - `datacenter`: string
    - enum: "p3", "sxb1"

### Responses

**202** — App creation accepted; poll the returned job for status

Content-Type: `application/json`

Schema:

- object
  - `job` (required): object
      - `id` (required): string
      - `status` (required): string
        - enum: "pending", "active", "failed"

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

**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.apps:create`.

## GET /apps/jobs/{jobId}

Get app creation status

### Path parameters

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

### Responses

**200** — App creation status (app present once active)

Content-Type: `application/json`

Schema:

- object
  - `job` (required): object
      - `id` (required): string
      - `status` (required): string
        - enum: "pending", "active", "failed"
  - `app`: object
      - `id` (required): string
      - `name` (required): string
      - `status` (required): string
      - `createdAt` (required): string
      - `updatedAt` (required): string
      - `urls` (required): object
          - `preview`: string
          - `publish`: string
      - `variants`: array
          - items:
              - `name` (required): string
              - `status` (required): string
      - `variantsWithLifecycle`: array
          - items:
              - `variant` (required): string
              - `status` (required): string
              - `lifecycleState`: 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.apps:create`.

## GET /apps/{appId}

Get app

### Path parameters

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

### Responses

**200** — App details

Content-Type: `application/json`

Schema:

- object
  - `app` (required): object
      - `id` (required): string
      - `name` (required): string
      - `status` (required): string
      - `createdAt` (required): string
      - `updatedAt` (required): string
      - `urls` (required): object
          - `preview`: string
          - `publish`: string
      - `variants`: array
          - items:
              - `name` (required): string
              - `status` (required): string
      - `variantsWithLifecycle`: array
          - items:
              - `variant` (required): string
              - `status` (required): string
              - `lifecycleState`: string

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

**404** — Not found

**429** — Too many requests. Limit: 60 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.apps:read`.

## PATCH /apps/{appId}

Update app metadata

### Path parameters

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

### Request body (required)

Content-Type: `application/json`

Schema:

- object — At least one of name or rootPath must be provided.
  - `name`: string
  - `rootPath`: string

### Responses

**200** — App updated

Content-Type: `application/json`

Schema:

- object
  - `app` (required): object
      - `id` (required): string
      - `name` (required): string
      - `status` (required): string
      - `createdAt` (required): string
      - `updatedAt` (required): string
      - `urls` (required): object
          - `preview`: string
          - `publish`: string
      - `variants`: array
          - items:
              - `name` (required): string
              - `status` (required): string
      - `variantsWithLifecycle`: array
          - items:
              - `variant` (required): string
              - `status` (required): string
              - `lifecycleState`: 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.apps:update`.

## DELETE /apps/{appId}

Delete app

### Path parameters

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

### Responses

**204** — App deleted

**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.apps:delete`.
