Skip to main content
GET
/
v2
/
reporting
/
{table_id}
/
statements
Fetch Statements Reporting
curl --request GET \
  --url https://api.qobra.co/v2/reporting/{table_id}/statements \
  --header 'X-API-Key: <api-key>'
{
  "data": [
    {
      "standard.id": "65a1b2c3d4e5f6g7h8i9j0k1",
      "standard.user": {
        "id": "507f191e810c19729de860ea",
        "email": "[email protected]"
      },
      "standard.date": "2024-01-01",
      "standard.total_commission": {
        "value": 8500,
        "currency": "USD"
      },
      "standard.status": "paid",
      "custom.quota_attainment": 0.92,
      "custom.tier": "Accelerator"
    },
    {
      "standard.id": "65a1b2c3d4e5f6g7h8i9j0k2",
      "standard.user": {
        "id": "507f191e810c19729de860eb",
        "email": "[email protected]"
      },
      "standard.date": "2024-01-01",
      "standard.total_commission": {
        "value": 12750,
        "currency": "USD"
      },
      "standard.status": "validated",
      "custom.quota_attainment": 1.15,
      "custom.tier": "Overachievement"
    }
  ],
  "meta": {
    "next_start_id": "65a1b2c3d4e5f6g7h8i9j999",
    "has_more": true,
    "next_url": "https://api.qobra.co/v2/reporting/507f1f77bcf86cd799439011/statements?start_id=65a1b2c3d4e5f6g7h8i9j999&limit=1000"
  }
}

Overview

This endpoint extracts commission statement records from a statement reporting data structure. Statements represent the final calculated commissions — what each person earned in each period. Use this endpoint for:
  • Payroll integration (sending commissions to payroll systems)
  • Commission reports and dashboards
  • Earnings history analysis
  • Compliance and audit trails
Statements = Results. This endpoint gives you the output of Qobra’s commission calculations, not the underlying deals/activities.

Pagination

This endpoint uses ID-based pagination for consistent performance with large datasets.

Basic Pagination Pattern

url = f"https://api.qobra.co/v2/reporting/{table_id}/statements"
params = {"limit": 2000}

while True:
    response = requests.get(url, headers=headers, params=params)
    result = response.json()

    # Process records
    for record in result["data"]:
        process(record)

    # Check if more pages exist
    if not result["meta"]["has_more"]:
        break

    # Use next_url for next page
    url = result["meta"]["next_url"]
Use next_url for simplicity: The API returns a pre-constructed next_url in the response meta—just follow it instead of manually building the next request.

Filtering by modification date

Use last_modified_after to implement incremental sync (only fetch new/updated records).

Incremental sync pattern

from datetime import datetime, timezone

def incremental_sync(table_id: str, api_key: str):
    # Load last sync time from your database
    last_sync = get_last_sync_time()  # e.g., 2024-01-14T00:00:00Z

    url = f"https://api.qobra.co/v2/reporting/{table_id}/statements"
    headers = {"X-API-Key": api_key}
    params = {
        "limit": 2000,
        "last_modified_after": last_sync.isoformat()
    }

    new_records = []

    while True:
        response = requests.get(url, headers=headers, params=params)
        result = response.json()

        new_records.extend(result["data"])

        if not result["meta"]["has_more"]:
            break

        url = result["meta"]["next_url"]

    # Save current time as last sync
    save_last_sync_time(datetime.now(timezone.utc))

    return new_records

# Usage: Daily incremental sync
new_statements = incremental_sync(table_id, api_key)
print(f"Found {len(new_statements)} new/updated statements since last sync")
Benefits:
  • 10-100x faster than full extracts
  • ✅ Reduces API load
  • ✅ Keeps your data warehouse up-to-date with minimal overhead

Performance & best practices

Use ID-based pagination

Always use next_url for large datasets (10K+).
url = result["meta"]["next_url"]

Implement incremental sync

Use last_modified_after for daily/hourly updates.
params = {"last_modified_after": last_sync}

Use Limit 2000

Optimal balance between network overhead and response time.
params = {"limit": 2000}

Authorizations

X-API-Key
string
header
required

Your Qobra API key. Generate it from Settings > API Keys in Qobra.

Path Parameters

table_id
string<ObjectId>
required

ID of a statement reporting structure (from /v2/data-structures)

Query Parameters

start_id
string<ObjectId>

Start after this record ID (for ID-based pagination, recommended)

limit
integer
default:2000

Number of records per page (1-2000)

Required range: 1 <= x <= 2000
last_modified_after
string<date-time>

ISO 8601 datetime - Only return records modified after this date (for incremental sync)

last_modified_before
string<date-time>

ISO 8601 datetime - Only return records modified before this date

Response

Successfully retrieved statement records. Returns an array of commission statements with pagination metadata for navigating through large datasets.

data
object[]
required

List of statement records

meta
object
required