The nØkill Network: A Voice for Life

API reference

Anyone can read with a free key. Verified shelters can also add and update their own pets, and can ask us to let their app contact owners. The base address is https://www.nokillnetwork.org/api/v1. Send your key as Authorization: Bearer nkn_live_…

The machine-readable description (OpenAPI 3.1) is at https://www.nokillnetwork.org/api/v1/openapi.json.

For shelters: add and update your pets

If you manage a shelter that's verified on The nØkill Network (claim your shelter's page first), you can turn on any of your keys for your shelter at Your API keys. That key can then add pets, update them, add photos and mark them adopted, for your shelter only, with the /shelters/{id}/pets endpoints below. Pets go live at once and work like any listing on the site. Keep your own id for each pet in externalId so your shelter software can sync without making duplicates.

The same key also adds pet tools to the MCP server, so an AI assistant can post and update pets for you. AI assistants (MCP)

GET /api/v1/pets

Adoptable pets. Live adoption listings in the US. Give a ZIP (nearest first) or a state (featured first, then newest).

Parameters

NameInTypeDescription
zipquerystring5-digit US ZIP code: results nearest first
radiusqueryintegerMiles from the ZIP (1 to 250) Default 50.
statequerystring2-letter US state code, e.g. CO
cityquerystringCity name, with state
speciesquerystringdog, cat, bird, rabbit, reptile or other
breedquerystringBreed as listed (see /breeds)
sizequerystringsmall, medium, large or xlarge
agequerystringbaby, young, adult or senior. Only newer listings record an age, so this narrows results a lot
limitqueryintegerResults per page (1 to 100) Default 20.
pagequeryintegerPage number Default 1.

Responses

  • 200 Pets
  • 400 Bad parameters
  • 401 Missing or invalid API key
  • 429 Over the per-minute or per-day limit (see Retry-After)

GET /api/v1/pets/{id}

One pet. A live adoption or lost & found listing. Closed, removed or expired listings return 404.

Parameters

NameInTypeDescription
id (required)pathintegerThe pet's id

Responses

  • 200 The pet
  • 400 Bad parameters
  • 401 Missing or invalid API key
  • 404 No live pet with that id
  • 429 Over the per-minute or per-day limit (see Retry-After)

POST /api/v1/pets/{id}/inquiries

Contact a pet's owner (verified shelters only). Sends an adopter's message to the pet's owner, typed by the adopter in a verified shelter's app. Only keys our staff have enabled for a verified shelter can use it. The message goes through the same scam checks as our own contact form; the owner's email names your shelter and their reply goes straight to the adopter, who also gets a copy. The answer is 202 whether the message was delivered or held for review.

Parameters

NameInTypeDescription
id (required)pathintegerThe pet's id

Request body: application/json, Inquiry

Responses

  • 202 Received
  • 400 Bad parameters
  • 401 Missing or invalid API key
  • 403 This key can't contact owners (not enabled for a verified shelter)
  • 404 No live pet with that id
  • 429 Over the per-minute or per-day limit (see Retry-After)

GET /api/v1/lost-found

Lost and found reports. Reports from the last 6 months, featured reports first: then near a ZIP (nearest first), or newest first, optionally in one state.

Parameters

NameInTypeDescription
zipquerystring5-digit US ZIP code: results nearest first
radiusqueryintegerMiles from the ZIP (1 to 250) Default 50.
statequerystring2-letter US state code, when no ZIP is given
statusquerystringlost or found
speciesquerystringdog or cat
limitqueryintegerResults per page (1 to 100) Default 20.

Responses

  • 200 Reports
  • 400 Bad parameters
  • 401 Missing or invalid API key
  • 429 Over the per-minute or per-day limit (see Retry-After)

GET /api/v1/shelters

No-kill shelters. Shelters in The nØkill Network's no-kill directory: near a US ZIP (nearest first) or in a state / city.

Parameters

NameInTypeDescription
zipquerystring5-digit US ZIP code: results nearest first
radiusqueryintegerMiles from the ZIP (1 to 250) Default 50.
statequerystring2-letter state code
cityquerystringCity name, with state
limitqueryintegerResults per page (1 to 100) Default 20.

Responses

  • 200 Shelters
  • 400 Bad parameters
  • 401 Missing or invalid API key
  • 429 Over the per-minute or per-day limit (see Retry-After)

GET /api/v1/shelters/{id}

One shelter.

Parameters

NameInTypeDescription
id (required)pathintegerThe shelter's id

Responses

  • 200 The shelter
  • 400 Bad parameters
  • 401 Missing or invalid API key
  • 404 No shelter with that id
  • 429 Over the per-minute or per-day limit (see Retry-After)

GET /api/v1/shelters/{id}/pets

Your shelter's pets (shelter keys). Pets your shelter added through the API, newest first. Only for a key a verified manager of the shelter turned on at /developers/keys.

Parameters

NameInTypeDescription
id (required)pathintegerYour shelter's id (from /shelters)
statusquerystringavailable (live pets) or all (adopted, closed and expired too) Default available.
externalIdquerystringFind the pet with your own id
limitqueryintegerResults per page (1 to 100) Default 50.
pagequeryintegerPage number Default 1.

Responses

  • 200 Pets
  • 400 Bad parameters
  • 401 Missing or invalid API key
  • 403 This key can't manage this shelter's pets (see /developers/keys)
  • 429 Over the per-minute or per-day limit (see Retry-After)

POST /api/v1/shelters/{id}/pets

Add a pet (shelter keys). Lists one of your shelter's pets for adoption. It goes live at once, at your shelter's city, state and ZIP unless you give others, and works like any listing on the site: its own page, search, the contact form (messages come to the key's owner) and a 3-month life that any update renews. Up to 100 new pets a day. Add photos with the photos endpoint.

Parameters

NameInTypeDescription
id (required)pathintegerYour shelter's id (from /shelters)

Request body: application/json, PetInput

Responses

  • 201 Added: the pet, with its id and page
  • 400 Bad parameters
  • 401 Missing or invalid API key
  • 403 This key can't manage this shelter's pets (see /developers/keys)
  • 409 You already added a pet with this externalId (its id is in the answer)
  • 429 Over the per-minute or per-day limit (see Retry-After)

GET /api/v1/shelters/{id}/pets/{petId}

One of your shelter's pets (shelter keys). Any status except removed.

Parameters

NameInTypeDescription
id (required)pathintegerYour shelter's id (from /shelters)
petId (required)pathintegerThe pet's id

Responses

  • 200 The pet
  • 400 Bad parameters
  • 401 Missing or invalid API key
  • 403 This key can't manage this shelter's pets (see /developers/keys)
  • 404 No pet of this shelter with that id
  • 429 Over the per-minute or per-day limit (see Retry-After)

PATCH /api/v1/shelters/{id}/pets/{petId}

Update a pet or mark it adopted (shelter keys). Send only the fields that change. status: available, adopted or closed (no longer available). Where the pet is can't change: its page address stays the same. Any update keeps the pet live for another 3 months.

Parameters

NameInTypeDescription
id (required)pathintegerYour shelter's id (from /shelters)
petId (required)pathintegerThe pet's id

Request body: application/json, PetUpdate

Responses

  • 200 The updated pet
  • 400 Bad parameters
  • 401 Missing or invalid API key
  • 403 This key can't manage this shelter's pets (see /developers/keys)
  • 404 No pet of this shelter with that id
  • 409 Another of your pets has this externalId
  • 429 Over the per-minute or per-day limit (see Retry-After)

DELETE /api/v1/shelters/{id}/pets/{petId}

Remove a pet (shelter keys). Takes the pet down completely. When it found a home, mark it adopted with PATCH instead.

Parameters

NameInTypeDescription
id (required)pathintegerYour shelter's id (from /shelters)
petId (required)pathintegerThe pet's id

Responses

  • 204 Removed
  • 400 Bad parameters
  • 401 Missing or invalid API key
  • 403 This key can't manage this shelter's pets (see /developers/keys)
  • 404 No pet of this shelter with that id
  • 429 Over the per-minute or per-day limit (see Retry-After)

POST /api/v1/shelters/{id}/pets/{petId}/photos

Add a photo (shelter keys). Send the image file itself as the body, with its Content-Type (JPEG, PNG, WebP, HEIC or GIF, up to 8 MB). We fix its orientation, remove its metadata (location too) and store it. Up to 10 photos; the first is the main one.

Parameters

NameInTypeDescription
id (required)pathintegerYour shelter's id (from /shelters)
petId (required)pathintegerThe pet's id

Request body: the image file itself, with its Content-Type (image/jpeg, image/png, image/webp, image/heic or image/gif).

Responses

  • 201 The pet with its photos
  • 400 Bad parameters
  • 401 Missing or invalid API key
  • 403 This key can't manage this shelter's pets (see /developers/keys)
  • 404 No pet of this shelter with that id
  • 409 The pet has 10 photos
  • 413 Over 8 MB
  • 415 Not an image type we take
  • 429 Over the per-minute or per-day limit (see Retry-After)

DELETE /api/v1/shelters/{id}/pets/{petId}/photos/{photoId}

Delete a photo (shelter keys).

Parameters

NameInTypeDescription
id (required)pathintegerYour shelter's id (from /shelters)
petId (required)pathintegerThe pet's id
photoId (required)pathintegerThe photo's id (from the pet's photos)

Responses

  • 204 Deleted
  • 400 Bad parameters
  • 401 Missing or invalid API key
  • 403 This key can't manage this shelter's pets (see /developers/keys)
  • 404 No such photo on this shelter's pet
  • 429 Over the per-minute or per-day limit (see Retry-After)

GET /api/v1/breeds

Breed names. Breeds as owners list them for a species, most listed first. Use them in the breed filter.

Parameters

NameInTypeDescription
species (required)querystringdog, cat, bird, rabbit or reptile

Responses

  • 200 Breeds
  • 400 Bad parameters
  • 401 Missing or invalid API key
  • 429 Over the per-minute or per-day limit (see Retry-After)

Objects

Inquiry

FieldTypeDescription
namestringThe adopter's name (1 to 80 characters)
emailstring (email)The adopter's email address: the owner replies to it
messagestringThe adopter's message (20 to 4,000 characters)

PetInput

FieldTypeDescription
namestringThe pet's name (1 to 60 characters)
speciesstringdog, cat, rabbit, bird, reptile or other
breedstringBreed (default Unknown)
sexstringmale, female or unknown
sizestringsmall, medium, large or xlarge
agestringbaby, young, adult or senior
descriptionstringThe pet's story (30 to 5,000 characters)
spayedNeuteredstringyes, no or unknown
goodWithKidsstringyes, no or unknown
goodWithDogsstringyes, no or unknown
goodWithCatsstringyes, no or unknown
energystringlow, medium or high
citystringCity or town (default: your shelter's)
statestringUS state code, or for UK shelters England, Scotland, Wales or Northern Ireland (default: your shelter's)
postalCodestringZIP code or postcode (default: your shelter's, else the city's)
externalIdstringYour own id for the pet, unique in your shelter, so a sync can find it again

PetUpdate

FieldTypeDescription
namestringThe pet's name
breedstringBreed
descriptionstringThe pet's story
agestringbaby, young, adult or senior
statusstringavailable, adopted or closed
externalIdstringYour own id for the pet

ShelterPet

FieldTypeDescription
idintegerPet id (the same as in /pets)
externalIdstring | null
statusstringavailable, adopted, closed or expired
namestring | null
speciesstring | null
breedstring | null
sexstring
sizestring | null
agestring | null
descriptionstring | null
spayedNeuteredstring | null
goodWithKidsstring | null
goodWithDogsstring | null
goodWithCatsstring | null
energystring | null
citystring | null
statestring | null
countrystringUS or UK
photosobject[]
postedAtstring | null (date-time)
updatedAtstring | null (date-time)
urlstring (uri)The pet's page on The nØkill Network

Error

FieldTypeDescription
errorstring
detailsstring[]

Pet

FieldTypeDescription
idintegerPet id
sectionstringadoption, lost or found
namestring | null
speciesstring | null
breedstring | null
sexstringmale, female, mixed or unknown
sizestring | nullNull when the owner didn't say
agestring | nullNull when the owner didn't say (most older listings)
citystring | null
statestring | null
countrystringUS or UK
descriptionstring | null
photosstring (uri)[]
featuredboolean
postedAtstring | null (date-time)
urlstring (uri)The pet's page: link to it wherever you show the pet

Shelter

FieldTypeDescription
idintegerShelter id
namestring
citystring | null
statestring | null
websitestring | null
phonestring | null
descriptionstring | null
hoursstring | null
howToAdoptstring | null
ratingnumber | nullAverage review rating, 1 to 5
reviewCountinteger
noKillPledgeboolean
urlstring (uri)The shelter's page on The nØkill Network
distanceMilesnumberZIP searches only

Try it

Your key is sent only to our API, from this page.