GoodMemGoodMem
ReferenceAPIREST APIUsers

Get user by email address

GET /v1/users/email/{email}: Returns a user selected by exact email address after applying READ_USER authority.

GET
/v1/users/email/{email}

Returns a user selected by exact email address after applying READ_USER authority. includeDeleted permits an authorized caller to inspect a permanent tombstone; it does not grant additional authority. Missing and unauthorized matches both return 404 so this guessable identifier cannot reveal whether a user exists.

Authorization

ApiKeyAuth
headerx-api-key<token>

Path Parameters

email*string

URL-encoded email address

Query Parameters

includeDeleted?boolean

Permit an authorized read of a permanent tombstone

Defaultfalse

Header Parameters

GoodMem-Timeout-Ms?integer

Optional waiting budget in milliseconds, measured from REST servlet ingress and shared across all internal gRPC calls. Supply one decimal integer from 1 to 86400000. Omission adds no deadline. Existing shorter deadlines still apply. Expiry returns HTTP 504 before streaming starts; after streaming starts, no successful completion event is sent. Use SSE or opt into GoodMem-Stream-Terminal for an explicit terminal outcome. Retrieval work is cooperatively cancelled. An accepted mutation may still commit after timeout or disconnect; a failed response does not imply rollback.

Formatint64
Range1 <= value <= 86400000

Response Body

User returned

application/json
  1. response

A durable human user profile and its lifecycle metadata.

userId*string

OUTPUT_ONLY; immutable user UUID.

Formatuuid
Example"550e8400-e29b-41d4-a716-446655440000"
email*string

OUTPUT_ONLY; unique email address.

displayName?|

OUTPUT_ONLY; optional human-facing display name.

Example"John Doe"
username?|

OUTPUT_ONLY; optional unique username.

Example"johndoe"
labels*

OUTPUT_ONLY; mutable labels attached to the user principal. At most 20 entries; keys and values contain at most 255 characters; keys use [a-z0-9._-].

Propertiesproperties <= 20
Example
{  "team": "platform"}
enrollmentSummary?|

OUTPUT_ONLY; enrollment posture when requested and independently authorized.

Example
{  "openEnrollmentExpiresAt": 1786752000000}
deletedAt?|

OUTPUT_ONLY; permanent deletion time in milliseconds, absent while active.

Formatint64
Example1620200000000
deletedById?|

OUTPUT_ONLY; exact deleting actor UUID, absent while active.

Formatuuid
createdAt*integer

OUTPUT_ONLY; creation time in milliseconds since the epoch.

Formatint64
Example1620000000000
updatedAt*integer

OUTPUT_ONLY; most recent mutation time in milliseconds since the epoch.

Formatint64
Example1620100000000
createdById*string

OUTPUT_ONLY; exact creating actor UUID.

Formatuuid
updatedById*string

OUTPUT_ONLY; exact actor UUID for the most recent mutation.

Formatuuid
Example Request
curl -X GET 'https://your-goodmem-server.example.com/v1/users/email/[email protected]' \  -H 'GoodMem-Timeout-Ms: 30000'
Example Response
{  "userId": "550e8400-e29b-41d4-a716-446655440000",  "email": "[email protected]",  "displayName": "John Doe",  "username": "johndoe",  "labels": {    "team": "platform"  },  "enrollmentSummary": {    "openEnrollmentExpiresAt": 1786752000000  },  "deletedAt": 1620200000000,  "deletedById": "8ef578ad-7f1e-4656-b48b-b1b4a9aaa1cb",  "createdAt": 1620000000000,  "updatedAt": 1620100000000,  "createdById": "e13e432a-5323-4484-a91d-b5969bc564d9",  "updatedById": "d8bc6076-4141-4a88-80b9-0eb31643066f"}