The JSON:API Resources module makes it possible to define custom JSON:API routes. It does not define any custom routes of its own.

This can be incredibly valuable for providing custom collections (like a/jsonapi/featured-posts route) and contextual data (like a /jsonapi/me route).

In addition to GET, this module also makes it easy to accept POST requests. For example, one could define a /jsonapi/user/{id}/reminders route where a new reminder entities could be created and automatically associated with a user.

You can see examples of how to define routes here.

You can find examples of the classes that respond with your custom data here.

Pair with JSON:API Hypermedia

Add typed links and actions to your custom resources with JSON:API Hypermedia. Together they enable HATEOAS-style decoupled behaviors — attach flag, unflag, or subscribe link relations to a node resource without inventing ad-hoc URL conventions.

Looking for a Views-based alternative?

If your custom endpoint is "a filtered list of entities with sorting and pagination," use JSON:API Views instead. It exposes any Views display as a JSON:API collection — no PHP required.

Reach for JSON:API Resources when:

  • The response shape doesn't map to a single entity collection (aggregates, computed fields, mixed resource types).
  • You need request-scoped logic — auth checks, contextual filters from the session, side effects on POST.
  • The route is non-entity, like /jsonapi/me or /jsonapi/user/{id}/reminders.

Reach for JSON:API Views when the query is already expressible in Views.

Supporting organizations: 
Development
Development
Development & maintenance

Project information

Releases