
## Application data

`GET /v1/apps/:id`

Returns a single Bitrix24 account application by identifier.

## Parameters

| Parameter | Type | Required | Description |
|----------|-----|:-----:|---------|
| `id` (path) | string | Yes | Application identifier. List: `GET /v1/apps` |

## Examples

### curl — personal key

```bash
curl https://vibecode.bitrix24.com/v1/apps/YOUR_APP_ID \
  -H "X-Api-Key: YOUR_API_KEY"
```

### curl — OAuth application

```bash
curl https://vibecode.bitrix24.com/v1/apps/YOUR_APP_ID \
  -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN"
```

### JavaScript — personal key

```javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/apps/YOUR_APP_ID', {
  headers: { 'X-Api-Key': 'YOUR_API_KEY' },
})
const { data } = await res.json()
console.log('Application:', data)
```

### JavaScript — OAuth application

```javascript
const res = await fetch('https://vibecode.bitrix24.com/v1/apps/YOUR_APP_ID', {
  headers: {
    'X-Api-Key': 'YOUR_APP_KEY',
    'Authorization': 'Bearer USER_SESSION_TOKEN',
  },
})
const { data } = await res.json()
```

## Response fields

| Field | Type | Description |
|------|-----|---------|
| `success` | boolean | Always `true` on success |
| `data.id` | string | Application identifier |
| `data.title` | string | Name |
| `data.description` | string \| null | Description |
| `data.scopes` | string[] | Bitrix24 scopes assigned to the application key |
| `data.handlerUrl` | string | Handler address on the platform side. Details — [Applications](/docs/apps) |
| `data.appUrl` | string \| null | Application address on Black Hole. Before publishing — `null` |
| `data.redirectUris` | string[] | Allowed OAuth return addresses |
| `data.bitrixClientId` | string \| null | OAuth client identifier in the Bitrix24 account |
| `data.prefix` | string | Application key prefix |
| `data.suffix` | string | Last characters of the application key |
| `data.authorId` | string | Application author identifier |
| `data.authorBitrixUserId` | integer \| null | Bitrix24 employee id of whoever created the app — the same identifier `id` carries in `GET /v1/users`. `null` when the id is unknown |
| `data.authorBitrixUserIdSource` | string \| null | Where the id came from: `member` — the author's confirmed membership of the account, `snapshot` — a value captured when the app was created, `null` — no id |
| `data.portalId` | string | Bitrix24 portal identifier |
| `data.createdAt` | string | Creation date, ISO 8601 |
| `data.updatedAt` | string | Modification date, ISO 8601 |
| `data.placements` | string[] | Bound [placements](/docs/apps/placements). Before publishing — empty array |
| `data.catalogStatus` | string | Catalog status: `PRIVATE` / `PUBLISHED` / `UNPUBLISHED`. The reliable publication signal |
| `data.publishedAt` | string \| null | Publication date, ISO 8601. `null` if the application was never published |
| `data.placementResizeEnabled` | boolean | Whether the placement iframe height is fitted to the application content. Defaults to `false`. How to enable it — [PATCH /v1/apps/:id](/docs/apps/update) |
| `data.mobile` | boolean | The "Supports BitrixMobile" flag sent to the Bitrix24 account at registration. For applications created before the field existed — `false`. Set only at creation — [Create an application](/docs/apps/create) |
| `data.hosting` | string | Where the app runs: `platform` — on a platform server linked to the app or owned by this Bitrix24 account, or on that server's verified own domain, or the app has no address at all, `platform-orphan` — an address on a platform subdomain with no live server behind it, `external` — any other address, including a platform server of another Bitrix24 account. Computed on every read |
| `data.externalHost` | string \| null | Host name from `appUrl` (punycode) for `external`, otherwise `null`. An `external` row can also carry `null` when the address has no host: the string does not parse as a URL or its scheme has no host |
| `data.externalRegistrable` | string \| null | Registrable domain of the host by the public suffix list, private suffixes included: `example.co.uk` for `shop.example.co.uk`, the whole address for an IP address. `null` whenever `externalHost` is `null` |

## Response example

```json
{
  "success": true,
  "data": {
    "id": "33c4d5e6-f7a8-49b0-1234-5c6d7e8f9012",
    "title": "Sales dashboard",
    "description": "Deal analytics in the CRM card",
    "scopes": ["crm", "user", "placement"],
    "handlerUrl": "https://vibecode.bitrix24.com/v1/bitrix-handler",
    "appUrl": "https://app-abc12345.vibecode.bitrix24.com",
    "redirectUris": [
      "https://vibecode.bitrix24.com/oauth/complete",
      "http://localhost"
    ],
    "bitrixClientId": "local.7c3d4e5f6a7b80.55556666",
    "prefix": "vibe_app_local_7c3",
    "suffix": "6666",
    "authorId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "authorBitrixUserId": 42,
    "authorBitrixUserIdSource": "member",
    "portalId": "8b1f0e2a-3c4d-5e6f-7a8b-9c0d1e2f3a4b",
    "createdAt": "2026-06-24T09:12:45.781Z",
    "updatedAt": "2026-06-24T09:12:45.781Z",
    "placements": [],
    "catalogStatus": "PRIVATE",
    "publishedAt": null,
    "placementResizeEnabled": false,
    "mobile": false,
    "hosting": "platform",
    "externalHost": null,
    "externalRegistrable": null
  }
}
```

## Error response example

404 — application not found:

```json
{
  "success": false,
  "error": {
    "code": "APP_NOT_FOUND",
    "message": "Application not found"
  }
}
```

## Errors

| HTTP | Code | Description |
|------|-----|---------|
| 404 | `APP_NOT_FOUND` | An application with the given `id` does not belong to the key's portal or does not exist |
| 401 | `MISSING_API_KEY` | The `X-Api-Key` header was not passed |

Full list of common API errors — [Errors](/docs/errors).

## Known specifics

- A deleted application returns `404 APP_NOT_FOUND` — the same code as a never-existing identifier. The response cannot distinguish "deleted" from "never existed".
- The `authorBitrixUserId` field is the Bitrix24 employee id of whoever created the app, and the same identifier the `id` field of [GET /v1/users](/docs/entities/users/list) returns. An employee card link is built as `https://<account-domain>/company/personal/user/<authorBitrixUserId>/`. The `authorId` field stays a Vibecode platform user identifier and never goes into such a link.
- This response does not return the author's name. Fetch it by `authorBitrixUserId` through [GET /v1/users](/docs/entities/users/list), where the `user` permission gates access to it.
- Read `authorBitrixUserIdSource` before you build a link. On `member` the id comes from the author's confirmed membership of the account and the link points at them. On `snapshot` the id comes from a value captured when the app was created: that is best-effort, and on an app whose owner has changed the id may point at a different employee. A registry that must not be wrong should link only on `member`.
- Both fields are empty together: `authorBitrixUserIdSource: null` always comes with `authorBitrixUserId: null`. An empty id is a normal state, not an error — for some apps the author's id is unknown.
- On self-hosted accounts and on accounts with microservice credentials the `snapshot` value is never returned: there the captured value has no identity-confirmed origin, so the id is either `member` or empty.
- The `member` value does not promise the employee still works at the company: the link may lead to a disabled or deleted Bitrix24 profile.

## See also

- [Applications](/docs/apps)
- [List applications](/docs/apps/list)
- [Update application](/docs/apps/update)
- [Delete application](/docs/apps/delete)
- [Scopes](/docs/scopes)
