Skip to main content

/i/app_users/create

Endpoint

/i/app_users/create

Overview

Create one app user document programmatically (outside SDK ingest flow).

Authentication

  • API Key (parameter): api_key=YOUR_API_KEY
  • Auth Token (parameter): auth_token=YOUR_AUTH_TOKEN
  • Auth Token (header): countly-token: YOUR_AUTH_TOKEN

Permissions

  • Requires write-level access for app_id.

Request Parameters

ParameterTypeRequiredDescription
api_keyStringYes (or use auth_token)Dashboard API authentication key.
auth_tokenStringYes (or use api_key)Dashboard auth token.
app_idStringYesTarget app ID.
dataJSON String (Object)YesApp user payload. Must be valid JSON and non-empty.

data Object Structure

FieldTypeRequiredDescription
didStringYesDevice ID. Used to derive the user document _id.
uidStringNoUser ID. Auto-generated from app sequence when omitted.
_idStringNoIf provided, it must equal SHA-1 of app.key + did.
custom fieldsAny JSON typeNoAdditional user properties stored on the profile document.

Response

Success Response

{
"result": "User Created: {\"did\":\"device_1\",\"_id\":\"2f3e...\",\"uid\":\"1\"}"
}

Response Fields

FieldTypeDescription
resultStringCreation confirmation string that embeds the created user document JSON.

Error Responses

Status Code: 400 Bad Request

{
"result": "Missing parameter \"app_id\""
}

Status Code: 400 Bad Request

{
"result": "Missing parameter \"data\""
}

Status Code: 400 Bad Request

{
"result": "Could not parse parameter \"data\": {bad-json}"
}

Status Code: 400 Bad Request

{
"result": "Parameter \"data\" cannot be empty"
}

Status Code: 400 Bad Request

{
"result": "Provide device_id as did property for data"
}

Status Code: 400 Bad Request

{
"result": "App does not exist"
}

Status Code: 400 Bad Request

{
"result": "Based on app key and device_id, provided _id property should be 2f3e... Do not provide _id if you want api to use correct one"
}

Status Code: 400 Bad Request

{
"result": "Missing parameter \"api_key\" or \"auth_token\""
}

Behavior/Processing

Behavior Modes

ModeTriggerProcessing PathResponse Shape
Insert with generated UIDdata.uid not providedReads app, increments app seq, derives _id, inserts new user.Wrapped string: { "result": "User Created: {...}" }
Insert with provided UIDdata.uid providedReads app, validates/provides _id, inserts new user without sequence increment.Wrapped string: { "result": "User Created: {...}" }

Impact on Other Data

  • Updates countly.apps sequence (seq) when uid is auto-generated.
  • Triggers plugin listeners for app-user creation, which may write additional plugin data.

Database Collections

CollectionUsed forData touched by this endpoint
countly.membersAuthentication and permission validationReads member identity and app-level write permissions.
countly.appsApp validation and sequence generationReads app key for _id derivation and increments seq when generating uid.
countly.app_users{appId}User profile storageInserts the created app-user document (including did, uid, _id, and custom fields).

Examples

Example 1: Create app user

/i/app_users/create?api_key=YOUR_API_KEY&app_id=64b0ac10c2c3ce0012dd1001&data={"did":"device_1","name":"Alex"}
{
"result": "User Created: {\"did\":\"device_1\",\"name\":\"Alex\",\"_id\":\"2f3e...\",\"uid\":\"1\"}"
}

Limitations

  • did is mandatory.
  • _id cannot be arbitrary; if provided, it must match the derived hash.

Last Updated

2026-02-17