Skip to main content
POST
/
users
Upsert user
curl --request POST \
  --url https://api.jeantechnologies.com/v1/users \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "user_id": "u_alice",
  "domain": "dating",
  "context": "32, NYC, looking for someone serious. Reads a lot, runs in the park, vegetarian.",
  "fields": {
    "age": 32,
    "location": "New York, NY"
  },
  "memory_ref": "jeanmemory://tenant/u_alice"
}
'
{
  "user_id": "u_alice",
  "domain": "dating",
  "schema_version": "dating.v3",
  "fields": {
    "age": 32,
    "location": "New York, NY",
    "relationship_goal": "serious"
  },
  "derived": {
    "attachment_style": "secure"
  },
  "embeddings": {
    "dating": {
      "dim": 1024,
      "version": "dating-2026-05-01"
    }
  },
  "last_enriched_at": "2023-11-07T05:31:56Z"
}

Documentation Index

Fetch the complete documentation index at: https://docs.jeanmemory.com/llms.txt

Use this file to discover all available pages before exploring further.

Use this when a user first enters your system. Send whatever context you have, in any form:
  • Free text in context (resume, intake transcript, profile blurb). The platform extracts fields against your domain schema.
  • Pre-structured fields when you already have typed values. Skips extraction.
  • memory_ref pointing at an external store you operate (Jean Memory, Mem0, or your own vector DB).
You can mix all three in one call. Anything in fields wins over anything extracted from context. For incremental updates later (a new chat message, a follow-up call), use POST /context instead so you don’t re-send the whole user.
curl https://api.jeantechnologies.com/v1/users \
  -H "Authorization: Bearer $JEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "user_id": "u_alice",
    "domain": "dating",
    "context": "32, NYC, looking for someone serious. Reads a lot, runs in the park, vegetarian.",
    "fields": { "location": "New York, NY" }
  }'

Example response

{
  "user_id": "u_alice",
  "domain": "dating",
  "schema_version": "dating.v3",
  "fields": {
    "age": 32,
    "location": "New York, NY",
    "relationship_goal": "serious"
  },
  "derived": {
    "attachment_style": "secure"
  },
  "embeddings": {
    "dating": { "dim": 1024, "version": "dating-2026-05-01" }
  },
  "last_enriched_at": "2026-05-17T22:01:09Z"
}
The embeddings object lists each domain head this user now has a vector for. After a single upsert in dating, only the dating head is populated. Other heads materialize lazily when the user is matched against in another domain.

Common pitfalls

Either the schema for this domain has no extraction rules yet (we co-design it during onboarding) or the context was too sparse to ground anything. Run GET /schema?domain=... to inspect what the platform is trying to extract.
Unrecognized field keys are stored under extras and not used for ranking. Add them to the schema at onboarding or strip them before sending.
POST /users replaces the user’s row entirely (subject to merging logic on provenance). For non-destructive incremental updates, use POST /context.

Authorizations

Authorization
string
header
required

API key issued by Jean Technologies. Contact the team for access.

Body

application/json
user_id
string
required

Client-supplied unique identifier.

Example:

"u_alice"

domain
string
required

Domain this user belongs to (e.g. dating, hiring).

Example:

"dating"

context
string

Free-text context. The platform extracts structured fields from it.

Example:

"32, NYC, looking for someone serious. Reads a lot, runs in the park, vegetarian."

fields
object

Pre-structured field values. Overrides any conflicting extraction.

Example:
{ "age": 32, "location": "New York, NY" }
memory_ref
string

Optional pointer to an external memory or context store the customer operates.

Example:

"jeanmemory://tenant/u_alice"

Response

User upserted

user_id
string
Example:

"u_alice"

domain
string
Example:

"dating"

schema_version
string
Example:

"dating.v3"

fields
object
Example:
{
"age": 32,
"location": "New York, NY",
"relationship_goal": "serious"
}
derived
object
Example:
{ "attachment_style": "secure" }
embeddings
object
Example:
{
"dating": {
"dim": 1024,
"version": "dating-2026-05-01"
}
}
last_enriched_at
string<date-time>