curl --request PUT \
--url https://api.grainledger.com/api/v1/transactions/{id}/dimensions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"dimensions": [
{
"dimensionId": "<string>",
"dimensionValueId": "<string>"
}
]
}
'const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({dimensions: [{dimensionId: '<string>', dimensionValueId: '<string>'}]})
};
fetch('https://api.grainledger.com/api/v1/transactions/{id}/dimensions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.grainledger.com/api/v1/transactions/{id}/dimensions"
payload = { "dimensions": [
{
"dimensionId": "<string>",
"dimensionValueId": "<string>"
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text){
"id": "<string>",
"externalId": "<string>",
"description": "<string>",
"amount": 1,
"direction": "INFLOW",
"transactionType": "DEPOSIT",
"date": "2023-11-07T05:31:56Z",
"referenceNumber": "<string>",
"source": "MANUAL",
"reviewStatus": "DRAFT",
"isReconciled": true,
"is1099Excluded": true,
"bankAccount": {
"id": "<string>",
"name": "<string>",
"mask": "<string>",
"accountType": "<string>"
},
"sourceAccount": {
"id": "<string>",
"accountNumber": "<string>",
"name": "<string>",
"accountType": "<string>"
},
"fund": {
"id": "<string>",
"name": "<string>",
"fundType": "<string>"
},
"vendor": {
"id": "<string>",
"name": "<string>"
},
"dimensions": [
{
"dimensionId": "<string>",
"dimensionValueId": "<string>",
"dimensionName": "<string>",
"dimensionValueName": "<string>"
}
],
"coding": {
"status": "UNCATEGORIZED",
"journalEntryId": "<string>",
"entryNumber": "<string>",
"isSplit": true,
"lines": [
{
"id": "<string>",
"account": {
"id": "<string>",
"accountNumber": "<string>",
"name": "<string>",
"accountType": "<string>"
},
"fund": {
"id": "<string>",
"name": "<string>",
"fundType": "<string>"
},
"amount": 123,
"memo": "<string>",
"dimensions": [
{
"dimensionId": "<string>",
"dimensionValueId": "<string>",
"dimensionName": "<string>",
"dimensionValueName": "<string>"
}
]
}
],
"missingRequiredDimensions": [
{
"dimensionId": "<string>",
"dimensionName": "<string>"
}
]
},
"suggestion": {
"account": {
"id": "<string>",
"accountNumber": "<string>",
"name": "<string>",
"accountType": "<string>"
},
"fund": {
"id": "<string>",
"name": "<string>",
"fundType": "<string>"
},
"confidence": 50
},
"attachmentCount": 1,
"canManage": true,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization.",
"details": {
"fields": [
{
"field": "amount",
"code": "invalid_type"
}
]
}
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization.",
"details": {
"fields": [
{
"field": "amount",
"code": "invalid_type"
}
]
}
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization.",
"details": {
"fields": [
{
"field": "amount",
"code": "invalid_type"
}
]
}
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization.",
"details": {
"fields": [
{
"field": "amount",
"code": "invalid_type"
}
]
}
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization.",
"details": {
"fields": [
{
"field": "amount",
"code": "invalid_type"
}
]
}
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization.",
"details": {
"fields": [
{
"field": "amount",
"code": "invalid_type"
}
]
}
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization.",
"details": {
"fields": [
{
"field": "amount",
"code": "invalid_type"
}
]
}
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization.",
"details": {
"fields": [
{
"field": "amount",
"code": "invalid_type"
}
]
}
}Set transaction dimensions
Replaces the header dimensions and mirrors them to the category line of a single-account entry. Split lines keep their own dimensions; set those with PUT /transactions//coding.
curl --request PUT \
--url https://api.grainledger.com/api/v1/transactions/{id}/dimensions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"dimensions": [
{
"dimensionId": "<string>",
"dimensionValueId": "<string>"
}
]
}
'const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({dimensions: [{dimensionId: '<string>', dimensionValueId: '<string>'}]})
};
fetch('https://api.grainledger.com/api/v1/transactions/{id}/dimensions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.grainledger.com/api/v1/transactions/{id}/dimensions"
payload = { "dimensions": [
{
"dimensionId": "<string>",
"dimensionValueId": "<string>"
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text){
"id": "<string>",
"externalId": "<string>",
"description": "<string>",
"amount": 1,
"direction": "INFLOW",
"transactionType": "DEPOSIT",
"date": "2023-11-07T05:31:56Z",
"referenceNumber": "<string>",
"source": "MANUAL",
"reviewStatus": "DRAFT",
"isReconciled": true,
"is1099Excluded": true,
"bankAccount": {
"id": "<string>",
"name": "<string>",
"mask": "<string>",
"accountType": "<string>"
},
"sourceAccount": {
"id": "<string>",
"accountNumber": "<string>",
"name": "<string>",
"accountType": "<string>"
},
"fund": {
"id": "<string>",
"name": "<string>",
"fundType": "<string>"
},
"vendor": {
"id": "<string>",
"name": "<string>"
},
"dimensions": [
{
"dimensionId": "<string>",
"dimensionValueId": "<string>",
"dimensionName": "<string>",
"dimensionValueName": "<string>"
}
],
"coding": {
"status": "UNCATEGORIZED",
"journalEntryId": "<string>",
"entryNumber": "<string>",
"isSplit": true,
"lines": [
{
"id": "<string>",
"account": {
"id": "<string>",
"accountNumber": "<string>",
"name": "<string>",
"accountType": "<string>"
},
"fund": {
"id": "<string>",
"name": "<string>",
"fundType": "<string>"
},
"amount": 123,
"memo": "<string>",
"dimensions": [
{
"dimensionId": "<string>",
"dimensionValueId": "<string>",
"dimensionName": "<string>",
"dimensionValueName": "<string>"
}
]
}
],
"missingRequiredDimensions": [
{
"dimensionId": "<string>",
"dimensionName": "<string>"
}
]
},
"suggestion": {
"account": {
"id": "<string>",
"accountNumber": "<string>",
"name": "<string>",
"accountType": "<string>"
},
"fund": {
"id": "<string>",
"name": "<string>",
"fundType": "<string>"
},
"confidence": 50
},
"attachmentCount": 1,
"canManage": true,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization.",
"details": {
"fields": [
{
"field": "amount",
"code": "invalid_type"
}
]
}
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization.",
"details": {
"fields": [
{
"field": "amount",
"code": "invalid_type"
}
]
}
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization.",
"details": {
"fields": [
{
"field": "amount",
"code": "invalid_type"
}
]
}
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization.",
"details": {
"fields": [
{
"field": "amount",
"code": "invalid_type"
}
]
}
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization.",
"details": {
"fields": [
{
"field": "amount",
"code": "invalid_type"
}
]
}
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization.",
"details": {
"fields": [
{
"field": "amount",
"code": "invalid_type"
}
]
}
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization.",
"details": {
"fields": [
{
"field": "amount",
"code": "invalid_type"
}
]
}
}{
"code": "forbidden",
"message": "You do not have access to this organization.",
"error": "You do not have access to this organization.",
"details": {
"fields": [
{
"field": "amount",
"code": "invalid_type"
}
]
}
}Authorizations
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.
Path Parameters
Resource ID
Body
Response
Transaction with updated dimensions
Integrator-supplied ID, unique within the organization.
Always positive. Use direction for the sign.
x >= 0INFLOW, OUTFLOW DEPOSIT, WITHDRAWAL, TRANSFER, ADJUSTMENT Calendar day represented as a UTC-midnight ISO timestamp.
MANUAL, PLAID, IMPORT, PLANNING_CENTER, PUSHPAY, TITHELY, SUBSPLASH, ROCK_RMS, RAMP, DIVVY, OVERFLOW DRAFT, PENDING_REVIEW, PENDING_TRANSFER_MATCH, PENDING_TRANSFER_CONFIRM, AUTO_CATEGORIZED, APPROVED, POSTED, REJECTED Hide child attributes
Hide child attributes
UNCATEGORIZED has no journal entry. CATEGORIZED has a draft entry. APPROVED has a posted entry.
UNCATEGORIZED, CATEGORIZED, APPROVED Category-side journal lines. The bank or card line is omitted.
Hide child attributes
Hide child attributes
Journal entry line ID.
Allocated amount. Positive values allocate the transaction; negative values offset another line.
Rule or AI coding suggestion awaiting review.
Hide child attributes
Hide child attributes
0 <= x <= 100x >= 0Whether this credential can edit the transaction.