curl --request POST \
--url https://api.aireserve.com/v1/extractions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "clairic",
"fields": {},
"state": "<string>",
"images": [
"<unknown>"
],
"reference_date": "<string>",
"options": {
"include_quantiles": true,
"return_state_text": true
}
}
'import requests
url = "https://api.aireserve.com/v1/extractions"
payload = {
"model": "clairic",
"fields": {},
"state": "<string>",
"images": ["<unknown>"],
"reference_date": "<string>",
"options": {
"include_quantiles": True,
"return_state_text": True
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'clairic',
fields: {},
state: '<string>',
images: ['<unknown>'],
reference_date: '<string>',
options: {include_quantiles: true, return_state_text: true}
})
};
fetch('https://api.aireserve.com/v1/extractions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));Typed extraction (text, number, date, list, estimate, forecast)
Send text and/or up to 4 images plus a schema of typed fields — text (a span of the input), number, date / time / datetime, duration, list, estimate (a distribution over a range), forecast (per-step estimates) — and get a value, calibrated confidence and null probability for every field in one forward pass. No free-form text, no reasoning tokens; a field the input does not determine comes back null. Billed per input token under clairic (64K context); output tokens are free.
curl --request POST \
--url https://api.aireserve.com/v1/extractions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "clairic",
"fields": {},
"state": "<string>",
"images": [
"<unknown>"
],
"reference_date": "<string>",
"options": {
"include_quantiles": true,
"return_state_text": true
}
}
'import requests
url = "https://api.aireserve.com/v1/extractions"
payload = {
"model": "clairic",
"fields": {},
"state": "<string>",
"images": ["<unknown>"],
"reference_date": "<string>",
"options": {
"include_quantiles": True,
"return_state_text": True
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'clairic',
fields: {},
state: '<string>',
images: ['<unknown>'],
reference_date: '<string>',
options: {include_quantiles: true, return_state_text: true}
})
};
fetch('https://api.aireserve.com/v1/extractions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));Authorizations
Your AI Reserve API key (aireserve_api_…) from the API Keys page in the portal (https://portal.aireserve.com/keys).
Body
Extraction model: clairic (64K context, text + images).
clairic Map of field name → typed field spec; 1 to 256 fields. Answers come back under the same names. Fields that do not fit next to the state in one pass are split across parallel passes upstream.
Show child attributes
Show child attributes
The text to read and extract from. Text answers are character spans of this string. Required unless images is sent. Long text is truncated upstream to fit the model's context (truncated: true in the response).
Up to 4 embedded PNG / JPEG / WebP images placed before the state, as data: URLs or {content_type, base64} objects (4 MiB each, 8 MiB total decoded; remote URLs are not accepted). Each image bills at most 4,096 input tokens.
4ISO date that anchors dates written without a year.
40Show child attributes
Show child attributes
Response
Default Response