mirror of
https://codeberg.org/pronounscc/pronouns.cc.git
synced 2024-11-20 14:39:52 +01:00
73 lines
3 KiB
Markdown
73 lines
3 KiB
Markdown
|
# API reference
|
||
|
|
||
|
pronouns.cc has a HTTP REST API to query and edit profiles, available at `https://pronouns.cc/api`.
|
||
|
|
||
|
## Versioning
|
||
|
|
||
|
The API is versioned, and versions must be explicitly specified for all endpoints.
|
||
|
The current, and only, available version is **1**.
|
||
|
The version is specified in the request path, like `https://pronouns.cc/api/v{version}`.
|
||
|
|
||
|
| Version | Status |
|
||
|
| ------- | ---------- |
|
||
|
| 1 | Default |
|
||
|
| 2 | _Upcoming_ |
|
||
|
|
||
|
The API version will be incremented for any breaking changes, including:
|
||
|
|
||
|
- Removing entire endpoints
|
||
|
- Removing fields from responses
|
||
|
- Changing the behaviour of fields (in some situations, see below)
|
||
|
|
||
|
However, the following types of changes are **not** considered breaking:
|
||
|
|
||
|
- Adding new endpoints
|
||
|
- Adding new fields to requests or responses (your JSON serializer/deserializer should ignore unknown fields)
|
||
|
- Forcing fields related to removed features to their default value
|
||
|
|
||
|
## Authentication
|
||
|
|
||
|
Tokens can be created [here](https://pronouns.cc/settings/tokens).
|
||
|
Not all endpoints require authentication. For those that do, a token must be provided in the `Authorization` header.
|
||
|
The token _may_ be prefixed with `Bearer `, but this is not required.
|
||
|
|
||
|
## Documentation formatting
|
||
|
|
||
|
The "type" column in tables is formatted as follows:
|
||
|
|
||
|
- The type used is the _Go_ type, not the _JSON_ type.
|
||
|
For example, the documentation will use `int` for integers and `float` for floats,
|
||
|
even though they are both represented with JSON numbers.
|
||
|
- A _leading_ `?` signifies that the field may be omitted.
|
||
|
- A _trailing_ `?` signifies that the field may be null.
|
||
|
|
||
|
## IDs
|
||
|
|
||
|
::: info
|
||
|
pronouns.cc is [planning a transition](https://codeberg.org/pronounscc/pronouns.cc/issues/89)
|
||
|
to [Snowflake IDs](https://en.wikipedia.org/wiki/Snowflake_ID).
|
||
|
The information below pertains to the current ID format.
|
||
|
:::
|
||
|
|
||
|
The API uses [xid](https://github.com/rs/xid) for unique IDs. These are always serialized as strings.
|
||
|
Although xids have timestamp information embedded in them, this is non-trivial to extract.
|
||
|
xids are unique across _all_ resources, they are never shared (for example, a user and a member cannot share the same ID).
|
||
|
|
||
|
Users and members also have an additional ID type, `sid`.
|
||
|
These are randomly generated 5 or 6 letter strings, and are used for the prns.cc URL shortener.
|
||
|
They can be rerolled once per hour.
|
||
|
|
||
|
## Images
|
||
|
|
||
|
The API does not return full URLs to images such as avatars and pride flags.
|
||
|
Instead, the URL must be constructed manually using the `avatar` or `hash` fields.
|
||
|
|
||
|
The default user and member avatar is served at `https://pronouns.cc/default/512.webp`.
|
||
|
All custom images are served on the base URL `https://cdn.pronouns.cc`, and are only available in WebP format.
|
||
|
|
||
|
| Type | Format |
|
||
|
| ------------- | ------------------------------------------- |
|
||
|
| User avatar | `/users/{user.id}/{user.avatar}.webp` |
|
||
|
| Member avatar | `/members/{member.id}/{member.avatar}.webp` |
|
||
|
| Pride flag | `/flags/{flag.hash}.webp` |
|