Skip to content

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.

When you run an OMCMS export, Memosa:

  1. Reads the deal’s memo sections, key metrics, and metadata from storage.
  2. Creates a new draft offering in OMCMS.
  3. 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.

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.

  • 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 exportInvestor PacketCanvas PDF
DestinationA draft offering inside OMCMSA file you downloadA file you download
OutputOMCMS components + KPI fieldsBranded DOCX + PDFBranded PDF
PublishingDraft only — you publish in OMCMSn/an/a
AccessEditor and upEditor and upViewer and up

For the downloadable offering document, see The Investor Packet; for a faithful PDF of the memo itself, see Canvas PDF Export.

  • src/canvas/services/omcms_export_service.pyOmcmsExportService.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/export route: 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.