Known limitations of the v1 Core API
The Core API surface evolved over many releases and a small number of endpoints carry contracts that are stricter or more permissive than they look at first glance. This page lists those quirks so you can code defensively against them and so you know which behaviours are intentional rather than bugs.
The OpenAPI specification remains the authoritative source for every operation’s exact request and response shape. The notes below complement the spec; they do not replace it.
Boolean parameters sent as strings
A handful of body parameters express true/false as the JSON strings
"0" and "1" rather than as a JSON boolean. Sending an
actual true / false is not accepted.
Operation |
Parameter |
Accepted values |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Path parameters that accept either a UUID or a numeric ID
Two endpoints accept either form on the same path parameter; what is expected depends on the value of another path segment or on the length of the value itself.
GET /charge_log/{type}/{uuid}— the{uuid}segment is:a UUID when
typeiscustomerorcp,a numeric card ID or the card’s RFID tag string when
typeiscard(the endpoint matches by numeric ID first, then falls back to the RFID tag),either form when
typeisdetails.
PUT /cp_connector/{cp_connector_id}— accepts both the numeric ID and the connector’s UUID.
The spec types each parameter as the broader of the two forms
(string for the first, integer for the second) for backward
compatibility. The per-operation description in the spec calls out
the exact contract.
Identifier fields that may be null
A few response fields look like they should always carry a UUID but
can in fact be null for older records that were created before
the identifier was introduced. Treat the following as nullable:
Cp.uuidCpConnector.uuididonCompanyandUserresponses
Where the spec carries format: uuid the field is guaranteed to
be a UUID when present. Where format: uuid is absent (notably the
fields above) the value is still a string but may be null; do not
rely on it as a stable identifier.
Mixed casing in body and query parameters
For historical reasons body and query parameter names use a mix of
snake_case and camelCase across the surface. There is no rule
you can apply to predict the casing of a parameter you have not used
before — check the per-operation spec for the authoritative name.
See Conventions for the broader naming
overview.
Path parameter naming across the /contact family
The same logical parameter is named {contact_uuid} on
GET /contact/{contact_uuid} and {uuid} on
PUT /contact/{uuid} and DELETE /contact/{uuid}. The runtime
behaviour is identical (paths are positional), but SDK generators
that derive method-argument names from the spec may emit slightly
different signatures across the three verbs. Pass the same value
regardless of the parameter’s name in the spec.
Endpoints not intended for new integrations
The following endpoints exist for backward compatibility only. New integrations should not use them; equivalent functionality is available through the listed replacement.
Endpoint |
Replacement |
|---|---|
|
|
|
Newer invoice resources under |
|
No public replacement — this endpoint is invoked internally by a scheduled job and is not intended for external callers. |