Users
Other people: profiles by handle, and the posts they have published. Paths, scopes, request and response shapes.
Get a user by username
GET /public/v1/users/{username}
Scope profile.read — OAuth 2.1 token or personal access token.
Looks a user up by their handle, with or without a leading @. private: true means the account gates its content behind follow approval — its posts list will be empty for anyone it has not approved. A UUID in this position is rejected: this route takes handles only.
Path parameters
| Name | Type | Required | Notes |
|---|---|---|---|
username | string | yes | — |
Example
curl -X GET "https://api.mouve.it/public/v1/users/mouve" \
-H "Authorization: Bearer $MOUVE_TOKEN"Response 200
| Field | Type | Required | Notes |
|---|---|---|---|
id | string | yes | — |
username | string | yes | Handle without the leading @, as it appears in a permalink. |
display_name | string | null | yes | — |
avatar_url | string | null | yes | — |
bio | string | null | yes | — |
created_at | string | yes | ISO 8601 timestamp in UTC. |
verified | boolean | yes | — |
private | boolean | yes | The account gates its content behind follow approval. |
Errors
Beyond the shared responses:
| Status | Code |
|---|---|
400 | VALIDATION_FAILED |
List a user's posts
GET /public/v1/users/{username}/posts
Scope posts.read — OAuth 2.1 token or personal access token.
Newest first, cursor-paginated. Every row is visibility-checked against the authorizing user, so a private account you do not follow yields an empty page rather than an error — an empty page is not proof the account has never posted. Cursors are bound to the author id, so a handle change does not detach an in-flight cursor from its result set.
Path parameters
| Name | Type | Required | Notes |
|---|---|---|---|
username | string | yes | — |
Query parameters
| Name | Type | Required | Notes |
|---|---|---|---|
limit | integer | no | 1–100, defaults to 20 |
cursor | string | no | at most 512 characters |
Example
curl -X GET "https://api.mouve.it/public/v1/users/mouve/posts" \
-H "Authorization: Bearer $MOUVE_TOKEN"Response 200
| Field | Type | Required | Notes |
|---|---|---|---|
data | array of PublicPostDto | yes | — |
meta | object | yes | next_cursor is null on the last page. |
meta.next_cursor | string | null | yes | — |
Errors
Beyond the shared responses:
| Status | Code |
|---|---|
400 | VALIDATION_FAILED |
400 | INVALID_CURSOR |