---
search:
  tags:
    - Operations
    - POST
seo:
  description: >-
    Anonymous callers get a fresh app row with a chrm_app_* token in the
    response. Authenticated… Reference for the POST /app endpoint in the
    Charming API API.
sidebar:
  badge: POST
  label: Create an app (anonymous or authenticated upsert)
title: Create an app (anonymous or authenticated upsert)
type: openapi-operation
---
Anonymous callers get a fresh app row with a `chrm_app_*` token in the response. Authenticated callers (`chrm_user_*` or session) upsert by `(userId, manifestId)` — second POSTs with the same `manifest.id` overwrite the existing row in place and the response includes the same `id`. Use `PUT /app/{id}` for deliberate updates against a known id. Pass `pair: true` to mint a bound device_code in the same call.

<Operation source="reference" id="create-app" />

Found a bug or need a feature? [Tell us](/docs/capabilities/feedback) with `submit_feedback` or `POST /app/{id}/feedback`. Your feedback shapes what we build next.
