Get started
Quickstart
Create an API key, make your first authenticated request and create a consultation in about five minutes.
This guide takes you from nothing to a working integration: you create a personal API key, confirm that it works, find the clinic you want to work in, and create your first consultation. Every request below is real; the responses were recorded against a Vetnio instance with synthetic data.
Before you start
You need a Vetnio account with access to at least one clinic (Vetnio calls a clinic a workspace). The API acts with exactly the permissions your account has in the app, so use an account that can see the clinics you want to integrate with.
All requests go to one base URL and send JSON:
https://vetnio.com/api/v21. Create a personal API key
- Sign in to Vetnio and open Settings from the sidebar.
- Select the API Keys tab and choose Create API Key.
- Give the key a name that tells you later where it is used, for example Practice system integration, and create it.
- Copy the key straight away. It starts with
sk_live_and is shown only once. If you lose it, delete it and create a new one.
Store the key the way you would store a password, for example in your secret manager or an environment variable. The examples in these docs read it from VETNIO_API_KEY:
export VETNIO_API_KEY="sk_live_..."2. Make your first request
Send the key as a Bearer token. GET /user/me returns the user the key belongs to, which makes it a good connectivity check:
curl https://vetnio.com/api/v2/user/me \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"id": "c1b0f2a0-f819-5fcc-a2ed-85db0cef66a7"
}A missing, mistyped or revoked key returns 401 Unauthorized with a JSON body that explains the problem. See Errors for the full error format.
3. Find your clinic
Almost every endpoint is scoped to a clinic through a workspaceId in the path. GET/workspaces returns the clinics your key can access and your role in each:
curl https://vetnio.com/api/v2/workspaces \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"workspaces": [
{
"id": "demo-north-clinic",
"name": "DEMO North Clinic",
"role": "admin",
"phoneCallIntegrationEnabled": false,
"revenueRecoveryEnabled": false
}
]
}Workspace IDs are stable, human-readable slugs. Save the one you need; you will use it in every clinic-scoped URL.
4. Create a consultation
A consultation is one visit. It holds the recording, the transcript, uploaded files and the documents Vetnio writes. Create one with POST/workspaces/{workspaceId}/consultations:
curl -X POST https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations \
-H "Authorization: Bearer $VETNIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Bella - vaccination",
"recordingLanguageCode": "en",
"externalId": "pims-visit-10482"
}'{
"consultationId": "71476b24-7171-496a-bf4d-23ad157a0e09",
"recordingUploadUrl": "https://storage.example.com/recordings/demo-north-clinic/71476b24-7171-496a-bf4d-23ad157a0e09/1791129741217-en?X-Amz-Expires=86400&X-Amz-Signature=…",
"consultation": {
"id": "71476b24-7171-496a-bf4d-23ad157a0e09",
"name": "Bella - vaccination",
"createdAt": "2026-10-04T16:02:21.208Z",
"recordingDurationInMilliseconds": 0,
"uploadedRecordingDurationInMilliseconds": 0,
"isGeneratingClinicalNote": false,
"isGeneratingCommunication": false,
"externalId": "pims-visit-10482"
}
}Three things are worth knowing about this response:
externalIdis your own identifier for the visit, such as the appointment ID in your practice system. If you send the sameexternalIdagain, Vetnio returns the existing consultation instead of creating a duplicate, so retrying a timed-out request is safe.recordingUploadUrlis a pre-signed storage URL that is valid for 24 hours. You upload audio to it directly; it is not a Vetnio API endpoint. Document a visit end to end shows the whole recording flow.- The consultation appears in the clinic's consultation list in Vetnio straight away, just like one created in the app.
5. Read the consultation and its clinical note
Fetch the consultation to follow its progress. transcriptionStatus tells you where the recording is in the pipeline:
curl https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations/dfd6e768-51dd-5fcb-a786-c6dffe511d5f \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"id": "dfd6e768-51dd-5fcb-a786-c6dffe511d5f",
"name": "DEMO Milo - annual wellness visit",
"createdAt": "2026-09-08T09:00:00.000Z",
"recordingDurationInMilliseconds": 31143,
"recordingDurationInMillisecondsExcludingSilence": 31143,
"isGeneratingClinicalNote": false,
"isGeneratingCommunication": false,
"isReadyForGeneration": true,
"clinicalNoteJsonTemplateId": null,
"linkEntryId": null,
"linkJournalId": null,
"transcriptionStatus": "completed",
"transcriptionFailureReason": null
}Once a clinical note exists, read it with GET/workspaces/{workspaceId}/consultations/{consultationId}/records. Free-text records are returned as an HTML string:
curl "https://vetnio.com/api/v2/workspaces/demo-north-clinic/consultations/dfd6e768-51dd-5fcb-a786-c6dffe511d5f/records?recordType=clinical%20note" \
-H "Authorization: Bearer $VETNIO_API_KEY""<p>SYNTHETIC DEMO — Milo</p><h2>Subjective</h2><p>Synthetic case: normal appetite and activity; no recent vomiting or cough reported.</p><h2>Objective</h2><p>Demo observations: bright and comfortable; weight 28.4 kg; mild dental plaque.</p>…"Next steps
- Document a visit end to end: upload audio, transcribe it and generate the clinical note.
- Data model: how organizations, clinics, consultations, records, patients and templates fit together.
- Errors and Pagination: the conventions every endpoint follows.
- The API reference documents every endpoint, parameter and field.
Endpoints used in this guide
Last reviewed against the API on 2026-10-26.