curl --request POST \
--url https://{organization}.rescueconsole.com/api/animals/applications/{id}/contract/preview \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"template_id": "e1d2c3b4-a596-4877-8a9b-0c1d2e3f4a5b",
"animal_ids": [
"0c9d8e7f-6a5b-4c3d-9e1f-0a9b8c7d6e5f"
],
"answers": {
"media_release": true,
"payment": {
"method": "venmo",
"instructions": "Send $150 to @ContosoRescue"
},
"approver_person_id": "5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a",
"completed_where": {
"kind": "event",
"label": "Adoption day at Contoso Pet Supply"
}
},
"adopted_on": "2026-09-18",
"signer_name": "Dana Whitfield"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
template_id: 'e1d2c3b4-a596-4877-8a9b-0c1d2e3f4a5b',
animal_ids: ['0c9d8e7f-6a5b-4c3d-9e1f-0a9b8c7d6e5f'],
answers: {
media_release: true,
payment: {method: 'venmo', instructions: 'Send $150 to @ContosoRescue'},
approver_person_id: '5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a',
completed_where: {kind: 'event', label: 'Adoption day at Contoso Pet Supply'}
},
adopted_on: '2026-09-18',
signer_name: 'Dana Whitfield'
})
};
fetch('https://{organization}.rescueconsole.com/api/animals/applications/{id}/contract/preview', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{organization}.rescueconsole.com/api/animals/applications/{id}/contract/preview"
payload = {
"template_id": "e1d2c3b4-a596-4877-8a9b-0c1d2e3f4a5b",
"animal_ids": ["0c9d8e7f-6a5b-4c3d-9e1f-0a9b8c7d6e5f"],
"answers": {
"media_release": True,
"payment": {
"method": "venmo",
"instructions": "Send $150 to @ContosoRescue"
},
"approver_person_id": "5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a",
"completed_where": {
"kind": "event",
"label": "Adoption day at Contoso Pet Supply"
}
},
"adopted_on": "2026-09-18",
"signer_name": "Dana Whitfield"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"body": "<string>",
"unresolved_fields": [
"<string>"
],
"values": {},
"missing_answers": [
"media_release"
],
"asks": [
"media_release"
],
"fee_cents": 123,
"body_blocks": [
{
"type": "p",
"runs": [
{
"text": "<string>",
"bold": true,
"italic": true,
"underline": true,
"strike": true,
"href": "<string>"
}
],
"items": [
[
{
"text": "<string>",
"bold": true,
"italic": true,
"underline": true,
"strike": true,
"href": "<string>"
}
]
],
"level": 1,
"rows": [
[
[
{
"text": "<string>",
"bold": true,
"italic": true,
"underline": true,
"strike": true,
"href": "<string>"
}
]
]
],
"src": "<string>",
"alt": "<string>"
}
],
"decided_by_person_id": "<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)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}{
"error": "house_trained must be 1, 0 or null (not assessed)"
}Preview the adoption contract
The adoption contract as it would read for these animals, and what is still to answer, without recording anything. Checked exactly as signing is, except that missing answers and unfilled merge fields are reported rather than refused. Only on an approved application. Needs write on Animals.
curl --request POST \
--url https://{organization}.rescueconsole.com/api/animals/applications/{id}/contract/preview \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"template_id": "e1d2c3b4-a596-4877-8a9b-0c1d2e3f4a5b",
"animal_ids": [
"0c9d8e7f-6a5b-4c3d-9e1f-0a9b8c7d6e5f"
],
"answers": {
"media_release": true,
"payment": {
"method": "venmo",
"instructions": "Send $150 to @ContosoRescue"
},
"approver_person_id": "5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a",
"completed_where": {
"kind": "event",
"label": "Adoption day at Contoso Pet Supply"
}
},
"adopted_on": "2026-09-18",
"signer_name": "Dana Whitfield"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
template_id: 'e1d2c3b4-a596-4877-8a9b-0c1d2e3f4a5b',
animal_ids: ['0c9d8e7f-6a5b-4c3d-9e1f-0a9b8c7d6e5f'],
answers: {
media_release: true,
payment: {method: 'venmo', instructions: 'Send $150 to @ContosoRescue'},
approver_person_id: '5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a',
completed_where: {kind: 'event', label: 'Adoption day at Contoso Pet Supply'}
},
adopted_on: '2026-09-18',
signer_name: 'Dana Whitfield'
})
};
fetch('https://{organization}.rescueconsole.com/api/animals/applications/{id}/contract/preview', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{organization}.rescueconsole.com/api/animals/applications/{id}/contract/preview"
payload = {
"template_id": "e1d2c3b4-a596-4877-8a9b-0c1d2e3f4a5b",
"animal_ids": ["0c9d8e7f-6a5b-4c3d-9e1f-0a9b8c7d6e5f"],
"answers": {
"media_release": True,
"payment": {
"method": "venmo",
"instructions": "Send $150 to @ContosoRescue"
},
"approver_person_id": "5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a",
"completed_where": {
"kind": "event",
"label": "Adoption day at Contoso Pet Supply"
}
},
"adopted_on": "2026-09-18",
"signer_name": "Dana Whitfield"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"body": "<string>",
"unresolved_fields": [
"<string>"
],
"values": {},
"missing_answers": [
"media_release"
],
"asks": [
"media_release"
],
"fee_cents": 123,
"body_blocks": [
{
"type": "p",
"runs": [
{
"text": "<string>",
"bold": true,
"italic": true,
"underline": true,
"strike": true,
"href": "<string>"
}
],
"items": [
[
{
"text": "<string>",
"bold": true,
"italic": true,
"underline": true,
"strike": true,
"href": "<string>"
}
]
],
"level": 1,
"rows": [
[
[
{
"text": "<string>",
"bold": true,
"italic": true,
"underline": true,
"strike": true,
"href": "<string>"
}
]
]
],
"src": "<string>",
"alt": "<string>"
}
],
"decided_by_person_id": "<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)"
}{
"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_.
Path Parameters
The application's ID.
Body
An active adoption contract, offered for these animals.
The animals going home, in the order the contract names them. They need not be the animals applied for, and none may already have an adoption that is not reversed.
1 - 10 elementsBy animal ID, a fee other than the usual: { "fee_cents": 0 } for another amount, or { "apply_discounts": false } for the adoption fee with no discounts. An animal left out goes home at its adoption fee less any of your discounts that apply.
Show child attributes
Show child attributes
The answers to what the template asks at signing. Answer what it asks; anything else is left out of the contract.
Show child attributes
Show child attributes
The adoption day, which {{date}} prints. Today unless you say.
The name the adopter types. It fills {{signer_name}}.
Response
The contract as it would read.
The contract as it would read.
Merge fields nothing fills. A contract with any is refused at signing.
Each merge field and what it filled in.
Show child attributes
Show child attributes
What the template asks that is not answered yet.
media_release, payment, approver, completed_where What the template asks.
media_release, payment, approver, completed_where Every animal's fee together.
Show child attributes
Show child attributes
Who approved the application.