curl --request POST \
--url https://{organization}.rescueconsole.com/api/animals/animals/{id}/medical/{recordId}/complete \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"performed_on": "2026-09-16",
"details": {
"lot_number": "RB-20417",
"method": "Subcutaneous",
"site": "Right hind leg"
}
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
performed_on: '2026-09-16',
details: {lot_number: 'RB-20417', method: 'Subcutaneous', site: 'Right hind leg'}
})
};
fetch('https://{organization}.rescueconsole.com/api/animals/animals/{id}/medical/{recordId}/complete', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{organization}.rescueconsole.com/api/animals/animals/{id}/medical/{recordId}/complete"
payload = {
"performed_on": "2026-09-16",
"details": {
"lot_number": "RB-20417",
"method": "Subcutaneous",
"site": "Right hind leg"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"record": {
"id": "<string>",
"record_type": "vaccination",
"name": "<string>",
"performed_on": "2023-12-25",
"due_on": "2023-12-25",
"notes": "<string>",
"performed_by_person_id": "<string>",
"recurrence_interval": 123,
"recurrence_unit": "day",
"series_id": "<string>",
"recurrence_ended_at": "2023-11-07T05:31:56Z",
"veterinary_practice_id": "<string>",
"veterinarian_person_id": "<string>",
"medication_id": "<string>",
"refills_remaining": 123,
"prescription_expires_on": "2023-12-25",
"catalogue_item_id": "<string>",
"result_status": "pending",
"details": {},
"performed_in_house": true,
"due_start_at": "2023-11-07T05:31:56Z",
"duration_minutes": 123,
"task_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"performed_by_name": "<string>",
"veterinarian_name": "<string>",
"veterinary_practice_name": "<string>"
},
"next": {
"id": "<string>",
"record_type": "vaccination",
"name": "<string>",
"performed_on": "2023-12-25",
"due_on": "2023-12-25",
"notes": "<string>",
"performed_by_person_id": "<string>",
"recurrence_interval": 123,
"recurrence_unit": "day",
"series_id": "<string>",
"recurrence_ended_at": "2023-11-07T05:31:56Z",
"veterinary_practice_id": "<string>",
"veterinarian_person_id": "<string>",
"medication_id": "<string>",
"refills_remaining": 123,
"prescription_expires_on": "2023-12-25",
"catalogue_item_id": "<string>",
"result_status": "pending",
"details": {},
"performed_in_house": true,
"due_start_at": "2023-11-07T05:31:56Z",
"duration_minutes": 123,
"task_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"performed_by_name": "<string>",
"veterinarian_name": "<string>",
"veterinary_practice_name": "<string>"
},
"stopped_because": "no_refills"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}Complete a medical record
Marks a scheduled record done, and its task with it. If the record recurs, the next one is made, due one interval after the day it was actually done, with a task of its own, unless the prescription has no refills left or would have expired by then: stopped_because then says which. A record already done is refused with 409. When you send details, result_status, performed_in_house, performed_by_person_id, veterinary_practice_id or veterinarian_person_id, the person who did it is set to performed_by_person_id, or to the person who made the key. Needs write on Animals.
curl --request POST \
--url https://{organization}.rescueconsole.com/api/animals/animals/{id}/medical/{recordId}/complete \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"performed_on": "2026-09-16",
"details": {
"lot_number": "RB-20417",
"method": "Subcutaneous",
"site": "Right hind leg"
}
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
performed_on: '2026-09-16',
details: {lot_number: 'RB-20417', method: 'Subcutaneous', site: 'Right hind leg'}
})
};
fetch('https://{organization}.rescueconsole.com/api/animals/animals/{id}/medical/{recordId}/complete', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{organization}.rescueconsole.com/api/animals/animals/{id}/medical/{recordId}/complete"
payload = {
"performed_on": "2026-09-16",
"details": {
"lot_number": "RB-20417",
"method": "Subcutaneous",
"site": "Right hind leg"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"record": {
"id": "<string>",
"record_type": "vaccination",
"name": "<string>",
"performed_on": "2023-12-25",
"due_on": "2023-12-25",
"notes": "<string>",
"performed_by_person_id": "<string>",
"recurrence_interval": 123,
"recurrence_unit": "day",
"series_id": "<string>",
"recurrence_ended_at": "2023-11-07T05:31:56Z",
"veterinary_practice_id": "<string>",
"veterinarian_person_id": "<string>",
"medication_id": "<string>",
"refills_remaining": 123,
"prescription_expires_on": "2023-12-25",
"catalogue_item_id": "<string>",
"result_status": "pending",
"details": {},
"performed_in_house": true,
"due_start_at": "2023-11-07T05:31:56Z",
"duration_minutes": 123,
"task_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"performed_by_name": "<string>",
"veterinarian_name": "<string>",
"veterinary_practice_name": "<string>"
},
"next": {
"id": "<string>",
"record_type": "vaccination",
"name": "<string>",
"performed_on": "2023-12-25",
"due_on": "2023-12-25",
"notes": "<string>",
"performed_by_person_id": "<string>",
"recurrence_interval": 123,
"recurrence_unit": "day",
"series_id": "<string>",
"recurrence_ended_at": "2023-11-07T05:31:56Z",
"veterinary_practice_id": "<string>",
"veterinarian_person_id": "<string>",
"medication_id": "<string>",
"refills_remaining": 123,
"prescription_expires_on": "2023-12-25",
"catalogue_item_id": "<string>",
"result_status": "pending",
"details": {},
"performed_in_house": true,
"due_start_at": "2023-11-07T05:31:56Z",
"duration_minutes": 123,
"task_id": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"performed_by_name": "<string>",
"veterinarian_name": "<string>",
"veterinary_practice_name": "<string>"
},
"stopped_because": "no_refills"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}Authorizations
An API key from Settings, API keys. It starts with rc_live_.
Path Parameters
The animal's record ID (not its Pet ID).
The medical record's ID.
Body
Every field is optional. An empty body means done, today.
When it was done. Today when left out, or when it is not a YYYY-MM-DD date.
Replaces the record's notes when sent.
What was found or given. Replaced whole when sent. The record's own fields. For a vaccination, treatment, exam or procedure, and for any record made from a catalogue item, each key must be one of its fields, and each value that field's kind: text, a number, true or false, a YYYY-MM-DD date, an HH:MM time, or one of a list's options. A vaccination's fields include lot_number, product_expires_on, method and site; a procedure's include will_alter. Other records keep short text, numbers or true or false under keys of your own.
A test's outcome. Refused on any other record type.
pending, normal, abnormal, positive, negative, inconclusive, null Done at your own clinic. When true, the practice and vet are cleared.
Who did it, or will: a person on file. The person who made the key, unless you say.
Where it was done. Left out, the scheduled practice is kept; null clears it.
The vet. Left out, the scheduled vet is kept; null clears it.
Response
The record as completed, and the next one when one was made.