v1.0.2 — enum values validated at submission
SPV requests
- Breaking: the
1.0.0template catalogs were corrected in place (templateVersionstays1.0.0). Requests that use a value outside the allowed lists now return400 validation_error. - Enum attributes are now validated on
POST /v1/spv-requests. A value outside the template’s allowed list returns400 validation_errorwith anenumrow invalidationErrors[]. Previously enum values were not checked at submission, and some then failed at review. deal_documents_media_typemust be one ofpdf,docx,xlsx,txt,html(not a MIME type such asapplication/pdf).- Allowed lists narrowed to what Zest can materialise.
syndicate_secondary:deal_typesyndicate-secondary;currencyUSD,AED,EUR,SAR;status_tagLaunching Soon,Live,Closed;deal_stagelaunching-soonthroughexecuting;funding_typepre-funded;bid_typetotal-amount;funding_componentnothing;vehicle_fees_paid_bycompany.founder_fresh_fundraise:status_taganddeal_stageas above;vehicle_fees_paid_bycompany,investors. security_type: "Secondary Transaction"added tosyndicate_secondary.
GET /v1/contracts/catalogs/{version}/{catalogName}.
2026-10-16 — Investor KYC documents
Breaking change
- Subscriptions now require complete KYC documents.
POST /v1/spvs/{slug}/subscriptionsreturns409 kyc_documents_incompletefor 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-documentsuploads 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/investorsare 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.completedis 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.completedadmin trigger wired through. Marking a partner-sourced BidCompletedin the Zest admin UI now reliably fans the webhook out via the helper path (with the reconciler as a backstop).- Optional
partnerInvestorIdadded to thesigned_subscription_form.uploadedandfunding_receipt.uploadedpayloads. Always present when the originating subscription carried a partner investor id; omitted otherwise.
Onboarding / operations
- Partner registration CLI accepts
--public-key-b64for 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
Opportunityrequired 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,DELETEfor/v1/spv-requests. Admin approve/reject/cancel flow. - Investors: bulk-create
POST /v1/investorswith 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
codevocabulary and per-fieldvalidationErrors[]. - Idempotency: required on
POST /v1/spv-requests; optional on other writes; 24h TTL.