curl --request GET \
--url https://api.lighton.ai/api/v3/content-types/templates \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.lighton.ai/api/v3/content-types/templates"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.lighton.ai/api/v3/content-types/templates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.lighton.ai/api/v3/content-types/templates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.lighton.ai/api/v3/content-types/templates"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.lighton.ai/api/v3/content-types/templates")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.lighton.ai/api/v3/content-types/templates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"content_types": [
{
"path": "legal",
"code": "legal",
"label": "Legal",
"description": "Legal documents: contracts, litigation, compliance, opinions, and filings.",
"children": [
{
"code": "contract",
"label": "Contract",
"description": "Binding agreements between parties: NDAs, SLAs, MSAs, employment, and licensing.",
"path": "legal:contract",
"children": [
{
"code": "nda",
"label": "Non-Disclosure Agreement",
"description": "",
"path": "legal:contract:nda"
},
{
"code": "sla",
"label": "Service Level Agreement",
"description": "",
"path": "legal:contract:sla"
}
]
},
{
"code": "litigation",
"label": "Litigation",
"description": "Court proceedings: briefs, motions, depositions, and court orders.",
"path": "legal:litigation",
"children": [
{
"code": "brief",
"label": "Legal Brief",
"description": "",
"path": "legal:litigation:brief"
}
]
}
],
"attributes": {
"legal": [
{
"name": "jurisdiction",
"label": "Jurisdiction",
"type": "multi-select",
"required": false,
"description": "Legal jurisdiction(s) governing the document",
"choices": [
"FR",
"US",
"UK",
"DE",
"CH"
]
},
{
"name": "confidentiality_level",
"label": "Confidentiality Level",
"type": "select",
"required": false,
"choices": [
"Public",
"Internal",
"Confidential",
"Strictly Confidential"
]
}
],
"legal:contract": [
{
"name": "contract_value",
"label": "Contract Value",
"type": "number",
"required": false,
"description": "Total monetary value of the contract"
},
{
"name": "effective_date",
"label": "Effective Date",
"type": "date",
"required": false
}
],
"legal:contract:nda": [
{
"name": "counterparty",
"label": "Counterparty",
"type": "text",
"required": true,
"description": "Name of the other party to the NDA"
},
{
"name": "is_mutual",
"label": "Is Mutual",
"type": "boolean",
"required": false,
"description": "Whether the NDA applies symmetrically to both parties"
}
]
}
}
]
}List content type templates
Browse the platform’s starter-kit templates for content types. These are ready-made taxonomies (legal, finance, healthcare, tech, manufacturing) you can adopt to quickly organise your documents, no manual setup required.
Getting started:
- Browse templates here to see what’s available
- Adopt the ones you need:
POST /api/v3/content-types {"action": "adopt", "paths": ["legal", "finance"]} - Once adopted, they become your company’s own content types, fully editable
- Customize: rename nodes, add children, define new attributes, or delete what you don’t need
- Create entirely new content types from scratch with
define_content_type
All write operations happen on POST /api/v3/content-types. This endpoint
is read-only: it shows the catalog of available templates.
After adoption, manage your company’s content types (adopted + custom)
via GET /api/v3/content-types and POST /api/v3/content-types.
Classify files with POST /api/v3/files/{id}/facets.
Query modes:
- No params → full detail for all templates (children + attributes)
?path=legal→ detail for one template?path=legal,finance→ detail for multiple (comma-separated)?path=legal:contract:nda→ detail for a nested node?depth=0→ root info only (code, label, description, no children/attributes)?depth=1→ roots + direct children only?include_attributes=false: omit attribute definitions for a lighter response
Path separator: : (colon). Example: legal:contract:nda
Attribute inheritance: Attributes defined at a parent node are inherited
by all its children. A document classified as legal:contract:nda gets
attributes from legal, legal:contract, and legal:contract:nda.
curl --request GET \
--url https://api.lighton.ai/api/v3/content-types/templates \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.lighton.ai/api/v3/content-types/templates"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.lighton.ai/api/v3/content-types/templates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.lighton.ai/api/v3/content-types/templates",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.lighton.ai/api/v3/content-types/templates"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.lighton.ai/api/v3/content-types/templates")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.lighton.ai/api/v3/content-types/templates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"content_types": [
{
"path": "legal",
"code": "legal",
"label": "Legal",
"description": "Legal documents: contracts, litigation, compliance, opinions, and filings.",
"children": [
{
"code": "contract",
"label": "Contract",
"description": "Binding agreements between parties: NDAs, SLAs, MSAs, employment, and licensing.",
"path": "legal:contract",
"children": [
{
"code": "nda",
"label": "Non-Disclosure Agreement",
"description": "",
"path": "legal:contract:nda"
},
{
"code": "sla",
"label": "Service Level Agreement",
"description": "",
"path": "legal:contract:sla"
}
]
},
{
"code": "litigation",
"label": "Litigation",
"description": "Court proceedings: briefs, motions, depositions, and court orders.",
"path": "legal:litigation",
"children": [
{
"code": "brief",
"label": "Legal Brief",
"description": "",
"path": "legal:litigation:brief"
}
]
}
],
"attributes": {
"legal": [
{
"name": "jurisdiction",
"label": "Jurisdiction",
"type": "multi-select",
"required": false,
"description": "Legal jurisdiction(s) governing the document",
"choices": [
"FR",
"US",
"UK",
"DE",
"CH"
]
},
{
"name": "confidentiality_level",
"label": "Confidentiality Level",
"type": "select",
"required": false,
"choices": [
"Public",
"Internal",
"Confidential",
"Strictly Confidential"
]
}
],
"legal:contract": [
{
"name": "contract_value",
"label": "Contract Value",
"type": "number",
"required": false,
"description": "Total monetary value of the contract"
},
{
"name": "effective_date",
"label": "Effective Date",
"type": "date",
"required": false
}
],
"legal:contract:nda": [
{
"name": "counterparty",
"label": "Counterparty",
"type": "text",
"required": true,
"description": "Name of the other party to the NDA"
},
{
"name": "is_mutual",
"label": "Is Mutual",
"type": "boolean",
"required": false,
"description": "Whether the NDA applies symmetrically to both parties"
}
]
}
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Tree depth limit. Default (omitted) = full tree. 0 = root info only (no children, no attributes). 1 = roots + direct children. N = N levels of children.
Include attribute definitions per content type node. Default: true.
Content type path(s), colon-separated hierarchy. Comma-separated for multiple (e.g., ?path=legal,finance, ?path=tech,manufacturing, or ?path=legal:contract:nda). Root codes: finance, healthcare, legal, manufacturing, tech