Pennylane TransactionTrigger

Pennylane TransactionTrigger

Certified

Trigger on new Pennylane bank transactions

Polls GET /changelogs/transactions, then loads those transactions with an id in filter. The transactions list allow-list is id, bank_account_id, journal_id, and date, so updated_at and categorized are not sent as query filters. categorized is applied after fetch: the boolean is used when present, otherwise a non-empty categories array counts as categorized. Because the Pennylane transactions list endpoint does not support filtering by categorized, transactions are filtered in memory. Once evaluated, the watermark advances to avoid re-processing the same changelog events. If a transaction is subsequently categorized or uncategorized, Pennylane emits a new changelog event which this trigger will evaluate. bankAccountId is sent as bank_account_id eq. A namespace KV watermark advances on every fully paged poll.

yaml
type: io.kestra.plugin.pennylane.transactions.TransactionTrigger

Trigger on new uncategorized transactions for a specific bank account

yaml
id: pennylane_on_new_transaction
namespace: company.finance

triggers:
  - id: on_transaction
    type: io.kestra.plugin.pennylane.transactions.TransactionTrigger
    apiToken: "{{ secret('PENNYLANE_API_TOKEN') }}"
    interval: PT5M
    bankAccountId: 42
    categorized: false

tasks:
  - id: process
    type: io.kestra.plugin.core.log.Log
    message: "New transaction {{ trigger.transaction.id }} for {{ trigger.transaction.amount }}"
Properties

Pennylane API token

Company or firm API token used to authenticate against the Pennylane API. Store it securely as a Kestra secret.

Defaultfalse

Specifies whether a trigger is allowed to start a new execution even if a previous run is still in progress.

Bank account ID filter

When set, fetched transactions are restricted with bank_account_id eq. This is a legal transactions list filter.

Defaulthttps://app.pennylane.com/api/external/v2

Pennylane API base URL

Base endpoint URL for Pennylane API calls. Defaults to https://app.pennylane.com/api/external/v2.

Categorized post-filter

Applied in the plugin after the transactions are fetched, not as an API filter. Note: the watermark advances past evaluated changelog events regardless of whether they match this filter. When an existing transaction is later categorized or updated in Pennylane, a new changelog event is emitted and evaluated. When the payload has a categorized boolean it is used. Otherwise a transaction is treated as categorized when categories is non-empty. There is no native categorized query filter on the v2 transaction list endpoint; attachment_required and categories are the live signals.

DefaultPT5M
Formatduration

Polling interval

How frequently to poll the Pennylane changelog. ISO-8601 duration. Defaults to PT5M (PT10M for CustomerInvoicePaidTrigger).

HTTP client options

Optional HTTP client configuration (timeouts, proxy, SSL) applied to every request.

Definitions
allowFailedbooleanstring
Defaultfalse

If true, allow a failed response code (response code >= 400)

allowedResponseCodesarray
SubTypeinteger

List of response code allowed for this request

auth

The authentication to use.

type*object
passwordstring

The password for HTTP basic authentication.

usernamestring

The username for HTTP basic authentication.

type*object
tokenstring

The token for bearer token authentication.

type*object
passwordstring

The password for HTTP Digest authentication.

usernamestring

The username for HTTP Digest authentication.

defaultCharsetstring
DefaultUTF-8

The default charset for the request.

enabledTcpExtendedKeepAlivebooleanstring
Defaulttrue

Whether to enable TCP Keep-Alive extended socket options (TCP_KEEPIDLE, TCP_KEEPINTERVAL, TCP_KEEPCOUNT).

Set to false when running on Windows workers, as these extended socket options are not supported by the Windows JDK and will cause connection failures.

followRedirectsbooleanstring
Defaulttrue

Whether redirects should be followed automatically.

logsarray
SubTypestring
Possible Values
REQUEST_HEADERSREQUEST_BODYRESPONSE_HEADERSRESPONSE_BODY

The enabled log.

proxy

The proxy configuration.

addressstring

The address of the proxy server.

passwordstring

The password for proxy authentication.

portintegerstring

The port of the proxy server.

typestring
DefaultDIRECT
Possible Values
DIRECTHTTPSOCKS

The type of proxy to use.

usernamestring

The username for proxy authentication.

ssl

The SSL request options

insecureTrustAllCertificatesbooleanstring

Whether to disable checking of the remote SSL certificate.

Only applies if no trust store is configured. Note: This makes the SSL connection insecure and should only be used for testing. If you are using a self-signed certificate, set up a trust store instead.

timeout

The timeout configuration.

connectTimeoutstring

The time allowed to establish a connection to the server before failing.

readIdleTimeoutstring
DefaultPT5M

The time allowed for a read connection to remain idle before closing it.

SubTypestring
Possible Values
CREATEDSUBMITTEDRUNNINGPAUSEDRESTARTEDKILLINGSUCCESSWARNINGFAILEDKILLEDCANCELLEDQUEUEDRETRYINGRETRIEDSKIPPEDBREAKPOINTRESUBMITTED

List of execution states after which a trigger should be stopped (a.k.a. disabled).

Defaulttrue

A condition that determines whether the trigger should run.

A Pebble expression evaluated at trigger time. The trigger fires only when the expression evaluates to a truthy value (true, a non-empty string, a non-zero number). Use this to gate trigger execution on dynamic runtime values such as execution labels, flow variables, or environment conditions.