Profiles

People

actor-service

Somebody with an account, at their username (people.md): their own posts and replies, who may quote them, the photos and videos they are tagged in, and what they show of their reposts. A person is made by signing up (auth-service), not here.

People

GET/people/

Those the viewer may see. Each a full profile, or, for one the viewer may only ask to follow, what a stranger is shown of it (restricted).

Who: Anyone, signed in or not

Parameters

  • startintegerin query
    How many to pass over. At least 0.
  • limitintegerin query
    The most to send. At least 0. 20 unless given.
  • qstringin query
    Words the name, the handle or the description holds. At most 100 characters.
  • orderingstringin query
    What they are ordered by. At most 15 characters. One of created_at, updated_at, enabled. updated_at unless given.
  • dirstringin query
    Which way the order runs. At most 4 characters. One of asc, desc. desc unless given.
  • disabledbooleanin query
    Disabled ones as well, for whoever may see them.
  • featuredbooleanin query
    Only the actors the installation features — what onboarding offers a new member to follow. Ordered most recently featured first unless the caller asks for an ordering; see the browse handlers.

Answers

  • 200
    OK
    object application/json
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 403
    the viewer may not list people

Request

curl "https://api.example.org/people/"

Answer · 200

{
  "data": [
    null
  ],
  "pagination": {
    "limit": 1,
    "offset": 1,
    "total": 1
  }
}

Change who may quote a person's posts

PATCH/people/{id}/quote-policy

For the posts that do not say.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The person's id.

Body application/json or application/x-www-form-urlencoded or multipart/form-data

  • quote_policystringrequired
    Who may quote their posts, when a post does not say: anyone, followers or nobody. At most 16 characters.

Answers

  • 200
    OK
    actor.PersonNode application/json
  • 400
    quote_policy_invalid, or not well formed
    Refusal application/json
  • 401
    no token, or one that has expired
  • 403
    the viewer may not change it
  • 404
    there is no such person

Request

curl -X PATCH "https://api.example.org/people/<id>/quote-policy" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "quote_policy": "string"
  }'

Answer · 200

{
  "access": "string",
  "alias": "string",
  "allow_download": false,
  "allow_follow_request": false,
  "archived_at": "2026-10-27T09:30:00Z",
  "author": {
    "alias": "string",
    "avatar_urls": {
      "key": null
    },
    "id": 42,
    "name": "string",
    "type": "string"
  },
  "authorized": {
    "add_follower": false,
    "administration": false,
    "audiences": [
      "string"
    ],
    "block_from_owner": false,
    "comment": false,
    "composers": [
      "string"
    ],
    "delete": false,
    "download": false,
    "edit": false,
    "hide": false,
    "invite": false,
    "like": false,
    "pin": false,
    "quote": false
  },
  "avatar_urls": {
    "key": {
      "size": null,
      "url": "https://example.org/"
    }
  },
  "body": "string",
  "cover_urls": {
    "key": {
      "size": null,
      "url": "https://example.org/"
    }
  },
  "created_at": "2026-10-27T09:30:00Z",
  "deleted_at": "2026-10-27T09:30:00Z",
  "editor": {
    "alias": "string",
    "avatar_urls": {
      "key": null
    },
    "id": 42,
    "name": "string",
    "type": "string"
  },
  "enabled": false,
  "featured_at": "2026-10-27T09:30:00Z",
  "features": [
    {
      "add_permissions": [
        null
      ],
      "composers": [
        null
      ],
      "enabled": false,
      "node_types": [
        null
      ],
      "optional": false,
      "ordering": 1,
      "service": "string"
    }
  ],
  "follower_count": 1,
  "id": 42,
  "is_admined_by_viewer": false,
  "is_blocked_by_viewer": false,
  "is_following_viewer": false,
  "is_invited": false,
  "is_leading_viewer": false,
  "language": "en",
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "string"
  },
  "person_pronouns": "string",
  "person_type": "string",
  "quote_policy": "string",
  "show_reposts_on_profile": false,
  "type": "string",
  "updated_at": "2026-10-27T09:30:00Z",
  "uri": "https://example.org/",
  "verified": false,
  "website_url": "https://example.org/"
}

Show reposts among a person's posts, or not

PATCH/people/{id}/reposts-on-profile

They are always in the Reposts tab of the profile.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The person's id.

Body application/json or application/x-www-form-urlencoded or multipart/form-data

  • show_reposts_on_profileboolean
    Whether what they repost is also among their profile's posts.

Answers

  • 200
    OK
    actor.PersonNode application/json
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    the viewer may not change it
  • 404
    there is no such person

Request

curl -X PATCH "https://api.example.org/people/<id>/reposts-on-profile" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "show_reposts_on_profile": false
  }'

Answer · 200

{
  "access": "string",
  "alias": "string",
  "allow_download": false,
  "allow_follow_request": false,
  "archived_at": "2026-10-27T09:30:00Z",
  "author": {
    "alias": "string",
    "avatar_urls": {
      "key": null
    },
    "id": 42,
    "name": "string",
    "type": "string"
  },
  "authorized": {
    "add_follower": false,
    "administration": false,
    "audiences": [
      "string"
    ],
    "block_from_owner": false,
    "comment": false,
    "composers": [
      "string"
    ],
    "delete": false,
    "download": false,
    "edit": false,
    "hide": false,
    "invite": false,
    "like": false,
    "pin": false,
    "quote": false
  },
  "avatar_urls": {
    "key": {
      "size": null,
      "url": "https://example.org/"
    }
  },
  "body": "string",
  "cover_urls": {
    "key": {
      "size": null,
      "url": "https://example.org/"
    }
  },
  "created_at": "2026-10-27T09:30:00Z",
  "deleted_at": "2026-10-27T09:30:00Z",
  "editor": {
    "alias": "string",
    "avatar_urls": {
      "key": null
    },
    "id": 42,
    "name": "string",
    "type": "string"
  },
  "enabled": false,
  "featured_at": "2026-10-27T09:30:00Z",
  "features": [
    {
      "add_permissions": [
        null
      ],
      "composers": [
        null
      ],
      "enabled": false,
      "node_types": [
        null
      ],
      "optional": false,
      "ordering": 1,
      "service": "string"
    }
  ],
  "follower_count": 1,
  "id": 42,
  "is_admined_by_viewer": false,
  "is_blocked_by_viewer": false,
  "is_following_viewer": false,
  "is_invited": false,
  "is_leading_viewer": false,
  "language": "en",
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "string"
  },
  "person_pronouns": "string",
  "person_type": "string",
  "quote_policy": "string",
  "show_reposts_on_profile": false,
  "type": "string",
  "updated_at": "2026-10-27T09:30:00Z",
  "uri": "https://example.org/",
  "verified": false,
  "website_url": "https://example.org/"
}

Remove a person as spam

POST/people/{id}/spam

A moderator's decision (roadmap row 102): everything of it destroyed at once, with no thirty days, and recorded as removed-as-spam with who decided. Administrators and super administrators; never an administrator's or a super administrator's account, nor one's own. Queued, and done by the sweeper.

Who: An administrator

Parameters

  • idintegerrequiredin path
    The profile's id.

Answers

  • 200
    purged or queued already
    PurgeQueued application/json
  • 202
    queued
    PurgeQueued application/json
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    the viewer is not an administrator
  • 409
    it cannot be removed (administrator, yourself, not_found, wrong_type); nothing was queued
    PurgeRefused application/json

Request

curl -X POST "https://api.example.org/people/<id>/spam" \
  -H "Authorization: Bearer $TOKEN"

Answer · 200

{
  "batch_id": "string",
  "queued": 1,
  "skipped": 1
}

Tag somebody in a photo or a video

POST/people/{id}/tags/{post_id}

For the post's author. Only a person here may be tagged, and as they chose: at once, each approved first (the default), or not at all. Anybody may tag themselves. At most 20 people in one post.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The person's id.
  • post_idintegerrequiredin path
    The photo's or the video's id.

Answers

  • 201
    tagged
  • 202
    tagged, waiting for their approval
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    the viewer did not write the post
  • 404
    no such person, or no such photo or video the viewer can see
  • 409
    not_taggable, they do not allow it or are not here; too_many, the post has as many people as it may
    Refusal application/json

Request

curl -X POST "https://api.example.org/people/<id>/tags/<post_id>" \
  -H "Authorization: Bearer $TOKEN"

Approve being tagged

PUT/people/{id}/tags/{post_id}

For the person tagged.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The person's id.
  • post_idintegerrequiredin path
    The photo's or the video's id.

Answers

  • 200
    approved, or it was already
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    the viewer is not the person tagged
  • 404
    no such tag, or no such photo or video the viewer can see

Request

curl -X PUT "https://api.example.org/people/<id>/tags/<post_id>" \
  -H "Authorization: Bearer $TOKEN"

Take somebody out of a photo or a video

DELETE/people/{id}/tags/{post_id}

For the person, declining or changing their mind, and for the post's author.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The person's id.
  • post_idintegerrequiredin path
    The photo's or the video's id.

Answers

  • 204
    removed, or there was nothing to remove
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    the viewer is neither the person nor the post's author
  • 404
    there is no such photo or video the viewer can see

Request

curl -X DELETE "https://api.example.org/people/<id>/tags/<post_id>" \
  -H "Authorization: Bearer $TOKEN"

One person

GET/people/{username}

By their username. To somebody they are not open to, but who may ask to follow them, what a stranger is shown of them.

Who: Anyone, signed in or not

Parameters

  • usernamestringrequiredin path
    Their username. At most 100 characters.

Answers

  • 200
    them, or what a stranger is shown of them (LimitedActor)
    actor.PersonNode application/json
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 403
    the viewer may not see them
  • 404
    there is no such person

Request

curl "https://api.example.org/people/<username>"

Answer · 200

{
  "access": "string",
  "alias": "string",
  "allow_download": false,
  "allow_follow_request": false,
  "archived_at": "2026-10-27T09:30:00Z",
  "author": {
    "alias": "string",
    "avatar_urls": {
      "key": null
    },
    "id": 42,
    "name": "string",
    "type": "string"
  },
  "authorized": {
    "add_follower": false,
    "administration": false,
    "audiences": [
      "string"
    ],
    "block_from_owner": false,
    "comment": false,
    "composers": [
      "string"
    ],
    "delete": false,
    "download": false,
    "edit": false,
    "hide": false,
    "invite": false,
    "like": false,
    "pin": false,
    "quote": false
  },
  "avatar_urls": {
    "key": {
      "size": null,
      "url": "https://example.org/"
    }
  },
  "body": "string",
  "cover_urls": {
    "key": {
      "size": null,
      "url": "https://example.org/"
    }
  },
  "created_at": "2026-10-27T09:30:00Z",
  "deleted_at": "2026-10-27T09:30:00Z",
  "editor": {
    "alias": "string",
    "avatar_urls": {
      "key": null
    },
    "id": 42,
    "name": "string",
    "type": "string"
  },
  "enabled": false,
  "featured_at": "2026-10-27T09:30:00Z",
  "features": [
    {
      "add_permissions": [
        null
      ],
      "composers": [
        null
      ],
      "enabled": false,
      "node_types": [
        null
      ],
      "optional": false,
      "ordering": 1,
      "service": "string"
    }
  ],
  "follower_count": 1,
  "id": 42,
  "is_admined_by_viewer": false,
  "is_blocked_by_viewer": false,
  "is_following_viewer": false,
  "is_invited": false,
  "is_leading_viewer": false,
  "language": "en",
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "string"
  },
  "person_pronouns": "string",
  "person_type": "string",
  "quote_policy": "string",
  "show_reposts_on_profile": false,
  "type": "string",
  "updated_at": "2026-10-27T09:30:00Z",
  "uri": "https://example.org/",
  "verified": false,
  "website_url": "https://example.org/"
}

Change a person's profile

PATCH/people/{username}

Who: Somebody signed in

Parameters

  • usernameintegerrequiredin path
    Here, the id. The person's id.

Body application/x-www-form-urlencoded or multipart/form-data

  • bodystring
    What they say of themselves. At most 500 characters.
  • languagestring
    The language this person usually posts in, as a BCP 47 tag. It is what the composer starts on; each post can say otherwise. At most 12 characters.
  • namestringrequired
    Their name. At most 64 characters.
  • person_pronounsstring
    Their pronouns, as free text: she/her, iel. At most 50 characters.
  • website_urlstring (uri)
    One link on the profile. A bare example.com is taken as https. At most 255 characters.

Answers

  • 200
    OK
    actor.PersonNode application/json
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    the viewer may not change it
  • 404
    there is no such person

Request

curl -X PATCH "https://api.example.org/people/<username>" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "body=string" \
  --data-urlencode "language=en" \
  --data-urlencode "name=string" \
  --data-urlencode "person_pronouns=string" \
  --data-urlencode "website_url=https://example.org/"

Answer · 200

{
  "access": "string",
  "alias": "string",
  "allow_download": false,
  "allow_follow_request": false,
  "archived_at": "2026-10-27T09:30:00Z",
  "author": {
    "alias": "string",
    "avatar_urls": {
      "key": null
    },
    "id": 42,
    "name": "string",
    "type": "string"
  },
  "authorized": {
    "add_follower": false,
    "administration": false,
    "audiences": [
      "string"
    ],
    "block_from_owner": false,
    "comment": false,
    "composers": [
      "string"
    ],
    "delete": false,
    "download": false,
    "edit": false,
    "hide": false,
    "invite": false,
    "like": false,
    "pin": false,
    "quote": false
  },
  "avatar_urls": {
    "key": {
      "size": null,
      "url": "https://example.org/"
    }
  },
  "body": "string",
  "cover_urls": {
    "key": {
      "size": null,
      "url": "https://example.org/"
    }
  },
  "created_at": "2026-10-27T09:30:00Z",
  "deleted_at": "2026-10-27T09:30:00Z",
  "editor": {
    "alias": "string",
    "avatar_urls": {
      "key": null
    },
    "id": 42,
    "name": "string",
    "type": "string"
  },
  "enabled": false,
  "featured_at": "2026-10-27T09:30:00Z",
  "features": [
    {
      "add_permissions": [
        null
      ],
      "composers": [
        null
      ],
      "enabled": false,
      "node_types": [
        null
      ],
      "optional": false,
      "ordering": 1,
      "service": "string"
    }
  ],
  "follower_count": 1,
  "id": 42,
  "is_admined_by_viewer": false,
  "is_blocked_by_viewer": false,
  "is_following_viewer": false,
  "is_invited": false,
  "is_leading_viewer": false,
  "language": "en",
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "string"
  },
  "person_pronouns": "string",
  "person_type": "string",
  "quote_policy": "string",
  "show_reposts_on_profile": false,
  "type": "string",
  "updated_at": "2026-10-27T09:30:00Z",
  "uri": "https://example.org/",
  "verified": false,
  "website_url": "https://example.org/"
}

Destroy many persons for good

POST/people/purge-batch

As purging one, for up to 500 at once.

Who: A super administrator, who has just proved who they are again

Body application/json

  • confirmstringrequired
    PURGE and how many there are (PURGE 12), typed, to say it is meant. At most 20 characters.
  • idslist of integerrequired
    The profiles: up to 500. At least 1 of them. At most 500 of them.

Answers

  • 200
    purged or queued already
    PurgeQueued application/json
  • 202
    queued
    PurgeQueued application/json
  • 400
    confirmation_mismatch: confirm does not name how many there are; or not well formed, without a body
    Refusal application/json
  • 401
    no token, or one that has expired
  • 403
    step_up_required: the viewer must prove who they are again first; or the viewer may not, without a body
    Refusal application/json
  • 409
    some cannot be purged; nothing was queued
    PurgeRefused application/json

Request

curl -X POST "https://api.example.org/people/purge-batch" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "confirm": "string",
    "ids": [
      1
    ]
  }'

Answer · 200

{
  "batch_id": "string",
  "queued": 1,
  "skipped": 1
}

How far a purge has got

GET/people/purge-batch/{batch_id}

Asked every few seconds. Changes nothing, and needs no proof.

Who: A super administrator

Parameters

  • batch_idstring (uuid)requiredin path
    What the purge request answered as batch_id.

Answers

  • 200
    OK
    PurgeProgress application/json
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    the viewer is not a super administrator
  • 404
    there is no such purge

Request

curl "https://api.example.org/people/purge-batch/<batch_id>" \
  -H "Authorization: Bearer $TOKEN"

Answer · 200

{
  "batch_id": "string",
  "done": 1,
  "failed": 1,
  "items": [
    {
      "alias": "string",
      "error": "string",
      "id": 42,
      "status": "string"
    }
  ],
  "queued": 1,
  "total": 1
}

Who is in a photo or a video

GET/people/tagged-in/{post_id}

In the order they were tagged. A tag waiting for the person's approval is listed only for them and the post's author, with pending.

Who: Anyone, signed in or not

Parameters

  • post_idintegerrequiredin path
    The photo's or the video's id.

Answers

  • 200
    OK
    object application/json
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 404
    there is no such photo or video the viewer can see

Request

curl "https://api.example.org/people/tagged-in/<post_id>"

Answer · 200

{
  "data": [
    {
      "pending": false,
      "person": null
    }
  ]
}

As every profile

The same on every kind, at this kind’s address. What each does is under Profiles.

Change who may see it

PATCH/people/{id}/access

And whether people it is not open to may ask to follow it.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The person's id.

Body application/x-www-form-urlencoded or multipart/form-data

  • accessstringrequired
    Who may see their profile: public, registered, followers, leaders, mutuals or myself. One of public, registered, followers, leaders, mutuals, myself. public unless given.
  • allow_follow_requestboolean
    Whether people it is not open to may ask to follow them.

Answers

  • 200
    OK
    actor.PersonNode application/json
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    the viewer may not change it
  • 404
    there is no such profile

Request

curl -X PATCH "https://api.example.org/people/<id>/access" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "access=public" \
  --data-urlencode "allow_follow_request=false"

Answer · 200

{
  "access": "string",
  "alias": "string",
  "allow_download": false,
  "allow_follow_request": false,
  "archived_at": "2026-10-27T09:30:00Z",
  "author": {
    "alias": "string",
    "avatar_urls": {
      "key": null
    },
    "id": 42,
    "name": "string",
    "type": "string"
  },
  "authorized": {
    "add_follower": false,
    "administration": false,
    "audiences": [
      "string"
    ],
    "block_from_owner": false,
    "comment": false,
    "composers": [
      "string"
    ],
    "delete": false,
    "download": false,
    "edit": false,
    "hide": false,
    "invite": false,
    "like": false,
    "pin": false,
    "quote": false
  },
  "avatar_urls": {
    "key": {
      "size": null,
      "url": "https://example.org/"
    }
  },
  "body": "string",
  "cover_urls": {
    "key": {
      "size": null,
      "url": "https://example.org/"
    }
  },
  "created_at": "2026-10-27T09:30:00Z",
  "deleted_at": "2026-10-27T09:30:00Z",
  "editor": {
    "alias": "string",
    "avatar_urls": {
      "key": null
    },
    "id": 42,
    "name": "string",
    "type": "string"
  },
  "enabled": false,
  "featured_at": "2026-10-27T09:30:00Z",
  "features": [
    {
      "add_permissions": [
        null
      ],
      "composers": [
        null
      ],
      "enabled": false,
      "node_types": [
        null
      ],
      "optional": false,
      "ordering": 1,
      "service": "string"
    }
  ],
  "follower_count": 1,
  "id": 42,
  "is_admined_by_viewer": false,
  "is_blocked_by_viewer": false,
  "is_following_viewer": false,
  "is_invited": false,
  "is_leading_viewer": false,
  "language": "en",
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "string"
  },
  "person_pronouns": "string",
  "person_type": "string",
  "quote_policy": "string",
  "show_reposts_on_profile": false,
  "type": "string",
  "updated_at": "2026-10-27T09:30:00Z",
  "uri": "https://example.org/",
  "verified": false,
  "website_url": "https://example.org/"
}

Archive a person

POST/people/{id}/archive

For good, and nothing is destroyed (account-lifecycle.md).

Who: Somebody signed in, who has just proved who they are again

Parameters

  • idintegerrequiredin path
    The profile's id.

Answers

  • 200
    archived
  • 204
    archived already, or being deleted
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    step_up_required: the viewer must prove who they are again first; or the viewer may not, without a body
    Refusal application/json
  • 404
    there is no such profile

Request

curl -X POST "https://api.example.org/people/<id>/archive" \
  -H "Authorization: Bearer $TOKEN"

What deleting a person would take with it

GET/people/{id}/deletion-counts

For the Danger zone, for whoever may delete it.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The profile's id.

Answers

  • 200
    OK
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    the viewer may not delete it
  • 404
    there is no such profile

Request

curl "https://api.example.org/people/<id>/deletion-counts" \
  -H "Authorization: Bearer $TOKEN"

Answer · 200

{
  "followers": 1,
  "following": 1,
  "groups_administered": 1,
  "member_since": "string",
  "posts": 1,
  "replies": 1
}

Change whether new photos and videos may be downloaded

PATCH/people/{id}/download-default

What a post starts with; each post can say otherwise.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The profile's id.

Body application/json or application/x-www-form-urlencoded or multipart/form-data

  • allowboolean
    Whether its new photos and videos start out downloadable.

Answers

  • 200
    OK
    actor.PersonNode application/json
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    the viewer may not change it
  • 404
    there is no such profile

Request

curl -X PATCH "https://api.example.org/people/<id>/download-default" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "allow": false
  }'

Answer · 200

{
  "access": "string",
  "alias": "string",
  "allow_download": false,
  "allow_follow_request": false,
  "archived_at": "2026-10-27T09:30:00Z",
  "author": {
    "alias": "string",
    "avatar_urls": {
      "key": null
    },
    "id": 42,
    "name": "string",
    "type": "string"
  },
  "authorized": {
    "add_follower": false,
    "administration": false,
    "audiences": [
      "string"
    ],
    "block_from_owner": false,
    "comment": false,
    "composers": [
      "string"
    ],
    "delete": false,
    "download": false,
    "edit": false,
    "hide": false,
    "invite": false,
    "like": false,
    "pin": false,
    "quote": false
  },
  "avatar_urls": {
    "key": {
      "size": null,
      "url": "https://example.org/"
    }
  },
  "body": "string",
  "cover_urls": {
    "key": {
      "size": null,
      "url": "https://example.org/"
    }
  },
  "created_at": "2026-10-27T09:30:00Z",
  "deleted_at": "2026-10-27T09:30:00Z",
  "editor": {
    "alias": "string",
    "avatar_urls": {
      "key": null
    },
    "id": 42,
    "name": "string",
    "type": "string"
  },
  "enabled": false,
  "featured_at": "2026-10-27T09:30:00Z",
  "features": [
    {
      "add_permissions": [
        null
      ],
      "composers": [
        null
      ],
      "enabled": false,
      "node_types": [
        null
      ],
      "optional": false,
      "ordering": 1,
      "service": "string"
    }
  ],
  "follower_count": 1,
  "id": 42,
  "is_admined_by_viewer": false,
  "is_blocked_by_viewer": false,
  "is_following_viewer": false,
  "is_invited": false,
  "is_leading_viewer": false,
  "language": "en",
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "string"
  },
  "person_pronouns": "string",
  "person_type": "string",
  "quote_policy": "string",
  "show_reposts_on_profile": false,
  "type": "string",
  "updated_at": "2026-10-27T09:30:00Z",
  "uri": "https://example.org/",
  "verified": false,
  "website_url": "https://example.org/"
}

Turn a profile on or off

PATCH/people/{id}/enabled

Reversible, site administrators only. Off, it is out of sight and may not act; nothing is deleted.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The profile's id.

Body application/json

  • enabledbooleanrequired
    Whether it is shown and may act. Off, it is out of sight until it is turned on again; nothing is deleted.

Answers

  • 200
    done
  • 204
    it was so already
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    the viewer may not
  • 404
    there is no such profile
  • 409
    last_super_administrator
    Refusal application/json

Request

curl -X PATCH "https://api.example.org/people/<id>/enabled" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "enabled": false
  }'

Feature a profile, or stop

PATCH/people/{id}/featured

What onboarding offers new members to follow. Super administrators only.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The profile's id.

Body application/json

  • featuredbooleanrequired
    Whether onboarding offers it to follow.

Answers

  • 200
    done
  • 204
    it was so already
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    the viewer may not
  • 404
    there is no such profile
  • 409
    not_featurable: it is disabled, archived or deleted
    Refusal application/json

Request

curl -X PATCH "https://api.example.org/people/<id>/featured" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "featured": false
  }'

Change what may be posted on it

PATCH/people/{id}/features

Each kind of post, on or off, and who may add it (permissions.md).

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The person's id.

Body application/json

  • featureslist of PersonFeatureRequestrequired
    Each feature as it is to be. An empty list goes back to the installation's defaults.

Answers

  • 200
    OK
    actor.PersonNode application/json
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    the viewer may not change it
  • 404
    there is no such profile

Request

curl -X PATCH "https://api.example.org/people/<id>/features" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "features": [
      {
        "add_permissions": [
          null
        ],
        "composers": [
          "string"
        ],
        "enabled": false,
        "node_types": [
          "string"
        ],
        "optional": false,
        "ordering": 1,
        "service": "string"
      }
    ]
  }'

Answer · 200

{
  "access": "string",
  "alias": "string",
  "allow_download": false,
  "allow_follow_request": false,
  "archived_at": "2026-10-27T09:30:00Z",
  "author": {
    "alias": "string",
    "avatar_urls": {
      "key": null
    },
    "id": 42,
    "name": "string",
    "type": "string"
  },
  "authorized": {
    "add_follower": false,
    "administration": false,
    "audiences": [
      "string"
    ],
    "block_from_owner": false,
    "comment": false,
    "composers": [
      "string"
    ],
    "delete": false,
    "download": false,
    "edit": false,
    "hide": false,
    "invite": false,
    "like": false,
    "pin": false,
    "quote": false
  },
  "avatar_urls": {
    "key": {
      "size": null,
      "url": "https://example.org/"
    }
  },
  "body": "string",
  "cover_urls": {
    "key": {
      "size": null,
      "url": "https://example.org/"
    }
  },
  "created_at": "2026-10-27T09:30:00Z",
  "deleted_at": "2026-10-27T09:30:00Z",
  "editor": {
    "alias": "string",
    "avatar_urls": {
      "key": null
    },
    "id": 42,
    "name": "string",
    "type": "string"
  },
  "enabled": false,
  "featured_at": "2026-10-27T09:30:00Z",
  "features": [
    {
      "add_permissions": [
        null
      ],
      "composers": [
        null
      ],
      "enabled": false,
      "node_types": [
        null
      ],
      "optional": false,
      "ordering": 1,
      "service": "string"
    }
  ],
  "follower_count": 1,
  "id": 42,
  "is_admined_by_viewer": false,
  "is_blocked_by_viewer": false,
  "is_following_viewer": false,
  "is_invited": false,
  "is_leading_viewer": false,
  "language": "en",
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "string"
  },
  "person_pronouns": "string",
  "person_type": "string",
  "quote_policy": "string",
  "show_reposts_on_profile": false,
  "type": "string",
  "updated_at": "2026-10-27T09:30:00Z",
  "uri": "https://example.org/",
  "verified": false,
  "website_url": "https://example.org/"
}

Destroy a person for good

DELETE/people/{id}/purge

Everything of it, at once and with no thirty days. Super administrators only, never on their own profile. Queued, and done by the sweeper.

Who: A super administrator, who has just proved who they are again

Parameters

  • idintegerrequiredin path
    The profile's id.

Answers

  • 200
    purged or queued already
    PurgeQueued application/json
  • 202
    queued
    PurgeQueued application/json
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    step_up_required: the viewer must prove who they are again first; or the viewer may not, without a body
    Refusal application/json
  • 409
    it cannot be purged; nothing was queued
    PurgeRefused application/json

Request

curl -X DELETE "https://api.example.org/people/<id>/purge" \
  -H "Authorization: Bearer $TOKEN"

Answer · 200

{
  "batch_id": "string",
  "queued": 1,
  "skipped": 1
}

Delete a person

DELETE/people/{username}

It is out of sight at once and destroyed after thirty days, unless it is restored before then.

Who: Somebody signed in, who has just proved who they are again

Parameters

  • usernameintegerrequiredin path
    Here, the id. The person's id.

Answers

  • 200
    it will be deleted
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 401
    no token, or one that has expired
  • 403
    step_up_required: the viewer must prove who they are again first; or the viewer may not, without a body
    Refusal application/json
  • 404
    there is no such profile

Request

curl -X DELETE "https://api.example.org/people/<username>" \
  -H "Authorization: Bearer $TOKEN"

Written by Claude, reviewed by Rastin Mehr · About this