For the complete documentation index, see llms.txt. This page is also available as Markdown.

Matter Csv Controller

Deprecated

Uploads matters from the csv file

post

Use POST /matters-csv/upsert instead for idempotent behavior. This endpoint silently skips rows that already exist in the review cycle. Creates new matter for each row in the csv file. Rejects all rows if any single row contain errors.

Query parameters
reviewCycleIdstring · uuidRequired

The UUID of the review cycle to be associated with the uploaded matters.

Body
filestring · binaryRequired

Comma-separated value file. Must be less than 10MB in size. Header row is required, and each subsequent row corresponds to one matter entry. Header row must match: "Matter ID,Matter Name,Attorney Email,Billing Attorney Email,Start Date,End Date,Hours Billed,Client Name,Description" The columns must follow these requirements:

  • Matter ID: String, Required. Together with Client Name, identifies the Client Matter this entry rolls up to. Multiple rows may share the same (Matter ID, Client Name) - one row per attorney working the matter; when they do, all Client Matter fields (Matter Name, Description) must be identical across those rows.
  • Matter Name: String, Required. Must be <= 255 characters. A Client Matter field: must be identical across all rows sharing the same (Matter ID, Client Name).
  • Attorney Email: String, Required. Email must match an existing Perform member's email.
  • Billing Attorney Email: String, Required. Email must match an existing Perform member's email.
  • Start Date: Date, Optional. When present, format must be M/d/yyyy, e.g. 6/30/2025. Blank persists as null on the entry.
  • End Date: Date, Optional. When present, format must be M/d/yyyy, e.g. 10/5/2025. When both dates are present, End Date must be on or after Start Date. Blank persists as null on the entry.
  • Hours Billed: Integer or Float, Required. Must be between 0 and 999999.99.
  • Client Name: String, Required. Must be <= 255 characters. Together with Matter ID, identifies the Client Matter this entry rolls up to.
  • Description: String, Optional. Must be <= 500 characters. This is the matter's description, not a description of the individual attorney's work on that matter. A Client Matter field: must be identical across all rows sharing the same (Matter ID, Client Name).
Responses
200

Matters created successfully (no response body)

No content

post/matters-csv/upload-csv

No content

Upserts matter entries from a CSV file

post

Upserts a matter entry for each row in the CSV file. Uniqueness of a matter entry within a review cycle is by the combined (Matter ID, Client Name, Attorney Email) key.

CSV formatting:

  • Field values containing a comma, double quote, or newline must be wrapped in double quotes. Embedded double quotes are escaped by doubling. Example: a Description of Smith, Jones & Associates must be written as "Smith, Jones & Associates".

Behavior:

  • If a matter entry with that composite key already exists in the cycle, its non-key fields are updated in place when they differ from the row. Rows whose non-key fields already match the stored entry are no-ops and are not counted in the response's updated total. The row's id is preserved, so any existing review-cycle assignments referencing the entry survive.

  • If no such entry exists, a new one is created.

  • Multiple entries under the same Matter ID + Client Name (different Attorney Emails) are supported - they share a single Client Matter parent whose canonical Matter Name and Description also refresh on each upsert.

Idempotency:

  • Uploading the same CSV twice produces the same end state - safe to retry.

  • Non-key fields updated: Matter Name, Billing Attorney Email, Start Date, End Date, Hours Billed, Description.

  • Matter Name and Description also refresh on the shared Client Matter parent; all existing entries under the same Matter ID + Client Name see the update.

Validation:

  • All rows must pass validation or the entire upload is rejected (no partial commits).

  • Rows are rejected when:

    • Any field-level validation fails (see per-column rules below).

    • Two rows share the same upsert key (Matter ID, Client Name, Attorney Email). Each matter entry must appear in the CSV at most once.

    • Two rows share the same Client Matter (Matter ID, Client Name) but disagree on any Client Matter field (Matter Name or Description).

  • Pre-flight validation is available with POST /matters-csv/validate-upsert; it returns per-row, per-column error details without committing.

Limits:

  • File size <= 10 MB.

  • Row count <= 10 000.

Query parameters
reviewCycleIdstring · uuidRequired

The UUID of the review cycle to associate with the upserted matter entries.

Body
filestring · binaryRequired

Comma-separated value file. Must be less than 10MB in size. Header row is required, and each subsequent row corresponds to one matter entry. Header row must match: "Matter ID,Matter Name,Attorney Email,Billing Attorney Email,Start Date,End Date,Hours Billed,Client Name,Description" The columns must follow these requirements:

  • Matter ID: String, Required. Together with Client Name, identifies the Client Matter this entry rolls up to. Multiple rows may share the same (Matter ID, Client Name) - one row per attorney working the matter; when they do, all Client Matter fields (Matter Name, Description) must be identical across those rows.
  • Matter Name: String, Required. Must be <= 255 characters. A Client Matter field: must be identical across all rows sharing the same (Matter ID, Client Name).
  • Attorney Email: String, Required. Email must match an existing Perform member's email.
  • Billing Attorney Email: String, Required. Email must match an existing Perform member's email.
  • Start Date: Date, Optional. When present, format must be M/d/yyyy, e.g. 6/30/2025. Blank persists as null on the entry.
  • End Date: Date, Optional. When present, format must be M/d/yyyy, e.g. 10/5/2025. When both dates are present, End Date must be on or after Start Date. Blank persists as null on the entry.
  • Hours Billed: Integer or Float, Required. Must be between 0 and 999999.99.
  • Client Name: String, Required. Must be <= 255 characters. Together with Matter ID, identifies the Client Matter this entry rolls up to.
  • Description: String, Optional. Must be <= 500 characters. This is the matter's description, not a description of the individual attorney's work on that matter. A Client Matter field: must be identical across all rows sharing the same (Matter ID, Client Name).
Responses
200

Matter entries upserted successfully. Response body reports created/updated counts.

application/json

Counts from a matter entry CSV upsert.

createdinteger · int32Required

Number of matter entries newly created by this upsert.

updatedinteger · int32Required

Number of existing matter entries whose stored fields were changed by this upsert. Rows whose non-key fields already matched the stored entry are not counted.

post/matters-csv/upsert
Deprecated

Validates matters csv file

post

Use POST /matters-csv/validate-upsert instead. This endpoint validates against the /upload-csv rules and does not flag duplicate upsert keys within a file. Returns row and column level errors for matters in csv file. Only performs validation and does not upload the file. Email errors occur if no members exist with the specified email.

Body
filestring · binaryRequired

Comma-separated value file. Must be less than 10MB in size. Header row is required, and each subsequent row corresponds to one matter entry. Header row must match: "Matter ID,Matter Name,Attorney Email,Billing Attorney Email,Start Date,End Date,Hours Billed,Client Name,Description" The columns must follow these requirements:

  • Matter ID: String, Required. Together with Client Name, identifies the Client Matter this entry rolls up to. Multiple rows may share the same (Matter ID, Client Name) - one row per attorney working the matter; when they do, all Client Matter fields (Matter Name, Description) must be identical across those rows.
  • Matter Name: String, Required. Must be <= 255 characters. A Client Matter field: must be identical across all rows sharing the same (Matter ID, Client Name).
  • Attorney Email: String, Required. Email must match an existing Perform member's email.
  • Billing Attorney Email: String, Required. Email must match an existing Perform member's email.
  • Start Date: Date, Optional. When present, format must be M/d/yyyy, e.g. 6/30/2025. Blank persists as null on the entry.
  • End Date: Date, Optional. When present, format must be M/d/yyyy, e.g. 10/5/2025. When both dates are present, End Date must be on or after Start Date. Blank persists as null on the entry.
  • Hours Billed: Integer or Float, Required. Must be between 0 and 999999.99.
  • Client Name: String, Required. Must be <= 255 characters. Together with Matter ID, identifies the Client Matter this entry rolls up to.
  • Description: String, Optional. Must be <= 500 characters. This is the matter's description, not a description of the individual attorney's work on that matter. A Client Matter field: must be identical across all rows sharing the same (Matter ID, Client Name).
Responses
200

Validation performed. Response includes rows numbers and column names that contain errors. Email errors occur if no members exist with the specified email.

application/json
numValidRowsinteger · int32Optional

The number of valid rows in the CSV file.

Example: 1
post/matters-csv/validate-csv

Pre-flight-validates a matter entry CSV for the upsert endpoint

post

Validates the CSV against the same rules POST /matters-csv/upsert enforces. Returns per-row, per-column error details. Does not persist any data. Uniqueness of a matter entry within a review cycle is by the combined (Matter ID, Client Name, Attorney Email) key.

Body
filestring · binaryRequired

Comma-separated value file. Must be less than 10MB in size. Header row is required, and each subsequent row corresponds to one matter entry. Header row must match: "Matter ID,Matter Name,Attorney Email,Billing Attorney Email,Start Date,End Date,Hours Billed,Client Name,Description" The columns must follow these requirements:

  • Matter ID: String, Required. Together with Client Name, identifies the Client Matter this entry rolls up to. Multiple rows may share the same (Matter ID, Client Name) - one row per attorney working the matter; when they do, all Client Matter fields (Matter Name, Description) must be identical across those rows.
  • Matter Name: String, Required. Must be <= 255 characters. A Client Matter field: must be identical across all rows sharing the same (Matter ID, Client Name).
  • Attorney Email: String, Required. Email must match an existing Perform member's email.
  • Billing Attorney Email: String, Required. Email must match an existing Perform member's email.
  • Start Date: Date, Optional. When present, format must be M/d/yyyy, e.g. 6/30/2025. Blank persists as null on the entry.
  • End Date: Date, Optional. When present, format must be M/d/yyyy, e.g. 10/5/2025. When both dates are present, End Date must be on or after Start Date. Blank persists as null on the entry.
  • Hours Billed: Integer or Float, Required. Must be between 0 and 999999.99.
  • Client Name: String, Required. Must be <= 255 characters. Together with Matter ID, identifies the Client Matter this entry rolls up to.
  • Description: String, Optional. Must be <= 500 characters. This is the matter's description, not a description of the individual attorney's work on that matter. A Client Matter field: must be identical across all rows sharing the same (Matter ID, Client Name).
Responses
200

Validation performed. Response includes row numbers and column names that contain errors.

application/json
numValidRowsinteger · int32Optional

The number of valid rows in the CSV file.

Example: 1
post/matters-csv/validate-upsert

Last updated