API Reference
Functions

Functions

Apply transformations, aggregations, and date operations to attributes


Functions can be applied to attributes in either a query string conditional statement or to modify the attribute value in the response.

There are a few special aggregate functions which can only be used to modify the response, not in a conditional statement.

Basic Function Usage

import payload
pl = payload.Session('secret_key_3bW9...', api_version='v2')
 
customers = pl.Account.select(
		pl.attr.email.lower(),
		*pl.attr
	)\
	.filter_by( pl.attr.created_at.year() == 2020 )\
	.all()

String Functions

Transform and manipulate string values:

FunctionDescriptionExample
lowerConvert to lowercasepl.attr.email.lower()
upperConvert to uppercasepl.attr.name.upper()
lengthGet string lengthpl.attr.description.length()

String Function Examples

import payload
pl = payload.Session('secret_key_3bW9...', api_version='v2')
 
# Select customers with lowercase emails
 
 
customers = pl.Account.select(
    pl.attr.id,
    pl.attr.email.lower()
).all()
 
# Filter by string length
long_names = pl.Account.filter_by(
    pl.attr.legal_name.length() > 20
).all()
 
# Uppercase names in response
customers = pl.Account.select(
    pl.attr.name.upper(),
    pl.attr.email
).all()

Numeric Functions

Perform mathematical operations on numeric values:

FunctionDescriptionExample
absAbsolute valuepl.attr.balance.abs()
ceilRound up to nearest integerpl.attr.amount.ceil()
floorRound down to nearest integerpl.attr.amount.floor()
roundRound to nearest integerpl.attr.amount.round()

Numeric Function Examples

import payload
pl = payload.Session('secret_key_3bW9...', api_version='v2')
 
# Get absolute values of account balances
 
 
accounts = pl.Account.select(
    pl.attr.id,
    pl.attr.balance.abs()
).all()
 
# Filter by rounded amounts
transactions = pl.Transaction.filter_by(
    pl.attr.amount.round() == 100
).all()

Date Functions

Extract and manipulate date/time values:

FunctionDescriptionExample
yearExtract yearpl.attr.created_at.year()
monthExtract month numberpl.attr.created_at.month()
monthnameExtract month namepl.attr.created_at.monthname()
dayExtract day of monthpl.attr.created_at.day()
daynameExtract day of week namepl.attr.created_at.dayname()
dayofweekExtract day of week numberpl.attr.created_at.dayofweek()
dayofyearExtract day of yearpl.attr.created_at.dayofyear()
weekofyearExtract week of yearpl.attr.created_at.weekofyear()
last_dayGet last day of monthpl.attr.created_at.last_day()
hourExtract hourpl.attr.created_at.hour()
minuteExtract minutepl.attr.created_at.minute()
secondExtract secondpl.attr.created_at.second()
unix_timestampConvert to Unix timestamppl.attr.created_at.unix_timestamp()

Date Function Examples

import payload
pl = payload.Session('secret_key_3bW9...', api_version='v2')
 
# Group customers by signup year
 
 
yearly_signups = pl.Account.select(
    pl.attr.created_at.year(),
    pl.attr.id.count()
).group_by(
    pl.attr.created_at.year()
).all()
 
# Filter by specific month
march_customers = pl.Account.filter_by(
    pl.attr.created_at.month() == 3
).all()
 
# Get day of week for transactions
transactions = pl.Transaction.select(
    pl.attr.id,
    pl.attr.created_at.dayname()
).all()

Aggregate Functions

Aggregate functions can be used to produce an aggregated response. You can combine aggregate functions with a group_by attribute to produce grouped results.

FunctionDescriptionExample
sumSum valuespl.attr.amount.sum()
countCount recordspl.attr.id.count()
count_distinctCount unique valuespl.attr.customer_id.count_distinct()
avgAverage valuepl.attr.amount.avg()
minMinimum valuepl.attr.amount.min()
maxMaximum valuepl.attr.amount.max()
varianceStatistical variancepl.attr.amount.variance()
stddevStandard deviationpl.attr.amount.stddev()

Aggregate Function Example

import payload
 
pl = payload.Session('secret_key_3bW9...', api_version='v2')
 
invoice_stats = (
    pl.Invoice.select(
        pl.attr.amount_due.sum(),
        pl.attr.status,
    )
    .filter_by(
        pl.attr.due_date >= '2026-01-01',
    )
    .group_by(pl.attr.status)
    .all()
)

Response:

[
  {
    "status": "overdue",
    "sum(amount_due)": 2389.5
  },
  {
    "status": "paid",
    "sum(amount)": 52310.0
  }
]

Group By

Use the group_by parameter to group results by one or more attributes:

ParameterDescriptionExample
group_by=statusGroup results by status?group_by=status

Group By Examples

import payload
 
pl = payload.Session("secret_key_3bW9...", api_version="v2")
 
# Monthly revenue report
 
 
monthly_revenue = (
    pl.Transaction.select(
        pl.attr.created_at.month(), pl.attr.created_at.year(), pl.attr.amount.sum()
    )
    .group_by(pl.attr.created_at.year(), pl.attr.created_at.month())
    .all()
)
 
# Account statistics
account_stats = (
    pl.Transaction.select(
        pl.attr.sender.account_id,
        pl.attr.id.count(),
        pl.attr.amount.avg(),
        pl.attr.amount.sum(),
    )
    .group_by(pl.attr.sender.account_id)
    .all()
)

Function Combinations

You can combine multiple functions for complex transformations:

import payload
 
pl = payload.Session('secret_key_3bW9...', api_version='v2')
 
# Complex date grouping with aggregations
 
 
quarterly_stats = (
    pl.Transaction.select(
        pl.attr.created_at.year(),
        pl.attr.created_at.month(),
        pl.attr.amount.sum(),
        pl.attr.amount.avg(),
        pl.attr.id.count(),
    )
    .filter_by(pl.attr.created_at.year() >= 2020)
    .group_by(
        pl.attr.created_at.year(),
        pl.attr.created_at.month(),
    )
    .order_by(
        pl.attr.created_at,
    )
    .all()
)