List giving batches
curl --request GET \
--url https://api.grainledger.com/api/v1/batches \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.grainledger.com/api/v1/batches', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.grainledger.com/api/v1/batches"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"batches": [
{
"id": "batch_1",
"externalBatchId": "api-example",
"externalReference": "Sunday online gifts",
"batchDate": "2026-08-16T00:00:00.000Z",
"totals": {
"gross": 1025,
"fees": 25,
"net": 1000,
"donationCount": 8
},
"status": "OPEN",
"isCommitted": false,
"committedAt": null,
"processedAt": null,
"dimensions": [],
"fundSplits": [
{
"fundId": "fund_1",
"fundName": "General",
"amount": 1025
}
],
"contributionIds": [
"contribution_1"
],
"isFrozen": false,
"createdAt": "2026-08-16T12:00:00.000Z",
"updatedAt": "2026-08-16T12:00:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 1,
"totalPages": 1
}
}{
"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."
}Giving Batches
List giving batches
Returns giving batches, not pledge-card review batches. Totals are derived from current contribution membership.
GET
https://api.grainledger.com
/
api
/
v1
/
batches
List giving batches
curl --request GET \
--url https://api.grainledger.com/api/v1/batches \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.grainledger.com/api/v1/batches', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.grainledger.com/api/v1/batches"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"batches": [
{
"id": "batch_1",
"externalBatchId": "api-example",
"externalReference": "Sunday online gifts",
"batchDate": "2026-08-16T00:00:00.000Z",
"totals": {
"gross": 1025,
"fees": 25,
"net": 1000,
"donationCount": 8
},
"status": "OPEN",
"isCommitted": false,
"committedAt": null,
"processedAt": null,
"dimensions": [],
"fundSplits": [
{
"fundId": "fund_1",
"fundName": "General",
"amount": 1025
}
],
"contributionIds": [
"contribution_1"
],
"isFrozen": false,
"createdAt": "2026-08-16T12:00:00.000Z",
"updatedAt": "2026-08-16T12:00:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 20,
"total": 1,
"totalPages": 1
}
}{
"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 for resource requests. Omit only for GET /api/v1/organizations. Optional with organization API keys; if supplied with an API key, it must match the key's organization.
Query Parameters
Page number (1-based)
Required range:
x >= 1Giving records per page
Required range:
1 <= x <= 100Available options:
OPEN, COMMITTED, SETTLED, FAILED Available options:
batchDate, totalGross, totalNet, createdAt Available options:
asc, desc Response
Paginated giving batches
Hide child attributes
Hide child attributes
Last modified on September 1, 2026