{"id":13481754,"url":"https://github.com/django-json-api/django-rest-framework-json-api","last_synced_at":"2026-04-07T04:31:45.698Z","repository":{"id":18774317,"uuid":"21987374","full_name":"django-json-api/django-rest-framework-json-api","owner":"django-json-api","description":"JSON:API support for Django REST framework","archived":false,"fork":false,"pushed_at":"2026-02-04T15:08:36.000Z","size":1989,"stargazers_count":1245,"open_issues_count":14,"forks_count":300,"subscribers_count":35,"default_branch":"main","last_synced_at":"2026-02-05T00:24:04.932Z","etag":null,"topics":["django-rest-framework","hacktoberfest","json-api","python"],"latest_commit_sha":null,"homepage":"https://django-rest-framework-json-api.readthedocs.org/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/django-json-api.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.md","contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2014-07-18T16:46:14.000Z","updated_at":"2026-02-04T15:08:36.000Z","dependencies_parsed_at":"2025-12-18T10:02:09.687Z","dependency_job_id":null,"html_url":"https://github.com/django-json-api/django-rest-framework-json-api","commit_stats":{"total_commits":904,"total_committers":119,"mean_commits":"7.5966386554621845","dds":0.8418141592920354,"last_synced_commit":"7cab679b5db4e497d01e7555d50c398c6b376bbe"},"previous_names":["django-json-api/rest_framework_ember"],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/django-json-api/django-rest-framework-json-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/django-json-api%2Fdjango-rest-framework-json-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/django-json-api%2Fdjango-rest-framework-json-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/django-json-api%2Fdjango-rest-framework-json-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/django-json-api%2Fdjango-rest-framework-json-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/django-json-api","download_url":"https://codeload.github.com/django-json-api/django-rest-framework-json-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/django-json-api%2Fdjango-rest-framework-json-api/sbom","scorecard":{"id":345800,"data":{"date":"2025-08-11","repo":{"name":"github.com/django-json-api/django-rest-framework-json-api","commit":"142c76edadf7bf4d6c6692da307c03355103b1f6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":7.9,"checks":[{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: topLevel 'contents' permission set to 'read': .github/workflows/tests.yml:3","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"11 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/django-json-api/django-rest-framework-json-api/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/django-json-api/django-rest-framework-json-api/tests.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/django-json-api/django-rest-framework-json-api/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/django-json-api/django-rest-framework-json-api/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/django-json-api/django-rest-framework-json-api/tests.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:29","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:30","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:53","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:54","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   4 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 2-Clause \"Simplified\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":5,"reason":"SAST tool is not run on all commits -- score normalized to 5","details":["Warn: 15 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T06:59:29.587Z","repository_id":18774317,"created_at":"2025-08-18T06:59:29.587Z","updated_at":"2025-08-18T06:59:29.587Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31500397,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["django-rest-framework","hacktoberfest","json-api","python"],"created_at":"2024-07-31T17:00:55.199Z","updated_at":"2026-04-07T04:31:45.691Z","avatar_url":"https://github.com/django-json-api.png","language":"Python","funding_links":[],"categories":["HarmonyOS","Packages","Python"],"sub_categories":["Windows Manager","Other"],"readme":"==================================\nJSON:API and Django REST framework\n==================================\n\n.. image:: https://github.com/django-json-api/django-rest-framework-json-api/workflows/Tests/badge.svg\n   :alt: Tests\n   :target: https://github.com/django-json-api/django-rest-framework-json-api/actions\n\n.. image:: https://readthedocs.org/projects/django-rest-framework-json-api/badge/?version=latest\n   :alt: Read the docs\n   :target: https://django-rest-framework-json-api.readthedocs.org/\n\n.. image:: https://img.shields.io/pypi/v/djangorestframework-jsonapi.svg\n   :alt: PyPi Version\n   :target: https://pypi.org/project/djangorestframework-jsonapi/\n\n--------\nOverview\n--------\n\n**JSON:API support for Django REST framework**\n\n* Documentation: https://django-rest-framework-json-api.readthedocs.org/\n* Format specification: https://jsonapi.org/format/\n\n\nBy default, Django REST framework will produce a response like:\n\n.. code:: JSON\n\n    {\n        \"count\": 20,\n        \"next\": \"https://example.com/api/1.0/identities/?page=3\",\n        \"previous\": \"https://example.com/api/1.0/identities/?page=1\",\n        \"results\": [{\n            \"id\": 3,\n            \"username\": \"john\",\n            \"full_name\": \"John Coltrane\"\n        }]\n    }\n\n\nHowever, for an ``identity`` model in JSON:API format the response should look\nlike the following:\n\n.. code:: JSON\n\n    {\n        \"links\": {\n            \"prev\": \"https://example.com/api/1.0/identities\",\n            \"self\": \"https://example.com/api/1.0/identities?page=2\",\n            \"next\": \"https://example.com/api/1.0/identities?page=3\",\n        },\n        \"data\": [{\n            \"type\": \"identities\",\n            \"id\": \"3\",\n            \"attributes\": {\n                \"username\": \"john\",\n                \"full-name\": \"John Coltrane\"\n            }\n        }],\n        \"meta\": {\n            \"pagination\": {\n              \"count\": 20\n            }\n        }\n    }\n\n\n-----\nGoals\n-----\n\nAs a Django REST framework JSON:API (short DJA) we are trying to address following goals:\n\n1. Support the `JSON:API`_ spec to compliance\n\n2. Be as compatible with `Django REST framework`_ as possible\n\n   e.g. issues in Django REST framework should be fixed upstream and not worked around in DJA\n\n3. Have sane defaults to be as easy to pick up as possible\n\n4. Be solid and tested with good coverage\n\n5. Be performant\n\n.. _JSON:API: https://jsonapi.org\n.. _Django REST framework: https://www.django-rest-framework.org/\n\n------------\nRequirements\n------------\n\n1. Python (3.10, 3.11, 3.12, 3.13, 3.14)\n2. Django (4.2, 5.1, 5.2, 6.0)\n3. Django REST framework (3.16, 3.17)\n\nWe **highly** recommend and only officially support the latest patch release of each Python, Django and REST framework series.\n\nGenerally Python and Django series are supported till the official end of life. For Django REST framework the last two series are supported.\n\nFor optional dependencies such as Django Filter only the latest release is officially supported even though lower versions should work as well.\n\n------------\nInstallation\n------------\n\nInstall using ``pip``...\n\n.. code:: sh\n\n    $ pip install djangorestframework-jsonapi\n    $ # for optional package integrations\n    $ pip install djangorestframework-jsonapi['django-filter']\n    $ pip install djangorestframework-jsonapi['django-polymorphic']\n\n\nor from source...\n\n.. code:: sh\n\n    $ git clone https://github.com/django-json-api/django-rest-framework-json-api.git\n    $ cd django-rest-framework-json-api\n    $ pip install -e .\n\n\nand add ``rest_framework_json_api`` to your ``INSTALLED_APPS`` setting below ``rest_framework``.\n\n.. code:: python\n\n    INSTALLED_APPS = [\n        ...\n        'rest_framework',\n        'rest_framework_json_api',\n        ...\n    ]\n\n\nRunning the example app\n^^^^^^^^^^^^^^^^^^^^^^^\n\nIt is recommended to create a virtualenv for testing. Assuming it is already\ninstalled and activated:\n\n.. code:: sh\n\n    $ git clone https://github.com/django-json-api/django-rest-framework-json-api.git\n    $ cd django-rest-framework-json-api\n    $ pip install -Ur requirements.txt\n    $ django-admin migrate --settings=example.settings --pythonpath .\n    $ django-admin loaddata drf_example --settings=example.settings --pythonpath .\n    $ django-admin runserver --settings=example.settings --pythonpath .\n\nBrowse to\n\n* http://localhost:8000 for the list of available collections (in a non-JSON:API format!),\n\n\n-----\nUsage\n-----\n\n\n``rest_framework_json_api`` assumes you are using class-based views in Django\nREST framework.\n\n\nSettings\n^^^^^^^^\n\nOne can either add ``rest_framework_json_api.parsers.JSONParser`` and\n``rest_framework_json_api.renderers.JSONRenderer`` to each ``ViewSet`` class, or\noverride ``settings.REST_FRAMEWORK``\n\n.. code:: python\n\n    REST_FRAMEWORK = {\n        'PAGE_SIZE': 10,\n        'EXCEPTION_HANDLER': 'rest_framework_json_api.exceptions.exception_handler',\n        'DEFAULT_PAGINATION_CLASS':\n            'rest_framework_json_api.pagination.JsonApiPageNumberPagination',\n        'DEFAULT_PARSER_CLASSES': (\n            'rest_framework_json_api.parsers.JSONParser',\n            'rest_framework.parsers.FormParser',\n            'rest_framework.parsers.MultiPartParser'\n        ),\n        'DEFAULT_RENDERER_CLASSES': (\n            'rest_framework_json_api.renderers.JSONRenderer',\n            'rest_framework_json_api.renderers.BrowsableAPIRenderer',\n        ),\n        'DEFAULT_METADATA_CLASS': 'rest_framework_json_api.metadata.JSONAPIMetadata',\n        'DEFAULT_FILTER_BACKENDS': (\n            'rest_framework_json_api.filters.QueryParameterValidationFilter',\n            'rest_framework_json_api.filters.OrderingFilter',\n            'rest_framework_json_api.django_filters.DjangoFilterBackend',\n            'rest_framework.filters.SearchFilter',\n        ),\n        'SEARCH_PARAM': 'filter[search]',\n        'TEST_REQUEST_RENDERER_CLASSES': (\n            'rest_framework_json_api.renderers.JSONRenderer',\n        ),\n        'TEST_REQUEST_DEFAULT_FORMAT': 'vnd.api+json'\n    }\n\nThis package provides much more including automatic inflection of JSON keys, extra top level data (using nested\nserializers), relationships, links, paginators, filters, and handy shortcuts.\nRead more at https://django-rest-framework-json-api.readthedocs.org/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjango-json-api%2Fdjango-rest-framework-json-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdjango-json-api%2Fdjango-rest-framework-json-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdjango-json-api%2Fdjango-rest-framework-json-api/lists"}