You can provide up to 10 tags on Ledger Entries to store arbitrary key-value pairs, like IDs from your product.
You can define tags on Ledger Entry types in your Schema:
{
"key": "...",
"chartOfAccounts": {...},
"ledgerEntries": {
"types": [
{
"type": "user_funds_account",
"description": "Fund {{user_id}}",
"lines": [
{
"key": "increase_user_balance",
"account": {
"path": "liabilities/users:{{user_id}}/available"
},
"amount": "{{funding_amount}}"
},
{...other line}
],
"tags": [
{
"key": "user",
"value": "{{user_id}}"
},
{
"key": "deposit_flow",
"value": "{{deposit_flow_id}}"
},
{
"key": "deposit_flow_type",
"value": "ach"
}
]
}
]
}
}You can use the same parameter for both tag values and account paths.
When posting a Ledger Entry, include tag values as parameters:
mutation AddLedgerEntry(
$ik: SafeString!
$entry: LedgerEntryInput!
) {
addLedgerEntry(
ik: $ik,
entry: $entry
) {
__typename
... on AddLedgerEntryResult {
entry {
type
ik
tags {
key
value
}
}
lines {
amount
description
account {
path
}
}
}
... on Error {
code
message
}
}
}{
"ik": "fund-abc",
"entry": {
"ledger": {
"ik": "quickstart-ledger"
},
"type": "user_funds_account",
"parameters": {
"user_id": "user-1",
"funding_amount": "200",
"deposit_flow_id": "deposit-123"
}
}
}The Ledger Entry will have the tags you defined in the Schema:
{
"data": {
"addLedgerEntry": {
"entry": {
"type": "user_funds_account",
"ik": "fund-abc",
"tags": [
{
"key": "user",
"value": "user-1"
},
{
"key": "deposit_flow",
"value": "deposit-123"
},
{
"key": "deposit_flow_type",
"value": "ach"
}
]
},
"lines": [...]
}
}
}You can define tags at runtime when posting a Ledger Entry:
{
"ik": "add-ledger-entry",
"entry": {
"ledger": {
"ik": "quickstart-ledger"
},
"type": "user_funds_account",
"parameters": {
"user_id": "testing-user",
"funding_amount": "200",
"deposit_flow_id": "abc"
},
"tags": [
{
"key": "deposit_flow_type",
"value": "ach"
},
{
"key": "operator",
"value": "alice"
}
]
}
}If you define tags both at runtime and in the Schema, the Ledger Entry will get the combined set of tags:
{
"data": {
"addLedgerEntry": {
"entry": {
"type": "user_funds_account",
"ik": "fund-abc",
"tags": [
{
"key": "user",
"value": "user-1"
},
{
"key": "deposit_flow",
"value": "deposit-123"
},
{
"key": "deposit_flow_type",
"value": "ach"
},
{
"key": "operator",
"value": "alice"
}
]
},
"lines": [...]
}
}
}You can specify the same tag key in both places only if they have the same value.
In addition to tags defined in your Schema, you can add and update tags on a posted Ledger Entry.
mutation UpdateLedgerEntryTags(
$ledgerEntry: LedgerEntryMatchInput!
$update: UpdateLedgerEntryInput!
) {
updateLedgerEntry(
ledgerEntry: $ledgerEntry,
update: $update
) {
__typename
... on UpdateLedgerEntryResult {
entry {
type
ik
tags {
key
value
}
lines {
nodes {
amount
description
account {
path
}
}
}
}
}
... on Error {
code
message
}
}
}{
"ledgerEntry": {
"ik": "a-ledger-entry",
"ledger": {
"ik": "quickstart-ledger"
}
},
"update": {
"tags": [
{
"key": "operator",
"value": "bob"
},
{
"key": "supervisor",
"value": "eve"
}
]
}
}This is an additive operation:
Updating tags will update the Ledger Entry in-place. It will not create a new version of the Ledger Entry.
You can also remove tags from a Ledger Entry using the tagsToRemove field:
{
"ledgerEntry": {
"ik": "a-ledger-entry",
"ledger": {
"ik": "quickstart-ledger"
}
},
"update": {
"tagsToRemove": [
{
"key": "operator",
"value": "bob"
}
]
}
}When removing tags:
key and value of the tag to removeYou can combine adding/updating and removing tags in a single update:
{
"ledgerEntry": {
"ik": "a-ledger-entry",
"ledger": {
"ik": "quickstart-ledger"
}
},
"update": {
"tags": [
{
"key": "supervisor",
"value": "eve"
}
],
"tagsToRemove": [
{
"key": "operator",
"value": "bob"
}
]
}
}You can only update a Ledger Entry a maximum of 10 times.