Movement table
The /reports/movement-table endpoint returns a detailed list of individual MRR movements (new, expansion, contraction, churn, reactivation) for a given period. Each movement includes customer details, amounts, and optional line-level breakdowns.
💡 Use case: Investigate specific MRR changes, audit movements, export detailed transaction data. Essential for understanding which customers drove revenue changes.
GET /reports/movement-table
Returns a list of individual movements with customer-level detail.
Authentication
Required
Include your API key in the Authorization header:
curl https://api.growpanel.io/reports/movement-table \
-H "Authorization: Bearer YOUR_API_KEY"Query parameters
| Parameter | Type | Description |
|---|---|---|
dateoptional | string | Date range. Format: YYYYMMDD-YYYYMMDD or shortcuts like last-12-months. Defaults to last 365 days. |
intervaloptional | string | Aggregation interval: day, week, month, quarter, year. Defaults to month. |
baseCurrencyoptional | string | Target currency for conversion. Defaults to account base currency. |
selected-dateoptional | string | Filter movements to a specific period start date (format: YYYY-MM-DD). |
selected-typeoptional | string | Filter by movement type: new, expansion, contraction, churn, reactivation |
breakdownoptional | string | Group by dimension (e.g., plan, country). |
breakdown-valueoptional | string | Filter to a specific breakdown value when using breakdown parameter. |
committedoptional | string | Set to true to show committed/future movements instead of actual. |
fix_fxoptional | boolean | Use fixed exchange rates from start date. |
sortoptional | string | Sort field (e.g., mrr_change, date, customer_name). |
orderoptional | string | Sort direction: asc or desc. Defaults to desc. |
customeroptional | string | Filter by customer ID to show detailed line items for that customer. |
regionoptional | string | Filter by region or country codes (space-separated). |
currencyoptional | string | Filter by currency codes (space-separated). |
planoptional | string | Filter by plan group IDs (space-separated). |
industryoptional | string | Filter by industry (space-separated). |
data_sourceoptional | string | Filter by data source ID (space-separated). |
Response
200 OK
Returns a list of movements with customer details.
{
"result": {
"list": [
{
"date": "2025-01-15",
"currency": "usd",
"customer_id": "cus_123",
"customer_name": "Acme Corp",
"customer_email": "[email protected]",
"type": "expansion",
"description": "Pro Plan → Enterprise Plan",
"mrr_change": 5000,
"mrr_change_base_currency": 5000,
"customer_count_change": 0,
"quantity_change": 0
},
{
"date": "2025-01-20",
"currency": "eur",
"customer_id": "cus_456",
"customer_name": "Beta LLC",
"customer_email": "[email protected]",
"type": "new",
"description": "Pro Plan",
"mrr_change": 4900,
"mrr_change_base_currency": 5290,
"customer_count_change": 1,
"quantity_change": 1
}
]
}
}Response fields
| Field | Type | Description |
|---|---|---|
date | string | Date of the movement (ISO format: YYYY-MM-DD) |
currency | string | Original currency of the movement |
customer_id | string | Customer external ID from billing system |
customer_name | string | Customer name |
customer_email | string | Customer email address |
type | string | Movement type: new, expansion, contraction, churn, reactivation |
description | string | Human-readable description of the change |
mrr_change | number | MRR change in original currency (cents, negative for churn/contraction) |
mrr_change_base_currency | number | MRR change converted to base currency (cents) |
customer_count_change | integer | Customer count change (-1 for churn, 1 for new, 0 for expansion/contraction) |
quantity_change | integer | Seat/quantity change (for usage-based or per-seat plans) |
Line-level detail
When filtering by customer parameter, an additional lines array is included with invoice-level detail:
{
"result": {
"list": [
{
"date": "2025-01-15",
"customer_id": "cus_123",
"type": "expansion",
"mrr_change": 5000,
"lines": [
{
"description": "Enterprise Plan",
"mrr": 10000,
"quantity": 1
},
{
"description": "Pro Plan (removed)",
"mrr": -5000,
"quantity": -1
}
]
}
]
}
}Example requests
Get all movements for January 2025
curl "https://api.growpanel.io/reports/movement-table?date=20250101-20250131" \
-H "Authorization: Bearer YOUR_API_KEY"Get only expansion movements
curl "https://api.growpanel.io/reports/movement-table?selected-type=expansion" \
-H "Authorization: Bearer YOUR_API_KEY"Get movements for a specific period
curl "https://api.growpanel.io/reports/movement-table?selected-date=2025-01-01&interval=month" \
-H "Authorization: Bearer YOUR_API_KEY"Get detailed lines for a customer
curl "https://api.growpanel.io/reports/movement-table?customer=cus_123" \
-H "Authorization: Bearer YOUR_API_KEY"Sort by largest MRR changes
curl "https://api.growpanel.io/reports/movement-table?sort=mrr_change&order=desc" \
-H "Authorization: Bearer YOUR_API_KEY"Notes
⚠️ Currency values: All monetary values are returned in cents/smallest currency unit. Divide by 100 for display in most currencies.
- Movement types: Each movement represents a discrete change in customer MRR
- Negative values: Churn and contraction have negative
mrr_changevalues - Date alignment: Movements are timestamped to the interval start date
- Customer filtering: Use
customerparameter to drill into specific customer changes - Committed mode: Set
committed=trueto see future scheduled movements
Related endpoints
- MRR Timeline - Aggregated movement summary
- MRR Table - Time-series metrics
- Scheduled Churn Movements - Future churn detail