Resources · Reference
API documentation
Use the Vioniko HTTP API from your own backend. Issue a key on /developers and pass it on every request.
Overview
The Vioniko HTTP API lets you read the customer records your assistants and voice bots collect — the name, phone number and the PDF each record came from. There is a single endpoint today; all responses are JSON.
Base URL
https://www.chatvioniko.com/apiRate limit
60 requests / min per keyAuthentication
Pass your API key as a Bearer token in the Authorization header on every request. Issue keys at /developers.
curl "https://www.chatvioniko.com/api/pdfcustomers?fileName=invoice.pdf&telephone=1234567890&name=John%20Doe" \
-H "Authorization: Bearer YOUR_API_KEY"Fetch customers
/api/pdfcustomersWrap the call in a small helper so retries and redirects are handled the same way every time. Your API key goes in the Authorization header; the following optional query filters narrow the results:
fileNamefileNameParamtelephonetelephoneParamnamenameParam
const https = require('https');
// The API key is sent as a Bearer token in the Authorization header.
// fileName / telephone / name are optional filters passed in the query string.
function fetchCustomerData(apiKey, filters = {}, attempt = 0) {
const queryParams = new URLSearchParams();
for (const [key, value] of Object.entries(filters)) {
if (value) queryParams.set(key, value);
}
const options = {
hostname: 'www.chatvioniko.com',
path: `/api/pdfcustomers?${queryParams.toString()}`,
method: 'GET',
headers: {
Authorization: `Bearer ${apiKey}`,
},
};
const req = https.request(options, (res) => {
if ([301, 302, 307, 308].includes(res.statusCode) && res.headers.location) {
if (attempt > 5) {
console.error('Too many redirects');
return;
}
const next = new URL(res.headers.location, `https://${options.hostname}`);
options.hostname = next.hostname;
fetchCustomerData(apiKey, filters, attempt + 1);
return;
}
console.log(`statusCode: ${res.statusCode}`);
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
try {
const parsedData = JSON.parse(data);
console.log('Response:', parsedData);
} catch (error) {
console.error('Error parsing JSON:', error);
}
});
});
req.on('error', (error) => {
console.error(error);
});
req.end();
}
// Example usage
fetchCustomerData('YOUR_API_KEY', {
fileName: 'invoice.pdf',
telephone: '1234567890',
name: 'John Doe',
});Response
A successful call returns 200 with a JSON array of the matching records, newest first — or an empty array [] when nothing matches. Each record also carries any other fields stored on it.
[
{
"userId": "9x2KpQ…",
"name": "John Doe",
"phone": "1234567890",
"fileName": "invoice.pdf",
"createdAt": "2026-03-14T09:12:00.000Z",
"day": "Fri Mar 14 2026",
"time": "09:12:00"
}
]Errors
Errors come back as JSON with a single error string and the matching status code:
| Status | When it happens |
|---|---|
401 | Missing, malformed, empty or invalid API key. |
403 | The key’s account has no active subscription. |
429 | More than 60 requests in a minute for that key. |
500 | Unexpected server error — safe to retry. |