Errors & troubleshooting
Reporting API v2 errors returned from the v2 controller’s exception filter use RFC 9457 Problem Details as application/problem+json:
{
"type": "VALIDATION_ERROR",
"title": "Validation Error",
"detail": "Maximum of 50 campaignIds allowed."
}
| Field | Use |
|---|---|
type |
Machine-readable code — branch in code on this value when present. |
title |
Short static label for the type. |
detail |
Human-readable explanation for this request — log for operators; avoid showing raw secrets. |
There is no status field in the JSON body; rely on the HTTP status line.
Domain type values
These are defined in the v2 reporting stack and emitted on controller-handled errors:
type |
HTTP | When it happens | What to do |
|---|---|---|---|
VALIDATION_ERROR |
400 | class-validator failures, bad query shape, date range > 2 years, >50 campaignIds, etc. |
Fix parameters; read detail. |
INVALID_SORT_PROPERTY |
400 | Unknown sortProperty for the endpoint |
Choose a value from Querying the API. |
RESOURCE_NOT_FOUND |
404 | Mapped service “not found” errors | Verify IDs / route. |
INTERNAL_ERROR |
500 (default) | Unexpected failure OR some permission failures mapped internally | Retry with backoff; contact support with timestamp + request id (if provided by gateway). |
403 edge cases: Some forbidden paths may surface as INTERNAL_ERROR with title Forbidden depending on the upstream ServiceError mapping. Prefer HTTP status + logs, and avoid coupling only to type for authz until the map is simplified in a future release.
Example bodies
Invalid sortProperty
{
"type": "INVALID_SORT_PROPERTY",
"title": "Invalid Sort Property",
"detail": "Invalid sortProperty 'badField' for /posts/performance. Valid values are: cpe, cpm, engagementRate, engagements, estimatedValueGenerated, impressions, paidCpe, paidCpm, paidEngagementRate, paidEngagements, paidImpressions, postDate"
}
Too many campaign IDs
{
"type": "VALIDATION_ERROR",
"title": "Validation Error",
"detail": "Maximum of 50 campaignIds allowed."
}
Date range exceeds two years
{
"type": "VALIDATION_ERROR",
"title": "Validation Error",
"detail": "Date range cannot exceed 2 years."
}
Authentication and gateway errors
401 Unauthorized and 403 Forbidden are usually produced outside this filter (JWT validation, API gateway). Bodies may not match the table above. Treat 401 as “fetch a new JWT”; treat 403 as “verify instance scope / roles.”
Rate limiting (future)
429 Too Many Requests is expected when server-side enforcement lands (Q2 2026 target). Implement backoff today. See Rate limiting.
Example (illustrative once enforced)
{
"type": "VALIDATION_ERROR",
"title": "Validation Error",
"detail": "Rate limit exceeded. Retry after 2026-06-01T12:00:00Z"
}
Actual type for throttling will be confirmed at launch.
Retry strategy
| HTTP | Retry? | Notes |
|---|---|---|
| 400 | No | Fix input. |
| 401 | No (first refresh token) | Re-authenticate once, then retry original request. |
| 403 | No | Permission / scope. |
| 404 | Usually no | Broken path or missing resource. |
| 429 | Yes | Exponential backoff + respect Retry-After. |
| 500 / 502 / 503 | Yes | Transient; cap attempts. |
Pseudocode — exponential backoff
attempt = 0
while attempt < maxAttempts:
response = httpCall()
if response.status in [500, 502, 503, 429]:
sleep min(cap, base * 2**attempt + jitter)
attempt += 1
continue
return response
Logging guidance
- Log
type, HTTP status, endpoint, and redacted query params. - Prefer
detailfor support tickets; pair with any request / trace IDs your gateway adds.
Support
Need help with the Reporting API? Contact support through these channels:
| Need | Channel |
|---|---|
| Credentials & access | Your Later / Mavrck account team or urvash.chheda@later.com |
| API bugs / unexpected 5xx | Email urvash.chheda@later.com with timestamps (UTC), request path, and redacted params |
| Product how-tos | Later Influence Help Center |
When reporting an issue, include:
- HTTP status code and error
type/detailfrom the response - Approximate UTC timestamp of the request
- Request path and redacted query parameters
- Instance IDs you were querying (if applicable)
- Any request / trace IDs provided by the gateway
Enterprise customers: Request dedicated onboarding sessions (architecture review, pagination patterns, warehouse integration) through your Customer Success Manager or urvash.chheda@later.com.