People

Profiles

actor-service

People, groups and events: reading and changing them, who may see them and what may be posted on them, their administrators, and deleting, archiving and purging them (account-lifecycle.md).

What profile an alias is

GET/actors/{alias}

Of any kind: what its own address begins with, and its id. The web app finds /@ana by it.

Who: Anyone, signed in or not

Parameters

  • aliasstringrequiredin path
    A profile's alias: ana, anahita-atrium, or ana@mastodon.social for somebody elsewhere.

Answers

Request

curl "https://api.example.org/actors/<alias>"

Answer · 200

{
  "alias": "string",
  "id": 42,
  "kind": "string"
}

Make an event

POST/events/

Its own, or hosted by a group whoever makes it administers.

Who: Somebody signed in

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

  • accessstring
    Who can see it. Anybody, unless it says otherwise. One of public, registered, followers.
  • addressstring
    Where it is held, when it is somewhere: an address as it is typed, kept on the event and shown to whoever is going. Not a place on the map, which is public. Every part is optional. At most 255 characters.
  • bodystring
    What it is about. At most 8000 characters.
  • capacityinteger
    How many may be going. 0, or left out, for no limit. At least 0. At most 100000.
  • citystring
    At most 100 characters.
  • countrystring
    At most 100 characters.
  • ends_atstringrequired
    At most 40 characters.
  • host_group_idinteger
    A group hosting it, which whoever makes the event must administer. Left out for an event that is its maker's own.
  • namestringrequired
    What it is called. At most 64 characters.
  • online_urlstring (uri)
    Where to join, when it is online. At most 512 characters.
  • open_to_host_followersboolean
    Whether everybody who follows the group hosting it may see that it is on and answer it. Means nothing on an event with no host.
  • postal_codestring
    At most 20 characters.
  • show_mapboolean
    Whether to show that address on a map. Off unless asked for: finding it means sending it to a mapping service, and an address may be somebody's home.
  • starts_atstringrequired
    When, as RFC 3339 with an offset: 2026-11-05T19:00:00-05:00. At most 40 characters.
  • state_provincestring
    At most 100 characters.
  • timezone_namestringrequired
    The zone those times were chosen in, as IANA names it. At most 64 characters.
  • website_urlstring (uri)
    One link. At most 255 characters.

Answers

  • 201
    Created
    ActorNode application/json
  • 400
    invalid_timezone, invalid_time, ends_before_start, too_long or already_over; or not well formed, without a body
    Refusal application/json
  • 401
    no token, or one that has expired
  • 403
    host_not_allowed: the viewer does not administer the group
    Refusal application/json
  • 404
    host_not_allowed: there is no such group
    Refusal application/json

Request

curl -X POST "https://api.example.org/events/" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "access": "public",
    "address": "string",
    "body": "string",
    "capacity": 1,
    "city": "string",
    "country": "string",
    "ends_at": "2026-10-27T09:30:00Z",
    "host_group_id": 42,
    "name": "string",
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "postal_code": "string",
    "show_map": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state_province": "string",
    "timezone_name": "string",
    "website_url": "https://example.org/"
  }'

Answer · 201

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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/"
}

One event

GET/events/{id}

To somebody it is not open to, but who may ask to follow it, what a stranger is shown of it.

Who: Anyone, signed in or not

Parameters

  • idintegerrequiredin path
    The profile's id.

Answers

  • 200
    it, or what a stranger is shown of it (LimitedActor)
    ActorNode 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 it
  • 404
    there is no such event

Request

curl "https://api.example.org/events/<id>"

Answer · 200

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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 an event

PATCH/events/{id}

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The event's id.

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

  • addressstring
    Where it is held, when it is somewhere: an address as it is typed, kept on the event and shown to whoever is going. Not a place on the map, which is public. Every part is optional. At most 255 characters.
  • bodystring
    What it is about. At most 8000 characters.
  • capacityinteger
    How many may be going. 0, or left out, for no limit. At least 0. At most 100000.
  • citystring
    At most 100 characters.
  • countrystring
    At most 100 characters.
  • ends_atstringrequired
    At most 40 characters.
  • namestringrequired
    What it is called. At most 64 characters.
  • online_urlstring (uri)
    Where to join, when it is online. At most 512 characters.
  • open_to_host_followersboolean
    Whether everybody who follows the group hosting it may see that it is on and answer it. Means nothing on an event with no host.
  • postal_codestring
    At most 20 characters.
  • show_mapboolean
    Whether to show that address on a map. Off unless asked for: finding it means sending it to a mapping service, and an address may be somebody's home.
  • starts_atstringrequired
    When, as RFC 3339 with an offset: 2026-11-05T19:00:00-05:00. At most 40 characters.
  • state_provincestring
    At most 100 characters.
  • timezone_namestringrequired
    The zone those times were chosen in, as IANA names it. At most 64 characters.
  • website_urlstring (uri)
    One link. At most 255 characters.

Answers

  • 200
    OK
    ActorNode application/json
  • 400
    invalid_timezone, invalid_time, ends_before_start or too_long; or not well formed, without a body
    Refusal application/json
  • 401
    no token, or one that has expired
  • 403
    the viewer may not change it
  • 404
    there is no such event

Request

curl -X PATCH "https://api.example.org/events/<id>" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "address": "string",
    "body": "string",
    "capacity": 1,
    "city": "string",
    "country": "string",
    "ends_at": "2026-10-27T09:30:00Z",
    "name": "string",
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "postal_code": "string",
    "show_map": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state_province": "string",
    "timezone_name": "string",
    "website_url": "https://example.org/"
  }'

Answer · 200

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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/"
}

Delete a event

DELETE/events/{id}

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

  • idintegerrequiredin path
    The profile'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/events/<id>" \
  -H "Authorization: Bearer $TOKEN"

Change who may see it

PATCH/events/{id}/access

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

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The profile's id.

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

  • accessstringrequired
    Who may see it: public, registered, followers or admins. One of public, registered, followers, admins. public unless given.
  • allow_follow_requestboolean
    Whether people it is not open to may ask to follow it.

Answers

  • 200
    OK
    ActorNode 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/events/<id>/access" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "access=public" \
  --data-urlencode "allow_follow_request=false"

Answer · 200

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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/"
}

A event's administrators

GET/events/{id}/admins/

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The group's or the event's id.
  • startintegerin query
    How many to pass over. At least 0.
  • limitintegerin query
    The most to send. At least 0. 20 unless given.
  • dirstringin query
    Which way the order runs. At most 4 characters. One of asc, desc. asc unless given.

Answers

  • 200
    OK
    object 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 see them
  • 404
    there is no such event

Request

curl "https://api.example.org/events/<id>/admins/" \
  -H "Authorization: Bearer $TOKEN"

Answer · 200

{
  "data": [
    {
      "access": "string",
      "alias": "string",
      "allow_download": false,
      "allow_follow_request": false,
      "archived_at": "2026-10-27T09:30:00Z",
      "author": {
        "alias": null,
        "avatar_urls": null,
        "id": null,
        "name": null,
        "type": null
      },
      "avatar_urls": {
        "key": null
      },
      "body": "string",
      "cover_urls": {
        "key": null
      },
      "created_at": "2026-10-27T09:30:00Z",
      "deleted_at": "2026-10-27T09:30:00Z",
      "enabled": false,
      "event": {
        "address": null,
        "cancelled_at": null,
        "capacity": null,
        "ends_at": null,
        "going_count": null,
        "has_address": null,
        "has_online_url": null,
        "host": null,
        "is_full": null,
        "maybe_count": null,
        "online_url": null,
        "open_to_host_followers": null,
        "starts_at": null,
        "state": null,
        "timezone_name": null,
        "viewer_rsvp": null
      },
      "featured_at": "2026-10-27T09:30:00Z",
      "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,
      "leader_count": 1,
      "name": "string",
      "origin_domain": "string",
      "quote_policy": "string",
      "show_reposts_on_profile": false,
      "type": "string",
      "uri": "https://example.org/",
      "verified": false,
      "website_url": "https://example.org/"
    }
  ]
}

Make somebody an administrator of a event

POST/events/{id}/admins/

By one of its administrators. Answers with them.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The group's or the event's id.

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

  • admin_idintegerrequired
    The person to make an administrator.

Answers

  • 201
    Created
    ActorNodeItem 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
  • 404
    there is no such event or person

Request

curl -X POST "https://api.example.org/events/<id>/admins/" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "admin_id=42"

Answer · 201

{
  "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"
  },
  "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",
  "enabled": false,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "featured_at": "2026-10-27T09:30:00Z",
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "quote_policy": "string",
  "show_reposts_on_profile": false,
  "type": "string",
  "uri": "https://example.org/",
  "verified": false,
  "website_url": "https://example.org/"
}

Remove an administrator of a event

DELETE/events/{id}/admins/{admin_id}

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The group's or the event's id.
  • admin_idintegerrequiredin path
    The administrator to remove.

Answers

  • 204
    removed
  • 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 event or administrator

Request

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

Archive a event

POST/events/{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/events/<id>/archive" \
  -H "Authorization: Bearer $TOKEN"

Who is going to an event, or may

GET/events/{id}/attendees/

Who: Anyone, signed in or not

Parameters

  • idintegerrequiredin path
    The event's id.
  • rsvpstringin query
    going or maybe. Going when left out. One of going, maybe.
  • startintegerin query
    How many to pass over. At least 0.
  • limitintegerin query
    The most to send: up to 100. At least 0. At most 100. 20 unless given.

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 see who is going
  • 404
    there is no such event

Request

curl "https://api.example.org/events/<id>/attendees/"

Answer · 200

{
  "data": [
    {
      "access": "string",
      "alias": "string",
      "allow_download": false,
      "allow_follow_request": false,
      "archived_at": "2026-10-27T09:30:00Z",
      "author": {
        "alias": null,
        "avatar_urls": null,
        "id": null,
        "name": null,
        "type": null
      },
      "avatar_urls": {
        "key": null
      },
      "body": "string",
      "cover_urls": {
        "key": null
      },
      "created_at": "2026-10-27T09:30:00Z",
      "deleted_at": "2026-10-27T09:30:00Z",
      "enabled": false,
      "event": {
        "address": null,
        "cancelled_at": null,
        "capacity": null,
        "ends_at": null,
        "going_count": null,
        "has_address": null,
        "has_online_url": null,
        "host": null,
        "is_full": null,
        "maybe_count": null,
        "online_url": null,
        "open_to_host_followers": null,
        "starts_at": null,
        "state": null,
        "timezone_name": null,
        "viewer_rsvp": null
      },
      "featured_at": "2026-10-27T09:30:00Z",
      "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,
      "leader_count": 1,
      "name": "string",
      "origin_domain": "string",
      "quote_policy": "string",
      "show_reposts_on_profile": false,
      "type": "string",
      "uri": "https://example.org/",
      "verified": false,
      "website_url": "https://example.org/"
    }
  ],
  "pagination": {
    "limit": 1,
    "offset": 1,
    "total": 1
  }
}

Call an event off

POST/events/{id}/cancel

It is kept, saying so. Answers with it.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The event's id.

Answers

  • 200
    OK
    ActorNode 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 does not look after it
  • 404
    there is no such event

Request

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

Answer · 200

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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/"
}

What deleting a event would take with it

GET/events/{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
    actor.GroupDeletionCounts 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 delete it
  • 404
    there is no such profile

Request

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

Answer · 200

{
  "admins": 1,
  "followers": 1,
  "member_since": "string",
  "posts": 1,
  "replies": 1
}

Turn a profile on or off

PATCH/events/{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

Request

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

Change what may be posted on it

PATCH/events/{id}/features

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

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The profile's id.

Body application/json

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

Answers

  • 200
    OK
    ActorNode 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/events/<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",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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/"
}

An event for a calendar

GET/events/{id}/ics

As iCalendar (RFC 5545), text/calendar, to add to one's own calendar.

Who: Anyone, signed in or not

Parameters

  • idintegerrequiredin path
    The event's id.

Answers

  • 200
    the event, as text/calendar
  • 400
    the request is not well formed, or a value in it is not one it may be
  • 403
    the viewer may not see it
  • 404
    there is no such event

Request

curl "https://api.example.org/events/<id>/ics"

Destroy a event for good

DELETE/events/{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/events/<id>/purge" \
  -H "Authorization: Bearer $TOKEN"

Answer · 200

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

Restore a deleted event

POST/events/{id}/restore

Within the thirty days. Answers with it.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The profile's id.

Answers

  • 200
    OK
    ActorNode 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
  • 404
    there is no such profile to restore

Request

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

Answer · 200

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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/"
}

Say going, or maybe

PUT/events/{id}/rsvp

Answers with the event.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The event's id.

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

  • rsvpstringrequired
    going or maybe. One of going, maybe.

Answers

  • 200
    OK
    ActorNode 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 go to it
  • 404
    there is no such event
  • 409
    event_full: every place is taken; maybe is still open; or rules_not_agreed: it is a group or an event with rules the viewer has not agreed to; tick each and agree (POST /groups|events/:id/rules/agree), then ask again
    Refusal application/json
  • 410
    event_closed: it is over or called off
    Refusal application/json

Request

curl -X PUT "https://api.example.org/events/<id>/rsvp" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "rsvp": "going"
  }'

Answer · 200

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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/"
}

Not going after all

DELETE/events/{id}/rsvp

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The event's id.

Answers

  • 204
    done
  • 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 event

Request

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

The rules of a event

GET/events/{id}/rules

What somebody agrees to, each ticked, before following it or answering it: at most ten, in order, with the version they are at and the version the viewer last agreed to. For whoever may see it, and for whoever it would let ask to follow.

Who: Anyone, signed in or not

Parameters

  • idintegerrequiredin path
    The profile's id.

Answers

  • 200
    OK
    actor.Rules 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 it
  • 404
    there is no such event

Request

curl "https://api.example.org/events/<id>/rules"

Answer · 200

{
  "agreed_version": 1,
  "items": [
    {
      "body": "string",
      "title": "string"
    }
  ],
  "updated_at": "2026-10-27T09:30:00Z",
  "version": 1
}

Set the rules of a event

PUT/events/{id}/rules

The rules as they are to be from now on, in order, at most ten; an empty list takes them away. Every change raises the version, so that whoever agreed before is asked again. For whoever may change it.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path

Body application/json

Answers

  • 200
    OK
    actor.Rules application/json
  • 400
    rules_invalid: more than ten, or one too long
    Refusal application/json
  • 401
    no token, or one that has expired
  • 403
    the viewer may not change it
  • 404
    there is no such event

Request

curl -X PUT "https://api.example.org/events/<id>/rules" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "body": "string",
        "title": "string"
      }
    ]
  }'

Answer · 200

{
  "agreed_version": 1,
  "items": [
    {
      "body": "string",
      "title": "string"
    }
  ],
  "updated_at": "2026-10-27T09:30:00Z",
  "version": 1
}

Agree to the rules of a event

POST/events/{id}/rules/agree

The viewer agreeing, each rule ticked, to the version they were shown.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path

Body application/json

  • versionintegerrequired

Answers

  • 204
    No Content
  • 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
  • 404
    there is no such event
  • 409
    rules_not_current: the rules changed since; read them again
    Refusal application/json

Request

curl -X POST "https://api.example.org/events/<id>/rules/agree" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "version": 1
  }'

The viewer's events

GET/events/mine

The ones they said going or maybe to, look after, or were invited to.

Who: Somebody signed in

Parameters

  • filterstringin query
    upcoming, past, hosting or invited. Upcoming when left out. One of upcoming, past, hosting, invited.
  • startintegerin query
    How many to pass over. At least 0.
  • limitintegerin query
    The most to send: up to 100. At least 0. At most 100. 20 unless given.

Answers

  • 200
    OK
    object 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

Request

curl "https://api.example.org/events/mine" \
  -H "Authorization: Bearer $TOKEN"

Answer · 200

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

Groups

GET/groups/

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 groups

Request

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

Answer · 200

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

Make a group

POST/groups/

Whoever makes it is its first administrator.

Who: Somebody signed in

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

  • bodystring
    What it says of itself. At most 500 characters.
  • enabledboolean
    Whether it is enabled. true unless given.
  • namestringrequired
    Its name. At most 64 characters.
  • website_urlstring (uri)
    One link on the profile. A bare example.com is taken as https. At most 255 characters.

Answers

  • 201
    Created
    ActorNode 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

Request

curl -X POST "https://api.example.org/groups/" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "body=string" \
  --data-urlencode "enabled=true" \
  --data-urlencode "name=string" \
  --data-urlencode "website_url=https://example.org/"

Answer · 201

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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/"
}

One group

GET/groups/{id}

To somebody it is not open to, but who may ask to follow it, what a stranger is shown of it.

Who: Anyone, signed in or not

Parameters

  • idintegerrequiredin path
    The profile's id.

Answers

  • 200
    it, or what a stranger is shown of it (LimitedActor)
    ActorNode 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 it
  • 404
    there is no such group

Request

curl "https://api.example.org/groups/<id>"

Answer · 200

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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 group

PATCH/groups/{id}

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The profile's id.

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

  • bodystring
    What it says of itself. At most 500 characters.
  • enabledboolean
    Whether it is enabled.
  • namestringrequired
    Its name. At most 64 characters.
  • website_urlstring (uri)
    One link on the profile. A bare example.com is taken as https. At most 255 characters.

Answers

  • 200
    OK
    ActorNode 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 group

Request

curl -X PATCH "https://api.example.org/groups/<id>" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "body=string" \
  --data-urlencode "enabled=false" \
  --data-urlencode "name=string" \
  --data-urlencode "website_url=https://example.org/"

Answer · 200

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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/"
}

Delete a group

DELETE/groups/{id}

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

  • idintegerrequiredin path
    The profile'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/groups/<id>" \
  -H "Authorization: Bearer $TOKEN"

Change who may see it

PATCH/groups/{id}/access

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

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The profile's id.

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

  • accessstringrequired
    Who may see it: public, registered, followers or admins. One of public, registered, followers, admins. public unless given.
  • allow_follow_requestboolean
    Whether people it is not open to may ask to follow it.

Answers

  • 200
    OK
    ActorNode 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/groups/<id>/access" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "access=public" \
  --data-urlencode "allow_follow_request=false"

Answer · 200

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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/"
}

A group's administrators

GET/groups/{id}/admins/

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The group's or the event's id.
  • startintegerin query
    How many to pass over. At least 0.
  • limitintegerin query
    The most to send. At least 0. 20 unless given.
  • dirstringin query
    Which way the order runs. At most 4 characters. One of asc, desc. asc unless given.

Answers

  • 200
    OK
    object 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 see them
  • 404
    there is no such group

Request

curl "https://api.example.org/groups/<id>/admins/" \
  -H "Authorization: Bearer $TOKEN"

Answer · 200

{
  "data": [
    {
      "access": "string",
      "alias": "string",
      "allow_download": false,
      "allow_follow_request": false,
      "archived_at": "2026-10-27T09:30:00Z",
      "author": {
        "alias": null,
        "avatar_urls": null,
        "id": null,
        "name": null,
        "type": null
      },
      "avatar_urls": {
        "key": null
      },
      "body": "string",
      "cover_urls": {
        "key": null
      },
      "created_at": "2026-10-27T09:30:00Z",
      "deleted_at": "2026-10-27T09:30:00Z",
      "enabled": false,
      "event": {
        "address": null,
        "cancelled_at": null,
        "capacity": null,
        "ends_at": null,
        "going_count": null,
        "has_address": null,
        "has_online_url": null,
        "host": null,
        "is_full": null,
        "maybe_count": null,
        "online_url": null,
        "open_to_host_followers": null,
        "starts_at": null,
        "state": null,
        "timezone_name": null,
        "viewer_rsvp": null
      },
      "featured_at": "2026-10-27T09:30:00Z",
      "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,
      "leader_count": 1,
      "name": "string",
      "origin_domain": "string",
      "quote_policy": "string",
      "show_reposts_on_profile": false,
      "type": "string",
      "uri": "https://example.org/",
      "verified": false,
      "website_url": "https://example.org/"
    }
  ]
}

Make somebody an administrator of a group

POST/groups/{id}/admins/

By one of its administrators. Answers with them.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The group's or the event's id.

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

  • admin_idintegerrequired
    The person to make an administrator.

Answers

  • 201
    Created
    ActorNodeItem 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
  • 404
    there is no such group or person

Request

curl -X POST "https://api.example.org/groups/<id>/admins/" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "admin_id=42"

Answer · 201

{
  "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"
  },
  "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",
  "enabled": false,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "featured_at": "2026-10-27T09:30:00Z",
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "quote_policy": "string",
  "show_reposts_on_profile": false,
  "type": "string",
  "uri": "https://example.org/",
  "verified": false,
  "website_url": "https://example.org/"
}

Remove an administrator of a group

DELETE/groups/{id}/admins/{admin_id}

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The group's or the event's id.
  • admin_idintegerrequiredin path
    The administrator to remove.

Answers

  • 204
    removed
  • 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 group or administrator

Request

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

Archive a group

POST/groups/{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/groups/<id>/archive" \
  -H "Authorization: Bearer $TOKEN"

What deleting a group would take with it

GET/groups/{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
    actor.GroupDeletionCounts 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 delete it
  • 404
    there is no such profile

Request

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

Answer · 200

{
  "admins": 1,
  "followers": 1,
  "member_since": "string",
  "posts": 1,
  "replies": 1
}

Change whether new photos and videos may be downloaded

PATCH/groups/{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
    ActorNode 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/groups/<id>/download-default" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "allow": false
  }'

Answer · 200

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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/groups/{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

Request

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

The events a group hosts

GET/groups/{id}/events/

Those the viewer may see. Each an event, or what is shown of one the viewer may only answer as a follower of the group.

Who: Anyone, signed in or not

Parameters

  • idintegerrequiredin path
    The group.
  • filterstringin query
    upcoming or past. Upcoming when left out. One of upcoming, past.
  • startintegerin query
    How many to pass over. At least 0.
  • limitintegerin query
    The most to send: up to 100. At least 0. At most 100. 20 unless given.

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 see the group
  • 404
    there is no such group

Request

curl "https://api.example.org/groups/<id>/events/"

Answer · 200

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

Feature a profile, or stop

PATCH/groups/{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/groups/<id>/featured" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "featured": false
  }'

Change what may be posted on it

PATCH/groups/{id}/features

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

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The profile's id.

Body application/json

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

Answers

  • 200
    OK
    ActorNode 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/groups/<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",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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 group for good

DELETE/groups/{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/groups/<id>/purge" \
  -H "Authorization: Bearer $TOKEN"

Answer · 200

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

Restore a deleted group

POST/groups/{id}/restore

Within the thirty days. Answers with it.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The profile's id.

Answers

  • 200
    OK
    ActorNode 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
  • 404
    there is no such profile to restore

Request

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

Answer · 200

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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/"
}

The rules of a group

GET/groups/{id}/rules

What somebody agrees to, each ticked, before following it or answering it: at most ten, in order, with the version they are at and the version the viewer last agreed to. For whoever may see it, and for whoever it would let ask to follow.

Who: Anyone, signed in or not

Parameters

  • idintegerrequiredin path
    The profile's id.

Answers

  • 200
    OK
    actor.Rules 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 it
  • 404
    there is no such group

Request

curl "https://api.example.org/groups/<id>/rules"

Answer · 200

{
  "agreed_version": 1,
  "items": [
    {
      "body": "string",
      "title": "string"
    }
  ],
  "updated_at": "2026-10-27T09:30:00Z",
  "version": 1
}

Set the rules of a group

PUT/groups/{id}/rules

The rules as they are to be from now on, in order, at most ten; an empty list takes them away. Every change raises the version, so that whoever agreed before is asked again. For whoever may change it.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path

Body application/json

Answers

  • 200
    OK
    actor.Rules application/json
  • 400
    rules_invalid: more than ten, or one too long
    Refusal application/json
  • 401
    no token, or one that has expired
  • 403
    the viewer may not change it
  • 404
    there is no such group

Request

curl -X PUT "https://api.example.org/groups/<id>/rules" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "body": "string",
        "title": "string"
      }
    ]
  }'

Answer · 200

{
  "agreed_version": 1,
  "items": [
    {
      "body": "string",
      "title": "string"
    }
  ],
  "updated_at": "2026-10-27T09:30:00Z",
  "version": 1
}

Agree to the rules of a group

POST/groups/{id}/rules/agree

The viewer agreeing, each rule ticked, to the version they were shown.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path

Body application/json

  • versionintegerrequired

Answers

  • 204
    No Content
  • 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
  • 404
    there is no such group
  • 409
    rules_not_current: the rules changed since; read them again
    Refusal application/json

Request

curl -X POST "https://api.example.org/groups/<id>/rules/agree" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "version": 1
  }'

Remove a group as spam

POST/groups/{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/groups/<id>/spam" \
  -H "Authorization: Bearer $TOKEN"

Answer · 200

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

Destroy many groups for good

POST/groups/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/groups/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/groups/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/groups/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
}

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 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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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
}

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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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/"
}

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"

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
    }
  ]
}

Websites

GET/websites/

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 Websites

Request

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

Answer · 200

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

One Website

GET/websites/{id}

To somebody it is not open to, but who may ask to follow it, what a stranger is shown of it.

Who: Anyone, signed in or not

Parameters

  • idintegerrequiredin path
    The profile's id.

Answers

  • 200
    it, or what a stranger is shown of it (LimitedActor)
    ActorNode 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 it
  • 404
    there is no such Website

Request

curl "https://api.example.org/websites/<id>"

Answer · 200

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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 Website

PATCH/websites/{id}

Its name and its description. Its handle and its site stay as they were connected.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The website's id.

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

  • bodystring
    What it is, shown in its About card. At most 500 characters.
  • namestringrequired
    Its name. At most 64 characters.

Answers

  • 200
    OK
    ActorNode 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 Website

Request

curl -X PATCH "https://api.example.org/websites/<id>" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "body": "string",
    "name": "string"
  }'

Answer · 200

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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/"
}

Delete a Website

DELETE/websites/{id}

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

  • idintegerrequiredin path
    The profile'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/websites/<id>" \
  -H "Authorization: Bearer $TOKEN"

A Website's administrators

GET/websites/{id}/admins/

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The group's or the event's id.
  • startintegerin query
    How many to pass over. At least 0.
  • limitintegerin query
    The most to send. At least 0. 20 unless given.
  • dirstringin query
    Which way the order runs. At most 4 characters. One of asc, desc. asc unless given.

Answers

  • 200
    OK
    object 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 see them
  • 404
    there is no such Website

Request

curl "https://api.example.org/websites/<id>/admins/" \
  -H "Authorization: Bearer $TOKEN"

Answer · 200

{
  "data": [
    {
      "access": "string",
      "alias": "string",
      "allow_download": false,
      "allow_follow_request": false,
      "archived_at": "2026-10-27T09:30:00Z",
      "author": {
        "alias": null,
        "avatar_urls": null,
        "id": null,
        "name": null,
        "type": null
      },
      "avatar_urls": {
        "key": null
      },
      "body": "string",
      "cover_urls": {
        "key": null
      },
      "created_at": "2026-10-27T09:30:00Z",
      "deleted_at": "2026-10-27T09:30:00Z",
      "enabled": false,
      "event": {
        "address": null,
        "cancelled_at": null,
        "capacity": null,
        "ends_at": null,
        "going_count": null,
        "has_address": null,
        "has_online_url": null,
        "host": null,
        "is_full": null,
        "maybe_count": null,
        "online_url": null,
        "open_to_host_followers": null,
        "starts_at": null,
        "state": null,
        "timezone_name": null,
        "viewer_rsvp": null
      },
      "featured_at": "2026-10-27T09:30:00Z",
      "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,
      "leader_count": 1,
      "name": "string",
      "origin_domain": "string",
      "quote_policy": "string",
      "show_reposts_on_profile": false,
      "type": "string",
      "uri": "https://example.org/",
      "verified": false,
      "website_url": "https://example.org/"
    }
  ]
}

Make somebody an administrator of a Website

POST/websites/{id}/admins/

By one of its administrators. Answers with them.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The group's or the event's id.

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

  • admin_idintegerrequired
    The person to make an administrator.

Answers

  • 201
    Created
    ActorNodeItem 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
  • 404
    there is no such Website or person

Request

curl -X POST "https://api.example.org/websites/<id>/admins/" \
  -H "Authorization: Bearer $TOKEN" \
  --data-urlencode "admin_id=42"

Answer · 201

{
  "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"
  },
  "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",
  "enabled": false,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "featured_at": "2026-10-27T09:30:00Z",
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "quote_policy": "string",
  "show_reposts_on_profile": false,
  "type": "string",
  "uri": "https://example.org/",
  "verified": false,
  "website_url": "https://example.org/"
}

Remove an administrator of a Website

DELETE/websites/{id}/admins/{admin_id}

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The group's or the event's id.
  • admin_idintegerrequiredin path
    The administrator to remove.

Answers

  • 204
    removed
  • 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 Website or administrator

Request

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

What deleting a Website would take with it

GET/websites/{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
    actor.GroupDeletionCounts 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 delete it
  • 404
    there is no such profile

Request

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

Answer · 200

{
  "admins": 1,
  "followers": 1,
  "member_since": "string",
  "posts": 1,
  "replies": 1
}

Change whether new photos and videos may be downloaded

PATCH/websites/{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
    ActorNode 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/websites/<id>/download-default" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "allow": false
  }'

Answer · 200

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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/websites/{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

Request

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

Destroy a Website for good

DELETE/websites/{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/websites/<id>/purge" \
  -H "Authorization: Bearer $TOKEN"

Answer · 200

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

Restore a deleted Website

POST/websites/{id}/restore

Within the thirty days. Answers with it.

Who: Somebody signed in

Parameters

  • idintegerrequiredin path
    The profile's id.

Answers

  • 200
    OK
    ActorNode 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
  • 404
    there is no such profile to restore

Request

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

Answer · 200

{
  "access": "string",
  "administrators": [
    {
      "alias": "string",
      "avatar_urls": {
        "key": null
      },
      "id": 42,
      "name": "string",
      "type": "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,
  "event": {
    "address": {
      "city": null,
      "country": null,
      "latitude": null,
      "longitude": null,
      "postal_code": null,
      "state_province": null,
      "street": null
    },
    "cancelled_at": "2026-10-27T09:30:00Z",
    "capacity": 1,
    "ends_at": "2026-10-27T09:30:00Z",
    "going_count": 1,
    "has_address": false,
    "has_online_url": false,
    "host": {
      "alias": null,
      "avatar_urls": null,
      "id": null,
      "name": null,
      "type": null,
      "verified": null
    },
    "is_full": false,
    "maybe_count": 1,
    "online_url": "https://example.org/",
    "open_to_host_followers": false,
    "starts_at": "2026-10-27T09:30:00Z",
    "state": "string",
    "timezone_name": "string",
    "viewer_rsvp": "string"
  },
  "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,
  "leader_count": 1,
  "name": "string",
  "origin_domain": "string",
  "permissions": {
    "key": "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/"
}

Written by Claude, reviewed by Rastin Mehr · About this