# GET /v1/projects/:projectId/sdk-apps/:appId (/docs/api/reference/sdk-apps/get-sdk-app)



<Endpoint method="GET" path="/v1/projects/:projectId/sdk-apps/:appId" auth="Bearer" scope="projects:read" phase="1" />

Returns the SDK app record plus its CAPI relay state for each ad platform (Meta, TikTok, Apple). Use it to render the "integration status" card in your UI — whether events are forwarding to each pixel, the last forward timestamp, and the pixel ID the config is resolving to.

The API key is never included in this response. Rotate via `PATCH` to create a new one.

<Parameters
  title="Path"
  rows="[
  { name: 'projectId', type: 'string', required: true, description: 'Project ID.' },
  { name: 'appId', type: 'string', required: true, description: 'SDK app ID.' },
]"
/>

## Example request [#example-request]

<Tabs items="['curl', 'TypeScript', 'Python']">
  <Tab value="curl">
    ```bash
    curl "https://api.layers.com/v1/projects/9cb958b5-11b5-4e30-8675-5d075d52da7c/sdk-apps/app_8ffb9410eb0eb848264f8a65" \
      -H "Authorization: Bearer lp_live_01HX9Y6K7EJ4T2_4QZpN..."
    ```
  </Tab>

  <Tab value="TypeScript">
    ```ts
    const app = await layers.sdkApps.get(
      "9cb958b5-11b5-4e30-8675-5d075d52da7c",
      "app_8ffb9410eb0eb848264f8a65"
    );
    ```
  </Tab>

  <Tab value="Python">
    ```python
    app = layers.sdk_apps.get(
        project_id="9cb958b5-11b5-4e30-8675-5d075d52da7c",
        app_id="app_8ffb9410eb0eb848264f8a65",
    )
    ```
  </Tab>
</Tabs>

## Response [#response]

<Response status="200" description="OK">
  ```json
  {
    "appId": "app_8ffb9410eb0eb848264f8a65",
    "name": "Acme Coffee iOS",
    "platform": "ios",
    "bundleId": "com.acmecoffee.ios",
    "androidPackage": null,
    "webDomain": null,
    "ingestEndpoint": "https://in.layers.com/l/events",
    "capi": {
      "meta": {
        "enabled": true,
        "pixelId": "987654321012345",
        "lastForwardAt": "2026-04-18T19:42:08Z"
      },
      "tiktok": {
        "enabled": true,
        "pixelId": "C12ABCDEF3456789G",
        "lastForwardAt": "2026-04-18T19:41:57Z"
      }
    },
    "createdAt": "2026-04-18T19:25:22Z",
    "lastRotatedAt": "2026-04-18T19:25:22Z",
    "lastEventAt": "2026-04-18T19:42:11Z"
  }
  ```

  `capi` is an empty object on a freshly-created app and only carries entries for platforms you've explicitly toggled via `PATCH`. Each entry is `{ enabled, pixelId, lastForwardAt }`. The platform-identifier fields (`bundleId`, `androidPackage`, `webDomain`) are always present — only the one matching `platform` is non-null.
</Response>

## Errors [#errors]

| Status | Code              | When                                                         |
| ------ | ----------------- | ------------------------------------------------------------ |
| 422    | `VALIDATION`      | `:projectId` is not a UUID.                                  |
| 401    | `UNAUTHENTICATED` | Missing or invalid key.                                      |
| 403    | `FORBIDDEN_SCOPE` | Key lacks `projects:read`.                                   |
| 404    | `NOT_FOUND`       | Project or SDK app does not exist in the key's organization. |
| 429    | `RATE_LIMITED`    | Read budget exhausted.                                       |

## See also [#see-also]

* [`PATCH /v1/projects/:projectId/sdk-apps/:appId`](/docs/api/reference/sdk-apps/patch-sdk-app) — update config, enable CAPI, rotate key
* [`GET /v1/projects/:projectId/events`](/docs/api/reference/telemetry/events) — read what the SDK is sending
* [CAPI concept](/docs/api/concepts/content-items) — how events become platform conversions
