@ -16,48 +16,117 @@ info:
title : Matrix Client-Server Profile API
title : Matrix Client-Server Profile API
version : 1.0 .0
version : 1.0 .0
paths:
paths:
"/profile/{userId}/ displayname ":
"/profile/{userId}/ {keyName} ":
put:
put:
summary : Set the user's display name.
x-changedInMatrixVersion:
"1.16": This endpoint now accepts a variable `keyName` parameter. Previously only `displayname` and `avatar_url` were accepted.
summary : Set a profile field for a user.
description : |-
description : |-
This API sets the given user's display name. You must have permission to
Set or update a profile field for a user. Must be authenticated with an
set this user's display name, e.g. you need to have their `access_token`.
access token authorised to make changes. Servers MAY impose size limits
operationId : setDisplayName
on individual fields, and the total profile MUST be under 64 KiB.
Servers MAY reject `null` values. Servers that accept `null` values SHOULD store
them rather than treating `null` as a deletion request. Clients that want to delete a
field, including its key and value, SHOULD use the `DELETE` endpoint instead.
operationId : setProfileField
security:
security:
- accessTokenQuery : [ ]
- accessTokenQuery : [ ]
- accessTokenBearer : [ ]
- accessTokenBearer : [ ]
parameters:
parameters:
- in : path
- in : path
name : userId
name : userId
description : The user whose display name to set.
description : The user whose profile field should be set.
required : true
required : true
example : "@alice:example.com"
example : "@alice:example.com"
schema:
schema:
type : string
type : string
- in : path
name : keyName
description : The name of the profile field to set. This MUST be either
`avatar_url`, `displayname`, or a custom field following the
[ Common Namespaced Identifier Grammar](/appendices/#common-namespaced-identifier-grammar).
required : true
example : "displayname"
schema:
type : string
pattern : '^(avatar_url|displayname|[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+)$'
requestBody:
requestBody:
description : A JSON object containing the property whose name matches
the `keyName` specified in the URL. See `additionalProperties` for
further details.
required : true
content:
content:
application/json:
application/json:
schema:
schema:
type : object
type : object
example : {
minProperties : 1
"displayname": "Alice Margatroid"
description : |
}
An object which contains exactly one property. The key
properties:
of that property MUST match the `keyName` specified in the URL.
displayname:
type : string
For `avatar_url`, the value MUST be an MXC URI string.
description : The new display name for this user.
description : The new display name information.
For `displayname`, the value MUST be a string.
required : true
For custom keys, any JSON type is allowed. Servers MAY not validate
these values, but clients SHOULD follow the format defined for that key.
additionalProperties : true
example : { "displayname": "Alice Wonderland" }
responses:
responses:
"200" :
"200" :
description : The display name was set.
description : The profile field was set.
content:
content:
application/json:
application/json:
schema:
schema:
type : object # empty json object
type : object # empty JSON object
examples:
examples:
response:
response:
value : {}
value : {}
"400" :
description : |
The input was invalid in some way. This can include one
of the following error codes:
- `M_BAD_JSON` : The provided value is not valid JSON.
- `M_MISSING_PARAM` : The required `keyName` property is
missing from the request body.
- `M_PROFILE_TOO_LARGE` : Storing the supplied value would
make the profile exceed its maximum allowed size of 64 KiB.
- `M_KEY_TOO_LARGE` : The supplied profile key exceeds the
maximum allowed key length of 255 bytes.
content:
application/json:
schema:
$ref : definitions/errors/error.yaml
examples:
bad_json:
value:
{
"errcode": "M_BAD_JSON" ,
"error": "Malformed JSON payload." ,
}
invalid_key:
value:
{
"errcode": "M_INVALID_PARAM" ,
"error": "Invalid profile key." ,
}
"403" :
description : The server is unwilling to perform the operation, either
due to insufficient permissions or because profile modifications
are disabled.
content:
application/json:
schema:
$ref : definitions/errors/error.yaml
examples:
forbidden:
value:
{
"errcode": "M_FORBIDDEN" ,
"error": "Profile modification is not permitted." ,
}
"429" :
"429" :
description : This request was rate-limited.
description : This request was rate-limited.
content:
content:
@ -67,163 +136,138 @@ paths:
tags:
tags:
- User data
- User data
get:
get:
summary : Get the user's display name.
x-changedInMatrixVersion:
description : |-
"1.16": This endpoint now accepts a variable `keyName` parameter. Previously only `displayname` and `avatar_url` were accepted.
Get the user's display name. This API may be used to fetch the user's
summary : Get a profile field for a user.
own displayname or to query the name of other users; either locally or
description : Get the value of a profile field for a user.
on remote homeservers.
operationId : getProfileField
operationId : getDisplayName
parameters:
parameters:
- in : path
- in : path
name : userId
name : userId
description : The user whose display name to get .
description : The user whose profile field should be returned .
required : true
required : true
example : "@alice:example.com"
example : "@alice:example.com"
schema:
schema:
type : string
type : string
- in : path
name : keyName
description : The name of the profile field to retrieve.
required : true
example : "displayname"
schema:
type : string
pattern : '^(avatar_url|displayname|[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+)$'
responses:
responses:
"200" :
"200" :
description : The display name for this user.
description : The profile field value was retrieved .
content:
content:
application/json:
application/json:
schema:
schema:
type : object
type : object
properties:
description : |
displayname:
An object with one property, whose key matches the `keyName` specified
type : string
in the URL, and whose value is the current setting of that profile field.
description : The user's display name if they have set one, otherwise not
additionalProperties : true
present.
examples:
examples:
response:
response:
value : {
value : { "displayname": "Alice" }
"displayname": "Alice Margatroid"
}
"403" :
"403" :
x-addedInMatrixVersion : "1.12"
x-addedInMatrixVersion : "1.12"
description : The server is unwilling to disclose whether the user exists and/or
description : The server is unwilling to disclose whether the user
has a display name .
exists and/or has the specified profile field .
content:
content:
application/json:
application/json:
schema:
schema:
$ref : definitions/errors/error.yaml
$ref : definitions/errors/error.yaml
examples:
examples:
response:
response:
value : {
value:
"errcode": "M_FORBIDDEN" ,
{
"error": "Profile lookup is disabled on this homeserver"
"errcode": "M_FORBIDDEN" ,
}
"error": "Profile lookup is disabled on this homeserver" ,
}
"404" :
"404" :
description : There is no display name for this user or this user does not exist.
description : There is no profile field with this key for this user, or
the user does not exist.
tags:
tags:
- User data
- User data
"/profile/{userId}/avatar_url" :
delete:
put:
x-addedInMatrixVersion : "1.16"
summary : Set the user's avatar URL.
summary : Remove a profile field from a user.
description : |-
description : Remove a specific field from a user's profile.
This API sets the given user's avatar URL. You must have permission to
operationId : deleteProfileField
set this user's avatar URL, e.g. you need to have their `access_token`.
operationId : setAvatarUrl
security:
security:
- accessTokenQuery : [ ]
- accessTokenQuery : [ ]
- accessTokenBearer : [ ]
- accessTokenBearer : [ ]
parameters:
parameters:
- in : path
- in : path
name : userId
name : userId
description : The user whose avatar URL to set .
description : The user whose profile field should be deleted .
required : true
required : true
example : "@alice:example.com"
example : "@alice:example.com"
schema:
schema:
type : string
type : string
requestBody:
content:
application/json:
schema:
type : object
example : {
"avatar_url": "mxc://matrix.org/wefh34uihSDRGhw34"
}
properties:
avatar_url:
type : string
format : uri
description : The new avatar URL for this user.
description : The new avatar information.
required : true
responses:
"200" :
description : The avatar URL was set.
content:
application/json:
schema:
type : object # empty json object
examples:
response:
value : {}
"429" :
description : This request was rate-limited.
content:
application/json:
schema:
$ref : definitions/errors/rate_limited.yaml
tags:
- User data
get:
summary : Get the user's avatar URL.
description : |-
Get the user's avatar URL. This API may be used to fetch the user's
own avatar URL or to query the URL of other users; either locally or
on remote homeservers.
operationId : getAvatarUrl
parameters:
- in : path
- in : path
name : userId
name : keyName
description : The user whose avatar URL to get .
description : The name of the profile field to delete.
required : true
required : true
example : " @alice:example.com "
example : "displayname"
schema:
schema:
type : string
type : string
pattern : '^(avatar_url|displayname|[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+)$'
responses:
responses:
"200" :
"200" :
description : The avatar URL for this user .
description : The profile field was deleted or it doesn't exist.
content:
content:
application/json:
application/json:
schema:
schema:
type : object
type : object
properties:
avatar_url:
type : string
format : uri
description : The user's avatar URL if they have set one, otherwise not present.
examples:
examples:
response:
response:
value : {
value : {}
"avatar_url": "mxc://matrix.org/SDGdghriugerRg"
"400" :
}
description : The request is malformed, contains invalid JSON, or
specifies an invalid key.
content:
application/json:
schema:
$ref : definitions/errors/error.yaml
examples:
bad_json:
value:
{ "errcode": "M_BAD_JSON", "error": "Malformed request." }
invalid_key:
value:
{
"errcode": "M_INVALID_PARAM" ,
"error": "Invalid profile key." ,
}
"403" :
"403" :
x-addedInMatrixVersion : "1.12"
description : The user is not authorised to delete this profile field.
description : The server is unwilling to disclose whether the user exists and/or
has an avatar URL.
content:
content:
application/json:
application/json:
schema:
schema:
$ref : definitions/errors/error.yaml
$ref : definitions/errors/error.yaml
examples:
examples:
response:
forbidden:
value : {
value:
"errcode": "M_FORBIDDEN" ,
{
"error": "Profile lookup is disabled on this homeserver"
"errcode": "M_FORBIDDEN" ,
}
"error": "Profile deletion is not permitted." ,
"404" :
}
description : There is no avatar URL for this user or this user does not exist.
"429" :
description : This request was rate-limited.
content:
application/json:
schema:
$ref : definitions/errors/rate_limited.yaml
tags:
tags:
- User data
- User data
"/profile/{userId}" :
"/profile/{userId}" :
get:
get:
summary : Get this user's profile information.
summary : Get all profile information for a user .
description : |-
description : |-
Get the combined profile information for this user. This API may be used
Get the complete profile for a user.
to fetch the user's own profile information or other users; either
locally or on remote homeservers.
operationId : getUserProfile
operationId : getUserProfile
parameters:
parameters:
- in : path
- in : path
@ -243,45 +287,49 @@ paths:
properties:
properties:
avatar_url:
avatar_url:
type : string
type : string
format : uri
format : mx-mxc- uri
description : The user's avatar URL if they have set one, otherwise not present.
description : The user's avatar URL if they have set one, otherwise not present.
displayname:
displayname:
type : string
type : string
description : The user's display name if they have set one, otherwise not
description : The user's display name if they have set one, otherwise not
present.
present.
additionalProperties:
x-addedInMatrixVersion : "1.16"
description : Additional profile fields.
examples:
examples:
response:
response:
value : {
value:
"avatar_url": "mxc://matrix.org/SDGdghriugerRg" ,
{
"displayname": "Alice Margatroid"
"avatar_url": "mxc://matrix.org/SDGdghriugerRg" ,
}
"displayname": "Alice Margatroid" ,
"m.example_field": "custom_value" ,
}
"403" :
"403" :
x-addedInMatrixVersion : "1.2"
x-addedInMatrixVersion : "1.2"
description : The server is unwilling to disclose whether the user exists and/or
description : The server is unwilling to disclose whether the user
has profile information.
exists and/or has profile information.
content:
content:
application/json:
application/json:
schema:
schema:
$ref : definitions/errors/error.yaml
$ref : definitions/errors/error.yaml
examples:
examples:
response:
response:
value : {
value:
"errcode": "M_FORBIDDEN" ,
{
"error": "Profile lookup is disabled on this homeserver"
"errcode": "M_FORBIDDEN" ,
}
"error": "Profile lookup is disabled on this homeserver" ,
}
"404" :
"404" :
description : There is no profile information for this user or this user does not
description : There is no profile information for this user or this
exist.
user does not exist.
content:
content:
application/json:
application/json:
schema:
schema:
$ref : definitions/errors/error.yaml
$ref : definitions/errors/error.yaml
examples:
examples:
response:
response:
value : {
value:
"errcode": "M_NOT_FOUND" ,
{ "errcode": "M_NOT_FOUND", "error": "Profile not found" }
"error": "Profile not found"
}
tags:
tags:
- User data
- User data
servers:
servers: