API reference · Data export
Read-only exports of an organization's, clinic's or user's own configuration: templates, settings and transcription terms, including retained versions. Requires a personal key (or session) with admin rights for the scope; organization and clinic keys are not accepted.
Guides:Export configuration
One page of a template's retained stored versions.
currentVersionIdstringrequirednullableVersion ID of the template's current body at the time of the request, or null when there is no current body. Unlike artifact.currentVersionId, a legacy unversioned body is reported here as the literal string "null".
versionsarray of objectsrequiredRetained versions on this page, newest first. A page can hold fewer than 50 versions even when more follow.
versionIdstringrequiredOpaque stored version ID. A literal null version belongs to unversioned or suspended storage and can be overwritten.
isLatestbooleanrequiredtrue when this version is the template's current body.
lastModifiedstring (date-time)requirednullableWhen this version was stored (ISO-8601 UTC), or null if unknown.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
sizenumberrequirednullableSize of this version's body in bytes, or null if unknown.
auditobjectrequirednullableAudit details of the edit that saved this version. Only available for workspace note templates and part=content; null otherwise, or when no matching audit entry exists. Not a clinical approval or accuracy classification.
idstringrequiredID of the audit-log entry (UUID).
occurredAtstring (date-time)requiredWhen the change was made (ISO-8601 UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
actorNamestringrequirednullableDisplay name of the person who made the change, or null when unknown or for system changes. For changes made by Vetnio support on a customer's behalf, this is the support staff member.
actorTypeenumrequiredWho made the change:
user — a member of the customer's team.vetnio_staff — Vetnio staff, for example while providing support.system — an automated process.actionstringrequiredAudit action that saved this version, for example template.created, template.content_updated or template.restored.
s3VersionIdstringrequiredThe stored version ID the audit entry refers to; equals the version's versionId.
nextCursorstringrequirednullablePass this value as cursor to fetch older versions. null when the history is complete.
{
"currentVersionId": "6724a0ca2bee9d9a882658b15770245e",
"versions": [
{
"versionId": "6724a0ca2bee9d9a882658b15770245e",
"isLatest": true,
"lastModified": "2026-10-04T16:06:01.000Z",
"size": 98,
"audit": {
"id": "aa48304c-abbe-4861-b88d-6e26369d28ff",
"occurredAt": "2026-10-04T16:06:01.609Z",
"actorName": "Alex Demo",
"actorType": "user",
"action": "template.content_updated",
"s3VersionId": "6724a0ca2bee9d9a882658b15770245e"
}
},
{
"versionId": "6724a0ca2f3535f14f0ea6004b3d900c",
"isLatest": false,
"lastModified": "2026-10-04T16:06:01.000Z",
"size": 79,
"audit": {
"id": "83641a24-e021-4995-91a4-7e1569073f8a",
"occurredAt": "2026-10-04T16:06:01.554Z",
"actorName": "Alex Demo",
"actorType": "user",
"action": "template.content_updated",
"s3VersionId": "6724a0ca2f3535f14f0ea6004b3d900c"
}
}
],
"nextCursor": null
}GET/organizations/{organizationId}/data-export/content
Exports the current stored settings and the current transcription term list of exactly this scope as versioned JSON (schemaVersion 1), with an inventory that lists what is included, what is excluded and how to interpret it. Credentials, billing identifiers and other scopes' private settings are never included. Values are read at request time, so this is neither a change history nor an atomic snapshot. Read-only. Covers the organization's identity, address, custom domains, billing presentation preferences, audio-retention policy and organization term list. Requires admin rights in the organization. Accepts a browser session or a personal API key; organization and workspace API keys (sk_org_…, sk_ws_…) get 403.
AcceptsPersonal key
organizationIdstringrequiredIdentifier of the organization to export (a UUID). The caller must be an admin of it.
schemaVersionnumberrequiredVersion of the export format. Currently always 1.
exportedAtstring (date-time)requiredWhen this export was produced (ISO 8601, UTC). Values are read separately, so this is not the time of an atomic snapshot.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
scopeIdstringrequiredID of the exported user, workspace or organization. Equal to configuration.id.
termListobjectrequiredThe scope's current custom transcription vocabulary: names, abbreviations and specialist terms used as spelling and recognition hints. When no list has been saved, terms is empty, version is 0 and updatedAt and updatedBy are null.
termsarray of stringsrequiredTerms in their stored spelling and order. Up to 200 terms, each at most 50 characters and four words. Empty when no list is saved.
versionintegerrequiredEdit-concurrency revision of the list: 1 or higher for a saved list, 0 when none is saved. It increases with each save; earlier contents are not retained.
≥ 0 · ≤ 9007199254740991
updatedAtstring (date-time)requirednullableWhen the list was last saved (ISO 8601, UTC). null when no list is saved.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
updatedBystringrequirednullableID of the user who last saved the list (a UUID). null when no list is saved or that user's account has been deleted.
inventoryobjectrequiredPlain-English statements of what this export covers and how to read it, intended for audit records. The wording can change between releases, so do not parse it.
includedarray of stringsrequiredCategories of content included in this response.
excludedarray of stringsrequiredCategories deliberately left out of this response, such as credentials, billing identifiers and other owners' settings.
limitationsarray of stringsrequiredHow to interpret this export, for example that it contains current values only and is not an atomic snapshot.
scopeenumrequiredExported scope. Always organization for this endpoint.
configurationobjectrequiredIdentity, address, email domains, audio retention policy and allowlisted preferences of the organization.
idstringrequiredID of the organization (a UUID).
namestringrequiredOrganization name.
addressobjectrequirednullablePostal address stored for the organization, with unset parts omitted. When the organization is billed as one legal entity (preferences.billingLegalName is set), invoices are addressed here. null when no address has been stored.
streetstringoptionalStreet address line. Absent when not set.
attentionstringoptionalAttention line of the address, for example a department or contact person. Absent when not set.
citystringoptionalCity. Absent when not set.
stateProvincestringoptionalState, province or county. Absent when not set.
zipCodestringoptionalPostal or ZIP code, as entered. Absent when not set.
countryCodestringoptionalTwo-letter ISO 3166-1 alpha-2 country code. Absent when not set.
customDomainsarray of stringsrequiredEmail domains that belong to the organization. When a user with an address at one of these domains creates a workspace, or joins one through domain matching, that workspace is linked to the organization. Empty when there are none.
audioFileRetentionPeriodInDaysintegerrequirednullableAudio retention period in days set by the organization (1 to 3650). Consultation and meeting recordings in its clinics older than this are deleted automatically; a clinic's own shorter period still applies. null when not set. Pending change requests are not included.
≥ -9007199254740991 · ≤ 9007199254740991
createdAtstring (date-time)requiredWhen the organization was created (ISO 8601, UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
updatedAtstring (date-time)requiredWhen the organization's stored details were last changed (ISO 8601, UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
preferencesobjectrequiredThe organization's stored preferences. Only allowlisted keys are exported; billing-provider identifiers and integration credentials are left out. A key is absent when never set, and an organization with no stored preferences exports {}.
billingLegalNamestringoptionalLegal entity name that invoices for the organization's clinics are addressed to, at the organization address. Absent when each clinic is billed under its own details.
billingTaxExemptstringoptionalVAT treatment of the billing entity, overriding the treatment derived from its country:
none — VAT is chargedreverse — reverse chargeexempt — VAT-exempt
Absent when the country-based treatment applies.billingTaxIdstringoptionalVAT number of the billing entity. It replaces each clinic's own VAT number on invoices. Absent when not set.
billingClinicAttentionLinebooleanoptionalWhen true, each clinic's name is put on the invoice's attention line so a central accounts-payable team can route the cost. Absent means false.
deepResearchUpgradeRequestsEnabledbooleanoptionalWhether users in the organization's clinics can request the paid Deep Research add-on when their monthly Deep Research quota runs out. A clinic linked to several organizations allows requests if any of them enables this. Absent means false.
aiTitlesEnabledbooleanoptionalDefault for AI-generated consultation titles in the organization's clinics. A clinic's own aiTitlesEnabled setting takes precedence; a clinic without one gets titles if any linked organization has true. Absent means not enabled by this organization.
recordingViewenumoptionalDefault recording display for the organization's clinics. Each clinic can override it. If several linked organizations specify different defaults, briefing takes precedence. Absent means waveform unless another linked organization selects briefing.
Possible values:waveformbriefing
liveTranscriptionEnabledbooleanoptionalDefault for starting live transcription with consultation recording. Each clinic can override it. If several linked organizations specify different defaults, false takes precedence. Absent means enabled unless another linked organization disables it. Audio recording and transcription after recording are unaffected.
curl "https://vetnio.com/api/v2/organizations/3f6c2a1e-8b4d-4c7a-9e2f-5d1b7a9c0e42/data-export/content" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"schemaVersion": 1,
"exportedAt": "2026-09-28T08:15:00.000Z",
"scopeId": "furunculotic-loud-chihuahua",
"termList": {
"terms": [
"Librela",
"Apoquel",
"Bravecto"
],
"version": 3,
"updatedAt": "2026-10-04T09:30:00.000Z",
"updatedBy": "7d1f0c3e-2a4b-4e8f-9c61-5b2a8d4e7f10"
},
"inventory": {
"included": [
"Workspace identity, address and allowlisted settings",
"Current workspace transcription term list"
],
"excluded": [
"Credentials, API keys, OAuth/session/password material and provider connection secrets"
],
"limitations": [
"Current stored values only; separate reads do not form an atomic snapshot"
]
},
"scope": "organization",
"configuration": {
"id": "3f6c2a1e-8b4d-4c7a-9e2f-5d1b7a9c0e42",
"name": "Riverside Veterinary Group",
"address": {
"street": "12 Harbour Street",
"attention": "Accounts Payable",
"city": "Riverside",
"stateProvince": "Riverside County",
"zipCode": "114 51",
"countryCode": "SE"
},
"customDomains": [
"riverside-vet.example"
],
"audioFileRetentionPeriodInDays": -9007199254740991,
"createdAt": "2026-09-28T08:15:00.000Z",
"updatedAt": "2026-09-28T08:15:00.000Z",
"preferences": {
"billingLegalName": "Riverside Veterinary Group AB",
"billingTaxExempt": "reverse",
"billingTaxId": "SE556677889901",
"billingClinicAttentionLine": true,
"deepResearchUpgradeRequestsEnabled": false,
"aiTitlesEnabled": true,
"recordingView": "briefing",
"liveTranscriptionEnabled": false
}
}
}GET/organizations/{organizationId}/data-export/templates
Lists customer-owned templates for export, one page at a time, with metadata and a short-lived download link for each stored body. Pages are ordered by ascending template ID: pass nextCursor back as cursor until it is null. Download links expire after one hour (expiresAt); request the page again for fresh links. Vetnio's read-only default catalog templates are excluded; workspace-owned copies, including managed ones, are included. Read-only. Covers the organization-level template blueprints that can be shared to its clinics. Requires admin rights in the organization. Accepts a browser session or a personal API key; organization and workspace API keys (sk_org_…, sk_ws_…) get 403.
AcceptsPersonal key
organizationIdstringrequiredIdentifier of the organization to export (a UUID). The caller must be an admin of it.
cursorstringoptionalPagination cursor: the nextCursor value from the previous page. Omit for the first page, and keep the same owner and template category while paging. Items with an ID greater than the cursor are returned.
at least 1 characters · at most 512 characters
limitintegeroptionalMaximum number of templates per page, 1-50.
Default 20 · ≥ 1 · ≤ 50
nextCursorstringrequirednullablePass this value as cursor to fetch the next page. null when this is the last page.
expiresInSecondsnumberrequiredLifetime of every contentUrl on this page, in seconds.
expiresAtstring (date-time)requiredWhen the contentUrl links on this page stop working (ISO-8601 UTC). Download before then. Expiry does not affect the stored content.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
itemsarray of objectsrequiredOrganization templates on this page, ordered by ascending ID.
idstringrequiredOrganization template ID.
organizationIdstringrequiredID of the organization that owns the template (UUID).
namestringrequiredTemplate name shown in the app.
typeenumrequiredWhat the template produces:
clinical_note — the clinical note (medical record entry) for a consultation.referral — a referral letter to another clinic or specialist.client_communication — a message to the pet owner.createdBystringrequiredUser ID (UUID) of the organization admin who created the template.
createdAtstring (date-time)requiredWhen the template was created (ISO-8601 UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
artifactobjectrequirednullableDownload of the blueprint body, or null when no stored body exists.
contentUrlstringrequiredSigned HTTPS URL that downloads the stored body without further authentication. It expires at the page's expiresAt (one hour); fetch the page again for a fresh link. Treat it as a secret.
currentVersionIdstringrequirednullableThe downloaded version. Null means storage supplied no immutable version ID, including the legacy null version, so the URL follows the current object.
contentTypestringrequirednullableMedia type of the stored body as recorded by storage, for example text/html or application/json, or null if none was recorded.
sizenumberrequirednullableSize of the stored body in bytes, or null if unknown.
lastModifiedstring (date-time)requirednullableWhen the current body was last written (ISO-8601 UTC), or null if unknown.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
curl "https://vetnio.com/api/v2/organizations/3f6c2a1e-8b4d-4c7a-9e2f-5d1b7a9c0e42/data-export/templates" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"nextCursor": null,
"expiresInSeconds": 3600,
"expiresAt": "2026-09-28T09:15:00.000Z",
"items": [
{
"id": "2a9b8c7d-6e5f-4a3b-9c1d-0e2f4a6b8c0d",
"organizationId": "3f6c2a1e-8b4d-4c7a-9e2f-5d1b7a9c0e42",
"name": "Group clinical note",
"type": "clinical_note",
"createdBy": "0f8fad5b-d9cb-469f-a165-70867728950e",
"createdAt": "2026-03-14T10:02:11.000Z",
"artifact": {
"contentUrl": "https://storage.example.com/templates/furunculotic-loud-chihuahua/5b0d7a3e-2c41-4f0e-9a77-1f3c9e6b8d20?X-Amz-Expires=3600&X-Amz-Signature=…",
"currentVersionId": "string",
"contentType": "text/html",
"size": 2048,
"lastModified": "2026-10-04T09:30:00.000Z"
}
}
]
}GET/organizations/{organizationId}/data-export/templates/version
Returns the exact saved body of one retained template version as UTF-8 text, after checking that the template belongs to this scope. Take versionId from the versions list and URL-encode it. Read-only: it does not restore or modify the template. Returns 404 when the template, or that version of it, is not available. Organization templates have no instructions part: part=instructions returns 400. Requires admin rights in the organization. Accepts a browser session or a personal API key; organization and workspace API keys (sk_org_…, sk_ws_…) get 403.
AcceptsPersonal key
organizationIdstringrequiredIdentifier of the organization to export (a UUID). The caller must be an admin of it.
partenumoptionalWhich stored object of the template to read:
content — the template body itself.instructions — the separate instructions object of an imported template (original wording and per-section instructions). Only workspace note and meeting templates have one; other kinds return 400.Default content
templateIdstringrequiredID of the template, as returned in items[].id by the matching template export. It must belong to the workspace or organization in the path, otherwise 404.
at least 1 characters · at most 512 characters
versionIdstringrequiredOpaque version ID from the versions list (versions[].versionId) or from artifact.currentVersionId. URL-encode it; it can contain characters such as +, / and =.
at least 1 characters · at most 2048 characters
currentVersionIdstringrequirednullableVersion ID of the template's current body at the time of the request, or null when there is no current body. Unlike artifact.currentVersionId, a legacy unversioned body is reported here as the literal string "null".
versionobjectrequiredMetadata of the requested version.
versionIdstringrequiredOpaque stored version ID. A literal null version belongs to unversioned or suspended storage and can be overwritten.
isLatestbooleanrequiredtrue when this version is the template's current body.
lastModifiedstring (date-time)requirednullableWhen this version was stored (ISO-8601 UTC), or null if unknown.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
sizenumberrequirednullableSize of this version's body in bytes, or null if unknown.
contentTypestringrequirednullableMedia type of this version's body as recorded by storage, for example text/html or application/json, or null.
auditobjectrequirednullableAudit details of the edit that saved this version. Only available for workspace note templates and part=content; null otherwise, or when no matching audit entry exists. Not a clinical approval or accuracy classification.
idstringrequiredID of the audit-log entry (UUID).
occurredAtstring (date-time)requiredWhen the change was made (ISO-8601 UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
actorNamestringrequirednullableDisplay name of the person who made the change, or null when unknown or for system changes. For changes made by Vetnio support on a customer's behalf, this is the support staff member.
actorTypeenumrequiredWho made the change:
user — a member of the customer's team.vetnio_staff — Vetnio staff, for example while providing support.system — an automated process.actionstringrequiredAudit action that saved this version, for example template.created, template.content_updated or template.restored.
s3VersionIdstringrequiredThe stored version ID the audit entry refers to; equals the version's versionId.
contentstringrequiredThe exact retained body as UTF-8 text, including HTML instructions or the original JSON schema.
curl "https://vetnio.com/api/v2/organizations/3f6c2a1e-8b4d-4c7a-9e2f-5d1b7a9c0e42/data-export/templates/version?templateId=5b0d7a3e-2c41-4f0e-9a77-1f3c9e6b8d20&versionId=3HL4kqtJlcpXroDTDmJ%2BrmSpXd3dIbrHY" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"currentVersionId": "3HL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY",
"version": {
"versionId": "string",
"isLatest": true,
"lastModified": "2026-10-04T09:30:00.000Z",
"size": 2048,
"contentType": "text/html",
"audit": {
"id": "c4e1a7b2-9d3f-4e8a-b6c5-2f1e0d9c8b7a",
"occurredAt": "2026-09-02T14:30:00.000Z",
"actorName": "Dr. Sam Lee",
"actorType": "user",
"action": "template.content_updated",
"s3VersionId": "3HL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY"
}
},
"content": "string"
}GET/organizations/{organizationId}/data-export/templates/versions
Lists the retained stored versions of one template's body (part=content, the default) or of its imported instructions (part=instructions, document and meeting templates only), newest first, up to 50 per page. Pass nextCursor back as cursor until it is null. The template must belong to this scope, otherwise 404. Deleted templates and Vetnio's default catalog templates are not available. currentVersionId can change while you page if someone edits the template. Organization templates have no instructions part: part=instructions returns 400. Requires admin rights in the organization. Accepts a browser session or a personal API key; organization and workspace API keys (sk_org_…, sk_ws_…) get 403.
AcceptsPersonal key
organizationIdstringrequiredIdentifier of the organization to export (a UUID). The caller must be an admin of it.
partenumoptionalWhich stored object of the template to read:
content — the template body itself.instructions — the separate instructions object of an imported template (original wording and per-section instructions). Only workspace note and meeting templates have one; other kinds return 400.Default content
templateIdstringrequiredID of the template, as returned in items[].id by the matching template export. It must belong to the workspace or organization in the path, otherwise 404.
at least 1 characters · at most 512 characters
cursorstringoptionalOpaque pagination cursor: the nextCursor value from the previous page of this template's versions. Omit for the first page. URL-encode it.
at least 1 characters · at most 2048 characters
currentVersionIdstringrequirednullableVersion ID of the template's current body at the time of the request, or null when there is no current body. Unlike artifact.currentVersionId, a legacy unversioned body is reported here as the literal string "null".
versionsarray of objectsrequiredRetained versions on this page, newest first. A page can hold fewer than 50 versions even when more follow.
versionIdstringrequiredOpaque stored version ID. A literal null version belongs to unversioned or suspended storage and can be overwritten.
isLatestbooleanrequiredtrue when this version is the template's current body.
lastModifiedstring (date-time)requirednullableWhen this version was stored (ISO-8601 UTC), or null if unknown.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
sizenumberrequirednullableSize of this version's body in bytes, or null if unknown.
auditobjectrequirednullableAudit details of the edit that saved this version. Only available for workspace note templates and part=content; null otherwise, or when no matching audit entry exists. Not a clinical approval or accuracy classification.
idstringrequiredID of the audit-log entry (UUID).
occurredAtstring (date-time)requiredWhen the change was made (ISO-8601 UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
actorNamestringrequirednullableDisplay name of the person who made the change, or null when unknown or for system changes. For changes made by Vetnio support on a customer's behalf, this is the support staff member.
actorTypeenumrequiredWho made the change:
user — a member of the customer's team.vetnio_staff — Vetnio staff, for example while providing support.system — an automated process.actionstringrequiredAudit action that saved this version, for example template.created, template.content_updated or template.restored.
s3VersionIdstringrequiredThe stored version ID the audit entry refers to; equals the version's versionId.
nextCursorstringrequirednullablePass this value as cursor to fetch older versions. null when the history is complete.
curl "https://vetnio.com/api/v2/organizations/3f6c2a1e-8b4d-4c7a-9e2f-5d1b7a9c0e42/data-export/templates/versions?templateId=5b0d7a3e-2c41-4f0e-9a77-1f3c9e6b8d20" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"currentVersionId": "3HL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY",
"versions": [
{
"versionId": "string",
"isLatest": true,
"lastModified": "2026-10-04T09:30:00.000Z",
"size": 2048,
"audit": {
"id": "c4e1a7b2-9d3f-4e8a-b6c5-2f1e0d9c8b7a",
"occurredAt": "2026-09-02T14:30:00.000Z",
"actorName": "Dr. Sam Lee",
"actorType": "user",
"action": "template.content_updated",
"s3VersionId": "3HL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY"
}
}
],
"nextCursor": null
}GET/users/me/data-export/content
Exports the current stored settings and the current transcription term list of exactly this scope as versioned JSON (schemaVersion 1), with an inventory that lists what is included, what is excluded and how to interpret it. Credentials, billing identifiers and other scopes' private settings are never included. Values are read at request time, so this is neither a change history nor an atomic snapshot. Read-only. Covers the caller's personal preferences, custom AI instructions and personal term list. Returns only the caller's own settings; no user ID can be passed. Accepts a browser session or a personal API key; organization and workspace API keys (sk_org_…, sk_ws_…) get 403.
AcceptsPersonal key
schemaVersionnumberrequiredVersion of the export format. Currently always 1.
exportedAtstring (date-time)requiredWhen this export was produced (ISO 8601, UTC). Values are read separately, so this is not the time of an atomic snapshot.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
scopeIdstringrequiredID of the exported user, workspace or organization. Equal to configuration.id.
termListobjectrequiredThe scope's current custom transcription vocabulary: names, abbreviations and specialist terms used as spelling and recognition hints. When no list has been saved, terms is empty, version is 0 and updatedAt and updatedBy are null.
termsarray of stringsrequiredTerms in their stored spelling and order. Up to 200 terms, each at most 50 characters and four words. Empty when no list is saved.
versionintegerrequiredEdit-concurrency revision of the list: 1 or higher for a saved list, 0 when none is saved. It increases with each save; earlier contents are not retained.
≥ 0 · ≤ 9007199254740991
updatedAtstring (date-time)requirednullableWhen the list was last saved (ISO 8601, UTC). null when no list is saved.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
updatedBystringrequirednullableID of the user who last saved the list (a UUID). null when no list is saved or that user's account has been deleted.
inventoryobjectrequiredPlain-English statements of what this export covers and how to read it, intended for audit records. The wording can change between releases, so do not parse it.
includedarray of stringsrequiredCategories of content included in this response.
excludedarray of stringsrequiredCategories deliberately left out of this response, such as credentials, billing identifiers and other owners' settings.
limitationsarray of stringsrequiredHow to interpret this export, for example that it contains current values only and is not an atomic snapshot.
scopeenumrequiredExported scope. Always user for this endpoint.
configurationobjectrequiredIdentity and allowlisted personal preferences of the calling user.
idstringrequiredThe user's ID (a UUID).
namestringrequirednullableThe user's display name. null when not set.
preferencesobjectrequiredThe user's stored personal preferences. Only allowlisted keys are exported. A key is absent when the user has never set it; the app then uses the default described on the field, which is not filled in here.
savedRecordingLanguageCodeSelectionstringoptionalRecording language the user last chose, as a Vetnio language code (mostly ISO 639-1, such as en or sv; a few longer codes such as yue or fil). Pre-selects the language for new recordings. Absent when never set.
savedTranslationLanguageCodeSelectionstringoptionalTarget language the user last chose when translating a document, as a language code from the same list as savedRecordingLanguageCodeSelection. Absent when never set.
savedPdfLanguageSelectionstringoptionalLanguage the user last chose for PDF exports, which sets the PDF's labels and headings. One of en, sv, de, it, fr, es, pt, no, nl, fi, da. Absent when never set.
pdfExportPractitionerobjectoptionalPractitioner details the user saved in the PDF export dialog, used to prefill the veterinarian block on exported PDFs. Absent when never saved.
namestringoptionalPractitioner name, up to 160 characters.
emailstringoptionalPractitioner email address as entered (not verified), up to 254 characters.
preferredWorkspaceIdstringoptionalID of the workspace (clinic) the user opens by default, for example when launching Vetnio from a practice-management system. Absent when never set; the first workspace the user can access is then used.
consultationsPerPagenumberoptionalNumber of consultations shown per page in the consultation list, from 1 to 100. Absent when never set; the default is 10.
savedTemplateIdsPerWorkspaceIdobjectoptionalTemplate choices remembered per workspace (clinic), keyed by workspace ID. Updated each time the user submits a consultation. Absent when never set.
phoneCallConversionSettingsPerWorkspaceIdobjectoptionalSettings remembered per workspace (clinic), keyed by workspace ID, for turning a phone call into a consultation. Absent when never set.
customSystemInstructionGeneralstringoptionalThe user's own instructions, added to every AI-generated document and VetsGPT chat they run. Stored verbatim, up to 50,000 characters. Absent when never set.
customSystemInstructionClinicalNotesstringoptionalThe user's own instructions for generating clinical notes, added on top of customSystemInstructionGeneral. Stored verbatim, up to 50,000 characters. Absent when never set.
customSystemInstructionCommunicationsstringoptionalThe user's own instructions for generating client communications, added on top of customSystemInstructionGeneral. Stored verbatim, up to 50,000 characters. Absent when never set.
customSystemInstructionVetsGPTstringoptionalThe user's own instructions for VetsGPT, the chat assistant, added on top of customSystemInstructionGeneral. Stored verbatim, up to 50,000 characters. Absent when never set.
recordingAutoStopSecondsnumberoptionalnullablePersonal recording auto-stop limit in seconds (60 to 86400). When set, it replaces the workspace's recordingAutoStopSeconds for this user's recordings. null when the user cleared their limit; absent when never set. In both cases the workspace limit applies, or 4 hours if the workspace has none.
recordingAutoStopPerSessionbooleanoptionalnullableHow the personal auto-stop limit is measured. true: the timer restarts each time recording starts or resumes. false: the limit covers all audio recorded in the consultation. Only used together with a personal recordingAutoStopSeconds; null or absent means true.
recordingSilenceAlertSoundstringoptionalSound played once when no microphone audio has been detected for 20 seconds during a recording:
off — no soundchime — gentle chimedoubleBeep — double beepbell — bell
Absent when never set, which means off.tipsEnabledbooleanoptionalWhether tips and suggestions are shown while notes are being generated. Absent when never set, which means tips are shown.
clinicalNoteGenerationNoticeEnabledbooleanoptionalWhether a notice is shown when a clinical note starts generating. Absent when never set, which means the notice is shown.
manualWritingEnabledbooleanoptionalWhether the user is offered to write clinical notes, client communications and referral letters themselves instead of recording or generating them. Only applies when the workspace allows it. Absent when never set, which means the option is offered.
noteEditorFontSizestringoptionalText size in the note editor: small, default, large or xlarge. Display only; it does not change the stored note text. Absent when never set, which means default.
noteEditorFontFamilystringoptionalTypeface in the note editor: default, serif or mono. Display only; it does not change the stored note text. Absent when never set, which means default.
copilotModestringoptionalHow VetsGPT applies the note edits it proposes:
manual — each change is shown in the note and applied only after the user approves itauto — changes are applied at once and can be undone
Absent when never set, which means manual.colorModestringoptionalApp color theme: light or dark. Absent when the user has never chosen a theme.
provetExportTargetsstringoptionalFor Provet Cloud users, where exporting a clinical note writes it:
clinicalNote — the consultation's clinical noteclinicalNoteAndImagingReferral — both the clinical note and the imaging referralimagingReferral — the imaging referral only
Absent when never set, which means clinicalNote.provetImagingReferralFieldstringoptionalImaging referral field that receives the note when provetExportTargets includes the imaging referral:
answer_remarks — the referral's answer remarksdiagnosis — the referral's diagnosis
Absent when never set, which means answer_remarks.curl "https://vetnio.com/api/v2/users/me/data-export/content" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"schemaVersion": 1,
"exportedAt": "2026-10-04T16:07:22.318Z",
"scopeId": "c1b0f2a0-f819-5fcc-a2ed-85db0cef66a7",
"termList": {
"terms": [],
"version": 0,
"updatedAt": null,
"updatedBy": null
},
"inventory": {
"included": [
"User identity and allowlisted personal preferences",
"Current personal transcription term list"
],
"excluded": [
"Credentials, API keys, OAuth/session/password material and provider connection secrets",
"Billing-provider identifiers, subscription state and internal operational/provisioning state",
"Unlisted configuration fields and arbitrary provider-specific configuration objects",
"Other owners' personal settings, terms and configuration",
"Clinical records, templates, derived personalization artifacts and legacy aggregate spelling corrections (separate content categories)",
"Configuration/term-list history and retention-change approval events"
],
"limitations": [
"Current stored values only; separate reads do not form an atomic snapshot",
"Unset settings are preserved; effective inherited/default policies are not materialized",
"Term-list version is a concurrency revision, not a retained historical version",
"Customer-authored text is preserved verbatim; the export is not a content-redaction service"
]
},
"scope": "user",
"configuration": {
"id": "c1b0f2a0-f819-5fcc-a2ed-85db0cef66a7",
"name": "Alex Demo",
"preferences": {
"colorMode": "light"
}
}
}GET/workspaces/{workspaceId}/data-export/content
Exports the current stored settings and the current transcription term list of exactly this scope as versioned JSON (schemaVersion 1), with an inventory that lists what is included, what is excluded and how to interpret it. Credentials, billing identifiers and other scopes' private settings are never included. Values are read at request time, so this is neither a change history nor an atomic snapshot. Read-only. Covers the clinic's identity and address, shared settings, PIMS department mappings, workspace term list and, when configured, the letterhead image as a base64 PNG. Requires admin rights in the workspace (workspace admin or superadmin, or an admin of an organization the clinic belongs to). Accepts a browser session or a personal API key; organization and workspace API keys (sk_org_…, sk_ws_…) get 403.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the workspace (clinic) to export. The caller must be an admin of it, directly or as an admin of its organization.
schemaVersionnumberrequiredVersion of the export format. Currently always 1.
exportedAtstring (date-time)requiredWhen this export was produced (ISO 8601, UTC). Values are read separately, so this is not the time of an atomic snapshot.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
scopeIdstringrequiredID of the exported user, workspace or organization. Equal to configuration.id.
termListobjectrequiredThe scope's current custom transcription vocabulary: names, abbreviations and specialist terms used as spelling and recognition hints. When no list has been saved, terms is empty, version is 0 and updatedAt and updatedBy are null.
termsarray of stringsrequiredTerms in their stored spelling and order. Up to 200 terms, each at most 50 characters and four words. Empty when no list is saved.
versionintegerrequiredEdit-concurrency revision of the list: 1 or higher for a saved list, 0 when none is saved. It increases with each save; earlier contents are not retained.
≥ 0 · ≤ 9007199254740991
updatedAtstring (date-time)requirednullableWhen the list was last saved (ISO 8601, UTC). null when no list is saved.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
updatedBystringrequirednullableID of the user who last saved the list (a UUID). null when no list is saved or that user's account has been deleted.
inventoryobjectrequiredPlain-English statements of what this export covers and how to read it, intended for audit records. The wording can change between releases, so do not parse it.
includedarray of stringsrequiredCategories of content included in this response.
excludedarray of stringsrequiredCategories deliberately left out of this response, such as credentials, billing identifiers and other owners' settings.
limitationsarray of stringsrequiredHow to interpret this export, for example that it contains current values only and is not an atomic snapshot.
scopeenumrequiredExported scope. Always workspace for this endpoint.
configurationobjectrequiredIdentity, address, shared settings, PIMS department mappings and letterhead image of the workspace (clinic).
idstringrequiredID of the workspace (clinic).
namestringrequirednullableClinic display name. null when not set.
createdAtstring (date-time)requiredWhen the workspace was created (ISO 8601, UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
addressstringrequirednullableStreet address of the clinic. null when not recorded.
citystringrequirednullableCity of the clinic. null when not recorded.
stateProvincestringrequirednullableState, province or county of the clinic. null when not recorded.
zipCodestringrequirednullablePostal or ZIP code of the clinic. null when not recorded.
countryCodestringrequirednullableTwo-letter ISO 3166-1 alpha-2 country code of the clinic, as stored (letter case is not normalized). null when not recorded.
taxIdstringrequirednullableTax identification number of the clinic, such as a VAT number. null when not recorded.
phonestringrequirednullableClinic phone number, as entered. null when not recorded.
allowPasswordsbooleanrequiredStored value of the workspace's allow-passwords flag. true unless it has been changed.
templatePermissionsstringrequiredWhat members (non-admins) can do with templates:
full_access — view, use and edit templates created by other members (the default)view_only — view and use templates created by others, but not edit themprivate — edit only their own templates, and view only templates created by adminsstrict — only view and use templates created by admins; members cannot create templatesaudioFileRetentionPeriodInDaysintegerrequirednullableAudio retention period in days set on this workspace. Consultation and meeting recordings older than this are deleted automatically. When linked organizations also set a period, the shortest one applies; export each organization to see its period. null when the workspace has no period of its own.
≥ -9007199254740991 · ≤ 9007199254740991
isMeetingsEnabledbooleanrequiredWhether the meetings feature (recording meetings with automatic note generation) is switched on for the workspace.
manualPimsKindstringrequirednullablePractice-management system (PIMS) the clinic uses, recorded by Vetnio staff when no connected integration shows it. It takes precedence over detection:
provet — Provet Cloudlink — Linkanimana — Animanavetmanager — VetManagerfuga — Fugaother — another system, named in manualPimsNamenone — no PIMS
null when not recorded.manualPimsNamestringrequirednullableName of the practice-management system when manualPimsKind is other. null otherwise.
settingsobjectrequiredThe workspace's stored shared settings. Only allowlisted keys are exported; credentials, provider connection details and internal state are left out. A key is absent when it has never been set; the default described on each field then applies and is not filled in here.
consultationVisibilitystringoptionalWhether members can list consultations created by others:
creator — each member's consultation list shows only their own consultationsworkspace — members can filter the list to show colleagues' or everyone's consultations
Absent when never set, which behaves as creator. This affects listing only; any workspace member can open an individual consultation either way.dateFormatstringoptionalDate format the AI uses when writing dates in generated documents: YYYY-MM-DD, DD-MM-YYYY or MM-DD-YYYY. Absent when never set, which means YYYY-MM-DD.
documentHeaderobjectoptionalA short notice placed at the top of AI-generated documents of the selected types. Absent when never configured, which means no header.
headerTypestringrequiredWhich header text is used. Preset texts are written in the document's language:
none — no headerpreset_1 — states that the document was generated with AI assistance and reviewed by a veterinary professionalpreset_2 — marks the document as a confidential veterinary medical recordpreset_3 — states that the document is AI-generated and that clinical details should be verified before usecustom — the text in customTextcustomTextstringoptionalHeader text used when headerType is custom, up to 500 characters. Inserted as plain text. Absent when not set.
enabledDocumentTypesarray of stringsrequiredDocument types that receive the header. An empty array means no document receives it.
pdfExportClinicDetailsobjectoptionalClinic details saved from the PDF export dialog and used to prefill the clinic block on exported PDFs. Shared by all members of the workspace. Absent when never saved; empty fields are omitted.
clinicstringoptionalClinic name to print, up to 500 characters.
addressstringoptionalClinic address to print, up to 500 characters.
zipCodestringoptionalPostal or ZIP code to print, up to 500 characters.
phonestringoptionalClinic phone number to print, as entered, up to 500 characters.
pdfLetterheadobjectoptionalLetterhead layout for PDF exports of clinical notes and meeting notes. Absent when never configured, which means PDFs have no letterhead. The uploaded logo itself is exported in configuration.letterheadAsset.
templateIdstringrequiredLetterhead layout. Current layouts: clean-letterhead (the default), sidebar-summary, centered-letterhead, teal-band. Older layouts that are still supported: logo-left, banner-above, logo-centered. Unknown values are rendered as clean-letterhead.
enabledbooleanoptionalfalse when the letterhead has been switched off; the other settings are kept. Absent or true means the letterhead is used.
includeClinicInfobooleanoptionalWhether the clinic information block is printed on PDFs. Absent means true.
fontIdstringoptionalTypeface for PDF text: system-sans, humanist-sans, classic-serif or document-serif. Absent means system-sans.
logoFitstringoptionalHow the logo is scaled into its area:
contain — the whole logo is shown, keeping its proportions (the default when absent)cover — the logo fills the area, keeping its proportions; edges may be croppedfill — the logo is stretched to the areaaccentColorstringoptionalAccent color as a hex code (#rgb or #rrggbb). Absent when never set; the default is #3d838b.
globalTemplateInstructionsobjectoptionalInstructions the workspace adds to AI-generated documents on top of the chosen template. general applies to every document type; the other fields are added for their own document type only. Stored verbatim. Absent when never set.
generalstringoptionalInstructions added to every AI-generated document, up to 4,000 characters. Absent when never set.
clinicalNotestringoptionalInstructions added when generating clinical notes, up to 4,000 characters. Absent when never set.
referralstringoptionalInstructions added when generating referrals, up to 4,000 characters. Absent when never set.
communicationstringoptionalInstructions added when generating client communications, up to 4,000 characters. Absent when never set.
patientMatchingEnabledbooleanoptionalWhether Vetnio looks for a matching patient record after a consultation's clinical note is generated, so it can be linked to that patient. Absent when never set, which means off.
aiTitlesEnabledbooleanoptionalWorkspace setting for AI-generated consultation titles, written from the clinical note after it is saved. true or false takes precedence over the organization setting. Absent when never set at workspace level; titles are then generated only if a linked organization enables them (aiTitlesEnabled in its organization export).
aiTitlesUseAsNamebooleanoptionalWhether an automatically generated title fills an unnamed consultation's name instead of appearing separately. Existing consultation names are preserved. Absent means false.
aiTitlesNamingStyleenumoptionalAutomatic consultation naming style: patient name and case information, case information only, or custom instructions. Absent means case_only.
Possible values:patient_and_casecase_onlycustom
aiTitlesCustomPromptstringoptionalCustom instructions for automatic consultation names, used when aiTitlesNamingStyle is custom. Up to 1,000 characters. Absent when never set.
recordingAutoStopSecondsnumberoptionalWorkspace recording auto-stop limit in seconds (60 to 86400). Applies to members who have no personal limit. Absent when never set or cleared; the default of 4 hours then applies.
recordingViewenumoptionalRecording display: waveform animation or a pre-visit briefing with a small recording indicator. An explicit workspace value overrides organization defaults. When absent, briefing is used if any linked organization selects it; otherwise waveform.
Possible values:waveformbriefing
liveTranscriptionEnabledbooleanoptionalWhether live transcription starts with consultation recording. An explicit workspace value overrides organization defaults. When absent, live transcription is disabled if any linked organization disables it; otherwise enabled. Audio recording and transcription after recording are unaffected.
recordingAutoStopPerSessionbooleanoptionalHow the workspace auto-stop limit is measured. true: the timer restarts each time recording starts or resumes. false: the limit covers all audio recorded in the consultation. Absent means true.
recordingConcurrencyControlobjectoptionalLimits on simultaneous recordings in the workspace. Absent when never configured, which means no limit.
enabledbooleanoptionalWhether the limit is enforced. When true, the number of recordings active at the same time in the workspace is capped at its number of licensed seats (no cap during a trial or when no seat count is set). Absent means false.
limitActiveRecordingsPerUserbooleanoptionalWhen true and enabled is true, each user can have only one active recording at a time. Absent means false.
heartbeatTimeoutSecondsnumberoptionalSeconds without a signal from the recording device after which an active recording no longer counts toward the limit. Values are clamped to 10 to 120 when applied; absent means 90.
phoneCallIntegrationEnabledbooleanoptionalWhether a phone-call integration is switched on for the workspace. Used to show phone-call features, such as importing a call into the practice-management system from the browser extension. Absent means false.
telephonyEnabledbooleanoptionalWhether telephony is switched on for the workspace. With phoneProvider telnyx_webrtc it enables outbound calls from Vetnio's built-in phone; with starface it enables call import. Absent means false.
phoneProviderstringoptionalPhone system the workspace's calls come from:
telnyx_webrtc — Vetnio's built-in browser phonetelavox — Telavoxnightcall — Nightcall3cx — 3CXxelion — Xelionstarface — STARFACE
Absent when no provider has been selected.phoneCallSpellingCorrectionobjectoptionalAI spelling correction applied to phone-call transcripts. Absent when never configured, which means correction is on with no extra context.
enabledbooleanoptionalfalse turns AI spelling correction of phone-call transcripts off. Absent means on.
employeeNamesarray of stringsoptionalStaff names the correction should spell correctly. Absent when never set; an empty array means none.
additionalContextstringoptionalFree-text context given to the correction, for example product or place names. Absent when never set; an empty string means none.
phoneCallSummaryStyleobjectoptionalFormat of AI summaries of phone calls. Absent when never set, which means paragraph and medium.
formatstringoptionalLayout of the summary:
paragraph — flowing prose (the default when absent)bullets — a bulleted listverbositystringoptionalLength of the summary:
short — about 1 to 2 sentences, or 2 to 3 bulletsmedium — about 3 to 5 sentences, or 4 to 6 bullets (the default when absent)long — about 6 to 10 sentences, or 7 to 12 bulletsprovetPhoneCallsobjectoptionalSettings for drafting notes and tasks from phone calls and saving them to Provet Cloud. Absent when never configured.
enabledbooleanoptionalWhether drafting phone-call documentation and saving it to Provet Cloud is switched on.
providerIdstringoptionalID of the workspace's Provet Cloud connection in Vetnio, used to look up clients and save notes and tasks. Empty string when none is selected.
departmentIdnumberoptionalProvet Cloud department ID used when saving notes and tasks. Absent when not set.
templatesTextstringoptionalPhone-documentation templates as one text. Each template starts with a ## <name> heading line followed by its body. Up to 25 templates and 60,000 characters.
routingInstructionsstringoptionalFree-text rules the AI follows when choosing a template for a call, up to 12,000 characters.
timeZonestringoptionalIANA time zone used for the night window and for call times shown to the AI. The default is Europe/Stockholm.
nightobjectoptionalRequires one template for calls that start inside a nightly time window. Absent when not configured.
startHournumberrequiredHour (0 to 23, in timeZone) at which the night window starts, inclusive.
endHournumberrequiredHour (0 to 23, in timeZone) at which the night window ends, exclusive. Lower than startHour when the window spans midnight.
templateNamestringrequiredName of the template (a ## heading in templatesText) that must be used for calls that start in the window.
provetExportModestringoptionalLegacy stored preference, ignored by exports. All billing items are added as consultation items through Provet Cloud's per-type endpoints and billed when the consultation is finalized.
revenueRecoveryEnabledbooleanoptionalWhether Revenue Recovery, which suggests billable items from the consultation for the practice-management system invoice, is switched on. Absent means false.
revenueRecoverySuggestionPolicyobjectoptionalRules for which billable items Revenue Recovery suggests. Absent when never configured, which means bundles first, no excluded categories and no required billing lines.
bundlePolicystringoptionalHow Revenue Recovery treats Provet Cloud bundles:
bundles_first — prefer matching bundles over their individual items (the default)items_first — prefer individual items; suggest a bundle only when it matches the service almost exactlyhide_bundles — never suggest bundlesexcludedCategoriesarray of stringsoptionalCatalog categories that are never suggested: procedure, medication, equipment, retail, lab. Exported as stored; the older values food and protocol are treated as retail and procedure.
searchHiddenCategoriesarray of stringsoptionalCatalog categories also hidden from the invoice builder's manual search, using the same values as excludedCategories. A hidden category is never suggested either. Absent on policies saved before this setting existed, which hide every excluded category.
requiredCategoriesarray of objectsoptionalBilling lines the clinic defined explicitly, such as a consultation fee. Up to 20.
idstringrequiredIdentifier of the billing line, unique within the policy (up to 64 characters).
labelstringrequiredDisplay name of the billing line (up to 80 characters).
instructionstringoptionalThe clinic's instruction for choosing between the items, up to 600 characters.
rulestringoptionalWhen the line is suggested:
always_one — on every consultation, with exactly one item chosen (the default)when_relevant — only when the consultation supports ititemIdsarray of stringsrequiredCatalog item IDs that can fill this line (1 to 12).
aiReceptionistobjectoptionalConfiguration of the clinic's AI receptionist, which can book appointments in the practice-management system. Absent when never configured. Practice-system connection details and provider identifiers are not exported.
enabledbooleanoptionalWhether the AI receptionist is switched on.
defaultLocalestringoptionalDefault language of the AI receptionist: en or sv-SE.
timeZonestringoptionalIANA time zone of the clinic, used for appointment times.
emergencyPhonestringoptionalnullableEmergency phone number configured for the AI receptionist, as entered. null when explicitly cleared; absent when never set.
pimsKindstringoptionalPractice-management system the AI receptionist books appointments in: none, link or provet.
bookingConfigobjectoptionalBooking rules for the AI receptionist. Absent when never set.
minimumNoticeMinutesnumberoptionalMinimum time in minutes between the moment of booking and the start of a bookable slot. Absent when not set.
schedulingEnabledbooleanoptionalWhether the staff scheduler (for admins) and Vetnio's own appointment book (for every member) are available. Absent means false.
provetScheduleEnabledbooleanoptionalWhether members see their Provet appointments in the calendar, read-only and independently of schedulingEnabled. Absent means false.
personalizationsDisabledbooleanoptionaltrue when personalization is switched off for the whole workspace: Vetnio then neither learns from members' note edits nor applies learned writing style. Absent or false means personalization is on, unless it is switched off for an individual user.
manualWritingEnabledbooleanoptionalWhether members are offered to write clinical notes, client communications and referral letters themselves instead of recording or generating them. Set by Vetnio. Absent means false.
saveAnimanaPatientsbooleanoptionalWhether patient details from Animana are saved to Vetnio when a consultation is started from Animana. Absent means true.
pimsDepartmentMappingsarray of objectsrequiredPractice-management system departments linked to this workspace. When a user opens Vetnio from a linked Provet Cloud department, this workspace is opened. Ordered by instanceId, then departmentId. Empty when there are none.
instanceIdstringrequiredID of the practice-management system instance, for example a Provet Cloud instance number.
departmentIdstringrequiredDepartment ID within that instance, as a numeric string.
createdAtstring (date-time)requiredWhen the mapping was created (ISO 8601, UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
updatedAtstring (date-time)requiredWhen the mapping was last changed (ISO 8601, UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
catalogSwitchesobjectoptionalSuggest and Search switches for catalog items and bundles. Absent when the workspace has none.
itemsarray of objectsrequiredItem switches, ordered by itemId. Empty when there are none.
itemIdstringrequiredID of the canonical catalog item.
suggestenumrequirednullableWhether Revenue Recovery may suggest it: on, off, or null to follow the category default.
searchenumrequirednullableWhether vets can find it in the invoice builder's manual search: on, off, or null to follow the category default.
bundlesarray of objectsrequiredBundle switches, ordered by bundleId. Empty when there are none.
bundleIdstringrequiredID of the catalog bundle.
sourceTemplateIdstringrequirednullableID of the bundle's template in the practice-management system. null when it is not known.
suggestenumrequirednullableWhether Revenue Recovery may suggest it: on, off, or null to follow the category default.
searchenumrequirednullableWhether vets can find it in the invoice builder's manual search: on, off, or null to follow the category default.
catalogNotesobjectoptionalNotes for Vetnio on catalog items and bundles. Absent when the workspace has none.
itemsarray of objectsrequiredItem notes, ordered by itemId. Empty when there are none.
itemIdstringrequiredID of the canonical catalog item.
descriptionstringrequiredThe note as the clinic or Vetnio wrote it (at most 500 characters).
updatedAtstringrequiredWhen the note was last changed (ISO 8601, UTC).
bundlesarray of objectsrequiredBundle notes, ordered by bundleId. Empty when there are none.
bundleIdstringrequiredID of the catalog bundle.
sourceTemplateIdstringrequirednullableID of the bundle's template in the practice-management system. null when it is not known.
descriptionstringrequiredThe note as the clinic or Vetnio wrote it (at most 500 characters).
updatedAtstringrequiredWhen the note was last changed (ISO 8601, UTC).
letterheadAssetobjectrequirednullableThe workspace's uploaded letterhead logo, re-encoded as PNG and scaled down to fit within 1800 x 900 pixels (at most 2 MB). Included even when the letterhead is switched off. null when no logo is configured.
mimeTypeenumrequiredMedia type of content. Always image/png.
encodingenumrequiredEncoding of content. Always base64.
contentstringrequiredThe PNG file, base64-encoded (standard alphabet with padding).
curl "https://vetnio.com/api/v2/workspaces/demo-north-clinic/data-export/content" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"schemaVersion": 1,
"exportedAt": "2026-10-04T16:07:22.258Z",
"scopeId": "demo-north-clinic",
"termList": {
"terms": [],
"version": 0,
"updatedAt": null,
"updatedBy": null
},
"inventory": {
"included": [
"Workspace identity, address and allowlisted settings",
"Current workspace transcription term list",
"Workspace PIMS department mappings",
"Configured letterhead image as normalized PNG, when present"
],
"excluded": [
"Credentials, API keys, OAuth/session/password material and provider connection secrets",
"Billing-provider identifiers, subscription state and internal operational/provisioning state",
"Unlisted configuration fields and arbitrary provider-specific configuration objects",
"Other owners' personal settings, terms and configuration",
"Clinical records, templates, derived personalization artifacts and legacy aggregate spelling corrections (separate content categories)",
"Configuration/term-list history and retention-change approval events"
],
"limitations": [
"Current stored values only; separate reads do not form an atomic snapshot",
"Unset settings are preserved; effective inherited/default policies are not materialized",
"Term-list version is a concurrency revision, not a retained historical version",
"Customer-authored text is preserved verbatim; the export is not a content-redaction service"
]
},
"scope": "workspace",
"configuration": {
"id": "demo-north-clinic",
"name": "DEMO North Clinic",
"createdAt": "2026-09-08T09:00:00.000Z",
"address": null,
"city": null,
"stateProvince": null,
"zipCode": null,
"countryCode": "SE",
"taxId": null,
"phone": null,
"allowPasswords": true,
"templatePermissions": "full_access",
"audioFileRetentionPeriodInDays": null,
"isMeetingsEnabled": false,
"manualPimsKind": null,
"manualPimsName": null,
"settings": {},
"pimsDepartmentMappings": [],
"letterheadAsset": null
}
}GET/workspaces/{workspaceId}/data-export/json-templates
Lists customer-owned templates for export, one page at a time, with metadata and a short-lived download link for each stored body. Pages are ordered by ascending template ID: pass nextCursor back as cursor until it is null. Download links expire after one hour (expiresAt); request the page again for fresh links. Vetnio's read-only default catalog templates are excluded; workspace-owned copies, including managed ones, are included. Read-only. Covers the workspace's own JSON output schemas, downloadable in their original JSON form. Requires admin rights in the workspace (workspace admin or superadmin, or an admin of an organization the clinic belongs to). Accepts a browser session or a personal API key; organization and workspace API keys (sk_org_…, sk_ws_…) get 403.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the workspace (clinic) to export. The caller must be an admin of it, directly or as an admin of its organization.
cursorstringoptionalPagination cursor: the nextCursor value from the previous page. Omit for the first page, and keep the same owner and template category while paging. Items with an ID greater than the cursor are returned.
at least 1 characters · at most 512 characters
limitintegeroptionalMaximum number of templates per page, 1-50.
Default 20 · ≥ 1 · ≤ 50
nextCursorstringrequirednullablePass this value as cursor to fetch the next page. null when this is the last page.
expiresInSecondsnumberrequiredLifetime of every contentUrl on this page, in seconds.
expiresAtstring (date-time)requiredWhen the contentUrl links on this page stop working (ISO-8601 UTC). Download before then. Expiry does not affect the stored content.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
itemsarray of objectsrequiredJSON templates on this page, ordered by ascending ID.
idstringrequiredJSON template ID. Note templates refer to it through jsonTemplateId.
workspaceIdstringrequiredID of the workspace (clinic) that owns the template.
namestringrequirednullableSchema name shown in the app, or null if it was never named.
creatorIdstringrequiredUser ID (UUID) of the person who created the template.
createdAtstring (date-time)requiredWhen the template was created (ISO-8601 UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
artifactobjectrequirednullableDownload of the schema in its original JSON form, or null when no stored body exists.
contentUrlstringrequiredSigned HTTPS URL that downloads the stored body without further authentication. It expires at the page's expiresAt (one hour); fetch the page again for a fresh link. Treat it as a secret.
currentVersionIdstringrequirednullableThe downloaded version. Null means storage supplied no immutable version ID, including the legacy null version, so the URL follows the current object.
contentTypestringrequirednullableMedia type of the stored body as recorded by storage, for example text/html or application/json, or null if none was recorded.
sizenumberrequirednullableSize of the stored body in bytes, or null if unknown.
lastModifiedstring (date-time)requirednullableWhen the current body was last written (ISO-8601 UTC), or null if unknown.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
curl "https://vetnio.com/api/v2/workspaces/demo-north-clinic/data-export/json-templates?limit=2" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"nextCursor": null,
"expiresInSeconds": 3600,
"expiresAt": "2026-10-04T17:07:22.660Z",
"items": []
}GET/workspaces/{workspaceId}/data-export/json-templates/version
Returns the exact saved body of one retained template version as UTF-8 text, after checking that the template belongs to this scope. Take versionId from the versions list and URL-encode it. Read-only: it does not restore or modify the template. Returns 404 when the template, or that version of it, is not available. JSON templates have no instructions part: part=instructions returns 400. Requires admin rights in the workspace (workspace admin or superadmin, or an admin of an organization the clinic belongs to). Accepts a browser session or a personal API key; organization and workspace API keys (sk_org_…, sk_ws_…) get 403.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the workspace (clinic) to export. The caller must be an admin of it, directly or as an admin of its organization.
partenumoptionalWhich stored object of the template to read:
content — the template body itself.instructions — the separate instructions object of an imported template (original wording and per-section instructions). Only workspace note and meeting templates have one; other kinds return 400.Default content
templateIdstringrequiredID of the template, as returned in items[].id by the matching template export. It must belong to the workspace or organization in the path, otherwise 404.
at least 1 characters · at most 512 characters
versionIdstringrequiredOpaque version ID from the versions list (versions[].versionId) or from artifact.currentVersionId. URL-encode it; it can contain characters such as +, / and =.
at least 1 characters · at most 2048 characters
currentVersionIdstringrequirednullableVersion ID of the template's current body at the time of the request, or null when there is no current body. Unlike artifact.currentVersionId, a legacy unversioned body is reported here as the literal string "null".
versionobjectrequiredMetadata of the requested version.
versionIdstringrequiredOpaque stored version ID. A literal null version belongs to unversioned or suspended storage and can be overwritten.
isLatestbooleanrequiredtrue when this version is the template's current body.
lastModifiedstring (date-time)requirednullableWhen this version was stored (ISO-8601 UTC), or null if unknown.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
sizenumberrequirednullableSize of this version's body in bytes, or null if unknown.
contentTypestringrequirednullableMedia type of this version's body as recorded by storage, for example text/html or application/json, or null.
auditobjectrequirednullableAudit details of the edit that saved this version. Only available for workspace note templates and part=content; null otherwise, or when no matching audit entry exists. Not a clinical approval or accuracy classification.
idstringrequiredID of the audit-log entry (UUID).
occurredAtstring (date-time)requiredWhen the change was made (ISO-8601 UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
actorNamestringrequirednullableDisplay name of the person who made the change, or null when unknown or for system changes. For changes made by Vetnio support on a customer's behalf, this is the support staff member.
actorTypeenumrequiredWho made the change:
user — a member of the customer's team.vetnio_staff — Vetnio staff, for example while providing support.system — an automated process.actionstringrequiredAudit action that saved this version, for example template.created, template.content_updated or template.restored.
s3VersionIdstringrequiredThe stored version ID the audit entry refers to; equals the version's versionId.
contentstringrequiredThe exact retained body as UTF-8 text, including HTML instructions or the original JSON schema.
curl "https://vetnio.com/api/v2/workspaces/furunculotic-loud-chihuahua/data-export/json-templates/version?templateId=5b0d7a3e-2c41-4f0e-9a77-1f3c9e6b8d20&versionId=3HL4kqtJlcpXroDTDmJ%2BrmSpXd3dIbrHY" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"currentVersionId": "3HL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY",
"version": {
"versionId": "string",
"isLatest": true,
"lastModified": "2026-10-04T09:30:00.000Z",
"size": 2048,
"contentType": "text/html",
"audit": {
"id": "c4e1a7b2-9d3f-4e8a-b6c5-2f1e0d9c8b7a",
"occurredAt": "2026-09-02T14:30:00.000Z",
"actorName": "Dr. Sam Lee",
"actorType": "user",
"action": "template.content_updated",
"s3VersionId": "3HL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY"
}
},
"content": "string"
}GET/workspaces/{workspaceId}/data-export/json-templates/versions
Lists the retained stored versions of one template's body (part=content, the default) or of its imported instructions (part=instructions, document and meeting templates only), newest first, up to 50 per page. Pass nextCursor back as cursor until it is null. The template must belong to this scope, otherwise 404. Deleted templates and Vetnio's default catalog templates are not available. currentVersionId can change while you page if someone edits the template. JSON templates have no instructions part: part=instructions returns 400. Requires admin rights in the workspace (workspace admin or superadmin, or an admin of an organization the clinic belongs to). Accepts a browser session or a personal API key; organization and workspace API keys (sk_org_…, sk_ws_…) get 403.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the workspace (clinic) to export. The caller must be an admin of it, directly or as an admin of its organization.
partenumoptionalWhich stored object of the template to read:
content — the template body itself.instructions — the separate instructions object of an imported template (original wording and per-section instructions). Only workspace note and meeting templates have one; other kinds return 400.Default content
templateIdstringrequiredID of the template, as returned in items[].id by the matching template export. It must belong to the workspace or organization in the path, otherwise 404.
at least 1 characters · at most 512 characters
cursorstringoptionalOpaque pagination cursor: the nextCursor value from the previous page of this template's versions. Omit for the first page. URL-encode it.
at least 1 characters · at most 2048 characters
currentVersionIdstringrequirednullableVersion ID of the template's current body at the time of the request, or null when there is no current body. Unlike artifact.currentVersionId, a legacy unversioned body is reported here as the literal string "null".
versionsarray of objectsrequiredRetained versions on this page, newest first. A page can hold fewer than 50 versions even when more follow.
versionIdstringrequiredOpaque stored version ID. A literal null version belongs to unversioned or suspended storage and can be overwritten.
isLatestbooleanrequiredtrue when this version is the template's current body.
lastModifiedstring (date-time)requirednullableWhen this version was stored (ISO-8601 UTC), or null if unknown.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
sizenumberrequirednullableSize of this version's body in bytes, or null if unknown.
auditobjectrequirednullableAudit details of the edit that saved this version. Only available for workspace note templates and part=content; null otherwise, or when no matching audit entry exists. Not a clinical approval or accuracy classification.
idstringrequiredID of the audit-log entry (UUID).
occurredAtstring (date-time)requiredWhen the change was made (ISO-8601 UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
actorNamestringrequirednullableDisplay name of the person who made the change, or null when unknown or for system changes. For changes made by Vetnio support on a customer's behalf, this is the support staff member.
actorTypeenumrequiredWho made the change:
user — a member of the customer's team.vetnio_staff — Vetnio staff, for example while providing support.system — an automated process.actionstringrequiredAudit action that saved this version, for example template.created, template.content_updated or template.restored.
s3VersionIdstringrequiredThe stored version ID the audit entry refers to; equals the version's versionId.
nextCursorstringrequirednullablePass this value as cursor to fetch older versions. null when the history is complete.
curl "https://vetnio.com/api/v2/workspaces/furunculotic-loud-chihuahua/data-export/json-templates/versions?templateId=5b0d7a3e-2c41-4f0e-9a77-1f3c9e6b8d20" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"currentVersionId": "3HL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY",
"versions": [
{
"versionId": "string",
"isLatest": true,
"lastModified": "2026-10-04T09:30:00.000Z",
"size": 2048,
"audit": {
"id": "c4e1a7b2-9d3f-4e8a-b6c5-2f1e0d9c8b7a",
"occurredAt": "2026-09-02T14:30:00.000Z",
"actorName": "Dr. Sam Lee",
"actorType": "user",
"action": "template.content_updated",
"s3VersionId": "3HL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY"
}
}
],
"nextCursor": null
}GET/workspaces/{workspaceId}/data-export/meeting-templates
Lists customer-owned templates for export, one page at a time, with metadata and a short-lived download link for each stored body. Pages are ordered by ascending template ID: pass nextCursor back as cursor until it is null. Download links expire after one hour (expiresAt); request the page again for fresh links. Vetnio's read-only default catalog templates are excluded; workspace-owned copies, including managed ones, are included. Read-only. Covers the workspace's meeting and HR templates, with their imported instructions where present. Requires admin rights in the workspace (workspace admin or superadmin, or an admin of an organization the clinic belongs to). Accepts a browser session or a personal API key; organization and workspace API keys (sk_org_…, sk_ws_…) get 403.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the workspace (clinic) to export. The caller must be an admin of it, directly or as an admin of its organization.
cursorstringoptionalPagination cursor: the nextCursor value from the previous page. Omit for the first page, and keep the same owner and template category while paging. Items with an ID greater than the cursor are returned.
at least 1 characters · at most 512 characters
limitintegeroptionalMaximum number of templates per page, 1-50.
Default 20 · ≥ 1 · ≤ 50
nextCursorstringrequirednullablePass this value as cursor to fetch the next page. null when this is the last page.
expiresInSecondsnumberrequiredLifetime of every contentUrl on this page, in seconds.
expiresAtstring (date-time)requiredWhen the contentUrl links on this page stop working (ISO-8601 UTC). Download before then. Expiry does not affect the stored content.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
itemsarray of objectsrequiredMeeting templates on this page, ordered by ascending ID.
idstringrequiredMeeting template ID.
workspaceIdstringrequiredID of the workspace (clinic) that owns the template.
namestringrequiredTemplate name shown in the app.
creatorIdstringrequiredUser ID (UUID) of the person who created the template.
createdAtstring (date-time)requiredWhen the template was created (ISO-8601 UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
artifactobjectrequirednullableDownload of the template body, or null when no stored body exists.
contentUrlstringrequiredSigned HTTPS URL that downloads the stored body without further authentication. It expires at the page's expiresAt (one hour); fetch the page again for a fresh link. Treat it as a secret.
currentVersionIdstringrequirednullableThe downloaded version. Null means storage supplied no immutable version ID, including the legacy null version, so the URL follows the current object.
contentTypestringrequirednullableMedia type of the stored body as recorded by storage, for example text/html or application/json, or null if none was recorded.
sizenumberrequirednullableSize of the stored body in bytes, or null if unknown.
lastModifiedstring (date-time)requirednullableWhen the current body was last written (ISO-8601 UTC), or null if unknown.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
instructionsArtifactobjectrequirednullableDownload of the imported template's separate instructions object, or null when there is none.
contentUrlstringrequiredSigned HTTPS URL that downloads the stored body without further authentication. It expires at the page's expiresAt (one hour); fetch the page again for a fresh link. Treat it as a secret.
currentVersionIdstringrequirednullableThe downloaded version. Null means storage supplied no immutable version ID, including the legacy null version, so the URL follows the current object.
contentTypestringrequirednullableMedia type of the stored body as recorded by storage, for example text/html or application/json, or null if none was recorded.
sizenumberrequirednullableSize of the stored body in bytes, or null if unknown.
lastModifiedstring (date-time)requirednullableWhen the current body was last written (ISO-8601 UTC), or null if unknown.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
curl "https://vetnio.com/api/v2/workspaces/demo-north-clinic/data-export/meeting-templates?limit=2" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"nextCursor": null,
"expiresInSeconds": 3600,
"expiresAt": "2026-10-04T17:07:22.710Z",
"items": []
}GET/workspaces/{workspaceId}/data-export/meeting-templates/version
Returns the exact saved body of one retained template version as UTF-8 text, after checking that the template belongs to this scope. Take versionId from the versions list and URL-encode it. Read-only: it does not restore or modify the template. Returns 404 when the template, or that version of it, is not available. Requires admin rights in the workspace (workspace admin or superadmin, or an admin of an organization the clinic belongs to). Accepts a browser session or a personal API key; organization and workspace API keys (sk_org_…, sk_ws_…) get 403.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the workspace (clinic) to export. The caller must be an admin of it, directly or as an admin of its organization.
partenumoptionalWhich stored object of the template to read:
content — the template body itself.instructions — the separate instructions object of an imported template (original wording and per-section instructions). Only workspace note and meeting templates have one; other kinds return 400.Default content
templateIdstringrequiredID of the template, as returned in items[].id by the matching template export. It must belong to the workspace or organization in the path, otherwise 404.
at least 1 characters · at most 512 characters
versionIdstringrequiredOpaque version ID from the versions list (versions[].versionId) or from artifact.currentVersionId. URL-encode it; it can contain characters such as +, / and =.
at least 1 characters · at most 2048 characters
currentVersionIdstringrequirednullableVersion ID of the template's current body at the time of the request, or null when there is no current body. Unlike artifact.currentVersionId, a legacy unversioned body is reported here as the literal string "null".
versionobjectrequiredMetadata of the requested version.
versionIdstringrequiredOpaque stored version ID. A literal null version belongs to unversioned or suspended storage and can be overwritten.
isLatestbooleanrequiredtrue when this version is the template's current body.
lastModifiedstring (date-time)requirednullableWhen this version was stored (ISO-8601 UTC), or null if unknown.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
sizenumberrequirednullableSize of this version's body in bytes, or null if unknown.
contentTypestringrequirednullableMedia type of this version's body as recorded by storage, for example text/html or application/json, or null.
auditobjectrequirednullableAudit details of the edit that saved this version. Only available for workspace note templates and part=content; null otherwise, or when no matching audit entry exists. Not a clinical approval or accuracy classification.
idstringrequiredID of the audit-log entry (UUID).
occurredAtstring (date-time)requiredWhen the change was made (ISO-8601 UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
actorNamestringrequirednullableDisplay name of the person who made the change, or null when unknown or for system changes. For changes made by Vetnio support on a customer's behalf, this is the support staff member.
actorTypeenumrequiredWho made the change:
user — a member of the customer's team.vetnio_staff — Vetnio staff, for example while providing support.system — an automated process.actionstringrequiredAudit action that saved this version, for example template.created, template.content_updated or template.restored.
s3VersionIdstringrequiredThe stored version ID the audit entry refers to; equals the version's versionId.
contentstringrequiredThe exact retained body as UTF-8 text, including HTML instructions or the original JSON schema.
curl "https://vetnio.com/api/v2/workspaces/furunculotic-loud-chihuahua/data-export/meeting-templates/version?templateId=5b0d7a3e-2c41-4f0e-9a77-1f3c9e6b8d20&versionId=3HL4kqtJlcpXroDTDmJ%2BrmSpXd3dIbrHY" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"currentVersionId": "3HL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY",
"version": {
"versionId": "string",
"isLatest": true,
"lastModified": "2026-10-04T09:30:00.000Z",
"size": 2048,
"contentType": "text/html",
"audit": {
"id": "c4e1a7b2-9d3f-4e8a-b6c5-2f1e0d9c8b7a",
"occurredAt": "2026-09-02T14:30:00.000Z",
"actorName": "Dr. Sam Lee",
"actorType": "user",
"action": "template.content_updated",
"s3VersionId": "3HL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY"
}
},
"content": "string"
}GET/workspaces/{workspaceId}/data-export/meeting-templates/versions
Lists the retained stored versions of one template's body (part=content, the default) or of its imported instructions (part=instructions, document and meeting templates only), newest first, up to 50 per page. Pass nextCursor back as cursor until it is null. The template must belong to this scope, otherwise 404. Deleted templates and Vetnio's default catalog templates are not available. currentVersionId can change while you page if someone edits the template. Requires admin rights in the workspace (workspace admin or superadmin, or an admin of an organization the clinic belongs to). Accepts a browser session or a personal API key; organization and workspace API keys (sk_org_…, sk_ws_…) get 403.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the workspace (clinic) to export. The caller must be an admin of it, directly or as an admin of its organization.
partenumoptionalWhich stored object of the template to read:
content — the template body itself.instructions — the separate instructions object of an imported template (original wording and per-section instructions). Only workspace note and meeting templates have one; other kinds return 400.Default content
templateIdstringrequiredID of the template, as returned in items[].id by the matching template export. It must belong to the workspace or organization in the path, otherwise 404.
at least 1 characters · at most 512 characters
cursorstringoptionalOpaque pagination cursor: the nextCursor value from the previous page of this template's versions. Omit for the first page. URL-encode it.
at least 1 characters · at most 2048 characters
currentVersionIdstringrequirednullableVersion ID of the template's current body at the time of the request, or null when there is no current body. Unlike artifact.currentVersionId, a legacy unversioned body is reported here as the literal string "null".
versionsarray of objectsrequiredRetained versions on this page, newest first. A page can hold fewer than 50 versions even when more follow.
versionIdstringrequiredOpaque stored version ID. A literal null version belongs to unversioned or suspended storage and can be overwritten.
isLatestbooleanrequiredtrue when this version is the template's current body.
lastModifiedstring (date-time)requirednullableWhen this version was stored (ISO-8601 UTC), or null if unknown.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
sizenumberrequirednullableSize of this version's body in bytes, or null if unknown.
auditobjectrequirednullableAudit details of the edit that saved this version. Only available for workspace note templates and part=content; null otherwise, or when no matching audit entry exists. Not a clinical approval or accuracy classification.
idstringrequiredID of the audit-log entry (UUID).
occurredAtstring (date-time)requiredWhen the change was made (ISO-8601 UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
actorNamestringrequirednullableDisplay name of the person who made the change, or null when unknown or for system changes. For changes made by Vetnio support on a customer's behalf, this is the support staff member.
actorTypeenumrequiredWho made the change:
user — a member of the customer's team.vetnio_staff — Vetnio staff, for example while providing support.system — an automated process.actionstringrequiredAudit action that saved this version, for example template.created, template.content_updated or template.restored.
s3VersionIdstringrequiredThe stored version ID the audit entry refers to; equals the version's versionId.
nextCursorstringrequirednullablePass this value as cursor to fetch older versions. null when the history is complete.
curl "https://vetnio.com/api/v2/workspaces/furunculotic-loud-chihuahua/data-export/meeting-templates/versions?templateId=5b0d7a3e-2c41-4f0e-9a77-1f3c9e6b8d20" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"currentVersionId": "3HL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY",
"versions": [
{
"versionId": "string",
"isLatest": true,
"lastModified": "2026-10-04T09:30:00.000Z",
"size": 2048,
"audit": {
"id": "c4e1a7b2-9d3f-4e8a-b6c5-2f1e0d9c8b7a",
"occurredAt": "2026-09-02T14:30:00.000Z",
"actorName": "Dr. Sam Lee",
"actorType": "user",
"action": "template.content_updated",
"s3VersionId": "3HL4kqtJlcpXroDTDmJ+rmSpXd3dIbrHY"
}
}
],
"nextCursor": null
}GET/workspaces/{workspaceId}/data-export/templates
Lists customer-owned templates for export, one page at a time, with metadata and a short-lived download link for each stored body. Pages are ordered by ascending template ID: pass nextCursor back as cursor until it is null. Download links expire after one hour (expiresAt); request the page again for fresh links. Vetnio's read-only default catalog templates are excluded; workspace-owned copies, including managed ones, are included. Read-only. Covers clinical-note, client-communication and referral templates, including hidden ones, with their imported instructions where present. Requires admin rights in the workspace (workspace admin or superadmin, or an admin of an organization the clinic belongs to). Accepts a browser session or a personal API key; organization and workspace API keys (sk_org_…, sk_ws_…) get 403.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the workspace (clinic) to export. The caller must be an admin of it, directly or as an admin of its organization.
cursorstringoptionalPagination cursor: the nextCursor value from the previous page. Omit for the first page, and keep the same owner and template category while paging. Items with an ID greater than the cursor are returned.
at least 1 characters · at most 512 characters
limitintegeroptionalMaximum number of templates per page, 1-50.
Default 20 · ≥ 1 · ≤ 50
nextCursorstringrequirednullablePass this value as cursor to fetch the next page. null when this is the last page.
expiresInSecondsnumberrequiredLifetime of every contentUrl on this page, in seconds.
expiresAtstring (date-time)requiredWhen the contentUrl links on this page stop working (ISO-8601 UTC). Download before then. Expiry does not affect the stored content.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
itemsarray of objectsrequiredTemplates on this page, ordered by ascending ID.
idstringrequiredTemplate ID. Pass it as templateId to the versions endpoints.
workspaceIdstringrequiredID of the workspace (clinic) that owns the template.
namestringrequirednullableTemplate name shown in the app, or null if it was never named.
typeenumrequiredWhat the template produces:
clinical_note — the clinical note (medical record entry) for a consultation.referral — a referral letter to another clinic or specialist.client_communication — a message to the pet owner.creatorIdstringrequiredUser ID (UUID) of the person who created the template.
creatorRoleenumrequiredWorkspace role the creator had when creating the template:
member — clinician.admin — workspace administrator.superadmin — workspace owner-level administrator.createdAtstring (date-time)requiredWhen the template was created (ISO-8601 UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
updatedAtstring (date-time)requirednullableWhen the template was last changed (ISO-8601 UTC), or null if never changed after creation.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
updatedBystringrequirednullableUser ID of the person who last changed the template, or null.
isManagedbooleanrequiredtrue when Vetnio or the clinic's organization provisioned the template (for example from an organization template or an integration) rather than a clinic user writing it.
isDefaultenumrequiredAlways false: Vetnio's read-only default catalog templates are excluded from this export.
jsonTemplateIdstringrequirednullableLinked JSON template ID only when the schema belongs to this workspace and is included in its JSON template export.
hasExcludedJsonTemplatebooleanrequiredtrue when the template links to a structured (JSON) schema that is not part of this workspace's export, such as a Vetnio-provided schema. That schema's ID and body are not exposed.
instructionsArtifactobjectrequirednullableStored imported-template instructions and section strategies, when present.
contentUrlstringrequiredSigned HTTPS URL that downloads the stored body without further authentication. It expires at the page's expiresAt (one hour); fetch the page again for a fresh link. Treat it as a secret.
currentVersionIdstringrequirednullableThe downloaded version. Null means storage supplied no immutable version ID, including the legacy null version, so the URL follows the current object.
contentTypestringrequirednullableMedia type of the stored body as recorded by storage, for example text/html or application/json, or null if none was recorded.
sizenumberrequirednullableSize of the stored body in bytes, or null if unknown.
lastModifiedstring (date-time)requirednullableWhen the current body was last written (ISO-8601 UTC), or null if unknown.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
artifactobjectrequirednullableNull when the current body is absent. Retained versions may still exist.
contentUrlstringrequiredSigned HTTPS URL that downloads the stored body without further authentication. It expires at the page's expiresAt (one hour); fetch the page again for a fresh link. Treat it as a secret.
currentVersionIdstringrequirednullableThe downloaded version. Null means storage supplied no immutable version ID, including the legacy null version, so the URL follows the current object.
contentTypestringrequirednullableMedia type of the stored body as recorded by storage, for example text/html or application/json, or null if none was recorded.
sizenumberrequirednullableSize of the stored body in bytes, or null if unknown.
lastModifiedstring (date-time)requirednullableWhen the current body was last written (ISO-8601 UTC), or null if unknown.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
curl "https://vetnio.com/api/v2/workspaces/demo-north-clinic/data-export/templates?limit=2" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"nextCursor": "65f1cc73-507d-4804-aeeb-b5b334861f00",
"expiresInSeconds": 3600,
"expiresAt": "2026-10-04T17:07:22.360Z",
"items": [
{
"id": "3ae1a5c2-04b7-43cb-9c1f-d3bcb4a4596a",
"workspaceId": "demo-north-clinic",
"name": "Vaccination visit",
"type": "clinical_note",
"creatorId": "c1b0f2a0-f819-5fcc-a2ed-85db0cef66a7",
"creatorRole": "admin",
"createdAt": "2026-10-04T16:06:01.542Z",
"updatedAt": "2026-10-04T16:06:01.610Z",
"updatedBy": "c1b0f2a0-f819-5fcc-a2ed-85db0cef66a7",
"isManaged": false,
"isDefault": false,
"jsonTemplateId": null,
"hasExcludedJsonTemplate": false,
"instructionsArtifact": null,
"artifact": {
"contentUrl": "https://storage.example.com/templates/demo-north-clinic/3ae1a5c2-04b7-43cb-9c1f-d3bcb4a4596a?X-Amz-Expires=3600&X-Amz-Signature=…",
"currentVersionId": "6724a0ca2bee9d9a882658b15770245e",
"contentType": "text/html",
"size": 98,
"lastModified": "2026-10-04T16:06:01.000Z"
}
},
{
"id": "65f1cc73-507d-4804-aeeb-b5b334861f00",
"workspaceId": "demo-north-clinic",
"name": "Vaccination visit",
"type": "clinical_note",
"creatorId": "c1b0f2a0-f819-5fcc-a2ed-85db0cef66a7",
"creatorRole": "admin",
"createdAt": "2026-10-04T16:07:21.312Z",
"updatedAt": "2026-10-04T16:07:21.390Z",
"updatedBy": "c1b0f2a0-f819-5fcc-a2ed-85db0cef66a7",
"isManaged": false,
"isDefault": false,
"jsonTemplateId": null,
"hasExcludedJsonTemplate": false,
"instructionsArtifact": null,
"artifact": {
"contentUrl": "https://storage.example.com/templates/demo-north-clinic/65f1cc73-507d-4804-aeeb-b5b334861f00?X-Amz-Expires=3600&X-Amz-Signature=…",
"currentVersionId": "6724a0b798ccf02241aa8ef16b8bd868",
"contentType": "text/html",
"size": 98,
"lastModified": "2026-10-04T16:07:21.000Z"
}
}
]
}GET/workspaces/{workspaceId}/data-export/templates/version
Returns the exact saved body of one retained template version as UTF-8 text, after checking that the template belongs to this scope. Take versionId from the versions list and URL-encode it. Read-only: it does not restore or modify the template. Returns 404 when the template, or that version of it, is not available. Requires admin rights in the workspace (workspace admin or superadmin, or an admin of an organization the clinic belongs to). Accepts a browser session or a personal API key; organization and workspace API keys (sk_org_…, sk_ws_…) get 403.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the workspace (clinic) to export. The caller must be an admin of it, directly or as an admin of its organization.
partenumoptionalWhich stored object of the template to read:
content — the template body itself.instructions — the separate instructions object of an imported template (original wording and per-section instructions). Only workspace note and meeting templates have one; other kinds return 400.Default content
templateIdstringrequiredID of the template, as returned in items[].id by the matching template export. It must belong to the workspace or organization in the path, otherwise 404.
at least 1 characters · at most 512 characters
versionIdstringrequiredOpaque version ID from the versions list (versions[].versionId) or from artifact.currentVersionId. URL-encode it; it can contain characters such as +, / and =.
at least 1 characters · at most 2048 characters
currentVersionIdstringrequirednullableVersion ID of the template's current body at the time of the request, or null when there is no current body. Unlike artifact.currentVersionId, a legacy unversioned body is reported here as the literal string "null".
versionobjectrequiredMetadata of the requested version.
versionIdstringrequiredOpaque stored version ID. A literal null version belongs to unversioned or suspended storage and can be overwritten.
isLatestbooleanrequiredtrue when this version is the template's current body.
lastModifiedstring (date-time)requirednullableWhen this version was stored (ISO-8601 UTC), or null if unknown.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
sizenumberrequirednullableSize of this version's body in bytes, or null if unknown.
contentTypestringrequirednullableMedia type of this version's body as recorded by storage, for example text/html or application/json, or null.
auditobjectrequirednullableAudit details of the edit that saved this version. Only available for workspace note templates and part=content; null otherwise, or when no matching audit entry exists. Not a clinical approval or accuracy classification.
idstringrequiredID of the audit-log entry (UUID).
occurredAtstring (date-time)requiredWhen the change was made (ISO-8601 UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
actorNamestringrequirednullableDisplay name of the person who made the change, or null when unknown or for system changes. For changes made by Vetnio support on a customer's behalf, this is the support staff member.
actorTypeenumrequiredWho made the change:
user — a member of the customer's team.vetnio_staff — Vetnio staff, for example while providing support.system — an automated process.actionstringrequiredAudit action that saved this version, for example template.created, template.content_updated or template.restored.
s3VersionIdstringrequiredThe stored version ID the audit entry refers to; equals the version's versionId.
contentstringrequiredThe exact retained body as UTF-8 text, including HTML instructions or the original JSON schema.
curl "https://vetnio.com/api/v2/workspaces/demo-north-clinic/data-export/templates/version?templateId=3ae1a5c2-04b7-43cb-9c1f-d3bcb4a4596a&versionId=6724a0ca2bee9d9a882658b15770245e" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"currentVersionId": "6724a0ca2bee9d9a882658b15770245e",
"version": {
"versionId": "6724a0ca2bee9d9a882658b15770245e",
"isLatest": true,
"lastModified": "2026-10-04T16:06:01.000Z",
"size": 98,
"contentType": "text/html",
"audit": {
"id": "aa48304c-abbe-4861-b88d-6e26369d28ff",
"occurredAt": "2026-10-04T16:06:01.609Z",
"actorName": "Alex Demo",
"actorType": "user",
"action": "template.content_updated",
"s3VersionId": "6724a0ca2bee9d9a882658b15770245e"
}
},
"content": "Write a concise SOAP note. List every vaccine given with product, batch number and injection site."
}GET/workspaces/{workspaceId}/data-export/templates/versions
Lists the retained stored versions of one template's body (part=content, the default) or of its imported instructions (part=instructions, document and meeting templates only), newest first, up to 50 per page. Pass nextCursor back as cursor until it is null. The template must belong to this scope, otherwise 404. Deleted templates and Vetnio's default catalog templates are not available. currentVersionId can change while you page if someone edits the template. For part=content, versions carry audit metadata about the edit that saved them when it is available. Requires admin rights in the workspace (workspace admin or superadmin, or an admin of an organization the clinic belongs to). Accepts a browser session or a personal API key; organization and workspace API keys (sk_org_…, sk_ws_…) get 403.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the workspace (clinic) to export. The caller must be an admin of it, directly or as an admin of its organization.
partenumoptionalWhich stored object of the template to read:
content — the template body itself.instructions — the separate instructions object of an imported template (original wording and per-section instructions). Only workspace note and meeting templates have one; other kinds return 400.Default content
templateIdstringrequiredID of the template, as returned in items[].id by the matching template export. It must belong to the workspace or organization in the path, otherwise 404.
at least 1 characters · at most 512 characters
cursorstringoptionalOpaque pagination cursor: the nextCursor value from the previous page of this template's versions. Omit for the first page. URL-encode it.
at least 1 characters · at most 2048 characters
currentVersionIdstringrequirednullableVersion ID of the template's current body at the time of the request, or null when there is no current body. Unlike artifact.currentVersionId, a legacy unversioned body is reported here as the literal string "null".
versionsarray of objectsrequiredRetained versions on this page, newest first. A page can hold fewer than 50 versions even when more follow.
versionIdstringrequiredOpaque stored version ID. A literal null version belongs to unversioned or suspended storage and can be overwritten.
isLatestbooleanrequiredtrue when this version is the template's current body.
lastModifiedstring (date-time)requirednullableWhen this version was stored (ISO-8601 UTC), or null if unknown.
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
sizenumberrequirednullableSize of this version's body in bytes, or null if unknown.
auditobjectrequirednullableAudit details of the edit that saved this version. Only available for workspace note templates and part=content; null otherwise, or when no matching audit entry exists. Not a clinical approval or accuracy classification.
idstringrequiredID of the audit-log entry (UUID).
occurredAtstring (date-time)requiredWhen the change was made (ISO-8601 UTC).
matches `^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$`
actorNamestringrequirednullableDisplay name of the person who made the change, or null when unknown or for system changes. For changes made by Vetnio support on a customer's behalf, this is the support staff member.
actorTypeenumrequiredWho made the change:
user — a member of the customer's team.vetnio_staff — Vetnio staff, for example while providing support.system — an automated process.actionstringrequiredAudit action that saved this version, for example template.created, template.content_updated or template.restored.
s3VersionIdstringrequiredThe stored version ID the audit entry refers to; equals the version's versionId.
nextCursorstringrequirednullablePass this value as cursor to fetch older versions. null when the history is complete.
curl "https://vetnio.com/api/v2/workspaces/demo-north-clinic/data-export/templates/versions?templateId=3ae1a5c2-04b7-43cb-9c1f-d3bcb4a4596a" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"currentVersionId": "6724a0ca2bee9d9a882658b15770245e",
"versions": [
{
"versionId": "6724a0ca2bee9d9a882658b15770245e",
"isLatest": true,
"lastModified": "2026-10-04T16:06:01.000Z",
"size": 98,
"audit": {
"id": "aa48304c-abbe-4861-b88d-6e26369d28ff",
"occurredAt": "2026-10-04T16:06:01.609Z",
"actorName": "Alex Demo",
"actorType": "user",
"action": "template.content_updated",
"s3VersionId": "6724a0ca2bee9d9a882658b15770245e"
}
},
{
"versionId": "6724a0ca2f3535f14f0ea6004b3d900c",
"isLatest": false,
"lastModified": "2026-10-04T16:06:01.000Z",
"size": 79,
"audit": {
"id": "83641a24-e021-4995-91a4-7e1569073f8a",
"occurredAt": "2026-10-04T16:06:01.554Z",
"actorName": "Alex Demo",
"actorType": "user",
"action": "template.content_updated",
"s3VersionId": "6724a0ca2f3535f14f0ea6004b3d900c"
}
}
],
"nextCursor": null
}