title: API: List all zettel
role: manual
tags: #api #manual #zettelstore
syntax: zmk
back: 00001007790000 00001012000000
backward: 00001007790000 00001012000000 00001012920000
box-name: manual
copyright: (c) 2020-present by Detlef Stern <ds@zettelstore.de>
created: 20210126175322
folge: 00001012051400
forward: 00001006050000 00001007700000 00001007702000 00001010040100 00001010070200 00001012050200 00001012051400 00001012920000 00001012921200 00001012930500
lang: en
license: EUPL-1.2-or-later
modified: 20260729141138
published: 20260729141138
visibility: public

To list all zettel just send an HTTP GET request to the [endpoint](00001012920000) `/z`.
Always use the endpoint `/z` to work with a list of zettel.

Without further specifications, a plain text document is returned, with one line per zettel.
Each line contains in the first 14 characters the [zettel identifier](00001006050000).
Separated by a space character, the title of the zettel follows:

    # curl http://127.0.0.1:23123/z
    ...
    00001012051200 API: List all zettel
    00001012050600 API: Provide an access token
    00001012050400 API: Renew an access token
    00001012050200 API: Authenticate a client
    ...

The list is __not__ sorted, even in these examples where it appears to be sorted.
If you want to have it ordered, you must specify it with the help of a [query expression](00001007700000) / [search term](00001007702000).
See [Query the list of all zettel](00001012051400) how to do it.

# Data output

Alternatively, you may retrieve the zettel list as a parseable object / a [symbolic expression](00001012930500) by providing the query parameter `enc=data`:

    # curl 'http://127.0.0.1:23123/z?enc=data'
    (meta-list (query "") (human "") (zettel "00001012051200" (meta (back "00001007790000 00001012000000") (backward "00001007790000 00001012000000 00001012920000") (box-name "manual") (created "20210126175322") (folge "00001012051400") (forward "00001006050000 00001007700000 00001007702000 00001010040100 00001010070200 00001012050200 00001012051400 00001012920000 00001012921200 00001012930500") (modified "20260709192154") (published "20260709192154") (role "manual") (syntax "zmk") (tags "#api #manual #zettelstore") (title "API: List all zettel")) (rights create read update delete)) (zettel ...

Pretty-printed, this results in:

    (meta-list
        (query "")
        (human "")
        (zettel "00001012051200"
            (meta
                (back "00001007790000 00001012000000")
                (backward "00001007790000 00001012000000 00001012920000")
                (box-name "manual")
                (created "20210126175322")
                (folge "00001012051400")
                (forward "00001006050000 00001007700000 00001007702000 00001010040100 00001010070200 00001012050200 00001012051400 00001012920000 00001012921200 00001012930500")
                (modified "20260709192154")
                (published "20260709192154")
                (role "manual")
                (syntax "zmk")
                (tags "#api #manual #zettelstore")
                (title "API: List all zettel"))
            (rights create read update delete))
        (zettel ...

* The result is a list, starting with the symbol `meta-list`.
* Then, some key/value pairs are following, also nested.
* Keys `query` and `human` will be explained [later in this manual](00001012051400).
* Then comes the list of zettel.
* `zettel` itself start, well, a zettel.
    * Then comes the zettel identifier, encoded as a string.
    * Nested in `meta` are the metadata, each as a key/value pair.
    * `rights` specifies the [access rights](00001012921200) the user has for this zettel.

# Note

This request (and similar others) will always return a list of metadata, provided the request was syntactically correct.
There will never be an HTTP status code 403 (Forbidden), even if [authentication was enabled](00001010040100) and you did not provide a valid access token.
In this case, the resulting list might be quite short (some zettel will have [public visibility](00001010070200)) or the list might be empty.

With this call, you cannot differentiate between an empty result list (e.g because your search did not find a zettel with the specified term) and an empty list because of missing authorization (e.g. an invalid access token).

# HTTP Status codes

