Laurel Ingestion Service API

The Ingestion Service is the write path a connector uses to keep Laurel in sync with a firm's practice-management or billing system. It takes batch imports of clients, code types, codes and initiatives, binds access restrictions and permitted codes to each initiative, sets entry validation rules, manages delegates, and handles released and unreleased time entries flowing back from billing. Writes are largely asynchronous, returning 202 Accepted. 28 operations.

OpenAPI Specification

laurel-ingestion-openapi-original.json Raw ↑
{
  "openapi": "3.0.0",
  "paths": {
    "/healthcheck": {
      "get": {
        "operationId": "HealthCheckController_getHeathCheck",
        "parameters": [],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        },
        "tags": [
          "HealthCheck"
        ]
      }
    },
    "/api/v1/customers/{customerId}/entries/release-pending": {
      "get": {
        "operationId": "EntriesController_getAllReleasePendingEntries_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReleasePendingTimekeeperIdDto"
                  }
                }
              }
            }
          }
        },
        "tags": [
          "Entries"
        ]
      }
    },
    "/api/v1/customers/{customerId}/users/{userId}/entries/lock-status": {
      "patch": {
        "operationId": "EntriesController_updateEntriesLockStatus_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "userId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateEntriesLockStatusRequestDto"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": ""
          }
        },
        "tags": [
          "Entries"
        ]
      }
    },
    "/api/v1/customers/{customerId}/users/{userId}/entries/{entryExternalId}": {
      "patch": {
        "operationId": "EntriesController_updateReleasedEntry_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "userId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "entryExternalId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OverrideOneEntryRequestV2Dto"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Entries"
        ]
      },
      "delete": {
        "operationId": "EntriesController_deleteReleasedEntry_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "userId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "entryExternalId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Entries"
        ]
      }
    },
    "/api/v1/customers/{customerId}/users/{userId}/entries/import-released": {
      "post": {
        "operationId": "EntriesController_createReleasedEntry_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "userId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportPmsEntryRequestDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "tags": [
          "Entries"
        ]
      }
    },
    "/api/v1/customers/{customerId}/entries/import-unreleased": {
      "post": {
        "operationId": "EntriesController_importUnreleasedEntry_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportUnreleasedEntriesRequestDto"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": ""
          }
        },
        "tags": [
          "Entries"
        ]
      }
    },
    "/api/v1/customers/{customerId}/entries/external/{sourceSystem}": {
      "patch": {
        "operationId": "EntriesController_updateUnreleasedEntriesBulk_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "sourceSystem",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkUpdateUnreleasedEntriesRequestDto"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": ""
          }
        },
        "tags": [
          "Entries"
        ]
      },
      "delete": {
        "operationId": "EntriesController_deleteUnreleasedEntriesBulk_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "sourceSystem",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BulkDeleteUnreleasedEntriesRequestDto"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": ""
          }
        },
        "tags": [
          "Entries"
        ]
      }
    },
    "/api/v1/customers/{customerId}/clients/import": {
      "post": {
        "operationId": "ClientsController_importClientV1_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportCustomerClientDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "tags": [
          "Clients",
          "Public"
        ]
      }
    },
    "/api/v1/customers/{customerId}/clients/batch": {
      "post": {
        "operationId": "ClientsController_importClientBatchV1_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "isInitial",
            "required": false,
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportCustomerClientsBatchDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "tags": [
          "Clients",
          "Public"
        ]
      }
    },
    "/api/v1/customers/{customerId}/codes/import": {
      "post": {
        "operationId": "CodesController_importCodeV1_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportCustomerCodeDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "tags": [
          "Codes",
          "Public"
        ]
      }
    },
    "/api/v1/customers/{customerId}/codes/batch": {
      "post": {
        "operationId": "CodesController_importCodeBatchV1_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "isInitial",
            "required": false,
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportCustomerCodesBatchDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "tags": [
          "Codes",
          "Public"
        ]
      }
    },
    "/api/v1/customers/{customerId}/code-types/import": {
      "post": {
        "operationId": "CodeTypesController_importCodeTypeV1_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportCustomerCodeTypeDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "tags": [
          "CodeTypes"
        ]
      }
    },
    "/api/v1/customers/{customerId}/initiatives/import": {
      "post": {
        "operationId": "InitiativesController_importInitiativeV1_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportCustomerInitiativeDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "tags": [
          "Initiatives"
        ]
      }
    },
    "/api/v1/customers/{customerId}/initiatives/batch": {
      "post": {
        "deprecated": true,
        "operationId": "InitiativesController_importInitiativesBatchV1_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportCustomerInitiativesBatchDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "",
        "tags": [
          "Initiatives"
        ]
      }
    },
    "/api/v1/customers/{customerId}/initiatives/consolidated-batch": {
      "post": {
        "deprecated": true,
        "operationId": "InitiativesController_importInitiativesConsolidatedBatchV1_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "isInitial",
            "required": false,
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportCustomerInitiativesConsolidatedBatchDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "",
        "tags": [
          "Initiatives"
        ]
      }
    },
    "/api/v2/customers/{customerId}/initiatives/consolidated-batch": {
      "post": {
        "operationId": "InitiativesController_importInitiativesConsolidatedBatchV2_v2",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "isInitial",
            "required": false,
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ImportCustomerInitiativesConsolidatedBatchDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "tags": [
          "Initiatives",
          "Public"
        ]
      }
    },
    "/api/v1/customers/{customerId}/initiatives/batch/access": {
      "post": {
        "deprecated": true,
        "operationId": "InitiativesController_setInitiativeAccessBatchV1_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "isInitial",
            "required": false,
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetCustomerInitiativeAccessBatchDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "",
        "tags": [
          "Initiatives"
        ]
      }
    },
    "/api/v1/customers/{customerId}/initiatives/batch/walls-access": {
      "post": {
        "operationId": "InitiativesController_setInitiativeAccessBatchWithWallsV1_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "isInitial",
            "required": false,
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetCustomerInitiativeAccessWallsBatchDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "tags": [
          "Initiatives"
        ]
      }
    },
    "/api/v1/customers/{customerId}/initiatives/batch/codes": {
      "post": {
        "deprecated": true,
        "operationId": "InitiativesController_setInitiativeCodesBatchV1_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetCustomerInitiativeCodesBatchDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "",
        "tags": [
          "Initiatives"
        ]
      }
    },
    "/api/v1/customers/{customerId}/initiatives/{initiativeExternalId}/access": {
      "post": {
        "operationId": "InitiativesController_setInitiativeAccessV1_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "initiativeExternalId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetCustomerInitiativeAccessDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "tags": [
          "Initiatives",
          "Public"
        ]
      }
    },
    "/api/v1/customers/{customerId}/initiatives/{initiativeExternalId}/codes": {
      "post": {
        "operationId": "InitiativesController_setInitiativeCodesV1_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "initiativeExternalId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetCustomerInitiativeCodesDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "tags": [
          "Initiatives",
          "Public"
        ]
      },
      "delete": {
        "operationId": "InitiativesController_deleteInitiativeCodesV1_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "initiativeExternalId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": ""
          }
        },
        "tags": [
          "Initiatives",
          "Public"
        ]
      }
    },
    "/api/v1/validations/customers/{customerId}/initiatives/{initiativeExternalId}/rules": {
      "post": {
        "operationId": "EntryValidationRulesController_setOneForInitiative_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "initiativeExternalId",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetInitiativeLevelEntryValidationRulesDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "tags": [
          "Validation Rules",
          "Public"
        ]
      }
    },
    "/api/v1/customers/{customerId}/users/delegates": {
      "post": {
        "description": "Create an async job that will update user delegates",
        "operationId": "UsersController_updateUserDelegates_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateUserDelegatesDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "",
        "tags": [
          "Users",
          "Public"
        ]
      }
    },
    "/api/v1/customers/{customerId}/users/delegates/batch": {
      "post": {
        "description": "Create an async job that will update delegates for a batch of users.",
        "operationId": "UsersController_updateUserDelegatesBatch_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          },
          {
            "name": "isInitial",
            "required": false,
            "in": "query",
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateUserDelegatesBatchDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": ""
          }
        },
        "summary": "",
        "tags": [
          "Users",
          "Public"
        ]
      }
    },
    "/api/v1/customers/{customerId}/working-timekeepers/sync": {
      "post": {
        "operationId": "WorkingTimekeepersController_sync_v1",
        "parameters": [
          {
            "name": "customerId",
            "required": true,
            "in": "path",
            "schema": {
              "format": "objectid",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SyncCustomerWorkingTimekeepersBatchDto"
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": ""
          }
        },
        "summary": "Syncs working timekeepers for a customer's initiatives",
        "tags": [
          "Working Timekeepers"
        ]
      }
    }
  },
  "info": {
    "title": "Ingestion Service API",
    "description": "",
    "version": "1",
    "contact": {}
  },
  "tags": [],
  "servers": [],
  "components": {
    "securitySchemes": {
      "ApiBearerAuth": {
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "Enter access token",
        "type": "http"
      }
    },
    "schemas": {
      "ClientDto": {
        "type": "object",
        "properties": {
          "_id": {
            "type": "string",
            "format": "objectid"
          },
          "externalId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "callSign": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "description": "if null or undefined, semantic default is ClientType.Client",
            "enum": [
              "client",
              "parent"
            ],
            "nullable": true
          },
          "parentClientId": {
            "type": "string",
            "format": "objectid",
            "nullable": true
          }
        },
        "required": [
          "_id",
          "externalId",
          "name",
          "description",
          "callSign"
        ]
      },
      "InitiativeDigestDto": {
        "type": "object",
        "properties": {
          "_id": {
            "type": "string",
            "format": "objectid"
          },
          "externalId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "billingType": {
            "enum": [
              "billable",
              "non-billable"
            ],
            "type": "string"
          },
          "unitIncrements": {
            "type": "number",
            "format": "double"
          },
          "locale": {
            "type": "string",
            "description": "BCP-47 locale for this initiative (e.g. en-US, fr-CA)",
            "enum": [
              "da-DK",
              "de-DE",
              "en-CA",
              "en-GB",
              "en-US",
              "es-ES",
              "es-MX",
              "fi-FI",
              "fr-CA",
              "fr-FR",
              "is-IS",
              "it-IT",
              "ko-KR",
              "nl-NL",
              "no-NO",
              "pt-PT",
              "sv-SE"
            ],
            "nullable": true
          },
          "client": {
            "$ref": "#/components/schemas/ClientDto"
          }
        },
        "required": [
          "_id",
          "externalId",
          "name",
          "billingType",
          "unitIncrements",
          "client"
        ]
      },
      "InitiativePropsDto": {
        "type": "object",
        "properties": {
          "type": {
            "enum": [
              "pms",
              "user"
            ],
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "pinned"
              ]
            }
          },
          "initiative": {
            "$ref": "#/components/schemas/InitiativeDigestDto"
          }
        },
        "required": [
          "type",
          "tags",
          "initiative"
        ]
      },
      "CodeTypeDto": {
        "type": "object",
        "properties": {
          "_id": {
            "type": "string",
            "format": "objectid"
          },
          "externalId": {
            "type": "string"
          },
          "orderingSequence": {
            "type": "string",
            "description": "ordering sequence for UI sorting (alphanumeric)",
            "nullable": true
          }
        },
        "required": [
          "_id",
          "externalId"
        ]
      },
      "CodeDto": {
        "type": "object",
        "properties": {
          "_id": {
            "type": "string",
            "format": "objectid"
          },
          "externalId": {
            "type": "string"
          },
          "orderingSequence": {
            "type": "string",
            "description": "ordering sequence for UI sorting (alphanumeric)",
            "nullable": true
          },
          "group": {
            "type": "string",
            "description": "group identifier for categorizing codes",
            "nullable": true
          },
          "type": {
            "$ref": "#/components/schemas/CodeTypeDto"
          }
        },
        "required": [
          "_id",
          "externalId",
          "type"
        ]
      },
      "ReleasePendingTimekeeperIdDto": {
        "type": "object",
        "properties": {
          "_id": {
            "type": "string",
            "description": "entry's id",
            "format": "objectid"
          },
          "customerId": {
            "type": "string",
            "description": "id of customer who the owner belongs to",
            "format": "objectid"
          },
          "userId": {
            "type": "string",
            "description": "if of user who owns the entry",
            "format": "objectid"
          },
          "workDate": {
            "type": "string",
            "description": "the date this entry is released to",
            "example": "2022-08-12",
            "format": "iso-date"
          },
          "summary": {
            "type": "string",
            "description": "entry's summary"
          },
          "unitIncrementCount": {
            "type": "number",
            "description": "sum of unit increments from this entry's sources and adjustments",
            "format": "double"
          },
          "incrementDurationInSeconds": {
            "type": "number",
            "description": "entry duration in seconds",
            "format": "doub

# --- truncated at 32 KB (63 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/laurel/refs/heads/main/openapi/laurel-ingestion-openapi-original.json