Skip to content

API Docs

OpenAPI docs

Once you configured your Ninja API and started runserver - go to http://127.0.0.1:8000/api/docs

You will see the automatic, interactive API documentation (provided by the OpenAPI / Swagger UI

CDN vs staticfiles

You are not required to put django ninja to INSTALLED_APPS. In that case the interactive UI is hosted by CDN.

To host docs (Js/css) from your own server - just put "ninja" to INSTALLED_APPS - in that case standard django staticfiles mechanics will host it.

Switch to Redoc

Use NINJA_DOCS_VIEW in Django settings

NINJA_DOCS_VIEW = 'redoc'

Then you will see the alternative automatic documentation (provided by Redoc).

Hiding docs

In case you do not need to display interactive documetation - set docs_url argument to None

api = NinjaAPI(docs_url=None)

Protecting docs

To protect docs with authentication (or decorate for some other use case) use docs_decorator argument:

from django.contrib.admin.views.decorators import staff_member_required

api = NinjaAPI(docs_decorator=staff_member_required)

Extending OpenAPI Spec with custom attributes

You can extend OpenAPI spec with custom attributes, for example to add termsOfService

api = NinjaAPI(
   openapi_extra={
            "info": {
                "termsOfService": "https://example.com/terms/",
            }
        }

   },
   title="Demo API",
   description="This is a demo API with dynamic OpenAPI info section"
)

Resolving the doc's url

The url for the api's documentation view can be reversed by referencing the view's name openapi-view.

In Python code, for example:

from django.urls import reverse

reverse('api-1.0.0:openapi-view')

>>> '/api/docs'

In a Django template, for example:

<a href="{% url 'api-1.0.0:openapi-view' %}">API Docs</a>

<a href="/api/docs">API Docs</a>