Pre-Order Requirements

Find out which disclosures, signatures, and questionnaires a fund requires for an account, collect them in your UI, and report them to Monark.

Evergreen fund subscriptions on the Omnibus platform do not use paper subscription documents. In their place, each fund defines a set of requirements - disclosures, acknowledgements, e-signatures, and suitability questionnaires - that must be satisfied before it accepts an order. Monark tells you which requirements apply to a given account and order. Your platform presents them in its UI, in most cases to the advisor, collects the responses, and reports each one back. All actions are stored and auditable.

Monark keeps each response with the order and makes it available to the custodian.

Evaluate requirements after the user has chosen a fund and share class, and before you show them an order ticket they can submit.

Endpoints used

MethodEndpointPurpose
GET/primary/v1/omnibus/order-action/requirementsEvaluate the requirements for one account and order
PUT/primary/v1/omnibus/order-action/requirements/{definitionId}/completeReport that a requirement has been completed
GET/primary/v1/questionnaire/{id}Retrieve the questions of a questionnaire requirement
POST/primary/v1/questionnaire-answerSubmit questionnaire answers, which satisfies the requirement
POST/primary/v1/omnibus/order-action/requirements/batchEvaluate many accounts at once. See Model Orders.

Workflow

  1. Evaluate requirements for the account, advisor, fund, share class, and side.
  2. If allSatisfied is true, continue to the order ticket. Some funds have no requirements at all.
  3. Otherwise, present each requirement whose status is Required, using the control that matches its type.
  4. As the user completes each requirement, report it to Monark.
  5. Evaluate again, and continue only when allSatisfied is true.

Evaluate requirements

GET /primary/v1/omnibus/order-action/requirements?accountId={accountId}&financialAdvisorId={financialAdvisorId}&omnibusFundId={fundId}&omnibusShareClassId={shareClassId}&side=Buy
Query parameterRequiredDescription
accountIdYesThe account the order will be placed for.
omnibusFundIdYesThe fund being traded.
omnibusShareClassIdYesThe share class being traded.
sideYesBuy or Sell. Funds can define different requirements for each side.
financialAdvisorIdConditionalThe advisor placing the order. Send it whenever the order will carry an advisor.
{
  "allSatisfied": false,
  "actions": [
    {
      "definitionId": "5c1d8a52-0000-4000-8000-0000000000d1",
      "name": "Acknowledge Subscription Process",
      "description": null,
      "type": "TextAcknowledge",
      "responsibleParty": "Advisor",
      "status": "Required",
      "actionText": "I acknowledge that subscriptions must be submitted at least five business days prior to the first day of each month.",
      "markdownText": null,
      "dataId": null,
      "documentType": null
    },
    {
      "definitionId": "5c1d8a52-0000-4000-8000-0000000000d2",
      "name": "Investor Suitability Questionnaire",
      "description": null,
      "type": "Questionnaire",
      "responsibleParty": "Investor",
      "status": "Satisfied",
      "actionText": null,
      "markdownText": null,
      "dataId": "9e2b7f10-0000-4000-8000-0000000000a7",
      "documentType": null
    }
  ]
}

Important: Requirements are evaluated for the combination of account and advisor. Send the same financialAdvisorId when you evaluate requirements, when you complete them, and when you submit the order. If you omit the advisor here but attach one to the order, the requirements that the advisor is responsible for are never presented. An individual order is then held in PendingActions until they are completed, and a batch of model order lines is refused with 409 (RequiredOrderActionsIncomplete).

Present requirements

UI elementSourceNotes
TitleRequirement.name
SummaryRequirement.descriptionOptional.
Disclosure textRequirement.markdownText, falling back to Requirement.actionTextmarkdownText is Markdown. Render it as formatted text.
StatusRequirement.statusRequired or Satisfied.
Responsible partyRequirement.responsiblePartyInvestor, Advisor, CoOwner, Partner, or Monark.
ActionRequirement.typeSee the table below.
ProgressCount of requirements with status: RequiredFor example, "3 of 13 outstanding".

Show Satisfied requirements as complete instead of hiding them. Users and compliance reviewers benefit from seeing the full set of disclosures that applies to the order.

Requirement types

typeWhat the user doesUses dataIdHow it is satisfied
TextAcknowledgeReads the text and confirms itNoComplete endpoint
ViewDisclosureViews a disclosure and confirms they have seen itNoComplete endpoint
DocumentAcknowledgeOpens a document and confirms they have received itDocument IDComplete endpoint
DocumentSignReviews and signs a documentDocument IDComplete endpoint
QuestionnaireAnswers a set of questionsQuestionnaire IDQuestionnaire answer endpoint

For document requirements, documentType identifies the document, such as RegisteredFundProspectus_Monark or RegisteredFundSubscriptionAgreement_Monark. Retrieve the document itself with GET /primary/v2/document/{dataId}.

Responsible parties

responsibleParty tells you who is expected to act. Route each requirement to the right user for your distribution model.

ValueWho actsTypical handling
InvestorThe end investorSelf-directed platforms present it in the order flow. Advisor-led platforms send it to the client, or collect it in a client meeting.
CoOwnerA joint owner of the accountPresent it to the joint owner.
AdvisorThe financial advisor placing the orderPresent it in the advisor's order flow.
PartnerYour firmComplete it once your firm has carried out the step it describes.
MonarkMonarkNo action on your side. Show it as pending.

Note: Treat each acknowledgement as a deliberate act by the responsible party. Do not complete requirements on a user's behalf, or in bulk, unless your firm's supervisory procedures provide for it. Keep your own record of what was shown, who accepted it, and when.

Complete a requirement

Report a completed requirement with its definitionId. This applies to every type except Questionnaire.

PUT /primary/v1/omnibus/order-action/requirements/{definitionId}/complete
{
  "accountId": "06309316-0000-4000-8000-000000000021",
  "financialAdvisorId": "01a0b508-0000-7000-8000-000000000031"
}

A successful call returns 204 No Content. The requirement is then returned with a status of Satisfied when you evaluate again. Only requirements with a status of Required need to be presented as outstanding.

Questionnaires

A Questionnaire requirement is satisfied by submitting answers, not by calling the complete endpoint. Calling the complete endpoint for a questionnaire returns 400.

1. Retrieve the questions. The requirement's dataId is the questionnaire ID. The questions returned depend on who is being asked - for example, individuals can receive state-specific suitability questions that entities do not - so always send the order context.

GET /primary/v1/questionnaire/{dataId}?investorId={primaryOwnerPartyId}&accountId={accountId}&financialAdvisorId={financialAdvisorId}
Query parameterDescription
investorIdThe partyId of the account's primary owner.
accountIdThe account the order will be placed for.
financialAdvisorIdOnly when the questionnaire's responsibleParty is Advisor. Leave it out for Investor and CoOwner questionnaires.
jointAccountOwnerIdRequired for a joint account when the answers are not an advisor's. Can't be combined with financialAdvisorId.

2. Render each question from its format:

formatSuggested control
BooleanYes / No toggle
MultipleChoiceSingleRadio group or select, from options
MultipleChoiceMultipleCheckbox group, from options
Integer, Float, PercentageNumeric input
ScaleSlider or stepped scale, from scaleMin, scaleMax, and scaleStep
DateDate picker
Text, EmailText input

Order questions by sequence, show explanation as help text, enforce required, and use dependentOn to show follow-up questions only when the question they depend on has been answered accordingly.

3. Submit the answers with the same context. Answer only the questions that were returned. Answers count toward the requirement only for the party it names: send financialAdvisorId for an Advisor questionnaire, and leave it out for Investor and CoOwner questionnaires, or the requirement stays Required.

POST /primary/v1/questionnaire-answer
{
  "questionnaireId": "9e2b7f10-0000-4000-8000-0000000000a7",
  "investorId": "0a4f6c1e-0000-4000-8000-000000000011",
  "accountId": "06309316-0000-4000-8000-000000000021",
  "createQuestionAnswers": [
    { "questionnaireQuestionId": "c41f0b7e-0000-4000-8000-000000000001", "value": "true" },
    { "questionnaireQuestionId": "c41f0b7e-0000-4000-8000-000000000002", "values": ["Growth", "Income"] }
  ]
}

Use value for single answers and values for MultipleChoiceMultiple. Once every required question has been answered by the right party, the requirement is Satisfied. There is no separate complete call.

Confirm before you continue

After the last requirement is completed, evaluate again and check allSatisfied before you enable the submit button. Do not infer it from your own UI state, because a requirement can be satisfied, or become required, outside the current session.

Handling errors

ResponseCauseWhat to do
400 on evaluateThe request is invalid - for example, a required query parameter is missing, or the share class doesn't belong to the fund.Fix the request. This is an integration error, not a user error.
400 on evaluateThe account's custodian is not enabled for the fund, or the advisor is at a different custodian from the account. detail explains.Offer the fund only to accounts at an enabled custodian, and check the advisor.
404 on evaluateThe account, advisor, fund, or share class was not found.Confirm the IDs exist in this environment and the account belongs to your platform.
409 on evaluateThe account is closed.Choose an active account.
400 on completeThe requirement is a Questionnaire, or the body is invalid.Submit questionnaire answers instead.
404 on completeThe definitionId was not found, or doesn't apply to this account and advisor - for example, an Advisor requirement completed without financialAdvisorId.Evaluate again, use the definitionId values returned, and send the same financialAdvisorId you evaluated with.

Errors on these endpoints are returned as a problem details object with status and detail. Invalid parameters return a validation problem with an errors map keyed by field.

Next steps


Did this page help you?