Accept and Content-Type headers.
For 95% of integrations, plain application/json is the right choice. Use JSON-LD when you need pagination metadata or generic link discovery, and multipart only when you are uploading files.
Response formats
If you do not send an
Accept header at all, JSON-LD is returned by default.
Example: the same resource, three ways
GET /api/v1/users/42 returns one of these depending on the Accept header:
- JSON-LD (default)
- Plain JSON
@context, @id, @type wrapping that lets generic clients reason about the response without knowing the schema in advance.
The Hydra collection envelope
JSON-LD collections are wrapped in a Hydra envelope that carries totals and pagination links:hydra:totalItems and the next-page links in plain JSON. If you need to display “showing 60 of 1,248” or iterate every page, use JSON-LD.
Request formats
PATCH and merge-patch
Always sendContent-Type: application/merge-patch+json for PATCH. The endpoint only updates the fields you include — missing fields are left untouched.
null for a field explicitly clears it (where the field is nullable). Sending an empty string is treated as the literal empty string.
Referencing other resources
For relations, send the IRI (Internationalized Resource Identifier) of the target:File uploads (multipart)
For endpoints that accept file uploads — ID documents, contract signatures, course media, drive files, profile pictures — usemultipart/form-data:
idMedia above) is documented per endpoint. For endpoints that accept both metadata and files, include the metadata as additional form fields:
When in doubt
- You’re a human writing a curl by hand: omit
Accept(defaults to JSON-LD) for the metadata, or setAccept: application/jsonfor cleaner output. - You’re writing an integration:
Accept: application/jsonfor reads,Content-Type: application/jsonfor writes,Content-Type: application/merge-patch+jsonfor partial updates,Content-Type: multipart/form-datafor uploads. - You’re building a generic browser/client over the API: stay on JSON-LD throughout so you get the link relations.
Related
- Pagination and filters — how to iterate collections
- Errors — error envelope shape (same for all content types)

