curl --request POST \
--url https://{organization}.rescueconsole.com/api/animals/medical/bulk \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"record": {
"record_type": "vaccination",
"name": "Rabies",
"catalogue_item_id": "8e4035af-8412-4357-a5e6-03d93937b53e",
"performed_on": "2026-09-16",
"performed_in_house": true,
"details": {
"method": "Subcutaneous",
"site": "Right hind leg",
"product_expires_on": "2027-03-01"
},
"notes": "Clinic day"
},
"next": {
"record_type": "vaccination",
"name": "Rabies",
"due_on": "2027-09-16",
"recurrence_interval": 1,
"recurrence_unit": "year"
},
"animals": [
{
"animal_id": "39fbe05a-3fcd-4e02-9091-bde4e4e26098",
"details": {
"lot_number": "L-100"
}
},
{
"animal_id": "4a0cf16b-40de-4f13-a1a2-cef5f5f371a9",
"details": {
"lot_number": "L-100"
},
"notes": "Hissed, fine"
},
{
"animal_id": "5b1d027c-51ef-4024-b2b3-d0a60604820b",
"details": {
"lot_number": "L-101"
}
}
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
record: {
record_type: 'vaccination',
name: 'Rabies',
catalogue_item_id: '8e4035af-8412-4357-a5e6-03d93937b53e',
performed_on: '2026-09-16',
performed_in_house: true,
details: {
method: 'Subcutaneous',
site: 'Right hind leg',
product_expires_on: '2027-03-01'
},
notes: 'Clinic day'
},
next: {
record_type: 'vaccination',
name: 'Rabies',
due_on: '2027-09-16',
recurrence_interval: 1,
recurrence_unit: 'year'
},
animals: [
{
animal_id: '39fbe05a-3fcd-4e02-9091-bde4e4e26098',
details: {lot_number: 'L-100'}
},
{
animal_id: '4a0cf16b-40de-4f13-a1a2-cef5f5f371a9',
details: {lot_number: 'L-100'},
notes: 'Hissed, fine'
},
{
animal_id: '5b1d027c-51ef-4024-b2b3-d0a60604820b',
details: {lot_number: 'L-101'}
}
]
})
};
fetch('https://{organization}.rescueconsole.com/api/animals/medical/bulk', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{organization}.rescueconsole.com/api/animals/medical/bulk"
payload = {
"record": {
"record_type": "vaccination",
"name": "Rabies",
"catalogue_item_id": "8e4035af-8412-4357-a5e6-03d93937b53e",
"performed_on": "2026-09-16",
"performed_in_house": True,
"details": {
"method": "Subcutaneous",
"site": "Right hind leg",
"product_expires_on": "2027-03-01"
},
"notes": "Clinic day"
},
"next": {
"record_type": "vaccination",
"name": "Rabies",
"due_on": "2027-09-16",
"recurrence_interval": 1,
"recurrence_unit": "year"
},
"animals": [
{
"animal_id": "39fbe05a-3fcd-4e02-9091-bde4e4e26098",
"details": { "lot_number": "L-100" }
},
{
"animal_id": "4a0cf16b-40de-4f13-a1a2-cef5f5f371a9",
"details": { "lot_number": "L-100" },
"notes": "Hissed, fine"
},
{
"animal_id": "5b1d027c-51ef-4024-b2b3-d0a60604820b",
"details": { "lot_number": "L-101" }
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"created": 123,
"animals": 123,
"ids": [
"<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": "<string>",
"created": 123,
"animals": 123,
"ids": [
"<string>"
]
}Add a record to many animals
Adds the same medical record to up to 100 animals at once, such as a vaccine given at a clinic day. What is the same for every animal goes in record; what is each animal’s own (a lot number, a tag number, a test result, a note) goes on that animal’s entry and is merged over it. next, when you send it, is the follow-up record and is made on every animal too. All or nothing: every animal’s record is checked before any is written. When the record is refused on any animal, nothing is added, and the refusal (400) lists each animal it was refused for in problems, with animal_id, name and error. A record due and not yet done makes a task on each animal, and a spay or neuter procedure that is done updates the animal’s altered details. Needs write on Animals.
curl --request POST \
--url https://{organization}.rescueconsole.com/api/animals/medical/bulk \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"record": {
"record_type": "vaccination",
"name": "Rabies",
"catalogue_item_id": "8e4035af-8412-4357-a5e6-03d93937b53e",
"performed_on": "2026-09-16",
"performed_in_house": true,
"details": {
"method": "Subcutaneous",
"site": "Right hind leg",
"product_expires_on": "2027-03-01"
},
"notes": "Clinic day"
},
"next": {
"record_type": "vaccination",
"name": "Rabies",
"due_on": "2027-09-16",
"recurrence_interval": 1,
"recurrence_unit": "year"
},
"animals": [
{
"animal_id": "39fbe05a-3fcd-4e02-9091-bde4e4e26098",
"details": {
"lot_number": "L-100"
}
},
{
"animal_id": "4a0cf16b-40de-4f13-a1a2-cef5f5f371a9",
"details": {
"lot_number": "L-100"
},
"notes": "Hissed, fine"
},
{
"animal_id": "5b1d027c-51ef-4024-b2b3-d0a60604820b",
"details": {
"lot_number": "L-101"
}
}
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
record: {
record_type: 'vaccination',
name: 'Rabies',
catalogue_item_id: '8e4035af-8412-4357-a5e6-03d93937b53e',
performed_on: '2026-09-16',
performed_in_house: true,
details: {
method: 'Subcutaneous',
site: 'Right hind leg',
product_expires_on: '2027-03-01'
},
notes: 'Clinic day'
},
next: {
record_type: 'vaccination',
name: 'Rabies',
due_on: '2027-09-16',
recurrence_interval: 1,
recurrence_unit: 'year'
},
animals: [
{
animal_id: '39fbe05a-3fcd-4e02-9091-bde4e4e26098',
details: {lot_number: 'L-100'}
},
{
animal_id: '4a0cf16b-40de-4f13-a1a2-cef5f5f371a9',
details: {lot_number: 'L-100'},
notes: 'Hissed, fine'
},
{
animal_id: '5b1d027c-51ef-4024-b2b3-d0a60604820b',
details: {lot_number: 'L-101'}
}
]
})
};
fetch('https://{organization}.rescueconsole.com/api/animals/medical/bulk', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{organization}.rescueconsole.com/api/animals/medical/bulk"
payload = {
"record": {
"record_type": "vaccination",
"name": "Rabies",
"catalogue_item_id": "8e4035af-8412-4357-a5e6-03d93937b53e",
"performed_on": "2026-09-16",
"performed_in_house": True,
"details": {
"method": "Subcutaneous",
"site": "Right hind leg",
"product_expires_on": "2027-03-01"
},
"notes": "Clinic day"
},
"next": {
"record_type": "vaccination",
"name": "Rabies",
"due_on": "2027-09-16",
"recurrence_interval": 1,
"recurrence_unit": "year"
},
"animals": [
{
"animal_id": "39fbe05a-3fcd-4e02-9091-bde4e4e26098",
"details": { "lot_number": "L-100" }
},
{
"animal_id": "4a0cf16b-40de-4f13-a1a2-cef5f5f371a9",
"details": { "lot_number": "L-100" },
"notes": "Hissed, fine"
},
{
"animal_id": "5b1d027c-51ef-4024-b2b3-d0a60604820b",
"details": { "lot_number": "L-101" }
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"created": 123,
"animals": 123,
"ids": [
"<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": "<string>",
"created": 123,
"animals": 123,
"ids": [
"<string>"
]
}Authorizations
An API key from Settings, API keys. It starts with rc_live_.
Body
Show child attributes
Show child attributes
The animals, at most 100. An animal named twice is counted once.
1 - 100 elementsShow child attributes
Show child attributes
The follow-up record, such as the next vaccine due, made on every animal as it is. The animals' own details are not added to it.
Show child attributes
Show child attributes