---
title: "Resolve or persist independently proven Portal subject ownership"
method: POST
path: "/portal-auth/identity/enroll"
---

# Resolve or persist independently proven Portal subject ownership

`POST /portal-auth/identity/enroll`

## Request

- Base URL: `https://api.gravityads.dev` (the document declares no server; this is the origin it was published from)
- URL: `https://api.gravityads.dev/portal-auth/identity/enroll`
- Auth: HTTP bearer

## Request body

- object
  - `provider` 'google' | 'github', required
  - `token` string, required
  - `nonce` string, required
  - `state_expires_at` integer, required
  - `member_authorization` string
  - `member_attestation` string
  - `subject_hash` string
  - `tenant_id` string
  - `user_id` string
  - `actor_id` string
  - `signup` object: Existing BFF-validated registration/landing selections; enrollment only

## Response `200`

Bound identity or explicit enrollment/link requirement

- object

## Other responses

- `403`: Independent exact-member proof required
- `409`: Inactive, revoked or conflicting ownership
- `503`: Identity store or provider verification unavailable

---

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