Skip to main content

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​

TypeScript
npx @openapitools/openapi-generator-cli generate \
-i https://docs.joinotify.com/openapi.yaml \
-g typescript-fetch \
-o ./src/joinotify
Python
npx @openapitools/openapi-generator-cli generate \
-i https://docs.joinotify.com/openapi.yaml \
-g python \
-o ./joinotify_client
Types only, in TypeScript
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​

ExtensionMeaning
x-joinotify-status: plannedThe 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.

Stripping planned endpoints before generating
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.