Display your animals on your own website (web service)
Do you already have a website for your breeding kennel or shelter, and want to show your animals on it without entering them twice? The animals web service is a web address that returns the public information of your animals in JSON format, a format that websites can read. Your website reads it on every visit and displays it however you like: you update your animals in the app, and your website follows automatically.
It is available for Breeder and Shelter spaces. If your shelter also offers boarding, only the shelter's animals are shared: animals entrusted to you by your boarding clients are never shared. A boarding-only space has no animals to share.
Activating the web service
- Open the side menu, Organization > Settings section.
- Tap the Public page and website line.
- In the Animals on your own website card, turn on Allow the animals web service.
The setting is saved straight away: the web service address appears with the Copy the address button, followed by an example ready to paste into a page of your website and the Copy the example button. Pass either one on to the person who looks after your website.
The web service is turned off by default. It is independent of your Son espace santé website: it works even if that website is turned off (links to your public pages are then empty).
What is shared, and what never is
The web service only shares what a visitor already sees on your public page.
| For | Shared information |
|---|---|
| All animals | Name, species, breed, sex, date of birth, description, main photo, latest weight, LOF registration and confirmation, genetic tests. A photo gallery taken from the public posts in the animal's logbook (up to 12 photos per animal). |
| Breeder | Stud availability and stud terms (only if the stud is marked as available). Litters in progress, with their puppies and their status (available, reserved, sold). |
| Shelter | Status (up for adoption, in a foster family, reserved), category, history, character, compatibility with other animals and children, ideal adopter profile, biting and muzzle. |
Also left out of the list: hidden or archived animals and, for a shelter, animals in quarantine or not visible on the public page.
For your webmaster
This part is for the person who builds your website.
The address
The app shows the exact address of your web service. It looks like https://server.sonespacesante.com/fr/organization/ws_public/<ID>/PublicAnimals/, where <ID> is your organisation's number. Replace fr with en, de, it, es or pt to get species names in another language.
Optional parameters, to add after the address (?species=…&litters=all):
species=<code>: only the animals of one species, identified by its code (thespecies.codefield of the response).litters=all: also includes finished litters; by default, only litters in progress are returned.lang=<code>: language of the species names, instead of the one in the address.
Usage
- The address can be called directly from your visitors' browsers, from any website: no key, no login and no intermediate server needed.
- Responses are cached for 5 minutes: a change made in the app can take up to 5 minutes to appear.
- Each visitor is limited to 90 calls per minute, which is plenty for normal display.
- If the web service is not activated, the address responds with a 403 error and the code
PublicApiDisabled. If the organisation does not exist, it responds with a 404 error and the codeOrganizationNotFound. - Photo addresses (
photo,photos[].url) are stable and redirect to the image: use them as they are in<img src>. Do not copy the address they redirect to: it expires after one hour.
Sample response
Shortened response, for a breeder:
{
"success": true, "version": 1, "generatedAt": "2026-10-04T13:00:00Z",
"organization": {"id": 12, "name": "…", "types": ["breeder"], "logo": "https://…",
"city": "Lyon", "publicUrl": "https://apps.sonespacesante.com/elevage/…-12"},
"count": 1,
"animals": [{
"id": 345, "activity": "breeder", "name": "Rex",
"species": {"code": "…", "name": "Chien"}, "race": "Berger australien",
"gender": "m", "birthday": "2022-01-01", "isDead": false, "description": "…",
"photo": "https://…", "photos": [{"url": "https://…", "date": "2026-09-01"}],
"weight": {"value": 24.5, "unit": "kg", "date": "2026-09-01"},
"publicUrl": "https://…/345", "isLOF": true, "isConfirmed": true, "geneticTests": "",
"breeder": {"isStud": true, "stud": {"fee": 800, "terms": "…"}}
}],
"litters": [{
"id": 8, "name": "Rex x Luna 2026", "year": 2026, "matingDate": "2026-07-01",
"birthDate": null, "expectedBirthDate": "2026-09-02", "description": "…", "isClosed": false,
"father": {"id": 345, "name": "Rex", "race": "…", "photo": "https://…"},
"mother": {…},
"counts": {"total": 6, "available": 3, "reserved": 2, "sold": 1},
"puppies": [{"id": 901, "name": "Bleu", "gender": "m", "birthday": "2026-09-02", "race": "…",
"color": "#3366ff", "photo": "https://…", "photos": [], "status": "available"}]
}]
}
For a shelter, each animal has a refuge block instead of the breeder block:
"refuge": {
"status": "ADOPTABLE" | "FOSTER" | "RESERVED" | null, "statusSince": "…",
"adoptionAvailable": true, "category": {"name": "…", "color": "…"} | null,
"history": "…", "character": "…", "agreements": "…", "adoptingProfile": "…",
"biting": false, "muzzle": false
}
A puppy's status (status) is available, reserved or sold. A shelter animal's status is ADOPTABLE (up for adoption), FOSTER (in a foster family) or RESERVED (reserved).
Display example
This is the example offered by the Copy the example button: it displays the photo, name and description of each animal. Replace the address with yours.
<div id="animals"></div>
<script>
fetch('https://server.sonespacesante.com/fr/organization/ws_public/<ID>/PublicAnimals/')
.then(r => r.json())
.then(data => {
const list = document.getElementById('animals');
data.animals.forEach(a => {
const card = document.createElement('div');
if (a.photo) {
const img = document.createElement('img');
img.src = a.photo; img.alt = a.name; img.width = 200;
card.appendChild(img);
}
const name = document.createElement('h3');
name.textContent = a.name;
const text = document.createElement('p');
text.textContent = a.description;
card.append(name, text);
list.appendChild(card);
});
});
</script>
Texts are inserted with textContent, never with innerHTML: this is good practice for safely displaying text that comes from elsewhere.
Frequently asked questions
I changed an animal, but my website still shows the old version.
The information is kept in memory for 5 minutes: wait a few minutes, then reload the page on your website.
How do I stop sharing?
Turn off Allow the animals web service in Settings > Public page and website (the change is saved straight away). The address stops returning your animals within 5 minutes at most.
Can I leave out a particular animal?
Yes: hide it or archive it. For a shelter, you can also untick its visibility on the public page in its record.