RescueGroups APIrescuegroups.org ↗
Search adoptable animals from rescue organizations by breed, location, and sex. Get detailed profiles with photos and org contact info via the RescueGroups API.
What is the RescueGroups API?
The RescueGroups API covers 3 endpoints that expose adoptable animal listings, detailed animal profiles, and a full breed reference list from RescueGroups.org. Use search_available_animals to query pets by breed ID, ZIP code, distance radius, sex, or foster-need status, then call get_animal_details to retrieve the full profile including photos, age category, qualities, and the rescue organization's contact information.
curl -X GET 'https://api.parse.bot/scraper/40e2c4c3-549a-4b4d-8f04-af8360e25a88/search_available_animals?page=1&breed=48&distance=50&location=10128&needs_foster=False' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace rescuegroups-org-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""RescueGroups.org — search adoptable animals by breed/location, drill into details."""
from parse_apis.rescuegroups.org_public_api import RescueGroups, Sex, AnimalNotFound
client = RescueGroups()
# List available breeds (single-page catalog).
for breed in client.breeds.list(limit=5):
print(breed.id, breed.name)
# Search for female animals near NYC.
summary = client.animalsummaries.search(sex=Sex.FEMALE, location="10128", limit=1).first()
if summary:
print(summary.name, summary.breed, summary.distance)
# Drill into full profile via the summary's navigation op.
detail = summary.details()
print(detail.name, detail.age, detail.sex, detail.status)
print(detail.organization.name, detail.organization.email)
# Typed error handling for a missing animal.
try:
bad = client.animalsummaries.search(location="10128", limit=1).first()
if bad:
bad.details()
except AnimalNotFound as exc:
print(f"Animal gone: {exc.animal_id}")
print("exercised: breeds.list / animalsummaries.search / AnimalSummary.details / AnimalNotFound")
Search for available/adoptable animals with filters for breed, sex, location, and distance. Can filter for animals needing foster care. Returns paginated results with animal summaries including name, breed, basic info, distance, and photo. Each result carries an animal ID suitable for get_animal_details.
| Param | Type | Description |
|---|---|---|
| sex | string | Sex of the animal: Male, Female, or omit for either. |
| page | integer | Page number of results. |
| breed | string | Breed ID to filter by (use get_breeds endpoint to retrieve valid IDs). |
| distance | integer | Search radius in miles from the specified location. |
| location | string | ZIP/Postal code to search near. |
| needs_foster | boolean | When true, filters for animals needing foster homes only. |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"animals": "array of animal summary objects with id, name, breed, basic_info, distance, and photo_url",
"summary": "string describing total number of pets found"
},
"sample": {
"data": {
"page": 1,
"animals": [
{
"id": "22214231",
"name": "Pure SA Maine Coonx",
"breed": "Maine Coon / Domestic Medium Hair / Mixed (medium coat)",
"distance": "",
"photo_url": "https://cdn.rescuegroups.org/1861/pictures/animals/22214/22214231/102554624.jpg",
"basic_info": "Young Male"
}
],
"summary": "857 pets found"
},
"status": "success"
}
}About the RescueGroups API
Search and Filter Adoptable Animals
search_available_animals accepts up to six filter parameters: breed (a breed ID from the get_breeds endpoint), sex (Male or Female), location (ZIP or postal code), distance (miles radius), needs_foster (boolean to surface foster-only listings), and page for pagination. Results return an array of animal summary objects, each with id, name, breed, basic_info, distance, and photo_url, plus a summary string reporting total match count.
Animal Detail Profiles
get_animal_details takes a single required animal_id — the numeric identifier from search results — and returns the full record. Response fields include age (categorical: Baby, Young, Adult, Senior), sex, breed, status, location, qualities (an array of attribute strings such as house-trained or good with kids), a photos array of URL strings, and an organization object containing the rescue's name, email, and url.
Breed Reference
get_breeds requires no inputs and returns the complete list of breed objects used across the platform. Each entry contains an id string and a name string. Pass the id value directly into the breed parameter of search_available_animals to filter results by a specific breed. This lookup is stable enough to cache between sessions rather than fetching on every search.
The RescueGroups API is a managed, monitored endpoint for rescuegroups.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when rescuegroups.org changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official rescuegroups.org API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a pet adoption finder that filters available animals by breed and ZIP code proximity
- Surface foster-needed animals specifically by setting needs_foster to true in search queries
- Display full adoption profiles with photo galleries by chaining search results into get_animal_details
- Show rescue organization contact details (email and URL) alongside each animal listing
- Power a breed-selector UI by pre-loading the get_breeds reference list
- Aggregate adoptable pet data by location for shelter capacity or intake trend analysis
- Send targeted alerts when new animals matching saved breed and location criteria appear
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.