Quickstart
This takes about ten minutes. You will sign up, create a workspace and an API key, search the statute corpus with one request, and run a first citation check. Today that check confirms an Act, not a section: step 7 shows the response and what it means.
Replace mdt_live_… in the examples with your own key, and mandatum.intergentech.ai with your deployment's host if it differs.
1. Sign up #
Go to sign up and enter your email address. We send a six-digit code to that address. Enter it on the next screen, or use the sign-in link in the email.
2. Create a workspace #
Your first sign-in lands you on Create a workspace (/w/new). Name it. Your workspace is where keys, matters and usage live.
API keys are created by a workspace owner or admin. If you joined someone else's workspace as a member, ask an owner to create the key, or to make you an admin.
3. Open API keys #
In the workspace sidebar, open API keys. It sits under the workspace settings group, which appears only for owners and admins. The address is /w/<your-workspace>/settings/integrations.
4. Create a key #
- Enter a name, for example
quickstart. - Leave Expires at 90 days, or choose another period. A key past its expiry is refused with
401. - Choose Create Key.
The secret starts with mdt_live_ in production and is shown once. Copy it now and store it in an environment variable, not in source code. If you lose it, rotate the key.
5. Turn on the scopes #
Each key has a Sharing Controls panel. A new key starts with Search Statutes switched on. Switch on Verify Citations as well. The two switches grant the searchStatutes and citation:verify scopes. A key with neither scope sees no tools.
Export the key so the rest of the steps can use it:
export MANDATUM_API_KEY="mdt_live_your_key_here"
export MANDATUM_BASE="https://mandatum.intergentech.ai"6. Search the corpus #
curl "$MANDATUM_BASE/api/v1/statutes/search?query=data%20protection&jurisdiction=BB" \
-H "Authorization: Bearer $MANDATUM_API_KEY"A 200 response looks like this. The title and jurisdiction are what the corpus holds for this Act. The ids and the section and body fields are shown as placeholders:
{
"results": [
{
"id": "3f1c…",
"section_number": "…",
"title": "Data Protection Act, 2019-29",
"body": "…",
"statute_id": "9a0b…",
"jurisdiction": "BB"
}
],
"applied_filter": { "jurisdictions": ["BB"], "source": "param" }
}limit defaults to 10. Leave out jurisdiction and the workspace's home jurisdiction applies. applied_filter tells you which filter ran. Use jurisdiction=all to search every jurisdiction.
7. Run a citation check #
curl -X POST "$MANDATUM_BASE/api/v1/citations/verify" \
-H "Authorization: Bearer $MANDATUM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"citations": ["Data Protection Act 2019"],
"jurisdiction": "BB"
}'The response has one result per citation, in the order you sent them. This is the shape for an Act-level citation in Barbados:
{
"results": [
{
"citation": "Data Protection Act 2019",
"found": true,
"match": "exact",
"statute_id": "9a0b…",
"section_id": null,
"title": "Data Protection Act, 2019-29",
"section_heading": null,
"jurisdiction": "BB",
"confidence": 0.95,
"reason": "act_title",
"section_designation": null,
"current": null,
"repealed": null,
"currency_state": "unknown",
"unknown_reasons": ["section_not_resolved", "no_currency_source"],
"verdict": "section_designation_unknown"
}
],
"verified_at": "2026-08-27T18:04:11.000Z",
"units": [{ "unit": "verified_citation", "count": 0 }]
}Read verdict first. For this citation it is section_designation_unknown, and the Act has resolved. resolved is reserved for a section pinpoint, which the resolver refuses until it holds that jurisdiction's section numbering (GB and US first, as the backfill lands; Barbados sections are never pinpointed from the printed PDFs). So a citation that names a section in Barbados, such as Companies Act, Cap. 308, s. 12, will not resolve today either, and nothing is billed for it.
verdict |
Meaning | Billed |
|---|---|---|
resolved |
A statute and a section both resolved. This is the result you can build on. | 1 verified_citation |
not_found |
Nothing resolved. Check the citation string and add a jurisdiction. |
0 |
ambiguous |
More than one statute matched. Narrow it with jurisdiction. |
0 |
section_designation_unknown |
The statute resolved, but the resolver does not hold the section numbering for it, so no section can be pinpointed. Anchor to the Act and say the pinpoint is unverified. Split multi-section citations into one call per section. | 0 |
section_designation_unknown with reason section_partially_designated |
The statute resolved and some of its sections are designated, but the cited one is not among them. Its absence is not asserted; retry after the backfill for that Act completes. | 0 |
match says how the citation was resolved. An exact match is safe to act on. A title-fuzzy match is a suggestion for a person to confirm, not a verification.
verdict answers whether the citation points at a real provision. It says nothing about whether that provision is in force. currency_state is unknown in the example above, because no currency source has been checked yet. Do not treat found: true as "in force".
8. You are done #
You have a working key, a successful search and a first citation check that resolved to an Act. From here:
- Connect a client with the connect guides, or call the REST API from code. The API reference has every route with a try-it console.
- Read the tool catalogue to see the other 14 tools and the scopes that unlock them.
- Set up webhooks if you run long workflows.
- Watch your usage on the workspace usage page.
When a call fails #
| You see | Usually means | Do this |
|---|---|---|
401 with an error message |
The key is missing, mistyped, revoked or expired. | Check the Authorization header, then create a new key. |
403 with "code": "tool_not_enabled_for_key" |
The key lacks the scope this call needs. | Switch the matching scope on under Sharing Controls. |
400 with "code": "bad_request" |
The body failed validation. The error text lists the issues. |
Fix the field it names. A batch takes at most 50 citations of 512 characters each. |
429 |
You went over 100 requests in a minute for this key or IP. | Wait at least a minute before retrying. See rate limits. |
When you ask for help, quote the request_id from the error body, which is also in the x-request-id response header. Errors are described in full in Errors.