curl --request POST \
--url https://{organization}.rescueconsole.com/api/animals/contract-templates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Senior cat adoption agreement",
"version": "2026-standard",
"kind": "adoption",
"body": "I, {{signer_name}}, adopt {{animal_name}} ({{animal_id}}) from Contoso Animal Rescue on {{date}} for {{fee}}. Media release: {{media_release}}.",
"conditions": {
"species": [
"cat"
],
"age_bands": [
"senior"
]
},
"asks": [
"media_release"
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Senior cat adoption agreement',
version: '2026-standard',
kind: 'adoption',
body: JSON.stringify('I, {{signer_name}}, adopt {{animal_name}} ({{animal_id}}) from Contoso Animal Rescue on {{date}} for {{fee}}. Media release: {{media_release}}.'),
conditions: {species: ['cat'], age_bands: ['senior']},
asks: ['media_release']
})
};
fetch('https://{organization}.rescueconsole.com/api/animals/contract-templates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{organization}.rescueconsole.com/api/animals/contract-templates"
payload = {
"name": "Senior cat adoption agreement",
"version": "2026-standard",
"kind": "adoption",
"body": "I, {{signer_name}}, adopt {{animal_name}} ({{animal_id}}) from Contoso Animal Rescue on {{date}} for {{fee}}. Media release: {{media_release}}.",
"conditions": {
"species": ["cat"],
"age_bands": ["senior"]
},
"asks": ["media_release"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"template": {
"id": "<string>",
"name": "<string>",
"version": "<string>",
"kind": "adoption",
"body": "<string>",
"is_active": true,
"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>"
}
],
"conditions": {
"species": [
"dog"
],
"age_bands": [
"<string>"
],
"traits": [
"<string>"
],
"min_days_in_care": 1,
"bonded_pair": true,
"min_animals": 3,
"min_fee_cents": 1,
"max_fee_cents": 1
},
"field_conditions": [
{
"target": "animal",
"field": "<string>",
"op": "is",
"value": "<string>"
}
],
"asks": [
"media_release"
],
"signature_count": 123,
"merge_fields": [
"animal_name"
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}{
"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)"
}Create a contract template
Adds a contract. Give it a name and its text, as plain text in body or as a formatted document in body_blocks. Needs write on Animals.
curl --request POST \
--url https://{organization}.rescueconsole.com/api/animals/contract-templates \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Senior cat adoption agreement",
"version": "2026-standard",
"kind": "adoption",
"body": "I, {{signer_name}}, adopt {{animal_name}} ({{animal_id}}) from Contoso Animal Rescue on {{date}} for {{fee}}. Media release: {{media_release}}.",
"conditions": {
"species": [
"cat"
],
"age_bands": [
"senior"
]
},
"asks": [
"media_release"
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Senior cat adoption agreement',
version: '2026-standard',
kind: 'adoption',
body: JSON.stringify('I, {{signer_name}}, adopt {{animal_name}} ({{animal_id}}) from Contoso Animal Rescue on {{date}} for {{fee}}. Media release: {{media_release}}.'),
conditions: {species: ['cat'], age_bands: ['senior']},
asks: ['media_release']
})
};
fetch('https://{organization}.rescueconsole.com/api/animals/contract-templates', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{organization}.rescueconsole.com/api/animals/contract-templates"
payload = {
"name": "Senior cat adoption agreement",
"version": "2026-standard",
"kind": "adoption",
"body": "I, {{signer_name}}, adopt {{animal_name}} ({{animal_id}}) from Contoso Animal Rescue on {{date}} for {{fee}}. Media release: {{media_release}}.",
"conditions": {
"species": ["cat"],
"age_bands": ["senior"]
},
"asks": ["media_release"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"template": {
"id": "<string>",
"name": "<string>",
"version": "<string>",
"kind": "adoption",
"body": "<string>",
"is_active": true,
"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>"
}
],
"conditions": {
"species": [
"dog"
],
"age_bands": [
"<string>"
],
"traits": [
"<string>"
],
"min_days_in_care": 1,
"bonded_pair": true,
"min_animals": 3,
"min_fee_cents": 1,
"max_fee_cents": 1
},
"field_conditions": [
{
"target": "animal",
"field": "<string>",
"op": "is",
"value": "<string>"
}
],
"asks": [
"media_release"
],
"signature_count": 123,
"merge_fields": [
"animal_name"
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}{
"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_.
Body
- Option 1
- Option 2
What the template is called.
The contract as plain text. Merge fields are written in double braces, such as {{adopter_name}}.
Your own label for this version, such as 2026-standard. A name and version can be used once.
What it is signed on: an adoption, a foster placement, a surrender (an intake), or other.
adoption, foster, surrender, other The contract as a formatted document. When sent, its text becomes the body.
Show child attributes
Show child attributes
When a template is offered. Every condition given must hold; none at all means every animal. A key not listed here is refused.
Show child attributes
Show child attributes
Conditions on the animal's or the adopter's own fields. Every one must hold.
10Show child attributes
Show child attributes
What is asked at signing: the media release, the payment and how to complete it, the team member approving, and where it was completed.
media_release, payment, approver, completed_where Response
The template.
Show child attributes
Show child attributes