GraphQL

Object Types

Object types represent complex objects with multiple fields and can be queried for specific data.

Account

Accounts model all of the economic activity that your ledger provides.

The chart of accounts is the basis for creating balance sheets, P&L reports, and for understanding the balances for the customer and business entities your business services.

Accounts can be organized into sets with the AccountSet type. Hierarchical tree structures which roll up balances across many accounts can be modeled by nesting sets within other sets.

Fields

id - ID! Globally unique identifier for a record to support Global Object Identification. Uses format ac:<key> where key is base64(json({ 1: accountId })).
accountId - UUID! Unique identifier for the account.
externalId - String! Allows specifying a unique external ID associated with this account.
name - String! Account name. Examples: "Bill Pay Settlement", "Courtesy Credit"
code - String! Shorthand code for the account, often an abbreviated version of the account name. Example: 'ACH_RECON' for an account named 'ACH Reconciliation'.
description - String! Description of the account.
status - AccountStatus! Current status for the account.

normalBalanceType - DebitOrCredit!

Flag indicating whether this account uses a "debit normal" or a "credit normal" balance.

In double-entry accounting, accounts with a debit normal balance use the balance calculation balance = debits - credits. This is used for asset and expense account types.

Accounts with a credit normal balance, in contrast, calculate their balance with the equation balance = credits - debits. This is the default type for liabilities, equity, and revenue account types.

metadata - JSON Metadata attached to this account.
config - AccountConfig! System config for this account.
created - Timestamp! Date and time when the account was first created.
modified - Timestamp! Time of the last change. Especially useful when reviewing the history.
version - Int! The current version number of this account. Previous versions are tracked in history.

balances - BalanceConnection!

Reference to the balances for this account.

Accounts have balances across all three layers: SETTLED, PENDING, and ENCUMBRANCE.

Each balance reflects the current total debits and credits for all entries in this account within the specified journal and currency.

balance - Balance Reference to the balance for a specific journal and currency (defaults to "USD").
entries - EntryConnection! All ledger entries associated with this account.
sets - AccountSetConnection! Accounts can be organized into sets. Each account can belong to zero or multiple account sets.
history - AccountConnection! History of changes to this Account record. Because ledgers are immutable and append-only, all changes are recorded as sequenced versions of the record, providing an unbroken lineage of the current state.

AccountConfig

System configuration for an account.

Fields

enableConcurrentPosting - Boolean When true, optimizes the account for a ridiculously high rate of entries written. Tradeoff is that read operations for balances become much more expensive and slow; use with caution. Defaults to false.

AccountConnection

Connection to a list of Account nodes. Access Account nodes directly through the nodes field, or access information about the connection edges with the edges field. Use pageInfo to paginate responses using the cursors provided.

Fields

nodes - [Account]!

Accounts model all of the economic activity that your ledger provides.

The chart of accounts is the basis for creating balance sheets, P&L reports, and for understanding the balances for the customer and business entities your business services.

Accounts can be organized into sets with the AccountSet type. Hierarchical tree structures which roll up balances across many accounts can be modeled by nesting sets within other sets.

edges - [AccountConnectionEdge]! Edges represent links connecting a parent or query field to a list of Account nodes. They contain a reference to the Account node and metadata like the cursor position for the edge.
pageInfo - PageInfo!

AccountConnectionEdge

Edges represent links connecting a parent or query field to a list of Account nodes. They contain a reference to the Account node and metadata like the cursor position for the edge.

Fields

cursor - String! Cursor position at this edge.
node - Account Reference to the Account node at this edge.

AccountSet

A set of accounts.

Account sets contain members which can include accounts as well as other account sets.

Every account set has multiple balances which represent the sum of all balances of member accounts and member account sets. Like balances for accounts, account set balances are computed for every currency used by the entries posted to accounts in a set and all of its sub-sets.

Because account sets are tied to a specific journal, they only compute balances using entries posted to their journal.

Fields

id - ID! Globally unique identifier for a record to support Global Object Identification. Uses format as:<key> where key is base64(json({ 1: accountSetId })).
accountSetId - UUID! Unique identifier for the set.
journalId - UUID! The journal for the set. Account sets are confined to a single journal and roll up balances for entries on their journal. Account sets can only contain other sets using the same journal.
name - String! Name for the set.
description - String! Description of the account set.
metadata - JSON Metadata attached to this account set.
config - AccountSetConfig! System config for this account set.

normalBalanceType - DebitOrCredit!

Indicates whether this account set uses a "debit normal" or a "credit normal" balance.

In double-entry accounting, a debit normal balance uses the calculation balance = debits - credits.

A credit normal balance, in contrast, is calculated with the equation balance = credits - debits.

created - Timestamp! Date and time when the account set was first created.
modified - Timestamp! Time of the last change. Especially useful when reviewing the history.
version - Int! The current version number of this account set. Previous versions are tracked in history.
balance - Balance Reference to the balance for a specific currency (defaults to "USD").

balances - BalanceConnection!

Reference to the balances for this account set.

Each balance reflects the current sum of debits and credits for all entries on accounts in this set and all accounts in any sub-sets, on the current layer and all layers above.

Because account sets are tied to a specific journal, they only compute balances using entries posted to their journal.

entries - EntryConnection! All ledger entries associated with accounts in this set and in all subsets.
history - AccountSetConnection! History of changes to this AccountSet record. Because ledgers are immutable and append-only, all changes are recorded as sequenced versions of the record, providing an unbroken lineage of the current state.
members - AccountSetMemberConnection! All members of the account set. Sets can include other account sets.
sets - AccountSetConnection! Account sets can be organized into sets. Each account set can belong to zero or multiple account sets.

AccountSetConfig

System configuration for an account set.

Fields

enableConcurrentPosting - Boolean When true, optimizes the account set for a ridiculously high rate of entries written. Tradeoff is that read operations for balances become much more expensive and slow; use with caution. Defaults to false.

AccountSetConnection

Connection to a list of AccountSet nodes. Access AccountSet nodes directly through the nodes field, or access information about the connection edges with the edges field. Use pageInfo to paginate responses using the cursors provided.

Fields

nodes - [AccountSet]!

A set of accounts.

Account sets contain members which can include accounts as well as other account sets.

Every account set has multiple balances which represent the sum of all balances of member accounts and member account sets. Like balances for accounts, account set balances are computed for every currency used by the entries posted to accounts in a set and all of its sub-sets.

Because account sets are tied to a specific journal, they only compute balances using entries posted to their journal.

edges - [AccountSetConnectionEdge]! Edges represent links connecting a parent or query field to a list of AccountSet nodes. They contain a reference to the AccountSet node and metadata like the cursor position for the edge.
pageInfo - PageInfo!

AccountSetConnectionEdge

Edges represent links connecting a parent or query field to a list of AccountSet nodes. They contain a reference to the AccountSet node and metadata like the cursor position for the edge.

Fields

cursor - String! Cursor position at this edge.
node - AccountSet Reference to the AccountSet node at this edge.

AccountSetMemberConnection

Connection to a list of AccountSetMember nodes. Access AccountSetMember nodes directly through the nodes field, or access information about the connection edges with the edges field. Use pageInfo to paginate responses using the cursors provided.

Fields

nodes - [AccountSetMember!]! Account set members can be of type Account or AccountSet.
edges - [AccountSetMemberConnectionEdge]! Edges represent links connecting a parent or query field to a list of AccountSetMember nodes. They contain a reference to the AccountSetMember node and metadata like the cursor position for the edge.
pageInfo - PageInfo!

AccountSetMemberConnectionEdge

Edges represent links connecting a parent or query field to a list of AccountSetMember nodes. They contain a reference to the AccountSetMember node and metadata like the cursor position for the edge.

Fields

cursor - String! Cursor position at this edge.
node - AccountSetMember Reference to the AccountSetMember node at this edge.

Balance

Balances are auto-calculated sums of the entries for a given account.

Every balance record maintains a drBalance for entries on the debit side of the ledger and a crBalance for credit entries.

Additionally, every account has a normalBalance, which is equal to crBalance - drBalance for credit normal accounts, and drBalance - crBalance for debit normal accounts.

Each account can have balances across all three layers: SETTLED, PENDING, and ENCUMBRANCE.

Fields

id - ID! Globally unique identifier for a record to support Global Object Identification. Uses format ba:<key> where key is base64(json({ 1: accountId, 2: journalId, 3: currency })) The journalId and currency are optional and will use the default values if they are missing
journalId - UUID! ID of the journal within which the balance is calculated.
accountId - UUID! ID of the account for which the balance is calculated.
entryId - UUID! ID of the most recent entry used to calculate the balance.

currency - CurrencyCode!

The currency of the balance amounts.

Balances represent the sum of entries using the same currency. Multi-currency ledgers will therefore have different balances for each currency.

settled - BalanceAmount! The balance amounts on the settled layer.
pending - BalanceAmount! The balance amounts on the pending layer.
encumbrance - BalanceAmount! The balance amounts on the encumbrance layer.
available - BalanceAmount! The balance amounts available by combining the provided layer with all layers above.
created - Timestamp! Date and time when the balance was first created.
modified - Timestamp! Time of the last change. Especially useful when reviewing the history.
version - Int! The current version number of this balance. Previous versions are tracked in history.
account - Account! Reference to the balance's account.
entry - Entry! Reference to the most recent entry used to calculate the balance.
entries - EntryConnection! All ledger entries for this balance.
journal - Journal! Reference to the balance's journal.
history - BalanceConnection! History of changes to this Balance record. Because ledgers are immutable and append-only, all changes are recorded as sequenced versions of the record, providing an unbroken lineage of the current state.

BalanceAmount

Fields

drBalance - Money! Sum of all amounts for entries on the DEBIT side of the ledger.
crBalance - Money! Sum of all amounts for entries on the CREDIT side of the ledger.

normalBalance - Money!

The "normal balance" for an account is different for credit normal and debit normal accounts.

For credit normal accounts, the normal balance is equal to crBalance - drBalance. For debit normal accounts, the normal balance is the reverse: drBalance - crBalance.

entryId - UUID! ID of the most recent entry used to calculate the balance on this layer.
modified - Timestamp! Time of the last change of balance on this layer.

BalanceConnection

Connection to a list of Balance nodes. Access Balance nodes directly through the nodes field, or access information about the connection edges with the edges field. Use pageInfo to paginate responses using the cursors provided.

Fields

nodes - [Balance]!

Balances are auto-calculated sums of the entries for a given account.

Every balance record maintains a drBalance for entries on the debit side of the ledger and a crBalance for credit entries.

Additionally, every account has a normalBalance, which is equal to crBalance - drBalance for credit normal accounts, and drBalance - crBalance for debit normal accounts.

Each account can have balances across all three layers: SETTLED, PENDING, and ENCUMBRANCE.

edges - [BalanceConnectionEdge]! Edges represent links connecting a parent or query field to a list of Balance nodes. They contain a reference to the Balance node and metadata like the cursor position for the edge.
pageInfo - PageInfo!

BalanceConnectionEdge

Edges represent links connecting a parent or query field to a list of Balance nodes. They contain a reference to the Balance node and metadata like the cursor position for the edge.

Fields

cursor - String! Cursor position at this edge.
node - Balance Reference to the Balance node at this edge.

Client

Fields

id - ID! Globally unique identifier for a record to support Global Object Identification. Uses format cl:<key> where key is the base64(json({ 1: principal }))
principal - String! Principal that this client applies to. If you're supplying your own OIDC this will be the iss claim on your JWT. If using Twisp IAM/OIDC token exchange, this will be the IAM principal you signed with, typically a role ARN.
name - String! Unique name of the client.
policies - [Policy]! The policies to evaluate.

ClientConnection

Connection to a list of Client nodes. Access Client nodes directly through the nodes field, or access information about the connection edges with the edges field. Use pageInfo to paginate responses using the cursors provided.

Fields

nodes - [Client]!
edges - [ClientConnectionEdge]! Edges represent links connecting a parent or query field to a list of Client nodes. They contain a reference to the Client node and metadata like the cursor position for the edge.
pageInfo - PageInfo!

ClientConnectionEdge

Edges represent links connecting a parent or query field to a list of Client nodes. They contain a reference to the Client node and metadata like the cursor position for the edge.

Fields

cursor - String! Cursor position at this edge.
node - Client Reference to the Client node at this edge.

CustomBalance

Fields

id - ID! The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4") or integer (such as 4) input value will be accepted as an ID.
customBalanceId - UUID! Unique identifier for this custom balance.
code - String! Unique shorthand code for this custom balance.
description - String! Human readable description of this calculation.
dimensions - [PartitionKey]! Group by these values to index the calculation.
created - Timestamp! Date and time when the balance calculation was first created.
modified - Timestamp! Time of the last change. Especially useful when reviewing the history.
version - Int! The current version number of this custom balance. Previous versions are tracked in history.

CustomBalanceConnection

Connection to a list of CustomBalance nodes. Access CustomBalance nodes directly through the nodes field, or access information about the connection edges with the edges field. Use pageInfo to paginate responses using the cursors provided.

Fields

CustomBalanceConnectionEdge

Fields

cursor - String! Cursor position at this edge.
node - CustomBalance Reference to the CustomBalance node at this edge.

Endpoint

Fields

id - ID! Globally unique identifier for a record to support Global Object Identification. Uses format ep:<key> where key is base64(json({ 1: endpointId })).
endpointId - UUID! Unique identifier for the endpoint.
status - EndpointStatus! Current status for the endpoint.
endpointType - EndpointType! The type of endpoint this represents.
url - String! The url for the endpoint. e.g. https://yourdomain.com/path/to/hooks
subscription - [String!]! The events this is subscribed to.
description - String! Description of this endpoint.
signingSecret - String! The secret Twisp will use to sign payloads with via HMAC/SHA256.
created - Timestamp! When this endpoint was created.
modified - Timestamp! When this endpoint was last updated.
version - Int! The current version of the endpoint.

EndpointConnection

Fields

nodes - [Endpoint]!
edges - [EndpointConnectionEdge]!
pageInfo - PageInfo!

EndpointConnectionEdge

Fields

cursor - String! The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
node - Endpoint

Entry

An entry represents one side of a transaction in a ledger. In other systems, these may be called "ledger lines" or "journal entries".

Entries always have an account, amount, and direction (CREDIT or DEBIT). In addition, Twisp uses the concept of "entry types" to assign every entry to a categorical type.

Twisp enforces double-entry accounting, which in practice means that entries can only be entered in the context of a Transaction. Posting a transaction will create at least 2 ledger entries.

Fields

id - ID! Globally unique identifier for a record to support Global Object Identification. Uses format en:<key> where key is base64(json({ 1: entryId })).
entryId - UUID! Unique identifier for the ledger entry.
transactionId - UUID! Unique identifier for the transaction which posted this entry. Every entry is associated with a transaction.
accountId - UUID! ID of the account to be debited/credited.
journalId - UUID! The journal identifier of the ledger entry.
entryType - EntryType! Type code for the entry.
layer - Layer! The layer on which this entry is recorded (SETTLED, PENDING, or ENCUMBRANCE).
units - Decimal! Syntactic sugar for amount { units }.
currency - CurrencyCode! Syntactic sugar for amount { currency }.
amount - Money! Amount of the ledger entry using the currency-supported Money type.
direction - DebitOrCredit! The side of the ledger (DEBIT or CREDIT) this entry is posted on.

sequence - Int!

The order in which this entry was posted within the context of a transaction.

This order is auto-generated at time of posting and is determined by the position of the entries posted within the transaction.

description - String! Description of the ledger entry.
metadata - JSON Arbitrary structured data about this entry.
created - Timestamp! Date and time when the entry was posted.
modified - Timestamp! Time of the last change. Especially useful when reviewing the history.
version - Int! The current version number of this entry. Previous versions are tracked in history.
account - Account! Reference to the account to be debited/credited.
balance - Balance! Reference to the resulting balance from the entry.
journal - Journal! Reference to the journal of the entry.
history - EntryConnection! History of changes to this Entry record. Because ledgers are immutable and append-only, all changes are recorded as sequenced versions of the record, providing an unbroken lineage of the current state.
transaction - Transaction! Reference to the transaction which posted this entry.

EntryConnection

Connection to a list of Entry nodes. Access Entry nodes directly through the nodes field, or access information about the connection edges with the edges field. Use pageInfo to paginate responses using the cursors provided.

Fields

nodes - [Entry]!

An entry represents one side of a transaction in a ledger. In other systems, these may be called "ledger lines" or "journal entries".

Entries always have an account, amount, and direction (CREDIT or DEBIT). In addition, Twisp uses the concept of "entry types" to assign every entry to a categorical type.

Twisp enforces double-entry accounting, which in practice means that entries can only be entered in the context of a Transaction. Posting a transaction will create at least 2 ledger entries.

edges - [EntryConnectionEdge]! Edges represent links connecting a parent or query field to a list of Entry nodes. They contain a reference to the Entry node and metadata like the cursor position for the edge.
pageInfo - PageInfo!

EntryConnectionEdge

Edges represent links connecting a parent or query field to a list of Entry nodes. They contain a reference to the Entry node and metadata like the cursor position for the edge.

Fields

cursor - String! Cursor position at this edge.
node - Entry Reference to the Entry node at this edge.

Group

Grouping of users within an organization.

Groups are used to manage access control and permissions for users. Each group can have one or more associated policies that define the allowed actions for its member users.

Users can belong to multiple groups, and their permissions are determined by the combined set of policies from all their groups.

Fields

id - UUID! Unique ID for the group.
organizationId - UUID! The unique identifier of the organization to which the group belongs.
name - String! A human-friendly name for the group, such as 'Admins' or 'DataAnalysts'.
description - String! A brief description of the group's purpose, intended to provide additional context.

policy - String!

A set of policies as a JSON list that define the permissions granted to users within this group.

The structure of these policies matches the Policy type, but serialized as a JSON string.

Example:

policy: "[{\"actions\": [\"*\"],\"effect\": \"DENY\",\"resources\":[\"*\"],\"assertions\": {\"always false\": \"1 == 0\"}}]"
version - Int! The current version number of this group. Updates will increment the version.

GroupConnection

Connection to a list of Group nodes. Access Group nodes directly through the nodes field, or access information about the connection edges with the edges field. Use pageInfo to paginate responses using the cursors provided.

Fields

nodes - [Group]!

Grouping of users within an organization.

Groups are used to manage access control and permissions for users. Each group can have one or more associated policies that define the allowed actions for its member users.

Users can belong to multiple groups, and their permissions are determined by the combined set of policies from all their groups.

edges - [GroupConnectionEdge]! Edges represent links connecting a parent or query field to a list of Group nodes. They contain a reference to the Group node and metadata like the cursor position for the edge.
pageInfo - PageInfo!

GroupConnectionEdge

Edges represent links connecting a parent or query field to a list of Group nodes. They contain a reference to the Group node and metadata like the cursor position for the edge.

Fields

cursor - String! Cursor position at this edge.
node - Group Reference to the Group node at this edge.

Index

Fields

id - ID! Globally unique identifier for a record to support Global Object Identification. Uses format ix:<key> where key is base64(json({ 1: name, 2: on })).
name - String! Unique identifier of this index. Typically human readable.
on - IndexOnEnum! The type of record this index applies to.
unique - Boolean! Indicates if this index is unique.
search - Boolean! Indicates if this index is a search index.
historical - Boolean! Indicates if this index is historical, i.e. created with schema.createHistoricalIndex.
partition - [PartitionKey]! The partition key used for this index.
range - [IndexKey]! The range key to use for query/sorting.

constraints - ExpressionMap

Map of named CEL expressions specifying the conditions for including a record in this index.

Records are only included in the index if all expressions evaluate to true, i.e. they are combined with a logical AND. Each expression must return a boolean value.

For example, a custom index on a metadata.category field might use the constraints { hasCateogory: "has(document.metadata.category)" } to ensure that only records whose metadata document has a defined value for the category field are included.

version - Int! The current version number of this index.

IndexConnection

Connection to a list of Index nodes. Access Index nodes directly through the nodes field, or access information about the connection edges with the edges field. Use pageInfo to paginate responses using the cursors provided.

Fields

nodes - [Index]!
edges - [IndexConnectionEdge]! Edges represent links connecting a parent or query field to a list of Index nodes. They contain a reference to the Index node and metadata like the cursor position for the edge.
pageInfo - PageInfo!

IndexConnectionEdge

Edges represent links connecting a parent or query field to a list of Index nodes. They contain a reference to the Index node and metadata like the cursor position for the edge.

Fields

cursor - String! Cursor position at this edge.
node - Index Reference to the Index node at this edge.

IndexKey

A named expression used for sorting and range conditions.

Fields

alias - String! Identifier for this key.

value - Expression!

CEL expression which resolves to the value that is to be sorted.

Within the expression, the document object represents the record.

sort - SortOrder! Whether the sort is in ascending or descending order.

Journal

Journals allow for the organizing of transactions within separate "books".

In many cases, users only need a single journal. For this reason, Twisp always contains a default journal with code DEFAULT.

Journals can be used for a variety of functions. For example, users may create separate journals for different currencies, or product-specific journals.

Fields

id - ID! Globally unique identifier for a record to support Global Object Identification. Uses format jl:<key> where key is base64(json({ 1: journalId })).
journalId - UUID! Unique identifier for the journal.
name - String! Name for the journal.
description - String! Description of the journal.
status - Status! Operational status of the journal. ACTIVE journals can be written to with postTransaction, whereas LOCKED journals do not allow transactions to be posted to them.
code - String Optional unique code for the journal. The default journal uses the code DEFAULT.
created - Timestamp! Date and time when the journal was first created.
modified - Timestamp! Time of the last change. Especially useful when reviewing the history.
version - Int! The current version number of this journal. Previous versions are tracked in history.
history - JournalConnection! History of changes to this Journal record. Because ledgers are immutable and append-only, all changes are recorded as sequenced versions of the record, providing an unbroken lineage of the current state.

JournalConnection

Connection to a list of Journal nodes. Access Journal nodes directly through the nodes field, or access information about the connection edges with the edges field. Use pageInfo to paginate responses using the cursors provided.

Fields

nodes - [Journal]!

Journals allow for the organizing of transactions within separate "books".

In many cases, users only need a single journal. For this reason, Twisp always contains a default journal with code DEFAULT.

Journals can be used for a variety of functions. For example, users may create separate journals for different currencies, or product-specific journals.

edges - [JournalConnectionEdge]! Edges represent links connecting a parent or query field to a list of Journal nodes. They contain a reference to the Journal node and metadata like the cursor position for the edge.
pageInfo - PageInfo!

JournalConnectionEdge

Edges represent links connecting a parent or query field to a list of Journal nodes. They contain a reference to the Journal node and metadata like the cursor position for the edge.

Fields

cursor - String! Cursor position at this edge.
node - Journal Reference to the Journal node at this edge.

LithicTransactionBalance

Fields

transaction - Transaction! The transaction that Twisp posted.
balance - Balance! The balance for the account.

Money

Money type with multi-currency support.

Monetary amounts are represented as decimal units of currency. Fields which use the Money type can be converted to a symbolic representations by specifying a MoneyFormatInput on the formatted field.

Here is an example table showing different currencies which each have their own divisions of units represented. Japanese yen (JPY) don't have a decimal minor unit, and Bahraini dinars (BHD) use 3 minor unit decimal places. The formatted column uses the default values for a an en-US locale.

CurrencyUnitsFormatted
USD289.27$289.27
BHD28.92728.927 BD
JPY28927¥28927

Fields

units - Decimal! Decimal is a fixed-precision data type supporting exact representation of numeric values.
currency - CurrencyCode! ISO 4217 standard three-character code indicating the currency.
formatted - String! The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.

Organization

The organization associated with the auth context.

Organizations have many tenants, groups, and users.

Fields

id - UUID! Unique ID for the organization.
name - String! Name of the organization.
description - String! Description of the organization.
version - Int! The current version number of this organization.

PageInfo

Fields

hasPreviousPage - Boolean! True if there are nodes in the connection before the current page / start cursor.
hasNextPage - Boolean! True if there are nodes in the connection after the current page / end cursor.
startCursor - String Query cursor for the first node in the current page.
endCursor - String Query cursor for the last node in the current page.

ParamDefinition

Definition of a parameter that can be used when posting transactions using this tran code.

These definitions are used to validate the provided params in a TransactionInput to ensure that only the right data is applied to the entries created.

With CEL, you can access the post-time values of these parameters inside of values in transaction and entries.

Fields

name - String! Name for the parameter. This is how values passed are accessed. For example, a parameter with name fromAccount can be accessed in the accountId field of an TranCodeEntryInput with params.fromAccount.
type - ParamDataType! Data type for the parameter.
default - Expression Default value for the parameter. If not provided, the parameter is consider a 'required' parameter, and a value must be provided when posting a transaction.
description - String Describe the purpose of this parameter. Help an engineer out.

PartitionKey

A named expression defining a partition key.

Fields

alias - String! Identifier for this partition key.

value - Expression!

CEL expression which resolves to the value that is to be used for the partition key.

Within the expression, the document object represents the record.

Policy

Fields

effect - PolicyEffect! Whether this Policy is an ALLOW or DENY.
actions - [PolicyAction]! The set of actions to allow or deny."
resources - [String]! The resources to allow or deny.
assertions - ExpressionMap A map of expressions to evaluate this policy with.

PolicyAssertion

Fields

name - String! The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.
value - Expression! A literal CEL expression to be evaluated.

Schedule

Fields

jobType - JobType! The job type to create the schedule for. Currently only one schedule per job-type is supported.
jobName - String! A job name that's unique per job type.
principal - String! The Twisp principal to run the job on a schedule. This should have a matching client policy.
scheduleExpression - String! A schedule expression to run this job on. cron/rate/once supported see https://docs.aws.amazon.com/scheduler/latest/UserGuide/schedule-types.html for valid syntax.

timezone - String!

The timezone to run this schedule on based on https://www.iana.org/time-zones

example: "America/Los_Angeles" or "UTC"

Supports ST rules defined in https://docs.aws.amazon.com/scheduler/latest/UserGuide/schedule-types.html

metadata - JSON! JSON metadata to pass to running job.

Tenant

A Tenant represents an environment within an organization, typically associated with a specific application, service, or set of resources. Tenants contain isolated ledgers, each deployed to a specific region.

Tenants are useful for isolating data and configurations between different environments. Each tenant is uniquely identified by an accountId, which in combination with an AWS region, is used to calculate the database tenant for data isolation purposes.

Fields

id - UUID! Unique ID for the tenant.
organizationId - UUID! ID of the tenant's parent organization.

accountId - String!

A globally unique identifier representing an environment within the organization.

This accountId, when combined with an AWS region, is used to calculate the database tenant.

name - String! A human-friendly name for the tenant, used for display purposes and easier identification.
description - String! A brief description of the tenant, providing additional context about its purpose or characteristics.
version - Int! The current version number of this tenant. Updates will increment the version.

TenantConnection

Connection to a list of Tenant nodes. Access Tenant nodes directly through the nodes field, or access information about the connection edges with the edges field. Use pageInfo to paginate responses using the cursors provided.

Fields

nodes - [Tenant]!

A Tenant represents an environment within an organization, typically associated with a specific application, service, or set of resources. Tenants contain isolated ledgers, each deployed to a specific region.

Tenants are useful for isolating data and configurations between different environments. Each tenant is uniquely identified by an accountId, which in combination with an AWS region, is used to calculate the database tenant for data isolation purposes.

edges - [TenantConnectionEdge]! Edges represent links connecting a parent or query field to a list of Tenant nodes. They contain a reference to the Tenant node and metadata like the cursor position for the edge.
pageInfo - PageInfo!

TenantConnectionEdge

Edges represent links connecting a parent or query field to a list of Tenant nodes. They contain a reference to the Tenant node and metadata like the cursor position for the edge.

Fields

cursor - String! Cursor position at this edge.
node - Tenant Reference to the Tenant node at this edge.

TranCode

Transaction Codes (tran codes) are how financial engineers do double-entry accounting. They encode the basic patterns for a type of transaction as a predictable and repeatable formula.

You can think of tran codes as function signatures which define how a transaction acts upon the ledger.

Fields

id - ID! Globally unique identifier for a record to support Global Object Identification. Uses format tc:<key> where key is base64(json({ 1: tranCodeId })).
tranCodeId - UUID! Internal UUID for the transaction code record.

code - String!

The tran code represented as a unique string identifier.

The code itself is a shorthand for the behavior represented. For example, the code ACH_CREDIT may represent a transaction writing two entries: an ACH_DR entry and an ACH_CR entry.

description - String! Explanation of what this tran code represents and how it should be used. This provides documentation for the tran code.
params - [ParamDefinition] Defines the parameters that can be used when posting transactions using this tran code.
transaction - TranCodeTransaction! Definition of the transaction posted when this tran code is invoked.
entries - [TranCodeEntry!]! Definition of the entries written when transactions are posted with this tran code.
status - Status! Operational status of the tran code.
metadata - JSON Metadata attached to this tran code.
created - Timestamp! Date and time when the tran code was first created.
modified - Timestamp! Time of the last change. Especially useful when reviewing the history.
version - Int! The current version number of this account. Previous versions are tracked in history.
history - TranCodeConnection! History of changes to this TranCode record. Because ledgers are immutable and append-only, all changes are recorded as sequenced versions of the record, providing an unbroken lineage of the current state.

TranCodeConnection

Connection to a list of TranCode nodes. Access TranCode nodes directly through the nodes field, or access information about the connection edges with the edges field. Use pageInfo to paginate responses using the cursors provided.

Fields

nodes - [TranCode]!

Transaction Codes (tran codes) are how financial engineers do double-entry accounting. They encode the basic patterns for a type of transaction as a predictable and repeatable formula.

You can think of tran codes as function signatures which define how a transaction acts upon the ledger.

edges - [TranCodeConnectionEdge]! Edges represent links connecting a parent or query field to a list of TranCode nodes. They contain a reference to the TranCode node and metadata like the cursor position for the edge.
pageInfo - PageInfo!

TranCodeConnectionEdge

Edges represent links connecting a parent or query field to a list of TranCode nodes. They contain a reference to the TranCode node and metadata like the cursor position for the edge.

Fields

cursor - String! Cursor position at this edge.
node - TranCode Reference to the TranCode node at this edge.

TranCodeEntry

Definition of an entry written when transactions are posted with this tran code.

Fields

entryType - Expression! Entry type for an entry written when this tran code is invoked.
accountId - Expression! Account ID for an entry written when this tran code is invoked.
layer - Expression! Layer for an entry written when this tran code is invoked.
direction - Expression! Direction for an entry written when this tran code is invoked.
units - Expression! Units of currency for an entry written when this tran code is invoked.
currency - Expression! Currency used for an entry written when this tran code is invoked.
description - Expression Description for an entry written when this tran code is invoked.
metadata - Expression Metadata for entries posted with this tran code.

TranCodeTransaction

Definition of the transaction posted when this tran code is invoked.

Fields

effective - Expression! Effective date for transactions posted with this tran code.
journalId - Expression! Journal ID for transactions posted with this tran code.
correlationId - Expression Correlation ID for transactions posted with this tran code.
externalId - Expression External ID for transactions posted with this tran code.
description - Expression! Description for transactions posted with this tran code.
metadata - Expression! Metadata for transactions posted with this tran code.

Transaction

Transactions record all accounting events in the ledger. In Twisp, the only way to write to a ledger is through a transaction.

Every transaction writes two or more entries to the ledger in standard double-entry accounting practice.

Twisp expands upon the basic principle of an accounting transaction with additional features like transaction codes and correlations.

Fields

id - ID! Globally unique identifier for a record to support Global Object Identification. Uses format tx:<key> where key is base64(json({ 1: transactionId })).
transactionId - UUID! Unique identifier for the transaction.
tranCodeId - UUID! Unique identifier for the tran code used by this transaction.
journalId - UUID! Unique identifier for the journal this transaction applies to.

correlationId - String!

Allows related transactions to be grouped.

When a transaction is posted without a correlationId, it uses the transactionId as the correlationId. Then, future related transactions can be posted with the same correlationId to indicate their relationship to the original. This is very useful for events like holds, auths, auth reversals, etc.

For example, consider the following (simplified) list of transactions:

(ID: 1) Place card hold for $50 on account A (correlation ID: 1) (ID: 2) Place card hold for $20 on account B (correlation ID: 2) (ID: 3) Release card hold for $50 on account A (correlation ID: 1)

Because transaction (3) is related to transaction (1), it shares the same correlation ID. This way, we can easily observe the entire history of a multi-transaction event by querying the correlated transactions.

externalId - String! Allows specifying a unique external ID associated with this transaction.
effective - Date! The effective date records when the transaction is recorded as occurring for accounting purposes. Determines the accounting period within which the transaction is counted.
description - String! Description of the transaction.
metadata - JSON Arbitrary structured data about this transaction.
created - Timestamp! Date and time when the transaction was first posted.
modified - Timestamp! Time of the last change. Especially useful when reviewing the history.
version - Int! The current version number of this transaction. Previous versions are tracked in history.
correlated - TransactionConnection! List of all correlated transactions. These are transactions which share the same correlationId.
entries - EntryConnection! Ledger entries written by the transaction.
history - TransactionConnection! History of changes to this Transaction record. Because ledgers are immutable and append-only, all changes are recorded as sequenced versions of the record, providing an unbroken lineage of the current state.
journal - Journal! Reference to the journal this transaction applies to.
tranCode - TranCode! Reference to the tran code used by this transaction.

TransactionConnection

Connection to a list of Transaction nodes. Access Transaction nodes directly through the nodes field, or access information about the connection edges with the edges field. Use pageInfo to paginate responses using the cursors provided.

Fields

nodes - [Transaction]!

Transactions record all accounting events in the ledger. In Twisp, the only way to write to a ledger is through a transaction.

Every transaction writes two or more entries to the ledger in standard double-entry accounting practice.

Twisp expands upon the basic principle of an accounting transaction with additional features like transaction codes and correlations.

edges - [TransactionConnectionEdge]! Edges represent links connecting a parent or query field to a list of Transaction nodes. They contain a reference to the Transaction node and metadata like the cursor position for the edge.
pageInfo - PageInfo!

TransactionConnectionEdge

Edges represent links connecting a parent or query field to a list of Transaction nodes. They contain a reference to the Transaction node and metadata like the cursor position for the edge.

Fields

cursor - String! Cursor position at this edge.
node - Transaction Reference to the Transaction node at this edge.

User

A human user within the organization.

Users can belong to multiple groups, which define their permissions within the organization based on the associated policies of each group.

The user's effective permissions are determined by the combined set of policies from all their groups.

A user is uniquely identified by their email address.

Fields

id - UUID! Unique ID for the user.
organizationId - UUID! ID of the user's parent organization.
groupIds - [UUID!]! A list of unique identifiers for the groups to which the user belongs. The user's permissions are determined by the combined policies of these groups.
email - String! The user's email address, which serves as a unique identifier and primary means of contact.
version - Int! The current version number of this user. Updates will increment the version.

UserConnection

Connection to a list of User nodes. Access User nodes directly through the nodes field, or access information about the connection edges with the edges field. Use pageInfo to paginate responses using the cursors provided.

Fields

nodes - [User]!

A human user within the organization.

Users can belong to multiple groups, which define their permissions within the organization based on the associated policies of each group.

The user's effective permissions are determined by the combined set of policies from all their groups.

A user is uniquely identified by their email address.

edges - [UserConnectionEdge]! Edges represent links connecting a parent or query field to a list of User nodes. They contain a reference to the User node and metadata like the cursor position for the edge.
pageInfo - PageInfo!

UserConnectionEdge

Edges represent links connecting a parent or query field to a list of User nodes. They contain a reference to the User node and metadata like the cursor position for the edge.

Fields

cursor - String! Cursor position at this edge.
node - User Reference to the User node at this edge.