List households
curl --request GET \
--url https://api.grainledger.com/api/v1/households \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.grainledger.com/api/v1/households', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.grainledger.com/api/v1/households"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"households": [
{
"id": "cm555eee666fff",
"name": "Johnson Family",
"primaryContactId": "cm456def789ghi"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 67,
"totalPages": 4
}
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization."
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization."
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization."
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization."
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization."
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization."
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization."
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization."
}Households
List households
GET
https://api.grainledger.com
/
api
/
v1
/
households
List households
curl --request GET \
--url https://api.grainledger.com/api/v1/households \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.grainledger.com/api/v1/households', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.grainledger.com/api/v1/households"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"households": [
{
"id": "cm555eee666fff",
"name": "Johnson Family",
"primaryContactId": "cm456def789ghi"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 67,
"totalPages": 4
}
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization."
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization."
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization."
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization."
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization."
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization."
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization."
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization."
}Authorizations
ApiKeyAuthGrainOAuth2BearerAuth
Organization API key created in Grain Settings → API. The key determines the organization and is limited to its assigned resource scopes. Write scopes imply the corresponding read scope.
Headers
Required with OAuth access tokens. Optional with organization API keys; if supplied, it must match the key's organization.
Query Parameters
Page number (1-based)
Required range:
x >= 1Records per page
Required range:
1 <= x <= 1000Response
Paginated households
Hide child attributes
Hide child attributes
Compact donor identity, household, membership, and giving summary used in list and relationship responses.
Hide child attributes
Hide child attributes
Available options:
INDIVIDUAL, HOUSEHOLD, ORGANIZATION, DAF_CUSTODIAN, FOUNDATION, ESTATE Available options:
PRIMARY, SPOUSE, CHILD, OTHER Available options:
VISITOR, REGULAR_ATTENDER, MEMBER, INACTIVE, FORMER Last modified on August 23, 2026
⌘I