Flask API

Browsable Web APIs for Flask


Flask API is a drop-in replacement for Flask that provides an implementation of browsable APIs similar to what Django REST framework provides. It gives you properly content negotiated-responses and smart request parsing:




The following packages are optional:

Install using pip:

pip install Flask-API

Import and initialize your application:

from flask_api import FlaskAPI

app = FlaskAPI(__name__)


Return any valid response object as normal, or return a list or dict.

def example():
    return {'hello': 'world'}

A renderer for the response data will be selected using content negotiation based on the client 'Accept' header. If you're making the API request from a regular client, this will default to a JSON response. If you're viewing the API in a browser it'll default to the browsable API HTML.


Access the parsed request data using request.data. This will handle JSON or form data by default.

def example():
    return {'request data': request.data}


The following example demonstrates a simple API for creating, listing, updating and deleting notes.

from flask import request, url_for
from flask_api import FlaskAPI, status, exceptions

app = FlaskAPI(__name__)

notes = {
    0: 'do the shopping',
    1: 'build the codez',
    2: 'paint the door',

def note_repr(key):
    return {
        'url': request.host_url.rstrip('/') + url_for('notes_detail', key=key),
        'text': notes[key]

@app.route("/", methods=['GET', 'POST'])
def notes_list():
    List or create notes.
    if request.method == 'POST':
        note = str(request.data.get('text', ''))
        idx = max(notes.keys()) + 1
        notes[idx] = note
        return note_repr(idx), status.HTTP_201_CREATED

    # request.method == 'GET'
    return [note_repr(idx) for idx in sorted(notes.keys())]

@app.route("/<int:key>/", methods=['GET', 'PUT', 'DELETE'])
def notes_detail(key):
    Retrieve, update or delete note instances.
    if request.method == 'PUT':
        note = str(request.data.get('text', ''))
        notes[key] = note
        return note_repr(key)

    elif request.method == 'DELETE':
        notes.pop(key, None)
        return '', status.HTTP_204_NO_CONTENT

    # request.method == 'GET'
    if key not in notes:
        raise exceptions.NotFound()
    return note_repr(key)

if __name__ == "__main__":

Now run the webapp:

$ python ./example.py
 * Running on
 * Restarting with reloader

You can now open a new tab and interact with the API from the command line:

$ curl -X GET
[{"url": "", "text": "do the shopping"}, {"url": "", "text": "build the codez"}, {"url": "", "text": "paint the door"}]
$ curl -X GET
{"url": "", "text": "build the codez"}
$ curl -X PUT -d text="flask api is teh awesomez"
{"url": "", "text": "flask api is teh awesomez"}

You can also work on the API directly in your browser, by opening You can then navigate between notes, and make GET, PUT, POST and DELETE API requests.