Skip to main content

Overview

Data freshness varies by endpoint because each endpoint draws from a different upstream source. Every response includes a meta.as_of timestamp so you always know the age of the data you’re working with.

Freshness by endpoint

Endpoint FamilySourceFreshnessTimestamp Field
MerchantsRiseCRMNear real-time (< 15 min)meta.as_of
Pricing (TSYS)BigQueryT+1 business daymeta.as_of
TransactionsBigQueryT+1 business daymeta.as_of
Gateway transactionsNMI APINear real-time (5-min cache)meta.as_of
StatementsBigQuery + GCS~5 business days after month closeavailable_at
ResidualsBigQuery~5 business days after month closedata_cutoff_at
Portfolio summaryBigQueryT+1, cached 15-min per orgmeta.as_of
AI insightsVertex AI + BigQuerySame as residuals, cached 1 hourgenerated_at

Understanding the timeline

Near real-time endpoints (Merchants, Gateway transactions) reflect changes within minutes. If you update a merchant in your CRM, the API will show the change shortly after. T+1 endpoints (Pricing, Transactions) are refreshed overnight. Data from Monday’s transactions appears in the API on Tuesday morning. Month-close endpoints (Statements, Residuals) depend on processor reporting cycles. Data for January typically becomes available in the first week of February.

Checking freshness in code

from datetime import datetime, timezone

resp = requests.get(url, headers=headers).json()
as_of = datetime.fromisoformat(resp["meta"]["as_of"])
age = datetime.now(timezone.utc) - as_of

if age.total_seconds() > 86400:  # older than 24 hours
    print(f"Warning: data is {age.days} days old")

Residual report status

Residual report endpoints include a report_status field that indicates completeness:
StatusMeaning
finalAll data received and reconciled
preliminaryData available but may be revised
pendingReport period not yet closed