curl --request POST \
--url https://{organization}.rescueconsole.com/api/animals/animals \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"species": "small_mammal",
"name": "Pip",
"breed": "Guinea pig",
"variety": "Abyssinian",
"sex": "female",
"dob_estimate": "2025-09-01",
"intake_source": "owner_surrender",
"weight_grams": 950
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
species: 'small_mammal',
name: 'Pip',
breed: 'Guinea pig',
variety: 'Abyssinian',
sex: 'female',
dob_estimate: '2025-09-01',
intake_source: 'owner_surrender',
weight_grams: 950
})
};
fetch('https://{organization}.rescueconsole.com/api/animals/animals', 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"
payload = {
"species": "small_mammal",
"name": "Pip",
"breed": "Guinea pig",
"variety": "Abyssinian",
"sex": "female",
"dob_estimate": "2025-09-01",
"intake_source": "owner_surrender",
"weight_grams": 950
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"status": "<string>",
"id": "<string>",
"species": "dog",
"intake_date": "2023-12-25",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"name": "<string>",
"public_name": "<string>",
"breed": "<string>",
"variety": "<string>",
"sex": "male",
"dob_estimate": "2023-12-25",
"current_location_unit_id": "<string>",
"microchip_number": "<string>",
"microchip_vendor": "<string>",
"alt_names": [
"<string>"
],
"size": "small",
"color_primary": "<string>",
"color_secondary": "<string>",
"pattern": "<string>",
"coat_length": "<string>",
"intake_source": "stray",
"primary_vet_organization_id": "<string>",
"altered": "yes",
"altered_before_intake": true,
"altered_on": "2023-12-25",
"altered_veterinarian_person_id": "<string>",
"altered_clinic_organization_id": "<string>",
"adoption_fee_cents": 1,
"is_public": true,
"health_status": "<string>",
"description": "<string>",
"behavioral_traits": [
"<string>"
],
"medical_flags": [
"<string>"
],
"custom_fields": {},
"outcome_person_id": "<string>",
"outcome_date": "2023-12-25",
"good_with_children": 1,
"min_child_age": 9,
"good_with_adults": "all",
"good_with_seniors": 1,
"good_with_dogs": 1,
"good_with_cats": 1,
"good_with_farm_animals": 1,
"good_with_small_animals": 1,
"good_with_birds": 1,
"needs_fenced_yard": 1,
"ok_in_apartment": 1,
"needs_experienced_adopter": 1,
"max_hours_alone": 12,
"placement_notes": "<string>",
"house_trained": 1,
"crate_trained": 1,
"leash_trained": 1,
"declawed": 1,
"fiv_positive": 1,
"energy_level": "low",
"indoor_outdoor": "indoor",
"available_date": "2023-12-25",
"special_needs_description": "<string>",
"distinguishing_marks": "<string>",
"sponsorship_allowed": true,
"sponsorship_minimum_cents": 1,
"sponsorship_details": "<string>",
"previous_id": "<string>",
"photo_file_id": "<string>",
"tenant_id": "<string>",
"pet_id": "<string>",
"care_state": "in_care",
"tags": [
"<string>"
],
"transfer_id": "<string>",
"transfer_partner_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)"
}Take in an animal
Creates an animal record. Only the species is required. The status is intake_processing unless you send one of your own status keys. The animal is given the next Pet ID in your organization’s format when Pet IDs are switched on. A custom field your organization marks as required must be sent in custom_fields. The home the animal needs (good with children and the rest), its listing details and its outcome are not taken here: change the animal afterwards to set them. Starts any workflow your organization set to start on a new animal, is recorded in the animal’s activity, and is sent to your webhooks. Needs write on Animals.
curl --request POST \
--url https://{organization}.rescueconsole.com/api/animals/animals \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"species": "small_mammal",
"name": "Pip",
"breed": "Guinea pig",
"variety": "Abyssinian",
"sex": "female",
"dob_estimate": "2025-09-01",
"intake_source": "owner_surrender",
"weight_grams": 950
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
species: 'small_mammal',
name: 'Pip',
breed: 'Guinea pig',
variety: 'Abyssinian',
sex: 'female',
dob_estimate: '2025-09-01',
intake_source: 'owner_surrender',
weight_grams: 950
})
};
fetch('https://{organization}.rescueconsole.com/api/animals/animals', 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"
payload = {
"species": "small_mammal",
"name": "Pip",
"breed": "Guinea pig",
"variety": "Abyssinian",
"sex": "female",
"dob_estimate": "2025-09-01",
"intake_source": "owner_surrender",
"weight_grams": 950
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"status": "<string>",
"id": "<string>",
"species": "dog",
"intake_date": "2023-12-25",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"name": "<string>",
"public_name": "<string>",
"breed": "<string>",
"variety": "<string>",
"sex": "male",
"dob_estimate": "2023-12-25",
"current_location_unit_id": "<string>",
"microchip_number": "<string>",
"microchip_vendor": "<string>",
"alt_names": [
"<string>"
],
"size": "small",
"color_primary": "<string>",
"color_secondary": "<string>",
"pattern": "<string>",
"coat_length": "<string>",
"intake_source": "stray",
"primary_vet_organization_id": "<string>",
"altered": "yes",
"altered_before_intake": true,
"altered_on": "2023-12-25",
"altered_veterinarian_person_id": "<string>",
"altered_clinic_organization_id": "<string>",
"adoption_fee_cents": 1,
"is_public": true,
"health_status": "<string>",
"description": "<string>",
"behavioral_traits": [
"<string>"
],
"medical_flags": [
"<string>"
],
"custom_fields": {},
"outcome_person_id": "<string>",
"outcome_date": "2023-12-25",
"good_with_children": 1,
"min_child_age": 9,
"good_with_adults": "all",
"good_with_seniors": 1,
"good_with_dogs": 1,
"good_with_cats": 1,
"good_with_farm_animals": 1,
"good_with_small_animals": 1,
"good_with_birds": 1,
"needs_fenced_yard": 1,
"ok_in_apartment": 1,
"needs_experienced_adopter": 1,
"max_hours_alone": 12,
"placement_notes": "<string>",
"house_trained": 1,
"crate_trained": 1,
"leash_trained": 1,
"declawed": 1,
"fiv_positive": 1,
"energy_level": "low",
"indoor_outdoor": "indoor",
"available_date": "2023-12-25",
"special_needs_description": "<string>",
"distinguishing_marks": "<string>",
"sponsorship_allowed": true,
"sponsorship_minimum_cents": 1,
"sponsorship_details": "<string>",
"previous_id": "<string>",
"photo_file_id": "<string>",
"tenant_id": "<string>",
"pet_id": "<string>",
"care_state": "in_care",
"tags": [
"<string>"
],
"transfer_id": "<string>",
"transfer_partner_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)"
}Authorizations
An API key from Settings, API keys. It starts with rc_live_.
Body
What can be written when an animal is taken in and changed afterwards.
A species key, or a common word for one (Dogs, Kitten, Guinea pig), which is stored as its key.
"dog"
The internal name.
The external name: printed, and shown on your public site and listing sites. Null uses the internal name.
The breed. For a small mammal, bird, reptile, fish, farm animal, large mammal or exotic, the KIND of animal: Guinea pig, Cockatiel.
The breed or variety beside a kind: Abyssinian.
60male, female, unknown, null The date of birth, or the best estimate of it.
One of your own status keys.
Where the animal is housed: a location or unit ID. Null clears it.
60Other names the animal is known by. Replaced whole when sent; blanks and repeats are dropped.
1060small, medium, large, extra_large, null Your own words.
60Your own words.
60Your own words.
60Your own words.
60stray, transfer, owner_surrender, field, born_in_care, adoption_return, seized, other, null The animal's usual vet: an organization on file.
Spayed or neutered.
yes, no, unknown, null Whether it was spayed or neutered before it came to you.
When it was spayed or neutered.
The vet who did it: a person on file.
Where it was done: an organization on file.
The adoption fee, in cents. Null is no fee set, which is a different fact from a fee of 0.
x >= 0Whether the animal itself is marked public. Your public site and listings show it only when its status is public too.
Health. When you write it, one of: healthy, minor_issue, under_treatment, recovering, chronic_condition, special_needs, critical, hospice. An older record may still hold words from before that list.
The description your public listing shows and a cage card can print.
Replaced whole when sent.
The animal's medical conditions, by name. Replaced whole when sent.
Your organization's own fields, by field key. Each value must suit its field. On a change, the keys you send are merged into what is stored, and a key sent as null is removed.
Today, unless you say.
A weight at intake, in whole grams. Recorded as the first reading, dated the intake date.
x >= 1Response
The animal, as it was created.
What can be written only by changing an animal: the home it needs, its listing details and its outcome.
One of your own status keys.
dog, cat, rabbit, equine, small_mammal, large_mammal, bird, barnyard, fish, reptile, exotic The internal name.
The external name: printed, and shown on your public site and listing sites. Null uses the internal name.
The breed. For a small mammal, bird, reptile, fish, farm animal, large mammal or exotic, the KIND of animal: Guinea pig, Cockatiel.
The breed or variety beside a kind: Abyssinian.
60male, female, unknown, null The date of birth, or the best estimate of it.
Where the animal is housed: a location or unit ID. Null clears it.
60Other names the animal is known by. Replaced whole when sent; blanks and repeats are dropped.
1060small, medium, large, extra_large, null Your own words.
60Your own words.
60Your own words.
60Your own words.
60stray, transfer, owner_surrender, field, born_in_care, adoption_return, seized, other, null The animal's usual vet: an organization on file.
Spayed or neutered.
yes, no, unknown, null Whether it was spayed or neutered before it came to you.
When it was spayed or neutered.
The vet who did it: a person on file.
Where it was done: an organization on file.
The adoption fee, in cents. Null is no fee set, which is a different fact from a fee of 0.
x >= 0Whether the animal itself is marked public. Your public site and listings show it only when its status is public too.
Health. When you write it, one of: healthy, minor_issue, under_treatment, recovering, chronic_condition, special_needs, critical, hospice. An older record may still hold words from before that list.
The description your public listing shows and a cage card can print.
Replaced whole when sent.
The animal's medical conditions, by name. Replaced whole when sent.
Your organization's own fields, by field key. Each value must suit its field. On a change, the keys you send are merged into what is stored, and a key sent as null is removed.
Who the animal left with, such as its adopter: a person on file. Null clears it.
When the animal left your care.
1 is yes, 0 is no, and null is NOT ASSESSED, which is a different fact from no.
1, 0, null The youngest child age, only when good_with_children is 1. Refused beside a good_with_children of 0.
0 <= x <= 18Which adults the animal is good with. Null is not assessed.
all, men_only, women_only, null 1 is yes, 0 is no, and null is NOT ASSESSED, which is a different fact from no.
1, 0, null 1 is yes, 0 is no, and null is NOT ASSESSED, which is a different fact from no.
1, 0, null 1 is yes, 0 is no, and null is NOT ASSESSED, which is a different fact from no.
1, 0, null 1 is yes, 0 is no, and null is NOT ASSESSED, which is a different fact from no.
1, 0, null 1 is yes, 0 is no, and null is NOT ASSESSED, which is a different fact from no.
1, 0, null 1 is yes, 0 is no, and null is NOT ASSESSED, which is a different fact from no.
1, 0, null 1 is yes, 0 is no, and null is NOT ASSESSED, which is a different fact from no.
1, 0, null 1 is yes, 0 is no, and null is NOT ASSESSED, which is a different fact from no.
1, 0, null 1 is yes, 0 is no, and null is NOT ASSESSED, which is a different fact from no.
1, 0, null The most hours the animal can be left alone.
0 <= x <= 24What a home needs to know, in your own words.
1 is yes, 0 is no, and null is NOT ASSESSED, which is a different fact from no.
1, 0, null 1 is yes, 0 is no, and null is NOT ASSESSED, which is a different fact from no.
1, 0, null 1 is yes, 0 is no, and null is NOT ASSESSED, which is a different fact from no.
1, 0, null 1 is yes, 0 is no, and null is NOT ASSESSED, which is a different fact from no.
1, 0, null 1 is FIV positive, 0 is negative, and null is not tested.
1, 0, null low, moderate, high, null indoor, both, outdoor, null The date the animal is available from.
20002000Whether you take sponsors for this animal. True or false, never null.
The smallest sponsorship, in cents.
x >= 02000The animal's ID in another system.
60The ID of the animal's profile photo. Null removes the photo. A photo is added from RescueConsole itself.
Your organization's ID.
The ID your organization's format gave it, such as A00042. Null when Pet IDs are switched off.
What kind of status it is in.
in_care, placed, out_of_care The transfer this animal came or went by, when it moved between partner rescues.
The other rescue in that transfer.