# Standard Events (/docs/sdk/standard-events)



The Layers SDK accepts any event name via `track('event_name', ...)`, but
the server-side CAPI relay only forwards events that are in the mapping
table below. Everything else is stored in `sdk_events` and visible in
the Events page, but **dropped at the relay**.

## Meta CAPI mapping [#meta-capi-mapping]

| Layers event         | Meta event             |
| -------------------- | ---------------------- |
| `purchase_success`   | `Purchase`             |
| `paywall_purchased`  | `Purchase`             |
| `subscription_start` | `Subscribe`            |
| `subscription_renew` | `Subscribe`            |
| `trial_start`        | `StartTrial`           |
| `trial_convert`      | `Subscribe`            |
| `sign_up`            | `CompleteRegistration` |
| `add_to_cart`        | `AddToCart`            |
| `content_open`       | `ViewContent`          |
| `search`             | `Search`               |
| `purchase_attempt`   | `InitiateCheckout`     |
| `bookmark_add`       | `AddToWishlist`        |

Anything not in the Meta column is **not** forwarded to Meta, even if
it's otherwise a valid Layers event.

## TikTok Events API mapping [#tiktok-events-api-mapping]

| Layers event         | TikTok event           |
| -------------------- | ---------------------- |
| `purchase_success`   | `Purchase`             |
| `paywall_purchased`  | `Purchase`             |
| `subscription_start` | `Purchase`             |
| `trial_start`        | `Purchase`             |
| `add_to_cart`        | `AddToCart`            |
| `content_open`       | `ViewContent`          |
| `screen_view`        | `PageView`             |
| `search`             | `Search`               |
| `sign_up`            | `CompleteRegistration` |

Events not in this column are dropped at the TikTok relay.

## Per-app overrides [#per-app-overrides]

Each layer's CAPI config can declare an `event_map` override that takes
precedence over the defaults above. Use this when you want to

* add forwarding for a new SDK event name, or
* remap an existing SDK event to a different platform event.

Overrides are set in the layer config and surfaced via the partner API.

## Recommended payload patterns [#recommended-payload-patterns]

Purchase:

```ts
layers.track('purchase_success', {
  revenue: 9.99,
  currency: 'USD',
  product_id: 'premium_yearly',
  transaction_id: 'txn_...',
  store: 'app_store',
});
```

The server relay extracts `revenue` / `currency` (or `price` / fallback
properties) and forwards them as Meta's `custom_data.value` and
TikTok's `properties.value`.

Search:

```ts
layers.track('search', { query: 'running shoes' });
```

## Custom events [#custom-events]

Anything not in the tables above is a custom event. It still stores in
`sdk_events` and shows up in the Events page — but it is **not**
forwarded to Meta or TikTok unless you add a per-app `event_map` entry
for it. See [custom events](/docs/sdk/custom-events).
