Nothing changes for your integration today. The legacy response shape stays the default until the sunset date below, so existing integrations keep working unchanged. You migrate to v1 on your own schedule.
The two contracts
legacy(default) — the exact response shape SendPost returns today. Requests that do not opt in keep receiving this until the sunset date.v1— the new, normalized public contract: consistent camelCase field names, internal-only fields removed, and a few additive fields.
legacy) to keep today’s shape. The header works on every public /api/v1/... endpoint.
Deprecation headers
Every response advertises the contract state so your client and SDKs can track the migration:Timeline
- Now → sunset —
legacyis the default. Opt intov1any time with the header. - After sunset —
v1becomes the default. SendingX-SendPost-Public-Contract: v1explicitly is still recommended so your integration is pinned and unaffected by future defaults.
What changes in v1
v1 normalizes the public response shape. The changes fall into three categories:
-
Consistent camelCase. Several fields used non-standard casing;
v1normalizes them. Examples:- IP / message / event:
publicIP→publicIp,messageID→messageId,eventID→eventId - Provider stats:
email_type→emailType
smtpErroris already camelCase and is not renamed.) - IP / message / event:
-
Internal fields removed. Fields that were never part of the public contract — internal identifiers, infrastructure details, and any sensitive values — are not returned in
v1. -
Additive fields.
v1surfaces new public fields, for examplereasonText(suppression),dnsProvider(domain), andautoWarmupEnabled(IP).
The request body format is unchanged. Versioning applies to response shapes only.
v1 contract. Use them as the source of truth for the exact response of every endpoint under v1. For the complete field-by-field diff of every resource — added, renamed, and removed fields — see the Changelog.
How to migrate
1
Opt in on a test integration
Add
X-SendPost-Public-Contract: v1 to your requests in a staging or test environment and inspect the responses.2
Update field names and parsing
Adjust for the camelCase renames (e.g.
publicIP → publicIp, messageID → messageId) and remove any code that depended on internal fields v1 no longer returns. The Changelog lists every change per resource.3
Verify against the API Reference
Confirm your parsing matches the
v1 schemas documented on each endpoint page.4
Pin v1 in production
Send
X-SendPost-Public-Contract: v1 on all production requests, and watch the Deprecation / Sunset headers to track the timeline.