Versioning and stability
The Jelliu API evolves continuously. New endpoints, fields, events and enum values ship without a new API version, so the most important thing a client can do is tolerate additions. This page describes the stability contract and the signals Jelliu uses when something is on its way out.
The current version
Every request is served by the current v1 surface.
What counts as a compatible change
These changes are additive. They are made at any time, without a version bump:
- New endpoints.
- New optional request fields and query parameters.
- New fields in responses.
- New members in enumerations, such as a new call
outcome, a new campaign category, a new errorcodeor a new webhook event name. - New webhook events being sent, including events already listed in the catalog as not yet sent.
- Changes to the wording of error
messagestrings.
Build your client so that none of these can break it.
Ignore fields you do not recognize
Responses may include fields that are not documented. Do not use strict deserialization that fails on unknown properties, and do not re-send a whole object you received back to an update endpoint.
Treat enumerations as open
Add a default branch whenever you switch on status, outcome, channel, category, an error code or a webhook event. A value you have never seen should be logged and handled gracefully, not crash your integration.
Branch on codes, not messages
Error messages are written for people, some are in Spanish, and they can be reworded at any time. The error.code and HTTP status are the contract. See Errors.
Treat webhook payload fields as optional
Read data defensively, and acknowledge events you do not handle with a 2xx so they do not count as failed deliveries. See Webhooks.
Deprecations
When an interface is being retired, Jelliu marks responses from it with standard HTTP headers:
For example, the legacy inbound CRM webhook route POST /webhooks/integrations/{tenantId}/{integrationId} answers with all three, pointing to its replacement POST /webhooks/integrations/v2/{webhookUuid}:
Some deprecations cannot be signalled with a response header, because the caller is Jelliu rather than you. The one currently in progress:
- Legacy webhook signatures. Outbound webhook deliveries still carry
X-Webhook-SignatureandX-Webhook-Signature-V1(HMAC of the body alone) next toX-Webhook-Signature-V2. The legacy headers will be removed. VerifyX-Webhook-Signature-V2today. See Verifying signatures.
Detect deprecated calls automatically
Log a warning whenever a response carries a Deprecation or Sunset header, so a retirement shows up in your monitoring long before the sunset date.
Machine-readable reference
The OpenAPI document behind the API Reference is served by the API itself and regenerated on every deploy, so it always matches what is running:
All are public and cached for up to 5 minutes.
If you generate a client from the OpenAPI document, regenerate it periodically and keep the generator configured to allow unknown properties and unknown enum values. A generated client with closed enums turns every additive change into a runtime error.
What to watch
- Changelog. Notable changes to the API and to this documentation.
- Response headers.
DeprecationandSunset, as above. - Webhook event catalog. Events marked “Not yet” in Webhooks are accepted in subscriptions today and can start being delivered. Subscribe only to events you handle, or make your receiver ignore unknown ones.
- Error codes. New codes can appear. Map unknown
4xxcodes to a generic, non-retryable failure and unknown5xxcodes to a retry with backoff. See Errors.

