Auth
Profile
Your profile is the name, description and icon attached to your account id. You write it once; it becomes visible in every space you belong to, without a per-space write, to every contact who holds your profile key.
Reading your account
curl -s http://127.0.0.1:7001/v1/account
{ "id": "A8g1…",
"metadata": { "name": "Alice", "description": "writer, reader", "iconCid": "bafy…" } }
| Field | Meaning |
|---|---|
id |
the account identity — what other people put into ACL grants, mentions and one-to-one derivations |
metadata |
the profile as stored locally; omitted when never set |
any account
id is the value you exchange out of band — via a link, a QR code, or a shared space's member list — so that someone can add you by identity or open a direct chat with you.
Updating the profile
curl -s -X PUT http://127.0.0.1:7001/v1/account/metadata \
-d '{"name": "Alice", "description": "writer, reader, occasional debugger", "iconCid": "bafy…"}'
# → 204
any account set-metadata --name "Alice" [--description "..."] [--icon CID]
At least one of name / description / iconCid must be set; an all-empty body returns 400 request.missing_field. The SDK persists the bytes to the local tech space and pushes them to the identity repository, so the new profile reaches every space you are a member of. Read it back from a space's roster with GET /v1/spaces/:id/members/me.
The icon is a file CID — upload the image as a file first and pass its root CID.
Who can see it
The bytes pushed to the network are encrypted with an account-derived key that is shared with a contact only through an already-encrypted channel: a shared space's ACL metadata, or a one-to-one invite. A peer who has not received the key sees your account id only, with empty name / description / iconCid, until the key arrives and their background fetch resolves the profile.
Why it matters. Publishing a display name on a hosted service means the service knows it. Here the relay stores ciphertext; the set of people who can read your name is exactly the set of people you have shared data with.
On the receiving side this shows up in two places, both of which must tolerate an empty name:
| Surface | What it shows |
|---|---|
GET /v1/spaces/:id/members |
roster with roles; name / iconCid resolved from the same cache, with the join-time metadata as the baseline |
GET /v1/identities |
the account-global directory; rows surface id-only until resolved |
Note. Profile writes are account-wide, not per space. There is no per-space display name; the join-time
metadatapassed toPOST /v1/spaces/joinseeds what members see before your profile key resolves, and is superseded once it does.
Related
- Accounts — where the account id comes from.
- Identities — resolving other people's profiles.
- Members and roles — the per-space roster that carries profiles alongside rights.