OpenFeed has an open HTTP API. You can use it to build your own client, a bot that posts updates to a space, or a tool that reads public feeds. This app is a reference client built on that same API.
https://api.openfeed.euapplication/problem+jsonv1, in the pathPublic feeds don't need an account. This returns the newest posts on the main feed:
curl https://api.openfeed.eu/v1/feed
Every list has a next_cursor. Pass it back as ?cursor= to get the next page. A null cursor means you've reached the end.
Apps that act for a user sign in through the OpenFeed login page with PKCE. Your app never sees the user's password.
https://auth.openfeed.eu/, with your client_id, a redirect_uri registered for that client, the challenge (code_challenge_method=S256) and a state.redirect_uri with a code and the same state. Check the state. The code works once, within 60 seconds./v1/login/token with grant_type=authorization_code, the same client_id and redirect_uri, and the verifier. You get an access token (15 minutes) and a refresh token.grant_type=refresh_token, your client_id and the refresh token. Each refresh token works once; keep the new one.Send the access token as Authorization: Bearer …. Scripts and bots can use an app password instead, created in the account settings.
curl -X POST https://api.openfeed.eu/v1/posts \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"space": "public", "body": "Hello from my app"}'
Limits count per IP address and per account, over 15 minutes. When you hit one, the API answers 429 with a Retry-After header.
| Action | Per address | Per account |
|---|---|---|
| Reading feeds and posts | 300 | 600 |
| Likes, reposts, bookmarks (each) | 60 | 120 |
| New posts and replies | 40 | 40 |
| Edits, deletes, votes (each) | 20 | 20 |
Found a bug or need a feature? Mail developers@openfeed.eu. Planned changes to the API are announced at least 60 days ahead.