---
title: "Capture redacted first-party native app diagnostics"
method: POST
path: "/api/v1/native/telemetry"
tags: ["Native"]
---

# Capture redacted first-party native app diagnostics

`POST /api/v1/native/telemetry`

## Request

- Base URL: `https://spoonjoy.app`
- URL: `https://spoonjoy.app/api/v1/native/telemetry`
- Auth: none required

## Headers

- `X-Request-Id` string

## Request body

- NativeTelemetryRequest
  - `event` 'bootstrap_failed' | 'bootstrap_offline' | 'app_intent_completed' | 'app_intent_failed' | 'auth_flow_started' | 'auth_flow_completed' | 'auth_flow_failed' | 'search_started' | 'search_completed' | 'search_failed' | 'settings_refresh_failed' | 'sync_failed', required: Constrained native diagnostic event name. Raw search text, error messages, and response bodies are not accepted.
  - `stage` string, nullable
  - `environment` 'local' | 'preview' | 'production' | 'null', nullable
  - `platform` 'ios' | 'macos' | 'null', nullable
  - `appVersion` string, nullable
  - `buildNumber` string, nullable
  - `route` string, nullable
  - `errorType` string, nullable
  - `requestId` string, nullable
  - `status` integer, nullable
  - `apiCode` string, nullable
  - `retry` string, nullable
  - `accountBound` boolean, nullable
  - `hasRenderableCacheContent` boolean, nullable
  - `recipes` integer, nullable
  - `cookbooks` integer, nullable
  - `shoppingItems` integer, nullable
  - `queuedMutations` integer, nullable
  - `intentName` string, nullable
  - `intentActionKind` string, nullable
  - `intentOutcome` string, nullable
  - `intentReturnsValue` boolean, nullable
  - `intentQueuedMutationId` string, nullable
  - `intentQueuedMutationKind` string, nullable
  - `intentOpensUrl` string, nullable
  - `authProvider` string, nullable
  - `authPhase` string, nullable
  - `authOutcome` string, nullable
  - `authDiagnosticCode` string, nullable
  - `authSessionState` string, nullable
  - `authCredentialPresent` boolean, nullable
  - `authIdentityTokenPresent` boolean, nullable
  - `authRawNoncePresent` boolean, nullable
  - `authEmailPresent` boolean, nullable
  - `authFullNamePresent` boolean, nullable
  - `authOAuthStatePresent` boolean, nullable
  - `authRedirectScheme` string, nullable
  - `authRedirectHost` string, nullable
  - `searchScope` 'all' | 'recipes' | 'cookbooks' | 'chefs' | 'shopping-list' | 'null', nullable: Canonical search scope. This field never contains search text.
  - `searchQueryLength` integer, nullable: Search query length only. The raw query is never accepted.
  - `searchResultCount` integer, nullable
  - `durationMilliseconds` integer, nullable

## Response `202`

Success

- NativeTelemetryEnvelope
  - `ok` unknown, required
  - `requestId` string, required
  - `data` NativeTelemetryData, required
    - `accepted` boolean, required

## Other responses

- `400`: Errors: invalid_json, validation_error
- `401`: Errors: invalid_token
- `405`: Errors: method_not_allowed
- `429`: Errors: rate_limited
- `500`: Errors: internal_error
- `503`: Errors: temporarily_unavailable

---

[API](https://skmtc.dev/spoonjoy/apis/spoonjoy-api.md) · [All operations](https://skmtc.dev/spoonjoy/apis/spoonjoy-api/llms.txt) · [OpenAPI document](https://skmtc.dev/spoonjoy/apis/spoonjoy-api/revisions/b96eb5d4697d?raw)
