API reference · Integrations
Endpoints for clinics that use the Link practice-management system: status, customer and animal lookup, form templates and export.
Guides:Work with Link and Vettigo
GET/workspaces/{workspaceId}/consultations/{consultationId}/link/compatible-entries
Returns up to three existing journal entries in the selected animal's Link journal that this consultation's structured note could be written into instead of creating a new entry: newest first, not locked, deleted or cancelled, and created from the consultation's Link template or one with an identical ordered list of writable fields. Pass a candidate's id as targetEntryId to the export endpoint. The consultation must use a Link JSON template (see the resolve endpoint), otherwise 400 BAD_REQUEST; 404 NOT_FOUND when the animal does not belong to the customer or the Link template can no longer be found in the tenant.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
consultationIdstringrequiredIdentifier of the Vetnio consultation (UUID) whose structured clinical note is exported to, or matched against, Link.
at least 1 characters
customerIdintegerrequiredLink customer (animal owner) id, as returned in customers[].id by the customer search endpoint.
> 0 · ≤ 9007199254740991
animalIdintegerrequiredLink animal id, as returned in id by the animal list endpoints. The animal must be owned by customerId.
> 0 · ≤ 9007199254740991
[ ]array of objectsrequiredidintegerrequiredLink journal entry id. Pass it as targetEntryId to the export endpoint to write into this entry.
≥ -9007199254740991 · ≤ 9007199254740991
titlestringrequiredEntry title as shown in Link.
createdAtstringrequiredWhen the entry was created in Link, passed through as Link returns it (ISO-8601, may carry a local UTC offset).
visitReasonstringrequirednullableVisit reason(s) of the Link appointment the entry belongs to, comma-separated, falling back to the appointment description. null when the entry has no appointment or it could not be loaded.
curl "https://vetnio.com/api/v2/workspaces/furunculotic-loud-chihuahua/consultations/a1b2c3d4-e5f6-7890-abcd-ef1234567890/link/compatible-entries?customerId=54967922&animalId=1234567" \
-H "Authorization: Bearer $VETNIO_API_KEY"[
{
"id": 8812345,
"title": "Allmän undersökning hund",
"createdAt": "2026-10-01T09:30:00.000+02:00",
"visitReason": "Vaccination"
}
]GET/workspaces/{workspaceId}/consultations/{consultationId}/link/entry-url
Returns the Link web URL of the journal entry this consultation was last exported to. Returns 404 NOT_FOUND when the consultation has never been exported to Link (or the animal can no longer be found among the customer's active animals), and 400 BAD_REQUEST when the entry has no customer.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
consultationIdstringrequiredIdentifier of the Vetnio consultation (UUID) whose structured clinical note is exported to, or matched against, Link.
at least 1 characters
entryUrlstringrequiredDeep link that opens the journal entry in Link's web app (format https://<subdomain>.linkjournal.se/customers/<customerId>/animals/<animalId>?only_entry=<entryId>).
curl "https://vetnio.com/api/v2/workspaces/furunculotic-loud-chihuahua/consultations/a1b2c3d4-e5f6-7890-abcd-ef1234567890/link/entry-url" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"entryUrl": "https://riverside.linkjournal.se/customers/54967922/animals/1234567?only_entry=8812345"
}POST/workspaces/{workspaceId}/consultations/{consultationId}/link/export
Writes the consultation's structured clinical note (generated with a Link JSON template, see the resolve endpoint) into a Link journal entry.
customerId and animalId. A new entry is created with the Link template, at locationId or the integration's default location. Response mode: created.customerId/animalId are ignored. Response mode: updated.targetEntryId (from the compatible-entries endpoint) plus customerId and animalId to write into an entry created in Link.reassign: true with a new customerId/animalId creates a fresh entry; the old entry is left untouched in Link.When updating, text fields are append-only: only lines added since Vetnio's last successful export to that entry are appended after a blank line, so text the vet wrote in Link is kept and retries do not duplicate text. Select, checkbox and result fields are overwritten; fields missing from the note are not touched. Locked, deleted or cancelled entries cannot be updated (400). If Link rejects any field during an update, the request fails with 500; fields Link accepted may already be saved, but Vetnio does not record the export, so a retry does not duplicate text. When creating, rejected fields are only reported in fieldWrites.create.errors.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
consultationIdstringrequiredIdentifier of the Vetnio consultation (UUID) whose structured clinical note is exported to, or matched against, Link.
at least 1 characters
customerIdintegeroptionalLink customer who owns the animal. Required on the first export, with reassign: true, and with targetEntryId; ignored when the consultation's existing entry is updated in place.
> 0 · ≤ 9007199254740991
animalIdintegeroptionalLink animal whose journal receives the entry. Required in the same cases as customerId, and must belong to that customer.
> 0 · ≤ 9007199254740991
locationIdintegeroptionalLink location (clinic site) for a newly created entry. Defaults to the integration's defaultLocationId; the request fails with 400 when neither is set. Ignored for updates.
> 0 · ≤ 9007199254740991
reassignbooleanoptionalSet to true to create a new entry for customerId/animalId even though the consultation was already exported. The previous entry is left as it is in Link and the consultation is re-pointed to the new one. Defaults to false.
targetEntryIdintegeroptionalId of an existing Link entry to write into instead of creating one, typically from the compatible-entries endpoint. Takes precedence over the entry already recorded on the consultation. The entry must belong to customerId and animalId, be editable, and use a compatible template.
> 0 · ≤ 9007199254740991
linkEntryIdintegerrequiredId of the Link journal entry that was created or updated. Stored on the consultation so later exports update the same entry.
≥ -9007199254740991 · ≤ 9007199254740991
linkJournalIdintegerrequiredId of the animal's Link journal (medical record) that holds the entry.
≥ -9007199254740991 · ≤ 9007199254740991
entryUrlstringrequiredDeep link that opens the entry in Link's web app.
modeenumrequiredWhat the export did:
created — a new journal entry was created (first export, or reassign: true).updated — an existing entry was updated in place (the consultation's previously exported entry, or targetEntryId).fieldWritesobjectrequiredPer-field results Link reported for the export.
createobjectrequiredResults of the main write. Despite the name, this also holds the results of an in-place update (mode: updated); it is empty when an update had nothing new to write.
appliedarray of integersrequiredIds of the fields Link reports as written.
skippedarray of objectsrequiredFields Link did not write and did not reject.
keystring | numberrequiredThe field the result refers to, as Link reports it: the template field id when an entry is created, the entry field id when one is updated.
reasonstringrequiredLink's explanation of why the field was not written, passed through unchanged.
errorsarray of objectsrequiredFields Link rejected. When an entry is created, rejected fields are reported here and the export still succeeds; when an existing entry is updated, any rejection fails the request instead.
keystring | numberrequiredThe field the result refers to, as Link reports it: the template field id when an entry is created, the entry field id when one is updated.
messagesarray of stringsrequiredValidation messages from Link, passed through unchanged.
internalSamplesobjectoptionalResults of the follow-up write that fills lab/measurement result rows on a newly created entry. Absent when there were none, and always absent for mode: updated (those values are part of create).
appliedarray of integersrequiredIds of the fields Link reports as written.
skippedarray of objectsrequiredFields Link did not write and did not reject.
keystring | numberrequiredThe field the result refers to, as Link reports it: the template field id when an entry is created, the entry field id when one is updated.
reasonstringrequiredLink's explanation of why the field was not written, passed through unchanged.
errorsarray of objectsrequiredFields Link rejected. When an entry is created, rejected fields are reported here and the export still succeeds; when an existing entry is updated, any rejection fails the request instead.
keystring | numberrequiredThe field the result refers to, as Link reports it: the template field id when an entry is created, the entry field id when one is updated.
messagesarray of stringsrequiredValidation messages from Link, passed through unchanged.
curl -X POST "https://vetnio.com/api/v2/workspaces/furunculotic-loud-chihuahua/consultations/a1b2c3d4-e5f6-7890-abcd-ef1234567890/link/export" \
-H "Authorization: Bearer $VETNIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"customerId": 54967922,
"animalId": 1234567,
"locationId": 346,
"reassign": false,
"targetEntryId": 8812345
}'{
"linkEntryId": 8812345,
"linkJournalId": 2167548,
"entryUrl": "https://riverside.linkjournal.se/customers/54967922/animals/1234567?only_entry=8812345",
"mode": "created",
"fieldWrites": {
"create": {
"applied": [
98765,
98766
],
"skipped": [
{
"key": "98765",
"reason": "string"
}
],
"errors": [
{
"key": "98765",
"messages": [
"string"
]
}
]
},
"internalSamples": {
"applied": [
98765,
98766
],
"skipped": [
{
"key": "98765",
"reason": "string"
}
],
"errors": [
{
"key": "98765",
"messages": [
"string"
]
}
]
}
}
}GET/workspaces/{workspaceId}/link/customers
Searches active (not removed) customers in the caller's Link tenant. Use exactly one search mode per request, otherwise the request fails with 400 BAD_REQUEST:
name — Link's own partial match on first or last name.identifier — exact match on the customer identifier (for example a Swedish personal identity number). Vetnio also tries the common spellings with and without century digits and hyphen, and merges the results.firstName and/or lastName — at least one with two or more characters. Vetnio queries Link with the longer term and keeps only customers whose first and last names contain the supplied values (case-insensitive).Results are paginated with page (default 1) and perPage (1–100, default 100). total and sourceTotal count upstream Link rows, not filtered matches: the final field-aware match count is known only after all source pages are scanned, so keep requesting pages while hasNextPage is true to see every match.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
namestringoptionalLegacy search: partial, case-insensitive match on the customer's first or last name, performed by Link. Use exactly one search mode: name, identifier, or firstName/lastName.
at least 1 characters
identifierstringoptionalExact customer identifier, typically a Swedish personal identity number. Vetnio also tries the common spellings (with or without century digits and hyphen) and merges the results.
at least 1 characters
firstNamestringoptionalCase-insensitive substring of the customer's first name. Combine with lastName; at least one of the two must have two or more characters.
at least 1 characters
lastNamestringoptionalCase-insensitive substring of the customer's last name.
at least 1 characters
pageintegeroptional1-based page of Link results.
Default 1 · > 0 · ≤ 9007199254740991
perPageintegeroptionalResults per page, from 1 to 100.
Default 100 · ≥ 1 · ≤ 100
customersarray of objectsrequiredMatching customers from this page of Link results. In firstName/lastName mode the page is filtered after it is fetched, so it can hold fewer than perPage rows (or none) while hasNextPage is still true.
idintegerrequiredLink customer id. Pass it as customerId to the animal and export endpoints.
≥ -9007199254740991 · ≤ 9007199254740991
namestringrequirednullableFull display name from Link, or null.
firstNamestringrequirednullableFirst name from Link, or null (for example for companies).
lastNamestringrequirednullableLast name from Link, or null.
identifierstringrequirednullableCustomer identifier in Link, typically a Swedish personal identity number or organisation number. null when not recorded.
primaryEmailstringrequirednullableThe customer's email address marked primary in Link, or null.
primaryPhonestringrequirednullableThe customer's phone number marked primary in Link, or null.
totalintegerrequiredSame value as sourceTotal, kept for older clients. It is not the number of matches after Vetnio's own filtering.
≥ -9007199254740991 · ≤ 9007199254740991
sourceTotalintegerrequiredNumber of customers Link reported for the upstream query. In identifier mode it is the sum over all identifier spellings searched.
≥ 0 · ≤ 9007199254740991
pageintegerrequiredThe page that was returned (1-based).
≥ -9007199254740991 · ≤ 9007199254740991
perPageintegerrequiredPage size used for the upstream Link query.
≥ -9007199254740991 · ≤ 9007199254740991
scannedCountintegerrequiredHow many upstream Link rows have been covered up to and including this page.
≥ 0 · ≤ 9007199254740991
hasNextPagebooleanrequiredtrue when Link has more rows for this query. Request page + 1 to continue; a filtered page can be empty while this is true.
curl "https://vetnio.com/api/v2/workspaces/furunculotic-loud-chihuahua/link/customers" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"customers": [
{
"id": 54967922,
"name": "Alex Morgan",
"firstName": "Alex",
"lastName": "Morgan",
"identifier": "198501011234",
"primaryEmail": "alex.morgan@example.com",
"primaryPhone": "0701234567"
}
],
"total": 3,
"sourceTotal": 3,
"page": 1,
"perPage": 100,
"scannedCount": 3,
"hasNextPage": false
}GET/workspaces/{workspaceId}/link/customers/{customerId}/animals
Lists active animals (not deceased, removed or marked duplicate) owned by the given Link customer, most recently updated first. Only the first 100 animals are returned and there is no pagination metadata; prefer the paginated /animals/page variant, which also supports a name filter.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
customerIdintegerrequiredLink customer (animal owner) id, as returned in customers[].id by the customer search endpoint.
> 0 · ≤ 9007199254740991
[ ]array of objectsrequiredidintegerrequiredLink animal id. Pass it as animalId to the compatible-entries and export endpoints.
≥ -9007199254740991 · ≤ 9007199254740991
namestringrequiredAnimal name from Link.
kindNamestringrequirednullableSpecies name from Link (Link calls it kind), or null.
breedNamestringrequirednullableBreed name from Link, or null.
genderNamestringrequirednullableSex name from Link, or null.
birthdatestringrequirednullableDate of birth (YYYY-MM-DD) from Link, or null.
deceasedbooleanrequiredWhether Link marks the animal as deceased. Only active animals are requested from Link, so this is normally false.
curl "https://vetnio.com/api/v2/workspaces/furunculotic-loud-chihuahua/link/customers/54967922/animals" \
-H "Authorization: Bearer $VETNIO_API_KEY"[
{
"id": 1234567,
"name": "Bella",
"kindName": "Hund",
"breedName": "Labrador retriever",
"genderName": "Tik",
"birthdate": "2020-03-15",
"deceased": false
}
]GET/workspaces/{workspaceId}/link/customers/{customerId}/animals/page
Lists one page of active animals (not deceased, removed or marked duplicate) owned by the given Link customer, optionally filtered by a partial animal name. Vetnio checks Link's paging metadata and fails with 500 rather than return an inconsistent page.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
customerIdintegerrequiredLink customer (animal owner) id, as returned in customers[].id by the customer search endpoint.
> 0 · ≤ 9007199254740991
namestringoptionalOptional partial, case-insensitive match on the animal name, applied by Link. Leading and trailing whitespace is ignored.
at least 1 characters
pageintegeroptional1-based page number.
Default 1 · > 0 · ≤ 9007199254740991
perPageintegeroptionalAnimals per page, 1 to 100.
Default 100 · ≥ 1 · ≤ 100
animalsarray of objectsrequiredAnimals on this page, in Link's order (most recently updated first).
idintegerrequiredLink animal id. Pass it as animalId to the compatible-entries and export endpoints.
≥ -9007199254740991 · ≤ 9007199254740991
namestringrequiredAnimal name from Link.
kindNamestringrequirednullableSpecies name from Link (Link calls it kind), or null.
breedNamestringrequirednullableBreed name from Link, or null.
genderNamestringrequirednullableSex name from Link, or null.
birthdatestringrequirednullableDate of birth (YYYY-MM-DD) from Link, or null.
deceasedbooleanrequiredWhether Link marks the animal as deceased. Only active animals are requested from Link, so this is normally false.
totalintegerrequiredTotal number of matching animals across all pages.
≥ 0 · ≤ 9007199254740991
pageintegerrequiredThe page that was returned (1-based).
> 0 · ≤ 9007199254740991
perPageintegerrequiredPage size used.
> 0 · ≤ 9007199254740991
hasNextPagebooleanrequiredtrue when more animals exist after this page.
curl "https://vetnio.com/api/v2/workspaces/furunculotic-loud-chihuahua/link/customers/54967922/animals/page" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"animals": [
{
"id": 1234567,
"name": "Bella",
"kindName": "Hund",
"breedName": "Labrador retriever",
"genderName": "Tik",
"birthdate": "2020-03-15",
"deceased": false
}
],
"total": 2,
"page": 1,
"perPage": 100,
"hasNextPage": false
}GET/workspaces/{workspaceId}/link/status
Returns whether the calling user has connected Vetnio to a Link tenant in this workspace, with the tenant subdomain and default location when they have. Link credentials are saved per user and workspace in Vetnio's integration settings; they cannot be created through the REST API. Call this first to decide whether to show Link features. Never calls Link itself, so it does not prove the stored API key still works.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
bodyobjectrequiredWhether the calling user has connected Vetnio to a Link tenant in this workspace. Link credentials are stored per user and workspace, so two vets in the same clinic can see different results. Discriminated by configured.
Link status (not configured)
configuredenumrequiredfalse: the calling user has not saved Link credentials in this workspace. Every other Link endpoint returns 412 PRECONDITION_FAILED until they do.
Link status (configured)
configuredenumrequiredtrue: the calling user has saved Link credentials in this workspace and the other Link endpoints can be used.
subdomainstringrequiredThe clinic's Link tenant subdomain, i.e. the <subdomain> in https://<subdomain>.linkjournal.se.
defaultLocationIdintegerrequirednullableLink location (clinic site) used for new journal entries when the export request has no locationId. null when none was chosen and the tenant has more than one active location; exports must then pass locationId.
≥ -9007199254740991 · ≤ 9007199254740991
updatedAtstringrequiredWhen the Link credentials were last saved (ISO-8601 UTC).
curl "https://vetnio.com/api/v2/workspaces/furunculotic-loud-chihuahua/link/status" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"configured": false
}GET/workspaces/{workspaceId}/link/templates
Lists journal form templates from the caller's Link tenant. By default every public (status=public) animal, herd, and combined animal-and-herd journal template is returned; Vetnio follows Link's pagination and returns all pages in one unpaginated array. Use it to let the vet pick the Link template a consultation's note should be written for. Returns 412 PRECONDITION_FAILED when the caller has no Link credentials in this workspace and 401 UNAUTHORIZED when Link rejects the stored API key.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
kindstringoptionalLink template kind filter, passed to Link unchanged. Accepts a single kind or a comma-separated list (animal_journal, animal_certificate, herd_journal, animal_and_herd_journal, quotation). Defaults to animal_journal,herd_journal,animal_and_herd_journal.
statusstringoptionalLink template status filter, passed to Link unchanged: public (published) or edit (draft). Defaults to public.
[ ]array of objectsrequiredidintegerrequiredLink form template id. Pass it to the template detail and resolve endpoints.
≥ -9007199254740991 · ≤ 9007199254740991
namestringrequiredTemplate name as shown in Link.
descriptionstringrequirednullableTemplate description from Link, or null when it has none.
kindstringrequiredLink template kind, passed through from Link. Values documented by Link: animal_journal, animal_certificate, herd_journal, animal_and_herd_journal, quotation.
statusstringrequiredLink template status, passed through from Link. Values documented by Link: public (published, usable for new entries) and edit (draft).
curl "https://vetnio.com/api/v2/workspaces/furunculotic-loud-chihuahua/link/templates" \
-H "Authorization: Bearer $VETNIO_API_KEY"[
{
"id": 3423,
"name": "Allmän undersökning hund",
"description": null,
"kind": "animal_journal",
"status": "public"
}
]POST/workspaces/{workspaceId}/link/templates/{linkTemplateId}/resolve
Maps a Link form template to a Vetnio JSON template so the clinical note is generated with one value per Link field. Vetnio reads the template's writable fields, derives a signature from their ordered titles, and returns the workspace's JSON template with that signature, creating it on first use (creation runs an AI step that writes per-field instructions, so the first call is slower). When consultationId is given, the JSON template is also set as that consultation's clinical-note template. Idempotent: repeated calls return the same id with created: false. Returns 400 BAD_REQUEST when the template has no writable fields.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
linkTemplateIdintegerrequiredLink journal form template id, as returned in id by the template list endpoint.
> 0 · ≤ 9007199254740991
consultationIdstringoptionalOptional consultation to bind the resolved JSON template to as its clinical-note template. Only the template is set; no note is generated.
at least 1 characters
jsonTemplateIdstringrequiredId of the Vetnio JSON template that mirrors the Link template's writable fields. Use it as the consultation's clinical-note JSON template so the generated note has one value per Link field.
createdbooleanrequiredtrue when this call created the JSON template; false when a matching one already existed in the workspace.
keysarray of stringsrequiredKeys of the JSON template, one per Link field and in the same order as the template detail's fieldMetadata. Derived from the field titles (lower-cased, å→a, ä→ae, ö→oe, other characters removed; duplicates get a hash suffix). The structured clinical note uses these keys.
curl -X POST "https://vetnio.com/api/v2/workspaces/furunculotic-loud-chihuahua/link/templates/3423/resolve" \
-H "Authorization: Bearer $VETNIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"consultationId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}'{
"jsonTemplateId": "0f6c2d7e-3b1a-4c55-9f0e-2a8b7c6d5e4f",
"created": false,
"keys": [
"anamnes",
"status",
"bedoemning"
]
}GET/workspaces/{workspaceId}/link/templates/{templateId}
Fetches one Link form template and returns the fields Vetnio can write into (textarea, select, multiCheckbox, internalSample), in template order. Read-only; nothing is stored in Vetnio. Returns 404 NOT_FOUND when Link has no template with this id.
AcceptsPersonal key
workspaceIdstringrequiredIdentifier of the clinic (workspace), as returned by GET /workspaces. The key's user must be a member of the clinic, or an admin of the organization it belongs to.
templateIdintegerrequiredLink journal form template id, as returned in id by the template list endpoint.
> 0 · ≤ 9007199254740991
idintegerrequiredLink form template id.
≥ -9007199254740991 · ≤ 9007199254740991
namestringrequiredTemplate name as shown in Link.
descriptionstringrequirednullableTemplate description from Link, or null.
fieldMetadataarray of objectsrequiredWritable fields in the order they appear in the Link template. An empty array means Vetnio cannot export to this template.
titlestringrequiredField label. For a free-text field placed directly under a heading without its own label, the heading text is used. Becomes the field name in the generated Vetnio JSON template.
typeenumrequiredHow Vetnio writes the field:
textarea — free text (Link textarea and input fields).select — exactly one value from options.multiCheckbox — any number of values from options.internalSample — a lab or measurement result row (Link internal_sample and milksample* fields). For internal_sample, only the first number in the value is sent (for example 24.5 kg is written as 24.5).apiFieldIdintegerrequiredId of the field in the Link template.
≥ -9007199254740991 · ≤ 9007199254740991
optionsarray of objectsoptionalAllowed values. Present for select and multiCheckbox fields, absent otherwise.
valuestringrequiredOption value Link stores when the option is chosen. Exported structured notes use this value.
labelstringrequiredOption text shown to the vet in Link.
curl "https://vetnio.com/api/v2/workspaces/furunculotic-loud-chihuahua/link/templates/3423" \
-H "Authorization: Bearer $VETNIO_API_KEY"{
"id": 3423,
"name": "Allmän undersökning hund",
"description": null,
"fieldMetadata": [
{
"title": "Anamnes",
"type": "textarea",
"apiFieldId": 98765,
"options": [
{
"value": "normal",
"label": "Normal"
}
]
}
]
}