curl --request POST \
--url https://{organization}.rescueconsole.com/api/animals/animals/{id}/medical \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"record_type": "vaccination",
"name": "Rabies",
"performed_on": "2026-09-15",
"details": {
"lot_number": "RB-20417",
"method": "Subcutaneous",
"site": "Right hind leg"
},
"recurrence_interval": 1,
"recurrence_unit": "year"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
record_type: 'vaccination',
name: 'Rabies',
performed_on: '2026-09-15',
details: {lot_number: 'RB-20417', method: 'Subcutaneous', site: 'Right hind leg'},
recurrence_interval: 1,
recurrence_unit: 'year'
})
};
fetch('https://{organization}.rescueconsole.com/api/animals/animals/{id}/medical', 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"
payload = {
"record_type": "vaccination",
"name": "Rabies",
"performed_on": "2026-09-15",
"details": {
"lot_number": "RB-20417",
"method": "Subcutaneous",
"site": "Right hind leg"
},
"recurrence_interval": 1,
"recurrence_unit": "year"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"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>"
}{
"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)"
}Add a medical record
Adds one record: something done, or something scheduled. A scheduled record (a due_on and no performed_on) makes a task on the animal for whoever will do it. A recurring record makes its next occurrence when it is completed. A procedure already done that spays or neuters (its catalogue item says so, or details.will_alter is true) marks the animal spayed or neutered, with the date, the vet and the clinic. Needs write on Animals.
curl --request POST \
--url https://{organization}.rescueconsole.com/api/animals/animals/{id}/medical \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"record_type": "vaccination",
"name": "Rabies",
"performed_on": "2026-09-15",
"details": {
"lot_number": "RB-20417",
"method": "Subcutaneous",
"site": "Right hind leg"
},
"recurrence_interval": 1,
"recurrence_unit": "year"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
record_type: 'vaccination',
name: 'Rabies',
performed_on: '2026-09-15',
details: {lot_number: 'RB-20417', method: 'Subcutaneous', site: 'Right hind leg'},
recurrence_interval: 1,
recurrence_unit: 'year'
})
};
fetch('https://{organization}.rescueconsole.com/api/animals/animals/{id}/medical', 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"
payload = {
"record_type": "vaccination",
"name": "Rabies",
"performed_on": "2026-09-15",
"details": {
"lot_number": "RB-20417",
"method": "Subcutaneous",
"site": "Right hind leg"
},
"recurrence_interval": 1,
"recurrence_unit": "year"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"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>"
}{
"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).
Body
A name is needed too, unless a catalogue item gives one.
vaccination, treatment, procedure, test, medication, exam, condition, preventative What it was: Rabies, Heartworm test. Taken from the catalogue item when you send one and no name.
The date it was done. Leave it out for something still to do.
The date it is due. A record with a due_on and no performed_on is scheduled, and a task is made for it, assigned to whoever will do it.
Who did it, or will: a person on file. The person who made the key, unless you say.
Done at your own clinic. A record done in house names no veterinary_practice_id.
Where it was done: an organization on file.
The vet: a person on file.
An item from your medical catalogue, of the kind the record type takes: a diagnosis for a condition, a test for a test, a vaccine for a vaccination, a treatment for a treatment, a procedure for a procedure. The other record types take none.
A test's outcome. Refused on any other record type.
pending, normal, abnormal, positive, negative, inconclusive, null 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.
The time it is booked for. Needs a due_on.
How long it is booked for, from 5 to 1,440 minutes. An hour when you give a start time and no length.
5 <= x <= 1440Makes the record recur: how many units apart. Send it with recurrence_unit, and with a due_on or performed_on to count from.
x >= 1Send it with recurrence_interval. A month or a year from the 31st lands on the last day of a shorter month.
day, week, month, year, null A medication from your medications list.
Refills left. Null is not tracked, which is different from 0. Each recurrence uses one, and none is made at 0.
x >= 0No recurrence is made due after this date.
Response
The record.
vaccination, treatment, procedure, test, medication, exam, condition, preventative How many units apart a recurring record falls.
day, week, month, year, null The first record of a recurring series, shared by every record in it.
When the series was stopped.
Refills left. Null is not tracked, which is different from 0.
pending, normal, abnormal, positive, negative, inconclusive, null The task made for it while it was scheduled.
In the list only.
In the list only.
In the list only.