---
title: "Resolve a channel source to an end user (upsert — creates if not found)"
method: POST
path: "/v1/identity/resolve"
tags: ["identity"]
---

# Resolve a channel source to an end user (upsert — creates if not found)

`POST /v1/identity/resolve`

## Request body

- ResolveIdentityRequest
  - `channel` string, required
  - `external_id` string, required
  - `org_external_end_user_id` string, nullable

## Response `200`

Successful Response

- ResolveIdentityResponse
  - `end_user_id` string, required
  - `org_id` string, required
  - `is_new` boolean, required
  - `context_level` string, required
  - `display_name` string, nullable
  - `primary_email` string, nullable
  - `primary_phone` string, nullable
  - `org_external_end_user_id` string, nullable
  - `external_id_ignored` string, nullable

## Other responses

- `400` — Bad request
- `401` — Authentication required
- `422` — Validation Error

## Changes

> 3 revisions in range; 1 could not be searched.

- **2026-08-12** `5a5597ebb2d6` — 5 info
  - added the optional property `external_id_ignored` to the response with the `200` status
  - added the optional property `retry_after` to the response with the `400` status
  - added the optional property `retry_after` to the response with the `401` status
  - added the optional property `retryable` to the response with the `400` status
  - …1 more

[Change history](https://skmtc.dev/oneloop-hq/apis/feather-api/changes/v1/identity/resolve/post.md)

---

[API](https://skmtc.dev/oneloop-hq/apis/feather-api.md) · [All operations](https://skmtc.dev/oneloop-hq/apis/feather-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/oneloop-hq/feather-api/revisions/9cd7291d4228/schema)
