Account Profile Methods
Client–relay protocol · Common method conventions · Account profiles and device certificates · Account and device lifecycle
profile.publish
profile.publish asks the current home relay to store a profile snapshot signed by the device used for this publication, for other accounts to read.
| Item | Convention |
|---|---|
| HTTP | PUT /meshline/v1/profile/publish |
| Session requirement | Device session |
| WSS | profile.publish |
| HTTP success status | 204 No Content |
Request Parameters
Parameters are the complete AccountProfile directly. It MUST belong to the calling account.
Response Object
None. Success means the relay has persisted the profile and the device certificate used to verify its signature.
Processing Rules
The relay MUST confirm publisher account and signing device through the device session and validate the document under Account profile.
It MUST check the complete profile against the AccountProfile 8 KiB Canonical JSON limit. Exceeding it returns request_too_large, without saving or replacing the stored profile.
Before acceptance, it MUST compare updated_at with local Unix seconds. A value beyond local time plus the allowed future deviation returns clock_skew, without replacement. Invalid time-field type or representation returns bad_request.
Compare profile recency for one account by updated_at: valid larger values replace current profiles; smaller values return stale_state. Equal values use actual acceptance order, with later accepted valid profiles replacing earlier ones.
profile.resolve
profile.resolve reads a target profile by complete account ID, without target authorization or a contact relationship. Client calls still require a valid device session solely for relay access and resource control.
| Item | Convention |
|---|---|
| HTTP | GET /meshline/v1/profile/resolve |
| Session requirement | Device session |
| WSS | profile.resolve |
| HTTP success status | 200 OK |
Request Parameters
| Field | Type | Required | Semantics and constraints |
|---|---|---|---|
account |
string | Yes | Target account ID whose profile is requested |
Response Object
Returns the profile and its signing device certificate:
| Field | Type | Required | Semantics and constraints |
|---|---|---|---|
profile |
AccountProfile | Yes | Target account's currently selected valid profile |
signer_certificate |
DeviceCertificate | Yes | Certificate used to verify the profile at publication acceptance; device validity was confirmed then and need not persist in current state at read time |
Callers MUST independently verify signer_certificate under DeviceCertificate signature and account-binding rules, use its device signing public key to verify the profile signature, and confirm profile.account matches the original request's account.
Processing and Errors
Missing account, explicit null, empty string, or malformed account values return bad_request.
All calls require valid device sessions. Missing, expired, or invalid sessions return unauthorized; incorrect mode returns forbidden.
The source first verifies the device session, then handles a local target under its current route or forwards the request containing target account as inter-relay profile.resolve params.
The destination MUST confirm it remains the target's current home relay. A known valid current route pointing elsewhere returns route_stale; undetermined current home returns target_not_local. Own-account and other-account queries both follow Target routing and refresh rules. Old profiles from a non-home relay MUST NOT serve as current authoritative responses.
A missing target profile returns not_found; otherwise return the complete profile and its signer certificate. Reading changes no profile or account state and grants neither complete-device-set queries nor message delivery permission.