OpenAPI specification
This entire reference is generated from a single OpenAPI 3.0.3 file, which you can download and feed into your own tooling.
Download openapi.yaml
Generating a client
npx @openapitools/openapi-generator-cli generate \
-i https://docs.joinotify.com/openapi.yaml \
-g typescript-fetch \
-o ./src/joinotify
npx @openapitools/openapi-generator-cli generate \
-i https://docs.joinotify.com/openapi.yaml \
-g python \
-o ./joinotify_client
npx openapi-typescript https://docs.joinotify.com/openapi.yaml -o ./src/joinotify.d.ts
Importing into Postman or Insomnia
Postman — the shortest path is the ready-made collection, with example
bodies and ids carried from one call to the next. To generate one from the spec: Import →
Link → paste https://docs.joinotify.com/openapi.yaml. Then create an environment variable
token and set the collection's authorization to Bearer Token pointing at it.
Insomnia — Create → Import From → URL, same URL.
Proprietary extensions
| Extension | Meaning |
|---|---|
x-joinotify-status: planned | The endpoint is documented but not live yet |
If you generate code from the spec, it's worth filtering out the operations marked this
way — they return 404 today.
npx js-yaml openapi.yaml \
| jq 'del(.paths[] | .[] | select(.["x-joinotify-status"] == "planned"))' \
> openapi-available.json
Versioning
The spec follows the API version, currently 1.0.0. Contract-breaking changes — removing
a field, changing a type, making an optional field required — only happen in a major
version, announced in advance.
Adding an optional field to a response is not considered a break. Your client has to ignore unknown fields rather than fail on them.
Where the spec and the /v1 mirror differ
The operations under /v1 describe Meta's contract, and their response bodies are typed
as free-form objects on purpose: we pass Meta's response through byte for byte, and it
changes between Graph API versions.
If you need exact types for those routes, the source is Meta's documentation, not this spec.