curl --request POST \
--url https://{organization}.rescueconsole.com/api/animals/animals/import \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"dry_run": true,
"rows": [
{
"name": "Juniper",
"species": "cat",
"breed": "Domestic Shorthair",
"sex": "female",
"intake_date": "2026-08-30",
"status": "available_for_adoption",
"pet_id": "C-1042",
"photo_url": "https://photos.contoso.com/juniper-1.jpg"
},
{
"name": "Biscuit",
"species": "dog",
"breed": "Lab mix",
"sex": "male",
"dob_estimate": "2024-03-01",
"adoption_fee_cents": 17500
}
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
dry_run: true,
rows: [
{
name: 'Juniper',
species: 'cat',
breed: 'Domestic Shorthair',
sex: 'female',
intake_date: '2026-08-30',
status: 'available_for_adoption',
pet_id: 'C-1042',
photo_url: 'https://photos.contoso.com/juniper-1.jpg'
},
{
name: 'Biscuit',
species: 'dog',
breed: 'Lab mix',
sex: 'male',
dob_estimate: '2024-03-01',
adoption_fee_cents: 17500
}
]
})
};
fetch('https://{organization}.rescueconsole.com/api/animals/animals/import', 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/import"
payload = {
"dry_run": True,
"rows": [
{
"name": "Juniper",
"species": "cat",
"breed": "Domestic Shorthair",
"sex": "female",
"intake_date": "2026-08-30",
"status": "available_for_adoption",
"pet_id": "C-1042",
"photo_url": "https://photos.contoso.com/juniper-1.jpg"
},
{
"name": "Biscuit",
"species": "dog",
"breed": "Lab mix",
"sex": "male",
"dob_estimate": "2024-03-01",
"adoption_fee_cents": 17500
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"dry_run": true,
"total_rows": 123,
"would_create": 123,
"created": 123,
"skipped": [
{
"line": 123,
"pet_id": "<string>",
"reason": "<string>"
}
],
"errors": [
{
"line": 123,
"message": "<string>"
}
],
"preview": [
{
"line": 123,
"name": "<string>",
"species": "<string>",
"status": "<string>",
"pet_id": "<string>",
"photos": 123,
"attachments": 123
}
],
"import_id": "<string>",
"fetches": {
"photos": 123,
"attachments": 123
}
}{
"error": "<string>"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}Import animals
Adds many animals at once from rows you have read out of a spreadsheet: 2,000 rows at most. Every row is checked before any is written, and if one is wrong nothing is written. Send dry_run: true first to see what would happen without writing anything. A row whose pet_id is already in use is skipped, never updated. A row with no status takes the first status in your organization’s list. Send each species as its key, such as dog: unlike taking in one animal, an import does not translate other words for a species. Animals imported are not public, are not given a Pet ID when the row has none, start no workflows, and are not recorded in activity or sent to your webhooks. Links in photo_url and attachment_url are fetched after the import, a few at a time; the import itself fetches nothing. Row numbers in the answer count your header as line 1, so the first row you send is line 2. Needs write on Animals.
curl --request POST \
--url https://{organization}.rescueconsole.com/api/animals/animals/import \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"dry_run": true,
"rows": [
{
"name": "Juniper",
"species": "cat",
"breed": "Domestic Shorthair",
"sex": "female",
"intake_date": "2026-08-30",
"status": "available_for_adoption",
"pet_id": "C-1042",
"photo_url": "https://photos.contoso.com/juniper-1.jpg"
},
{
"name": "Biscuit",
"species": "dog",
"breed": "Lab mix",
"sex": "male",
"dob_estimate": "2024-03-01",
"adoption_fee_cents": 17500
}
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
dry_run: true,
rows: [
{
name: 'Juniper',
species: 'cat',
breed: 'Domestic Shorthair',
sex: 'female',
intake_date: '2026-08-30',
status: 'available_for_adoption',
pet_id: 'C-1042',
photo_url: 'https://photos.contoso.com/juniper-1.jpg'
},
{
name: 'Biscuit',
species: 'dog',
breed: 'Lab mix',
sex: 'male',
dob_estimate: '2024-03-01',
adoption_fee_cents: 17500
}
]
})
};
fetch('https://{organization}.rescueconsole.com/api/animals/animals/import', 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/import"
payload = {
"dry_run": True,
"rows": [
{
"name": "Juniper",
"species": "cat",
"breed": "Domestic Shorthair",
"sex": "female",
"intake_date": "2026-08-30",
"status": "available_for_adoption",
"pet_id": "C-1042",
"photo_url": "https://photos.contoso.com/juniper-1.jpg"
},
{
"name": "Biscuit",
"species": "dog",
"breed": "Lab mix",
"sex": "male",
"dob_estimate": "2024-03-01",
"adoption_fee_cents": 17500
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"dry_run": true,
"total_rows": 123,
"would_create": 123,
"created": 123,
"skipped": [
{
"line": 123,
"pet_id": "<string>",
"reason": "<string>"
}
],
"errors": [
{
"line": 123,
"message": "<string>"
}
],
"preview": [
{
"line": 123,
"name": "<string>",
"species": "<string>",
"status": "<string>",
"pet_id": "<string>",
"photos": 123,
"attachments": 123
}
],
"import_id": "<string>",
"fetches": {
"photos": 123,
"attachments": 123
}
}{
"error": "<string>"
}{
"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
Response
What was done, or on a dry run what would be. A dry run with errors answers 200 too, listing them.
How many rows are new animals.
How many were created: 0 on a dry run or when any row is wrong.
Rows whose Pet ID is already in use.
Show child attributes
Show child attributes
What is wrong, by row. Nothing is written while this is not empty.
Show child attributes
Show child attributes
The first 10 animals to be created.
Show child attributes
Show child attributes
How many photo and attachment links will be fetched.
Show child attributes
Show child attributes