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/api

Rate limit

60 requests / min per key

Authentication

Pass your API key as a Bearer token in the Authorization header on every request. Issue keys at /developers.

bash
curl "https://www.chatvioniko.com/api/pdfcustomers?fileName=invoice.pdf&telephone=1234567890&name=John%20Doe" \
  -H "Authorization: Bearer YOUR_API_KEY"

Fetch customers

GET/api/pdfcustomers

Wrap 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:

  • fileNamefileNameParam
  • telephonetelephoneParam
  • namenameParam
javascript
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.

json
[
  {
    "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:

StatusWhen it happens
401Missing, malformed, empty or invalid API key.
403The key’s account has no active subscription.
429More than 60 requests in a minute for that key.
500Unexpected server error — safe to retry.