-
Notifications
You must be signed in to change notification settings - Fork 6
APIs
This page provides documentation on all of the APIs present on CantusDB. It also lists APIs present on OldCantus, and includes some useful APIs from Cantus Index relevant to CantusDB.
Most of CantusDB's APIs are defined in main_app/views/views.py
(code), with the exception of /concordances
, where Nginx serves a cached file directly.
The Concordances Export API is used by Cantus Index to compile lists of concordances for various Cantus IDs in all the databases in the Cantus Network. It fetches all published chants in the database, groups them by Cantus ID, and returns a JSON object of data about each chant.
Nginx serves a cached .json file directly when an agent requests concordances. It will be accessible at https://cantusdatabase.org/concordances. This cached file is updated once per day by a cron job that runs the update_cached_concordances
command (code).
As of Feb 01 2024, this API is built, but not yet deployed on the Staging or Production servers.
The API returns a single JSON object in the following format:
{
"data": {
"a Cantus ID": [
an array of JSON objects, each representing a single published chant
],
"another Cantus ID": [
...
],
...
},
"metadata": {
"last_updated": when the list of concordances was most recently written to file
}
}
Within ["data"][{some Cantus ID}]
, each chant in the array is represented as a JSON object with the following format:
{
"siglum": the shelfmark of the chant's source (str),
"srclink": a link to the chant's source page (str),
"chantlink": a link to the chant's page (str),
"folio": the chant's folio (str),
"sequence": the chant's sequence (i.e. where it appears on its folio - str),
"incipit": the chant's incipit (str),
"feast": the name of the chant's feast (str),
"genre": one or several letters representing the chant's genre (str),
"office": one or several letters representing the chant's office (str),
"position": the chant's position within its office (str),
"cantus_id": the chant's Cantus ID (str),
"image": a link to view a scan of the page the chant was found on (str),
"mode": the chant's mode (str),
"full_text": the chant's full text, in standardized spelling (str),
"melody": the melody of the chant, represented in Volpiano notation (str),
"db": "CD" (representing "Cantus Database"; other databases have different abbreviations - str)
}
The CSV Export API is used to share information for all chants/sequences in a source in CSV format. It can be accessed via /csv/<source_id>
(for example, http://206.12.93.196/csv/123610). It corresponds to OldCantus's csv API.
Each row in the returned CSV file represents a single chant or sequence. It has the following columns:
-
siglum
: The value of the chant'ssiglum
field. A string. -
marginalia
: The value of the chant'smarginalia
field. A string. -
folio
: The value of the chant'sfolio
field. A string. -
sequence
: The value of the chant'ssequence_number
field. An integer. -
incipit
: The value of the chant'sincipit
field. A string. -
feast
: Thename
field of the chant's Feast. A string. -
office
: Thename
field of the chant's Office. A string. -
genre
: Thename
field of the chant's Genre. A string. -
position
: The value of the chant'sposition
field. A string. -
cantus_id
: The value of the chant'scantus_id
field. A string. -
mode
: The value of the chant'smode
field. A string. -
finalis
: The value of the chant'sfolio
field. A string. -
differentia
: The value of the chant'sdifferentia
field. A string. -
differentia_new
: The value of the chant'sdifferentia_new
field. A string. -
fulltext_standardized
: The value of the chant'smanuscript_full_text_std_spelling
field. A string. -
fulltext_ms
: The value of the chant'smanuscript_full_text
field. A string. -
volpiano
: The value of the chant'svolpiano
field. A string. -
image_link
: The value of the chant'smanuscript_full_text
field. A URL. -
melody_id
: The value of the chant'smelody_id
field. A string. -
cao_concordances
: The value of the chant'scao_concordances
field. A string. -
addendum
: The value of the chant'saddendum
field. A string. -
extra
: The value of the chant'sextra
field. A string. -
node_id
: The chant's ID. An integer.
The JSON Melody Export API exports information on all chants/sequences in the database with a given Cantus ID in JSON format. It can be accessed via /json-melody/<cantus_id>
(for example, http://206.12.93.196/json-melody/002085). It corresponds to OldCantus's json-melody API. It corresponds to OldCantus's json-melody API.
The returned file is an array of JSON objects. Each object represents a single chant. Each object has the following keys:
-
"mid"
: The value of the chant'smelody_id
field. A string. -
"nid"
: The chant's ID. An integer. -
"cid"
: The value of the chant'scantus_id
field. A string. -
"siglum"
: The value of the chant'ssiglum
field. A string. -
"srcnid"
: The ID of the chant's Source. An integer. -
"folio"
: The value of the chant'sfolio
field. A string. -
"incipit"
: The value of the chant'sincipit
field. A string. -
"fulltext"
: The value of the chant'smanuscript_full_text
field. A string. -
"volpiano"
: The value of the chant'svolpiano
field. A string. -
"mode"
: The value of the chant'smode
field. A string. -
"feast"
: The ID of the chant's Feast. An integer. -
"office"
: The ID of the chant's Office. An integer. -
"genre"
: The ID of the chant's Genre. An integer. -
"position"
: The value of the chant'sposition
field. A string.
The JSON Node Export API exports all information on a Chant, Sequence, Source or Indexer in JSON format. It can be accessed via /json-node/<id>
(for example, http://206.12.93.196/json-node/123610). It corresponds to OldCantus's json-node API.
JSON Node Export returns a single JSON object containing the values of all the fields of the specified Chant, Sequence, Source or Indexer. The JSON object's keys are the names of the fields of the Chant/etc. in question. For more information on these keys and values, refer to the "Fields" sections of the wiki pages on Chants, Sequences, Sources and Indexers. Note that since our internal variable names differ from those used in OldCantus, the keys in this JSON object are different from the keys used in the OldCantus API.
The JSON Node export API does not return responses for objects with IDs greater than 1000000 (one million). It works for all objects imported from OldCantus, but all objects newly created in NewCantus are not guaranteed to have different IDs from objects from other models (e.g. there may be a source with an ID of 1000001 and also a chant with an ID of 1000001), so they cannot be queried using this API.
The JSON Sources Export API exports information on each published Source in the database in JSON format. It can be accessed via /json-sources
(for example, http://206.12.93.196/json-sources/).
The returned file consists of a single JSON object. Each key in the object is the id of one of the database's sources. Each value is a JSON object with a single key-value pair. This single key is always "csv"
, and the value is a link to the source's CSV Export View. This structure replicates the structure of OldCantus's json-sources API.
The JSON Next Chants API exports information on which chants tend to follow chants with a given Cantus ID. It can be accessed via /json-nextchants/<cantus_id>
(for example, http://206.12.93.196/json-nextchants/007840b). It corresponds to OldCantus's json-nextchants API.
The returned file consists of a single JSON object. Each key in the object is a Cantus ID, and each value is a tally of how many times a chant with that Cantus ID followed a chant with the specified Cantus ID in the database.
The JSON CID API exports information on all the chants in the database matching a given Cantus ID. We believe it is used by Cantus Index to generate its table of concordances from all databases in the Cantus Network. It can be accessed via /json-cid/<cantus_id>
(for example, http://206.12.88.113/json-cid/007438). It corresponds to OldCantus's json-cid API.
It returns data in the following format:
{
"chants": [
{
"chant": {
"siglum": the chant's source's siglum (str),
"srclink": link to the chant's source's detail page (str),
"chantlink": link to the chant's detail page (str),
"folio": the chant's folio (str),
"sequence": the chant's sequence (int)
"incipit": the chant's incipit (str),
"feast": the chant's feast's name (str),
"genre": the chant's genre's name (1 or 2 letters - str),
"office": the chant's office's name (1 or 2 letters - str),
"position": the chant's position (str),
"mode": the chant's mode (str),
"image": the chant's image link (str),
"melody": the chant's volpiano (str),
"fulltext": the chant's full text (MS Spelling) (str),
"db": "CD" (str)
},
},
{
"chant": {
etc.
}
}
]
}
In case a chant is missing a folio/feast/etc., an empty string substitutes for the null
that would otherwise be displayed.
There is one notable difference between OldCantus's implementation of this API and NewCantus's: OldCantus includes a "chantlinkOLD"
key in addition to a "chantlink"
key. The chantlinkOLD
item had a URL with http://
, whereas chantlink
had a URL with https://
. NewCantus doesn't include a chantlinkOLD
key.
NewCantus has two APIs that list pages stored in the database. They are used for a link-checking script, which ensures that none of these pages contain dead links. The first API returns a list of URLs, separated by spaces, for all the articles on the site; it is accessible at /articles-list/
. The second returns a list of space-separated URLs for all the flat pages on the site, and it is accessible at /flatpages-list
.
Returns a JSON object with data about a specified Notation, in the following format:
{
"id" (int): the Notation's ID,
"name" (str): the Notation's name,
"date_created" (ISO date/time): when the Notation was created,
"date_updated" (ISO date/time): when the Notation was last updated,
"created_by" (int): the ID of the user that created the Notation,
"last_updated_by" (int): the ID of the user that most recently updated the Notation
}
(as of 2024 Jan 12, this API is not yet live.)
Returns a JSON object with data about a specified Provenance, in the following format:
{
"id" (int): the Provenance's ID,
"name" (str): the Provenance's name,
"date_created" (ISO date/time): when the Provenance was created,
"date_updated" (ISO date/time): when the Provenance was last updated,
"created_by" (int): the ID of the user that created the Provenance,
"last_updated_by" (int): the ID of the user that most recently updated the Provenance
}
(as of 2024 Jan 12, this API is not yet live.)
Corresponds to CantusDB's csv_export API. It can be accessed via /sites/default/files/csv/<source_id>
(for example, https://cantus.uwaterloo.ca/sites/default/files/csv/123610).
In situations where a source has no chants and only sequences, OldCantus outputs a csv file with no rows and only a header.
Corresponds to CantusDB's json_melody_export API. It can be accessed via /json-melody/<cantus_id>
(for example, https://cantus.uwaterloo.ca/json-melody/002085).
Corresponds to CantusDB's json_node_export API. It can be accessed via /json-node/<pk>
(for example, https://cantus.uwaterloo.ca/json-node/123610).
OldCantus's json-node
API is used extensively in the scripts used to migrate data from OldCantus to Cantus DB.
Corresponds to CantusDB's json_sources API. It can be accessed via /json-sources/
(for example, https://cantus.uwaterloo.ca/json-sources/).
Corresponds to CantusDB's json_nextchants API. It can be accessed via /json-nextchants/<cantus_id>
(for example, http://cantus.uwaterloo.ca/json-nextchants/007840b).
It can be accessed /json-cid/<cantus_id>
(for example, https://cantus.uwaterloo.ca/json-cid/006583a). The format seems similar to Cantus Index's json-con
concordances API, so it is probably used by CI for compiling its list of concordances.
-
https://cantusindex.org/json-cantusids lists all Cantus IDs
-
https://cantusindex.org/json-merged-chants lists changes to Cantus IDs
-
documentation on some of Cantus Index's APIs can be found at https://github.com/dact-chant/cantus-index