export const metadata = { title: "API Endpoints", description: "Explains all endpoints in Versia's federation API.", } # Endpoints ## Instance metadata This endpoint is exempt from the signature requirement. No signatures are required for requests or responses to it. Must be `/.versia/v0.6/instance`. Must be `GET`. Instance's metadata, as defined in the [Instance Metadata](/entities/instance-metadata) document. ```http {{ 'title': 'Example request' }} GET /.versia/v0.6/instance Host: b.social Accept: application/vnd.versia+json ``` ```http {{ 'title': 'Example response' }} HTTP/1.1 200 OK Content-Type: application/vnd.versia+json; charset=utf-8 { "type": "InstanceMetadata", "name": "Bob!!", // ... } ``` ## Entity data Must be `/.versia/v0.6/entities/{entity_type}/{id}`. - `{entity_type}`: The type of the entity to fetch, URL-encoded. - `{id}`: The ID of the entity to fetch, URL-encoded. Example: `GET /.versia/v0.6/entities/pub.versia%3Agroups%2FGroup/1234` fetches the [Group](/extensions/groups) entity with ID `1234`. Must be `GET`. Entity data as JSON, as defined in its [Entity](/entities) definition document. ```http {{ 'title': 'Example request' }} GET /.versia/v0.6/entities/user/1234 Host: b.social Accept: application/vnd.versia+json ``` ```http {{ 'title': 'Example response' }} HTTP/1.1 200 OK Content-Type: application/vnd.versia+json; charset=utf-8 { "type": "User", "id": "1234", // ... } ``` ## Entity collections Must be `/.versia/v0.6/entities/{entity_type}/{id}/collections/{collection_type}`. - `{entity_type}`: The type of the entity to fetch, URL-encoded. - `{id}`: The ID of the entity to fetch, URL-encoded. - `{collection_type}`: The type of the collection to fetch, URL-encoded. Example: `GET /.versia/v0.6/entities/User/1234/collections/followers` fetches the followers of the user with ID `1234`. Must be `GET`. Must be either a [Collection](/structures/collection) or a [URICollection](/structures/collection#uri-collection) as JSON. ```http {{ 'title': 'Example request' }} GET /.versia/v0.6/entities/user/1234/collections/followers Host: b.social Accept: application/vnd.versia+json ``` ```http {{ 'title': 'Example response' }} HTTP/1.1 200 OK Content-Type: application/vnd.versia+json; charset=utf-8 { "type": "Followers", "id": "1234", // ... } ``` ### Pagination Collections MUST support pagination, using the following URI parameters: - `offset`: The number of items to skip before returning the first item. This is a zero-based index. - `limit`: The maximum number of items to return. This is a one-based index. Implementations MUST support a minimum of `1` and a maximum of `40` items. ```http {{ 'title': 'Example paginated collection request' }} GET /.versia/v0.6/entities/user/1234/collections/followers?offset=10&limit=20 Host: b.social Accept: application/vnd.versia+json ``` ## Inbox The inbox endpoint is used for instances to send entities to each other. It is a single endpoint that can receive messages for every user (also known as a shared inbox). The delivery mechanism is described further in the [Federation](/federation#inboxes) document. Must be `/.versia/v0.6/inbox`. Must be `POST`. ```http {{ 'title': 'Example request' }} POST /.versia/v0.6/inbox Host: b.social Accept: application/vnd.versia+json Content-Type: application/vnd.versia+json; charset=utf-8 { "type": "Note", "id": "1234", ... } ```