Profiles

Websites

actor-service

A website's feed as a profile (websites.md), followed here and from the fediverse, and looked after by its admins. It is made by connecting the site, which proves its domain (syndication-service, POST /websites/_connect), so it has no route here to make one.

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)
    actor.WebsiteNode 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,
  "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"
  },
  "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
    actor.WebsiteNode 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,
  "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"
  },
  "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/"
}

As every profile

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

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 admins

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 admin of a website

POST/websites/{id}/admins/

By one of its admins. 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 admin 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 admin

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
    actor.WebsiteNode 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,
  "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"
  },
  "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
  }'

Feature a profile, or stop

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