Skip to main content
All errors follow a consistent JSON shape:
Some errors carry structured details:
That’s Pydantic’s 422 format — field-level validation errors.

Status codes

Tenant-scoped 404s

When you GET a resource that exists but belongs to another tenant, you get a 404, not a 403. We never want to confirm existence across tenant boundaries (otherwise an attacker could enumerate other customers’ campaign IDs).

Validation errors you’ll see often

predictive_target_abandon > 0.030

TRAI caps abandon rate at 3.0%. We can’t accept a higher target.

Inverted ratio range

When you PATCH both ratio fields in the same payload, they must satisfy max >= min. PATCHing just one is always allowed (we defer to the DB CHECK).

Invalid phone

We only accept Indian numbers (10 digits, optional 0/91 prefix). For non-Indian use cases, contact us — cross-border dialing has its own compliance track.

Abandon rate exceeded (business-level)

Not an HTTP error — it’s a lifecycle event. When a predictive campaign’s abandon rate crosses its target for 60s sustained, the backend auto-pauses the campaign. You’ll see:
  • The campaign’s status flip to paused
  • A campaign.paused webhook with data.source = "abandon_rate_exceeded"
Re-enable via POST /api/campaigns/{id}/predictive/resume (dashboard JWT auth, not the v1 API key). See the operator runbook in your dashboard for guidance.