Awesome Open Source
Awesome Open Source

JSON:API and Django REST framework

Tests Read the docs PyPi Version


JSON:API support for Django REST framework

By default, Django REST framework will produce a response like:

    "count": 20,
    "next": "",
    "previous": "",
    "results": [{
        "id": 3,
        "username": "john",
        "full_name": "John Coltrane"

However, for an identity model in JSON:API format the response should look like the following:

    "links": {
        "prev": "",
        "self": "",
        "next": "",
    "data": [{
        "type": "identities",
        "id": "3",
        "attributes": {
            "username": "john",
            "full-name": "John Coltrane"
    "meta": {
        "pagination": {
          "count": 20


As a Django REST framework JSON:API (short DJA) we are trying to address following goals:

  1. Support the JSON:API spec to compliance

  2. Be as compatible with Django REST framework as possible

    e.g. issues in Django REST framework should be fixed upstream and not worked around in DJA

  3. Have sane defaults to be as easy to pick up as possible

  4. Be solid and tested with good coverage

  5. Be performant


  1. Python (3.6, 3.7, 3.8, 3.9)
  2. Django (2.2, 3.0, 3.1, 3.2)
  3. Django REST framework (3.12)

We highly recommend and only officially support the latest patch release of each Python, Django and REST framework series.

Generally Python and Django series are supported till the official end of life. For Django REST framework the last two series are supported.


Install using pip...

$ pip install djangorestframework-jsonapi
$ # for optional package integrations
$ pip install djangorestframework-jsonapi['django-filter']
$ pip install djangorestframework-jsonapi['django-polymorphic']
$ pip install djangorestframework-jsonapi['openapi']

or from source...

$ git clone
$ cd django-rest-framework-json-api
$ pip install -e .

and add rest_framework_json_api to your INSTALLED_APPS setting below rest_framework.


Running the example app

It is recommended to create a virtualenv for testing. Assuming it is already installed and activated:

$ git clone
$ cd django-rest-framework-json-api
$ pip install -Ur requirements.txt
$ django-admin migrate --settings=example.settings
$ django-admin loaddata drf_example --settings=example.settings
$ django-admin runserver --settings=example.settings

Browse to


rest_framework_json_api assumes you are using class-based views in Django REST framework.


One can either add rest_framework_json_api.parsers.JSONParser and rest_framework_json_api.renderers.JSONRenderer to each ViewSet class, or override settings.REST_FRAMEWORK

    'PAGE_SIZE': 10,
    'EXCEPTION_HANDLER': 'rest_framework_json_api.exceptions.exception_handler',
    'DEFAULT_METADATA_CLASS': 'rest_framework_json_api.metadata.JSONAPIMetadata',
    'SEARCH_PARAM': 'filter[search]',
    'TEST_REQUEST_DEFAULT_FORMAT': 'vnd.api+json'

This package provides much more including automatic inflection of JSON keys, extra top level data (using nested serializers), relationships, links, paginators, filters, and handy shortcuts. Read more at

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Python (1,123,251
Hacktoberfest (22,568
Django Rest Framework (2,246
Json Api (1,188
Related Projects