Responses with status 429 Too Many Requests and 503 Service Unavailable now include a Retry-After header with the number of seconds to wait before retrying.
detailEvery 429 response body now has a limitType member when the limit is known: rateLimit, ioRateLimit, concurrentSearches, concurrentOperations or repositorySessions. Concurrency limits also carry limitScope (principal or account). 413 responses carry limitType: requestSize. Error responses now set detail to the error message, which is also still in title. 400 and 413 responses for malformed or oversized request bodies now return the request path in instance and the operation id in operationId (they were swapped).
503 Service Unavailable when the repository server cannot be reachedWhen the API server could not connect to the repository server, requests answered 500. They now answer 503 with the error class serviceUnavailable and a Retry-After header. A failure after the request reached the repository server still answers 500.
503 Service Unavailable when the session store is unavailableWhen the API server's session store was briefly unreachable, too slow or still starting up, requests answered 500, or 401 with "no existing session". They now answer 503 with the error class serviceUnavailable and a Retry-After header. A 401 still means the session or token is not valid.
limitType: serverBusyWhen a server is already working on as many requests as it can, it can now answer a new request with 503, limitType: serverBusy and a Retry-After header after waiting at most about a second, instead of holding it until it times out. The request has not been started, so it is safe to send again after the delay in Retry-After.
A service principal can now have up to 10 open searches per access token. It was limited to 6.
A multipart upload larger than the import size limit could reach the client as 503. It is now rejected with 413 and errorCode 221 before the body is read.
Repository server errors 9017, 9028 and 9368 answered 500. They now answer 400, and the repository error code stays in errorCode.
GET /Repositories/{repoId}/Entries/{entryId}/Laserfiche.Repository.Document/edoc and POST .../Laserfiche.Repository.Document/GetEdocWithAuditReason can return 503 with Retry-After when the server is temporarily short of memory for the requested range; retry after that delay. A range too large to buffer at all (about 2 GiB) returns 400 before anything is read, instead of failing part-way.
A folder listing that a client stopped paging through was kept open on the repository server while the client kept making other requests, which could cause unrelated requests to fail under load. A listing that has not been used for five minutes is now closed.
Updated vulnerable dependencies.
The following API is updated to always return entryType, even if the OData $select query options is used and it doesn't include entryType:
GET /Repositories/{repoId}/Entries/{entryId}The following API is updated to always return entryType, even if the OData $select query options is used and it doesn't include entryType:
GET /Repositories/{repoId}/Searches/{searchToken}/ResultsThe following API is updated to always return entryType, even if the OData $select query options is used and it doesn't include entryType:
POST /Repositories/{repoId}/SimpleSearches [BREAKING] The following API returns the length of the document in the X-APIServer-ContentLength response header, instead of the HTTP Content-Length response header:
HEAD /Repositories/{repoId}/Entries/{entryId}/Laserfiche.Repository.Document/edocOAuth scope for the following APIs has been revised to repository.Read:
POST /Repositories/{repoId}/Entries/{entryId}/Laserfiche.Repository.Document/GetEdocWithAuditReasonPOST /Repositories/{repoId}/Entries/{entryId}/fields/GetDynamicFieldLogicValueNew isSource property added to the request body of the following API. This allows assigning link metadata where the current entry is the source or target in the link relationship.
PUT /Repositories/{repoId}/Entries/{entryId}/linksFixed a bug where parts of the following API URLs were case sensitive:
GET /Repositories/{repoId}/Entries/linksPUT /Repositories/{repoId}/Entries/linksGET /Repositories/{repoId}/Entries/tagsPUT /Repositories/{repoId}/Entries/tagsDELETE /Repositories/{repoId}/Entries/Laserfiche.Repository.Document/pagesMarked file parameter electronicDocument as required and added documentation on how to create a blank document to the following API:
POST /Repositories/{repoId}/Entries/{parentEntryId}/{fileName}OAuth scope for the following APIs has been revised to repository.Read:
POST /Repositories/{repoId}/SearchesDELETE /Repositories/{repoId}/Searches/{searchToken}OAuth scope for the following APIs has been revised to repository.Read:
POST /Repositories/{repoId}/SimpleSearchesOAuth scope no longer applies to the following APIs:
GET /Repositories/{repoId}/Tasks/{operationToken}DELETE /Repositories/{repoId}/Tasks/{operationToken}Improved service security and stability
Support Brotli and Gzip response compression to reduce response latency when the Accept-Encoding request header is used.
Fixed a bug where in some scenarios with the Time or Data field type, the following APIs had an error when returning field values:
GET /Repositories/{repoId}/Entries/{entryId}/fieldsPUT /Repositories/{repoId}/Entries/{entryId}/fieldsFixed a bug where in some scenarios, the following API could return an error:
HEAD /Repositories/{repoId}/Entries/{entryId}/Laserfiche.Repository.Document/edocFixed inconsistent error responses to now return ProblemDetails schema.
Fixed a bug where in some scenarios, the following API could return an incorrect nextlink:
GET /Repositories/{repoId}/Entries/{entryId}/Laserfiche.Repository.Folder/childrenOAuth 2.0 scope support has been added for security but is optional in v1 for backwards compatibility. If your access token does not contain any scopes, you will not run into any issues,
but if your token explicitly contains scopes, the API Server will enforce scope security and issue a 403 Forbidden if it does not have the correct scopes.
Fixed a bug where in some scenarios, the following API could return an error instead of the entries in the folder:
GET /Repositories/{repoId}/Entries/{entryId}/Laserfiche.Repository.Folder/childrenAdded a maximum JSON request body size limit of 5 MB to all non-import document related APIs. As a result, the 413 Payload Too Large status code has been added to several APIs.
Added a maximum JSON response body size limit of 5 MB to all non-export document related APIs.
The APIServer can now include an error message in a HTTP response header named X-APIServer-Error for the following API:
HEAD /Repositories/{repoId}/Entries/{entryId}/Laserfiche.Repository.Document/edocUpdated the ProblemDetails error response schema to more accurately reflect the response. Undocumented extension properties are now documented.
Added support for localized error messages for the fr and es culture codes. The culture code can be sent in API requests through the culture query parameter or the Accept-Language header.
Removed an incorrect ProblemDetails error response schema from the following API:
HEAD /Repositories/{repoId}/Entries/{entryId}/Laserfiche.Repository.Document/edoc[BREAKING] Token substitution in the name of the copied entry is no longer supported in the following API to avoid errors while copying:
POST /Repositories/{repoId}/Entries/{entryId}/Laserfiche.Repository.Folder/CopyAsyncThe Entry base type schema has been marked as abstract. If using the Laserfiche API client libraries, should use the derived types like Folder, Document, Shortcut, and RecordSeries.
The following APIs are marked as deprecated in v1:
POST /Repositories/{repoId}/ServerSession/CreatePOST /Repositories/{repoId}/ServerSession/RefreshPOST /Repositories/{repoId}/ServerSession/InvalidateAdded the following API:
GET /Repositories/{repoId}/Entries/ByPathFixed a bug that caused the search results return localized field values in a different format from other APIs.