POSTpartial

Post an authorized procedural message

Flag-gated account operation over the existing hosted authorization boundary. Requires the approving account’s current party access. OAuth never grants administrator or reviewer authority. Typed channels retain separate hosted-thread and partner-notice authority and visibility. Partner writes require message:create and Idempotency-Key.

/api/cases/{id}/messagespostAccountCaseMessage

Authentication and authority

Use one listed account-session, scoped OAuth, or partner credential alternative. Account tokens retain the approving account’s authority. Cookie-authenticated writes require same-origin authorization. Alternatives are OR; schemes in one alternative are AND.

CanonicalSession

AccountOAuth

Account tokens authorize only their approving account and case scope. S256 PKCE is mandatory on the code flow. Explicit reacceptance is required after Rules/disclosure changes.

CanonicalPartnerBearer

Parameters

NameLocationRequirementSchema
idpathRequired{"type":"string"}
channel

Partner bearer calls must select partner_notice. Account/session clients use hosted_thread; omission preserves existing account clients.

queryOptional{"type":"string","enum":["hosted_thread","partner_notice"]}

Request body

Required request body.

application/json

{
  "$ref": "#/components/schemas/CanonicalCaseMessageInput",
  "description": "Canonical case message. A session or account caller opens a hosted thread or replies within one; a partner bearer posts a procedural notice on the partner_notice channel.",
  "anyOf": [
    {
      "$ref": "#/components/schemas/CanonicalHostedThreadMessage",
      "allOf": [
        {
          "$ref": "#/components/schemas/CanonicalHostedMessageFields",
          "type": "object",
          "description": "Hosted-thread message fields. A procedural request carries its typed procedural block, including any requested scheduling or filing effect.",
          "properties": {
            "body": {
              "type": "string",
              "maxLength": 2000
            },
            "threadId": {
              "type": "string"
            },
            "category": {
              "type": "string",
              "enum": [
                "technical_problem",
                "accessibility",
                "safety_security_privacy",
                "procedural_request",
                "scheduling_emergency"
              ]
            },
            "visibility": {
              "type": "string",
              "enum": [
                "shared",
                "confidential_admin"
              ]
            },
            "procedural": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string"
                },
                "requestedRelief": {
                  "type": "string"
                },
                "requestedEffect": {
                  "type": "object",
                  "properties": {}
                },
                "urgency": {
                  "type": "string"
                },
                "urgencyBasis": {
                  "type": "string"
                },
                "urgencyNeededBy": {
                  "type": "string"
                }
              }
            }
          }
        }
      ],
      "required": [
        "body",
        "category"
      ],
      "description": "Opens a hosted thread. A new thread must state a valid category; confidential administration is limited to the technical, accessibility, safety, security and privacy categories."
    },
    {
      "$ref": "#/components/schemas/CanonicalHostedThreadReply",
      "allOf": [
        {
          "$ref": "#/components/schemas/CanonicalHostedMessageFields",
          "type": "object",
          "description": "Hosted-thread message fields. A procedural request carries its typed procedural block, including any requested scheduling or filing effect.",
          "properties": {
            "body": {
              "type": "string",
              "maxLength": 2000
            },
            "threadId": {
              "type": "string"
            },
            "category": {
              "type": "string",
              "enum": [
                "technical_problem",
                "accessibility",
                "safety_security_privacy",
                "procedural_request",
                "scheduling_emergency"
              ]
            },
            "visibility": {
              "type": "string",
              "enum": [
                "shared",
                "confidential_admin"
              ]
            },
            "procedural": {
              "type": "object",
              "properties": {
                "kind": {
                  "type": "string"
                },
                "requestedRelief": {
                  "type": "string"
                },
                "requestedEffect": {
                  "type": "object",
                  "properties": {}
                },
                "urgency": {
                  "type": "string"
                },
                "urgencyBasis": {
                  "type": "string"
                },
                "urgencyNeededBy": {
                  "type": "string"
                }
              }
            }
          }
        }
      ],
      "required": [
        "body",
        "threadId"
      ],
      "description": "Replies inside an existing hosted thread, which keeps the category and visibility it was opened with."
    },
    {
      "$ref": "#/components/schemas/PartnerProceduralMessageInput",
      "type": "object",
      "additionalProperties": false,
      "required": [
        "category",
        "text"
      ],
      "properties": {
        "category": {
          "type": "string",
          "enum": [
            "clarification_request",
            "clarification_response",
            "evidence_request",
            "procedural_notice",
            "settlement_coordination"
          ]
        },
        "text": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2000,
          "description": "Plain text, limited to 2,000 UTF-8 bytes. Control characters other than tab and line breaks are rejected."
        },
        "replyToMessageId": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        },
        "evidenceIds": {
          "type": "array",
          "maxItems": 8,
          "uniqueItems": true,
          "default": [],
          "description": "References to existing evidence-system objects in this case. No admission or merits-record effect follows.",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          }
        }
      },
      "allOf": [
        {
          "if": {
            "properties": {
              "category": {
                "const": "clarification_response"
              }
            }
          },
          "then": {
            "required": [
              "replyToMessageId"
            ]
          }
        }
      ]
    }
  ]
}

Responses

200

Reply committed.

application/json

{
  "$ref": "#/components/schemas/CanonicalPostAccountCaseMessageResponse",
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "$ref": "#/components/schemas/CanonicalHostedThreadResult",
          "type": "object",
          "properties": {
            "thread": {
              "$ref": "#/components/schemas/CanonicalHostedThread",
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "category": {
                  "type": "string"
                },
                "visibility": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "createdAt": {
                  "type": "string"
                },
                "updatedAt": {
                  "type": "string"
                },
                "closedAt": {
                  "type": "string"
                },
                "canReply": {
                  "type": "boolean"
                },
                "proceduralRequest": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "kind": {
                      "type": "string"
                    },
                    "requestedRelief": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string"
                    },
                    "responseDueAt": {
                      "type": "string"
                    },
                    "canRule": {
                      "type": "boolean"
                    }
                  }
                },
                "messages": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CanonicalHostedMessage"
                  }
                }
              },
              "required": [
                "id",
                "category",
                "visibility",
                "status",
                "createdAt",
                "updatedAt",
                "canReply",
                "messages"
              ]
            }
          },
          "required": [
            "thread"
          ]
        },
        {
          "$ref": "#/components/schemas/PartnerProceduralMessage",
          "type": "object",
          "additionalProperties": false,
          "required": [
            "schemaVersion",
            "id",
            "caseId",
            "partnerId",
            "senderKind",
            "senderCredentialPublicId",
            "category",
            "text",
            "evidenceIds",
            "messageDigest",
            "recordEffect",
            "createdAt"
          ],
          "properties": {
            "schemaVersion": {
              "type": "string",
              "const": "partner-procedural-message-v2"
            },
            "id": {
              "type": "string"
            },
            "caseId": {
              "type": "string"
            },
            "partnerId": {
              "type": "string"
            },
            "senderKind": {
              "type": "string",
              "enum": [
                "party",
                "platform"
              ]
            },
            "senderSide": {
              "type": "string",
              "enum": [
                "claimant",
                "respondent"
              ]
            },
            "senderCredentialPublicId": {
              "type": "string",
              "description": "Public credential identity; the internal persistence identifier is never returned."
            },
            "category": {
              "type": "string",
              "enum": [
                "clarification_request",
                "clarification_response",
                "evidence_request",
                "procedural_notice",
                "settlement_coordination"
              ]
            },
            "text": {
              "type": "string",
              "minLength": 1,
              "maxLength": 2000
            },
            "replyToMessageId": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "evidenceIds": {
              "type": "array",
              "maxItems": 8,
              "uniqueItems": true,
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              }
            },
            "messageDigest": {
              "type": "string",
              "pattern": "^[a-f0-9]{64}$"
            },
            "recordEffect": {
              "type": "string",
              "const": "none"
            },
            "createdAt": {
              "type": "string",
              "format": "date-time"
            }
          }
        }
      ]
    },
    "requestId": {
      "type": "string"
    }
  },
  "required": [
    "data",
    "requestId"
  ],
  "x-code-source": "lib/proceeding/messages.ts"
}
201

Thread created.

application/json

{
  "$ref": "#/components/schemas/CanonicalPostAccountCaseMessageResponse",
  "type": "object",
  "properties": {
    "data": {
      "anyOf": [
        {
          "$ref": "#/components/schemas/CanonicalHostedThreadResult",
          "type": "object",
          "properties": {
            "thread": {
              "$ref": "#/components/schemas/CanonicalHostedThread",
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "category": {
                  "type": "string"
                },
                "visibility": {
                  "type": "string"
                },
                "status": {
                  "type": "string"
                },
                "createdAt": {
                  "type": "string"
                },
                "updatedAt": {
                  "type": "string"
                },
                "closedAt": {
                  "type": "string"
                },
                "canReply": {
                  "type": "boolean"
                },
                "proceduralRequest": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "kind": {
                      "type": "string"
                    },
                    "requestedRelief": {
                      "type": "string"
                    },
                    "status": {
                      "type": "string"
                    },
                    "responseDueAt": {
                      "type": "string"
                    },
                    "canRule": {
                      "type": "boolean"
                    }
                  }
                },
                "messages": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CanonicalHostedMessage"
                  }
                }
              },
              "required": [
                "id",
                "category",
                "visibility",
                "status",
                "createdAt",
                "updatedAt",
                "canReply",
                "messages"
              ]
            }
          },
          "required": [
            "thread"
          ]
        },
        {
          "$ref": "#/components/schemas/PartnerProceduralMessage",
          "type": "object",
          "additionalProperties": false,
          "required": [
            "schemaVersion",
            "id",
            "caseId",
            "partnerId",
            "senderKind",
            "senderCredentialPublicId",
            "category",
            "text",
            "evidenceIds",
            "messageDigest",
            "recordEffect",
            "createdAt"
          ],
          "properties": {
            "schemaVersion": {
              "type": "string",
              "const": "partner-procedural-message-v2"
            },
            "id": {
              "type": "string"
            },
            "caseId": {
              "type": "string"
            },
            "partnerId": {
              "type": "string"
            },
            "senderKind": {
              "type": "string",
              "enum": [
                "party",
                "platform"
              ]
            },
            "senderSide": {
              "type": "string",
              "enum": [
                "claimant",
                "respondent"
              ]
            },
            "senderCredentialPublicId": {
              "type": "string",
              "description": "Public credential identity; the internal persistence identifier is never returned."
            },
            "category": {
              "type": "string",
              "enum": [
                "clarification_request",
                "clarification_response",
                "evidence_request",
                "procedural_notice",
                "settlement_coordination"
              ]
            },
            "text": {
              "type": "string",
              "minLength": 1,
              "maxLength": 2000
            },
            "replyToMessageId": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "evidenceIds": {
              "type": "array",
              "maxItems": 8,
              "uniqueItems": true,
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              }
            },
            "messageDigest": {
              "type": "string",
              "pattern": "^[a-f0-9]{64}$"
            },
            "recordEffect": {
              "type": "string",
              "const": "none"
            },
            "createdAt": {
              "type": "string",
              "format": "date-time"
            }
          }
        }
      ]
    },
    "requestId": {
      "type": "string"
    }
  },
  "required": [
    "data",
    "requestId"
  ],
  "x-code-source": "lib/proceeding/messages.ts"
}
default

RFC 9457 style problem response.

application/problem+json

{
  "$ref": "#/components/schemas/Problem",
  "type": "object",
  "required": [
    "type",
    "title",
    "status",
    "code",
    "detail",
    "requestId"
  ],
  "properties": {
    "type": {
      "type": "string",
      "format": "uri"
    },
    "title": {
      "type": "string"
    },
    "status": {
      "type": "integer"
    },
    "code": {
      "type": "string"
    },
    "detail": {
      "type": "string"
    },
    "requestId": {
      "type": "string"
    }
  }
}

Example response

Successful response

{
  "data": {
    "thread": {
      "id": "id_test",
      "category": "category_test",
      "visibility": "visibility_test",
      "status": "status_test",
      "createdAt": "createdAt_test",
      "updatedAt": "updatedAt_test",
      "canReply": false,
      "messages": [
        {
          "id": "id_test",
          "sender": {
            "label": "label_test",
            "role": "role_test"
          },
          "body": "body_test",
          "createdAt": "createdAt_test"
        }
      ]
    }
  },
  "requestId": "requestId_test"
}

Errors

Read the response status and stable error code. See errors and rate limits for recovery. Refresh the resource before resolving a state or digest conflict.

Idempotency and retries

  • For throttling, honor Retry-After when present. Back off on retryable server failures.
  • The request is accepted only when its credential, authority, case state, and resource preconditions are satisfied.