Laurel Validation Rules API
The Validation Rules API from Laurel — 4 operation(s) for validation rules.
The Validation Rules API from Laurel — 4 operation(s) for validation rules.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/laurel-validation-rules-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Laurel Validation Rules API
version: '1'
contact: {}
description: 'Operations tagged Validation Rules across 2 of this provider''s published API definitions: laurel-ingestion-openapi-original.json, laurel-time-openapi-original.json. Each path carries the servers of the definition it was published in.'
security:
- ApiBearerAuth: []
tags:
- name: Validation Rules
paths:
/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
summary: Entry validation rules controller set one for initiative v1
x-summary-source: derived
/api/v1/validations/rules/applicable:
get:
operationId: EntryValidationRulesController_findApplicable_v1
parameters:
- name: initiativeId
required: false
in: query
description: initiative's identifier
schema:
format: objectid
type:
- string
- 'null'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/ApplicableEntryValidationRules'
tags:
- Validation Rules
summary: Entry validation rules controller find applicable v1
x-summary-source: derived
/api/v1/validations/customers/{customerId}/rules:
get:
operationId: EntryValidationRulesController_findOneForCustomer_v1
parameters:
- name: customerId
required: true
in: path
description: customer id
schema:
format: objectid
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/EntryValidationRules'
tags:
- Validation Rules
summary: Entry validation rules controller find one for customer v1
x-summary-source: derived
post:
operationId: EntryValidationRulesController_setOneForCustomer_v1
parameters:
- name: customerId
required: true
in: path
description: customer id
schema:
format: objectid
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SetEntryValidationRulesDto'
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/EntryValidationRules'
tags:
- Validation Rules
summary: Entry validation rules controller set one for customer v1
x-summary-source: derived
/api/v1/validations/customers/{customerId}/initiatives/{initiativeId}/rules:
get:
operationId: EntryValidationRulesController_findOneForInitiative_v1
parameters:
- name: customerId
required: true
in: path
description: id of the customer who owns the resource
schema:
format: objectid
type: string
- name: initiativeId
required: true
in: path
description: initiative id of the resource
schema:
format: objectid
type: string
responses:
'200':
description: ''
content:
application/json:
schema:
$ref: '#/components/schemas/EntryValidationRules'
tags:
- Validation Rules
summary: Entry validation rules controller find one for initiative v1
x-summary-source: derived
components:
schemas:
SetInitiativeLevelEntryValidationRulesDto:
type: object
properties:
requiredCodeTypeExternalIds:
description: code type external identifiers that are required for an entry
type: array
items:
type: string
EntryValidationRules:
type: object
properties:
_id:
type: string
description: the identifier of the validation rules
format: objectid
canReleaseOnFutureDates:
description: per-billability control for future-date release permission
type:
- object
- 'null'
allOf:
- $ref: '#/components/schemas/CanReleaseOnFutureDates'
cannotReleaseNegativeIncrement:
type:
- boolean
- 'null'
description: whether if negative increments cannot be released or not
cannotReleaseZeroIncrement:
type:
- boolean
- 'null'
description: whether if zero increments cannot be released or not
isWorkingTimekeeperValidationEnabled:
type:
- boolean
- 'null'
description: whether working timekeeper validation is enabled (Super Laurel admins only)
customMessage:
type:
- string
- 'null'
description: firm-specific custom message shown when working timekeeper validation blocks an entry release
maxLength: 1000
minLength: 1
isDailyLimitValidationEnabled:
type:
- boolean
- 'null'
description: whether 24-hour daily release limit validation is enabled
allowEntryDateRestrictions:
type:
- boolean
- 'null'
description: whether entry date restrictions are allowed for this customer
allowNarrativeLineBreaks:
type:
- boolean
- 'null'
description: whether line breaks are allowed in the narrative/summary field (client-side enforcement)
createdAt:
type: string
description: the date and time these rules were first created
example: '2022-08-12T20:44:48Z'
format: iso-date-time
customerId:
type: string
description: the identifier of customer who owns these validation rules
format: objectid
initiative:
description: the initiative that these validation rules apply to
oneOf:
- $ref: '#/components/schemas/PmsInitiativeDigest'
- $ref: '#/components/schemas/UserInitiativeDigest'
isSummaryRequired:
type:
- boolean
- 'null'
description: whether summary is required for the entry or not
requiredCodeTypes:
description: code type identifiers that are required for an entry
default: []
type: array
items:
$ref: '#/components/schemas/CodeTypeDigest'
updatedAt:
type: string
description: the last date and time these rules were updated
example: '2022-08-12T20:44:48Z'
format: iso-date-time
schemaVersion:
type: string
description: schema version
required:
- _id
- createdAt
- customerId
- requiredCodeTypes
- updatedAt
ApplicableEntryValidationRules:
type: object
properties:
canReleaseOnFutureDates:
description: per-billability control for future-date release permission (null = not yet migrated)
type:
- object
- 'null'
allOf:
- $ref: '#/components/schemas/CanReleaseOnFutureDates'
cannotReleaseNegativeIncrement:
type: boolean
description: whether if negative increments cannot be released or not
cannotReleaseZeroIncrement:
type: boolean
description: whether if zero increments cannot be released or not
isSummaryRequired:
type: boolean
description: whether summary is required for the entry or not
allowEntryDateRestrictions:
type: boolean
description: whether entry date restrictions are allowed for this customer
allowNarrativeLineBreaks:
type: boolean
description: whether line breaks are allowed in the narrative/summary field (client-side enforcement)
isWorkingTimekeeperValidationEnabled:
type: boolean
description: whether working timekeeper validation is enabled
customMessage:
type:
- string
- 'null'
description: firm-specific custom message shown when working timekeeper validation blocks an entry release
maxLength: 1000
minLength: 1
isDailyLimitValidationEnabled:
type: boolean
description: whether 24-hour daily release limit validation is enabled
requiredCodeTypes:
description: code type identifiers that are required for an entry
default: []
type: array
items:
$ref: '#/components/schemas/CodeTypeDigest'
required:
- cannotReleaseNegativeIncrement
- cannotReleaseZeroIncrement
- isSummaryRequired
- allowEntryDateRestrictions
- allowNarrativeLineBreaks
- isWorkingTimekeeperValidationEnabled
- isDailyLimitValidationEnabled
- requiredCodeTypes
CanReleaseOnFutureDates:
type: object
properties:
billable:
type: boolean
description: whether billable entries can be released on future dates
nonBillable:
type: boolean
description: whether non-billable entries can be released on future dates
required:
- billable
- nonBillable
PmsInitiativeDigest:
type: object
properties:
type:
description: initiative's type
enum:
- pms
- user
type: string
_id:
type: string
description: initiative's id
format: objectid
billingType:
description: initiative's billing type
enum:
- billable
- non-billable
type: string
callSign:
type:
- string
- 'null'
description: a short name or abbreviation that identifies this pms initiative
unitIncrements:
type: number
description: unit of billing increments for this initiative
format: double
status:
type:
- string
- 'null'
description: 'initiative''s status (active/inactive). Optional for backwards compatibility
with entries whose denormalized digest predates this field — those entries
gain status on the next initiative update via natural digest propagation.'
enum:
- active
- inactive
locale:
type:
- string
- 'null'
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
externalId:
type: string
description: initiative's external id
name:
type: string
description: a short name or code that identifies this initiative
description:
type: string
description: the full name of the initiative
client:
description: the client this initiative belongs to
allOf:
- $ref: '#/components/schemas/ClientDigest'
required:
- type
- _id
- billingType
- unitIncrements
- externalId
- name
- description
- client
UserInitiativeDigest:
type: object
properties:
type:
description: initiative's type
enum:
- user
type: string
_id:
type: string
description: initiative's id
format: objectid
billingType:
description: initiative's billing type
enum:
- billable
- non-billable
type: string
callSign:
type:
- string
- 'null'
description: a short name or abbreviation that identifies this pms initiative
unitIncrements:
type: number
description: unit of billing increments for this initiative
format: double
status:
type:
- string
- 'null'
description: 'initiative''s status (active/inactive). Optional for backwards compatibility
with entries whose denormalized digest predates this field — those entries
gain status on the next initiative update via natural digest propagation.'
enum:
- active
- inactive
locale:
type:
- string
- 'null'
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
name:
type: string
description: the name user has given this initiative
required:
- type
- _id
- billingType
- unitIncrements
- name
SetEntryValidationRulesDto:
type: object
properties:
cannotReleaseNegativeIncrement:
type: boolean
description: whether users can release negative increments or not
cannotReleaseZeroIncrement:
type: boolean
description: whether users can release zero increments or not
isSummaryRequired:
type: boolean
description: whether summary is required for an entry or not
isWorkingTimekeeperValidationEnabled:
type: boolean
description: whether working timekeeper validation is enabled (Super Laurel admins only)
customMessage:
type:
- string
- 'null'
description: firm-specific custom message shown when working timekeeper validation blocks an entry release
maxLength: 1000
minLength: 1
isDailyLimitValidationEnabled:
type: boolean
description: whether 24-hour daily release limit validation is enabled
allowEntryDateRestrictions:
type: boolean
description: whether entry date restrictions are allowed for this customer
allowNarrativeLineBreaks:
type: boolean
description: whether line breaks are allowed in the narrative/summary field (client-side enforcement)
requiredCodeTypeIds:
description: code type identifiers that are required for an entry
type: array
items:
type: string
format: objectid
canReleaseOnFutureDates:
description: per-billability control for future-date release permission
allOf:
- $ref: '#/components/schemas/CanReleaseOnFutureDates'
CodeTypeDigest:
type: object
properties:
_id:
type: string
description: code type's id
format: objectid
externalId:
type: string
description: code type's external id
name:
type: string
description: code type's name
semanticType:
type:
- string
- 'null'
description: code type's semantic type
enum:
- action
- activity
- location
- phase
- task
orderingSequence:
type:
- string
- 'null'
description: ordering sequence for UI sorting (alphanumeric)
required:
- _id
- externalId
- name
ClientDigest:
type: object
properties:
_id:
type: string
description: client's id
format: objectid
externalId:
type: string
description: client's external id
name:
type: string
description: a name that identifies this client
description:
type: string
description: client's description
callSign:
type: string
description: a short name or abbreviation that identifies this client
type:
type:
- string
- 'null'
description: client's type, default is client
enum:
- client
- parent
parentClientId:
type:
- string
- 'null'
description: id of the parent client
format: objectid
required:
- _id
- externalId
- name
- description
- callSign
securitySchemes:
ApiBearerAuth:
scheme: bearer
bearerFormat: JWT
description: Enter access token
type: http
externalDocs:
description: Laurel API Documentation
url: https://developer.laurel.ai/
x-refined-from:
- laurel-ingestion-openapi-original.json
- laurel-time-openapi-original.json