Skip to content

API

Endpoints

NeoDB has a set of API endpoints mapping to its functions like marking a book or listing collections, they can be found in swagger based API documentation at /developer/ of your running instance, a version of it is available on our flagship instance.

NeoDB also supports a subset of Mastodon API, details can be found in Mastodon API documentation.

Both set of APIs can be accessed by the same access token.

How to authorize

Create an application

you must have at least one URL included in the Redirect URIs field, e.g. https://example.org/callback, or use urn:ietf:wg:oauth:2.0:oob if you don't have a callback URL.

curl https://neodb.social/api/v1/apps \
  -d client_name=MyApp \
  -d redirect_uris=https://example.org/callback \
  -d website=https://my.site

and save of the client_id and client_secret returned in the response:

{
  "client_id": "CLIENT_ID",
  "client_secret": "CLIENT_SECRET",
  "name": "MyApp",
  "redirect_uri": "https://example.org/callback",
  "vapid_key": "PUSH_KEY",
  "website": "https://my.site"
}

Guide your user to open this URL

https://neodb.social/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=https://example.org/callback&scope=read+write

Once authorizated by user, it will redirect to https://example.org/callback with a code parameter:

https://example.org/callback?code=AUTH_CODE

Obtain access token with the following POST request:

curl https://neodb.social/oauth/token \
    -d "client_id=CLIENT_ID" \
    -d "client_secret=CLIENT_SECRET" \
    -d "code=AUTH_CODE" \
    -d "redirect_uri=https://example.org/callback" \
    -d "grant_type=authorization_code"

and access token will be returned in the response:

{
    "access_token": "ACCESS_TOKEN",
    "token_type": "Bearer",
    "scope": "read write"
}

Use the access token to access protected endpoints like /api/me

curl -H "Authorization: Bearer ACCESS_TOKEN" -X GET https://neodb.social/api/me

and response will be returned accordingly:

{"url": "https://neodb.social/users/xxx/", "external_acct": "[email protected]", "display_name": "XYZ", "avatar": "https://yyy.zzz/xxx.gif"}