Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.zestequity.com/llms.txt

Use this file to discover all available pages before exploring further.

Every non-2xx response from the Zest Partner API uses the same envelope. Always parse code first, fall back on detail for human display, and feed errorId into your support ticket if you ever need to escalate.

Envelope shape

{
  "code": "validation_error",
  "detail": "Submitted attributes failed contract validation.",
  "errorId": "1f1a4b3e-7c0e-4ed3-9abe-3cbef1f17c1f",
  "validationErrors": [
    {
      "field": "attributes.shareClasses[0].carryPercent",
      "code": "min_value",
      "message": "carryPercent must be >= 0",
      "value": "-1.0"
    }
  ]
}
FieldTypeDescription
codestringTop-level error code from the PartnerErrorCode vocabulary.
detailstringHuman-readable explanation. Safe to show to operator UIs but not to end-users without sanitisation.
errorIdstring (UUID)Stable per-error UUID. Cite this when contacting support.
validationErrorsarrayOptional. Present on validation_error to surface per-field errors. See Validation error codes.

Top-level codes

CodeHTTPMeaning
validation_error400Submitted payload failed contract validation. Inspect validationErrors[].
invalid_request400Request was syntactically invalid (missing required header, malformed JSON, etc.).
invalid_token401Bearer token missing, malformed, or expired. Mint a fresh access token.
forbidden403Token is valid but the partner application is not provisioned for this resource.
not_found404Resource does not exist or is not visible to the caller.
conflict409Idempotency-Key conflict, terminal-state mutation, or strict-order violation.
payload_too_large413File exceeded the 10 MB upload cap.
unsupported_media_type415Upload content-type not in the allow list (PDF, JPEG, PNG, WEBP).
internal_error500Something broke on Zest’s side. Retry with backoff; cite errorId if persistent.
service_unavailable503Transient downstream outage. Retry with exponential backoff.

Validation error codes

Inside the validationErrors[].code field. Every code is stable and machine-actionable.
CodeMeaning
requiredRequired field missing.
unknown_attributeAttribute not declared by the contract template.
typeValue is the wrong type (e.g. string where number expected).
enumValue is not in the allowed enum set.
patternValue did not match the regex constraint.
max_lengthString exceeded the maximum length.
min_valueNumber below the minimum.
max_valueNumber above the maximum.
formatFormat constraint failed (e.g. ISO date, ISO 4217 currency).
currency_mismatchMulti-currency mismatch within a single object.
server_suppliedField is server-managed and cannot be supplied by partner.
institutional_not_supportedInstitutional investor type not supported on this template.

Sample envelopes

400 validation_error

{
  "code": "validation_error",
  "detail": "Contract validation failed",
  "errorId": "1f1a4b3e-7c0e-4ed3-9abe-3cbef1f17c1f",
  "validationErrors": [
    {
      "field": "attributes.shareClasses[0].carryPercent",
      "code": "min_value",
      "message": "carryPercent must be >= 0",
      "value": "-1.0"
    }
  ]
}

401 invalid_token

{
  "code": "invalid_token",
  "detail": "Bearer token is expired",
  "errorId": "9f2d83bc-4715-4f99-9c4e-1e5ad23bca03"
}

409 conflict (idempotency)

{
  "code": "conflict",
  "detail": "Idempotency-Key already used with a different request body",
  "errorId": "65bda4f2-0a0c-4e88-9cd0-2c4dec6fe7bb"
}

413 payload_too_large

{
  "code": "payload_too_large",
  "detail": "File exceeds the 10 MB limit",
  "errorId": "c1b0e5da-2ff0-49a4-b76a-db09ad0c33a0"
}

Working with errorId

errorId is generated server-side and persisted in our logs. Bake it into your operator dashboards next to every red-flagged event so support can trace incidents in seconds.