Submit Compliance Form Data

🚧

Limited Availability

Access to the Compliance API is currently limited to approved partners. Endpoints, request/response shapes, and field names may change before reaching general availability — use against staging for early integration work and coordinate with your CorpNet account manager before relying on Compliance API calls in production-critical paths. Report issues or feedback to your account manager.

POST /v1/partners/{partnerId}/alerts/{alertId}/orders

Submits completed compliance form data for an alert. After submission, CorpNet creates orders from the underlying opportunity, persists the submitted field values, and triggers downstream synchronization with related entity records.

Path Parameters

ParameterTypeRequiredDescription
partnerIdStringYesYour Account PID.
alertIdStringYesCompliance Alert identifier (returned by List Compliance Alerts).

Request Body

{
  "complianceForms": [
    {
      "formDataId": "a0FVB00000ABC123",
      "formDefinitions": [
        {
          "formDefinitionId": "a0GVB00000DEF456",
          "sections": {
            "EntityState": {
              "Filed_Qualification_Date": "2020-05-15",
              "EntityNumber": "7654321"
            },
            "FranchiseTaxInformation": {
              "CountofCommonStockShares": "1500",
              "CountofPreferredStockShares": "500",
              "GrossAssets": "5000000"
            },
            "root": {
              "ForeignQualified": true
            }
          }
        }
      ]
    }
  ]
}

Request Body Fields

FieldTypeRequiredDescription
complianceFormsArrayYesForm submissions. Typically one entry per alert.
complianceForms[].formDataIdStringYesThe formDataId returned by List Compliance Alerts or Get a Compliance Alert.
complianceForms[].formDefinitionsArrayYesForm definitions attached to this submission. Pass back the same definition objects you received, with updated field values.
complianceForms[].formDefinitions[].formDefinitionIdStringYesThe formDefinitionId returned by the list / get endpoints.
complianceForms[].formDefinitions[].sectionsObjectYesSection name → field name → value mapping. Field names without a section prefix go under root.

Section Structure

Sections in the payload mirror the structure returned by the list/get endpoints:

  • Section names match the first segment of each field's path (e.g., EntityState.Filed_Qualification_Date → section EntityState).
  • Fields without a section prefix (e.g., ForeignQualified) go in the root section.
  • Preserve the same section names you received in the GET response — don't invent new ones.

Example

curl -s -X POST \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "complianceForms": [
      {
        "formDataId": "a0FVB00000ABC123",
        "formDefinitions": [
          {
            "formDefinitionId": "a0GVB00000DEF456",
            "sections": {
              "EntityState": {
                "Filed_Qualification_Date": "2020-05-15"
              },
              "FranchiseTaxInformation": {
                "CountofCommonStockShares": "1500"
              }
            }
          }
        ]
      }
    ]
  }' \
  "https://api.corpnet.com/v1/partners/P123456/alerts/006VB00000K3al0YAB/orders"

Response — 200 OK

{ "data": true }
📘

Envelope note

This endpoint returns { "data": true } on success — a boolean, not the structured object used by most other endpoints. Branch on the HTTP status code; the boolean simply confirms the submission reached the writeback queue.

Error Responses

{ "statusCode": 400, "message": "No account found for the provided PID.", "data": false }
{ "statusCode": 400, "message": "No opportunity found for the provided Opportunity Id.", "data": false }
{ "statusCode": 400, "message": "Account PID in the request path does not match the Account that owns the specified Opportunity Id.", "data": false }
{ "statusCode": 400, "message": "Invalid payload: complianceForms is required.", "data": false }
{ "statusCode": 400, "message": "Invalid payload: complianceForms array cannot be empty.", "data": false }
{ "statusCode": 400, "message": "Validation errors: formDataId is required", "data": false }
{ "statusCode": 400, "message": "Validation errors: Required field missing: EntityState.EntityNumber", "data": false }
CauseResolution
Mismatched alertId and partnerIdConfirm the alert belongs to the partner in the URL path. Re-fetch via List Compliance Alerts to validate ownership.
Missing or empty complianceForms arrayThe array is required even if you have no form changes. Pass back the same shape you received from the GET endpoint.
Missing required fieldInspect message for the section + field name and populate.

Async Writeback

Submitted field values are persisted immediately, then synced back to related entity records asynchronously. The HTTP 200 response confirms the submission was accepted into the writeback queue — downstream sync to entity records typically completes within seconds but is not guaranteed-synchronous. For workflows requiring immediate consistency on the entity side, re-fetch Get a Company and verify the expected fields are populated before proceeding.