Layers

Reverse Proxy (in.layers.com)

Why Layers uses in.layers.com as the SDK ingest endpoint.

View as Markdown

The SDK posts events to https://in.layers.com/events. This is a reverse-proxy endpoint, not a backend service.

Why a reverse proxy

  • Bypass ad-blockers. A first-party-style domain is rarely blocked.
  • Single TLS termination for SDK traffic, regardless of backend changes.
  • Server-side enrichment — IP truncation, UA parsing, geo lookup before storing.
  • Returns 202 immediately — fire-and-forget client semantics.
  • Easy to swap to your own custom domain (CNAME).

Endpoint reference

POST https://in.layers.com/events
Content-Type: application/json
X-App-Id: <your app_id>

{
  "events": [ /* array of event objects */ ],
  "batch_id": "optional-batch-id",
  "sent_at": "2026-04-19T12:00:00.000Z"
}

Response:

202 Accepted

Request body is validated synchronously. Failures return 400 with a structured error.

Other endpoints exposed by the ingest service:

MethodPathPurpose
POST/eventsEvent batch ingest
POST/users/propertiesUser properties upsert
POST/consentConsent state write
GET/configFetch remote SDK config (killswitches, event allowlists, etc.)
POST/skan/postbacksSKAdNetwork postback ingest
GET/c/:appIdClick-relay landing redirect (for paid-media CAPI tracking URLs)
GET/healthLiveness (no auth)

All non-health, non-click routes require the X-App-Id header.

No JS bundle is served

The ingest host does NOT serve a bundled SDK file. Install the JS SDK via npm (@layers/client for web, @layers/react-native for RN, @layers/expo for Expo, @layers/node for Node). There is no https://in.layers.com/sdk.js drop-in snippet.

Custom domain

For ad-blocker resilience, configure a custom domain (Custom domain) — events.yourdomain.com CNAME to in.layers.com. The SDK supports a baseUrl override:

new LayersClient({
  apiKey: 'unused',
  appId: 'app_xxx',
  environment: 'production',
  baseUrl: 'https://events.yourdomain.com',
});

Edge & geo enrichment

Geo, IP, and user-agent details are resolved at the edge and merged onto the event payload before storage, so your SDK does not need to provide them.

The SDK ingest is hosted in the US; latency scales with distance from the US region.

On this page