Skip to main content

v1.0.2 — enum values validated at submission

SPV requests

  • Breaking: the 1.0.0 template catalogs were corrected in place (templateVersion stays 1.0.0). Requests that use a value outside the allowed lists now return 400 validation_error.
  • Enum attributes are now validated on POST /v1/spv-requests. A value outside the template’s allowed list returns 400 validation_error with an enum row in validationErrors[]. Previously enum values were not checked at submission, and some then failed at review.
  • deal_documents_media_type must be one of pdf, docx, xlsx, txt, html (not a MIME type such as application/pdf).
  • Allowed lists narrowed to what Zest can materialise. syndicate_secondary: deal_type syndicate-secondary; currency USD, AED, EUR, SAR; status_tag Launching Soon, Live, Closed; deal_stage launching-soon through executing; funding_type pre-funded; bid_type total-amount; funding_component nothing; vehicle_fees_paid_by company. founder_fresh_fundraise: status_tag and deal_stage as above; vehicle_fees_paid_by company, investors.
  • security_type: "Secondary Transaction" added to syndicate_secondary.
The current lists are always available from GET /v1/contracts/catalogs/{version}/{catalogName}.

2026-10-16 — Investor KYC documents

Breaking change

  • Subscriptions now require complete KYC documents. POST /v1/spvs/{slug}/subscriptions returns 409 kyc_documents_incomplete for any investor whose required KYC documents are not all uploaded, and creates nothing for that row. This applies to every partner. Existing integrations must upload KYC documents for each investor before creating subscriptions. See Subscriptions › Prerequisite: KYC documents.

New

  • POST /v1/investors/{zestPersonId}/kyc-documents uploads KYC evidence for an investor you created: ID document, ID verification report, proof of address, KYC form, screening results, risk assessment, and a compliance approval (document or comments), plus up to 10 other documents. The response lists the required types still missing. See Investors › KYC documents.
  • kyc_documents_incomplete (409) added to the error codes.

Changed

  • Investor emails sent to POST /v1/investors are now lower-cased before the identity check. An email that differs from an existing Zest identity only by letter case is now treated as that identity and refused like any other existing identity.

v1.0.1 — post-launch corrections

Patches and refinements shipped on top of v1.0.0 before broader partner rollout. No breaking changes — all additions are backwards-compatible.

Webhook delivery

  • subscription.completed is now eventually-consistent. A reconciler actor sweeps every 60 seconds and fires the webhook for any partner-sourced Bid where the synchronous emit was skipped. See Subscriptions › subscription.completed delivery.
  • subscription.completed admin trigger wired through. Marking a partner-sourced Bid Completed in the Zest admin UI now reliably fans the webhook out via the helper path (with the reconciler as a backstop).
  • Optional partnerInvestorId added to the signed_subscription_form.uploaded and funding_receipt.uploaded payloads. Always present when the originating subscription carried a partner investor id; omitted otherwise.

Onboarding / operations

  • Partner registration CLI accepts --public-key-b64 for direct key registration and reports duplicate-key collisions with a friendly exit-1 message instead of a stack trace.
  • Spaas contract sync + materialiser expanded to cover the remaining Opportunity required fields (is_fixed_price, company_id) so approving an SPV request never fails the downstream insert.

v1.0.0 — Initial release

First public release of the Zest Public API. Scope:
  • Authentication: OAuth 2.0 JWT-Bearer assertion grant via POST /v1/oauth2/tokens.
  • SPV Requests: POST, GET, LIST, DELETE for /v1/spv-requests. Admin approve/reject/cancel flow.
  • Investors: bulk-create POST /v1/investors with partial-success semantics.
  • Subscriptions: bulk-create POST /v1/spvs/{slug}/subscriptions.
  • Uploads: signed-form and funding-receipt multipart uploads with strict ordering.
  • Webhooks: nine event types, HMAC-SHA256 signed envelopes, 30s/5m/30m/2h/12h retry schedule + dead-letter.
  • Errors: uniform envelope with stable code vocabulary and per-field validationErrors[].
  • Idempotency: required on POST /v1/spv-requests; optional on other writes; 24h TTL.