OMCMS Export
OMCMS is EquityMultiple’s offering content-management system — the platform where an investment offering is assembled and ultimately published to investors. The OMCMS export takes a Memosa deal memo and creates a draft offering in OMCMS, pre-populated with content blocks built from the memo’s sections and data fields built from the deal’s key metrics. It turns the work you did in Canvas into a head start inside OMCMS, instead of re-keying the memo by hand.
This is a one-directional push: Memosa reads from the memo and writes a new draft into OMCMS. It does not pull offerings back, and it does not publish anything.
What the export produces
Section titled “What the export produces”When you run an OMCMS export, Memosa:
- Reads the deal’s memo sections, key metrics, and metadata from storage.
- Creates a new draft offering in OMCMS.
- Populates that offering with component blocks (the memo’s prose and structured content) and KPI data fields (the deal’s metrics), sanitizing the content for the OMCMS editor as it goes.
The response hands back the OMCMS offering ID and a direct URL to the new draft, plus a count of the components actually created, so you can open it in OMCMS and continue from there.
Partial failures are surfaced, not silent
Section titled “Partial failures are surfaced, not silent”The export builds many components in one pass. If an individual component can’t be created — a section had no content, or a particular OMCMS field rejected its input — that single failure is non-fatal: it’s logged and accumulated into a warnings list returned with the result, while the rest of the offering is still created. The export only fails outright if creating the offering itself fails.
This means a successful export can still come back with warnings. Read them: they tell you which blocks didn’t carry over so you can fill those in directly in OMCMS.
Access and limits
Section titled “Access and limits”- Editor access or higher is required to run an OMCMS export.
- The export is rate-limited to 3 per hour per user , because it’s a heavy external API call.
- OMCMS is a single shared system — there is no separate staging copy. An export reaches the real OMCMS instance, which is one more reason it lands as a draft for explicit review.
How OMCMS compares to the other export targets
Section titled “How OMCMS compares to the other export targets”The OMCMS export is a different kind of deliverable from the file exports:
| OMCMS export | Investor Packet | Canvas PDF | |
|---|---|---|---|
| Destination | A draft offering inside OMCMS | A file you download | A file you download |
| Output | OMCMS components + KPI fields | Branded DOCX + PDF | Branded PDF |
| Publishing | Draft only — you publish in OMCMS | n/a | n/a |
| Access | Editor and up | Editor and up | Viewer and up |
For the downloadable offering document, see The Investor Packet; for a faithful PDF of the memo itself, see Canvas PDF Export.
Sources
Section titled “Sources”src/canvas/services/omcms_export_service.py—OmcmsExportService.export_deal(): reads memo sections from storage, creates the draft offering, builds components and KPI data fields, and accumulates per-component warnings. The offering is always created as a draft.src/canvas/routes/omcms_routes.py— the/omcms/exportroute: Editor auth, the 3-per-hour rate limit, the “not configured” 503, and the auth/timeout/API error handling.src/canvas/services/omcms_client.py,omcms_session_refresher.py,omcms_kpi_mapper.py,omcms_component_builders.py,omcms_content_sanitizer.py— the OMCMS API client, single-refresh-and-retry session handling, KPI field mapping, component construction, and content sanitization.omcms_integration.md(native memory) — integration status: client, session refresher, and DI wiring are built; OMCMS is a single shared service with no staging equivalent.