openapi: 3.0.2
info:
title: Lasso API
description: |
Overview
Use this API to manage Registrant, Project, and Inventory data within Lasso CRM.
Authorization
An authorization header with a Bearer JWT API key token is required for all requests.
API keys are project/location based, and can be obtained from your business contact with Lasso Data Systems.
Try it out with CURL
Here's an example of how to try it on the command line with curl:
curl -X GET "https://api.lassocrm.com/v1/registrants/123456" \
-H "accept: application/json" \
-H "Authorization: Bearer ***apikey***"
To find the curl command for a specific endpoint:
- Select the `Authorize` button and place your api key in the textbox
- Go to the route you want to try out in the swagger definition
- Select `Try it out`
- Input any required fields, query params, and request payload
- Copy the curl command using the copy button
Try it out in documentation
To try it out directly in the documentation:
- Select the `Authorize` button and place your api key in the textbox
- Ensure that the api key is prefixed with `Bearer` including a space separating `Bearer` from the api key
- Go to the route you want to try out in the swagger definition
- Select `Try it out`
- Input any required fields, query params, and request payload
- Select `Execute`
Rate Limiting
A Rate limit of 1,000 requests per minute applies to each API key
Lasso Event System
The event system listens for actions on a registrant in Lasso. An action can be any of; Create, Update, Delete.
When an action is performed on a registrant, the event system will fire off a webhook event to registered integrations.
However, not all actions on a registrant will fire off a webhook event. Only actions on certain registrant attributes
will trigger a webhook event.
The following actions will trigger a webhook event:
- Create: Registrant
- Delete: Registrant
- Update: Registrant.person.firstName
- Update: Registrant.person.lastName
- Update: Registrant.person.nameTitle
- Update: Registrant.person.contactPreference
- Update: Registrant.person.company
- Update: Registrant.person.birthday
- Update: Registrant.person.gender
- Update: Registrant.person.jobTitle
- Update: Registrant.person.nickname
- Update: Registrant.person.ssnSin
- Update: Registrant.Rating
- Update: Registrant.SourceType
- Update: Registrant.SecondarySourceType
- Update: Registrant.FollowUpProcess
- Update: Registrant.registrationDate
- Update: Registrant.emails
- Update: Registrant.phones
- Update: Registrant.addresses
- Update: Registrant.notes
- Update: Registrant.questions
- Update: Registrant.excludeFromTraffic
- Update: Registrant.status
- Update: Registrant.relationships
- Update: Registrant.assignedSalesReps
On update events, the webhook payload includes a changed array listing which
RegistrantRead fields triggered the event. Only a defined set of field names appear;
internal metadata (e.g. status, LastModified) is omitted even when it triggers the webhook.
This allows stateless consumers to skip irrelevant updates (e.g. when changed
is only ["history"]) without diffing the full entity. The changed
array is empty on inserted and deleted events.
Possible values: person, rating, excludeFromTraffic, registrationDate, followUpProcess,
sourceType, secondarySourceType, questions, notes, assignedSalesReps, history.
Routes
version: 1.0.39
servers:
- url: https://api.lassocrm.com/v1
description: 'Production endpoint'
paths:
/registrants:
get:
summary: >-
List of registrants for a project.
operationId: 'get_registrants'
description: >-
Returns a full representation of a registrant, including notes and history
items excluding the history body. This may produce a lot of data, so the endpoint
is limited to 20 results at a time.
Because a history body can be quite large, a separate request must be made
to `/registrants/{registrantId}/histories/{historyId}` in order to retrieve
it.
Use the `next` link to page through the available registrants. Registrant
are sorted by creation date, with newest on top.
tags:
- Registrant
parameters:
- in: query
name: rating
schema:
type: string
- in: query
name: lastModifiedAfter
schema:
type: string
format: date
description: >-
Returns only registrants that were modified at least once since the given
date, in ISO 8601 UTC format
- in: query
name: lastModifiedBefore
schema:
type: string
format: date
description: >-
Returns only registrants that were last modified before this date. Combined
with lastModifiedAfter this allows to select registrants that were last
modified between two dates. Dates are in ISO 8601 UTC format.
- in: query
name: registeredAfter
schema:
type: string
format: date
description: >-
Returns only registrants that were registered since the given date, in ISO
8601 UTC format.
- in: query
name: registeredBefore
schema:
type: string
format: date
description: >-
Returns only registrants that were registered before this date. Combined
with registeredAfter this allows to select registrants that were registered
between two dates. Dates are in ISO 8601 UTC format.
- $ref: '#/components/parameters/Cursor'
security:
- JwtAuthorizer: []
responses:
200:
description: >-
Get a list of registrants, sorted newest-first. You can also limit the
selection of registrants by rating and creation date.
content:
application/json:
schema:
type: object
properties:
items:
type: array
items:
$ref: '#/components/schemas/RegistrantRead'
links:
type: object
properties:
next:
type: string
description: Link to the next batch of registrants
example: '/registrants?cursor=fdslkb32b3o2o'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
500:
$ref: '#/components/responses/InternalServerError'
post:
summary: Create a registrant
operationId: 'post_registrants'
description: |
Notes:
- History body is not returned in the response payload. Because a history body can be quite large,
a separate request must be made to `/registrants/{registrantId}/histories/{historyId}`
in order to retrieve it.
- Automatic handling of duplicates (upsert) is available if `RegistrantWrite.automaticallyMerge` is set to true.
(See notes in schema for matching rules and precedence)
tags:
- Registrant
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RegistrantWrite'
security:
- JwtAuthorizer: []
responses:
202:
description: Registrant has been created
content:
application/json:
schema:
$ref: '#/components/schemas/RegistrantAccepted'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/search':
get:
summary: >-
Search registrants by name, email, phone, nickname, externalId, rating or
creation date.
operationId: 'get_registrants_search'
description: >-
This endpoint is optimized for speed with a smaller payload than `/registrants`.
This is handy for live search features, e.g. a drop-down with suggested results
for a search bar.
Note: History body is not returned in the response payload. Because a history
body can be quite large, a separate request must be made to `/registrants/{registrantId}/histories/{historyId}`
in order to retrieve it.
tags:
- Registrant
parameters:
- name: lastModified
in: query
schema:
type: string
description: Return only registrant modified after the specified date time,
in ISO 8601 UTC format.
- in: query
name: registeredAfter
schema:
type: string
format: date
description: >-
Returns only registrants that were registered since the given date, in ISO
8601 UTC format.
- in: query
name: registeredBefore
schema:
type: string
format: date
description: >-
Returns only registrants that were registered before this date. Combined
with registeredAfter this allows to select registrants that were registered
between two dates. Dates are in ISO 8601 UTC format.
- name: rating
in: query
schema:
type: string
description: Return only registrants who currently have the specified rating
- name: email
in: query
schema:
type: string
description: Search registrants by email address
- name: phone
in: query
schema:
type: string
description: Search registrants by phone number
- name: nickName
in: query
schema:
type: string
description: Search registrants by nickname
- name: name
in: query
schema:
type: string
description: >-
Search registrants by name. This is a loose search, the name will be parsed
into first and last name, and then partially matched. E.g. `Jim and Susan
Smith` will match `Jim Smith` and `Susan Smith`.
- name: fuzzy
in: query
schema:
type: boolean
description: >-
Default is `false`, turns on partial matching for specific field searches
where the provided value is a prefix or an exact match. E.g. `name=rob&fuzzy=true`
will match the name `Robert`. Affected fields are: name, nickName, phone,
email, externalId, and rating.
- name: externalId
in: query
schema:
type: string
description: >-
Search registrants by an integration externalId. The integration type will
be determined by the API key.
- name: smartSearch
in: query
schema:
type: string
description: >-
Searches for registrants where the given value is a prefix or exactly matches
at least one of first name, last name, full name, phone, email, nickName,
or company. E.g. `Jon`, `Jon Sno`, `Sno`, `Jo` will all return `Jon Snow`.
`jonsnow@` and `jonsno` will return a registrant with the email `jonsnow@westeros.com`.
- $ref: '#/components/parameters/Cursor'
security:
- JwtAuthorizer: []
responses:
200:
description: Registrants found
content:
application/json:
schema:
type: object
properties:
links:
type: object
properties:
next:
type: string
description: Next batch of search results
example: /registrants/search?name=Smith&cursor=32bj3k2b
items:
type: array
items:
type: object
properties:
registrantId:
type: string
example: 123
personalId:
type: string
example: 1234
firstName:
type: string
example: John
lastName:
type: string
example: Smith
email:
type: string
description: Registrants primary email
example: john.smith@example.com
address:
type: string
description: Registrants primary address
example: 335 Example St, ES, 38832, USA
phone:
type: string
description: Registrants primary phone number
example: 512-555-8787
_links:
type: object
properties:
self:
type: string
description: Link to the full representation of the
registrant
example: /registrants/123
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}':
parameters:
- in: path
name: registrantId
schema:
type: string
required: true
put:
description: Update a registrants personal data
operationId: 'put_registrants_by_id'
tags:
- Registrant
security:
- JwtAuthorizer: []
responses:
200:
description: Registrants personal data successfully saved
content:
application/json:
schema:
$ref: '#/components/schemas/RegistrantRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RegistrantPersonalInfo'
get:
summary: Extended data for a registrant
operationId: 'get_registrants_by_id'
description: >-
Note: History body is not returned in the response payload. Because a history
body can be quite large, a separate request must be made to `/registrants/{registrantId}/histories/{historyId}`
in order to retrieve it.
tags:
- Registrant
security:
- JwtAuthorizer: []
responses:
200:
description: Registrant exists
content:
application/json:
schema:
$ref: '#/components/schemas/RegistrantRead'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/person/contact-information':
parameters:
- in: path
name: registrantId
schema:
type: string
required: true
put:
summary: Convenience method to update all of a registrant's contact information
in a single call
operationId: 'get_registrants_contact_information'
description: >-
Update a registrant's contact information. This will overwrite all of the
registrant's contact information with the entity provided in the request payload.
To avoid accidentally deleting contact information, first perform a GET on
the same resource, then modify the returned entity, and finally apply the
entity through this PUT method.
tags:
- Registrant Contact Information
security:
- JwtAuthorizer: []
responses:
200:
description: Registrant's contact information successfully saved
content:
application/json:
schema:
$ref: '#/components/schemas/ContactInformation'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
requestBody:
description: >
Registrant's contact information for update.
Notes:
- emails, phones, addresses: for the collections that are non-empty, there
must be exactly
one entity within the collection that is a designated primary, otherwise
a 400 error will be returned
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ContactInformation'
get:
summary: Retrieve all of a registrant's contact information
operationId: 'put_registrants_contact_information'
description: >-
Retrieves all of a registrant's contact information. Use this method in conjunction
with the PUT method of the same resource to perform a safe update.
tags:
- Registrant Contact Information
security:
- JwtAuthorizer: []
responses:
200:
description: Registrant exists
content:
application/json:
schema:
$ref: '#/components/schemas/ContactInformation'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/integrations':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
post:
tags:
- Registrant Integrations
operationId: 'post_registrants_integrations'
description: >-
Associate an external customer with a Lasso registrant. What this allows,
is for integration-specific triggers to automatically fire when an event is
registered for a registrant - for example, when a registrant is updated, Lasso
could fire off an event to an external integration. The integration type will
be determined from the API Key used to access this route.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ExternalId'
security:
- JwtAuthorizer: []
responses:
200:
description: Integrations successfully updated.
content:
application/json:
schema:
$ref: '#/components/schemas/ExternalId'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
delete:
tags:
- Registrant Integrations
operationId: 'delete_registrants_integrations'
description: >-
Disassociates a registrant from all externalId's of an integration. This means
that webhooks that trigger on externalId will no longer send events for this
registrant. The integration associated with the registrant will be determined
from the API Key used to access this route.
security:
- JwtAuthorizer: []
responses:
204:
description: registrant successfully disassociated from external registrant.
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/external/{externalId}':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
- in: path
name: externalId
required: true
schema:
type: string
delete:
tags:
- Registrant Integrations
operationId: 'delete_registrants_external'
description: >-
Disassociates a registrant from a specific externalId. This means that webhooks
that trigger on the specified externalId will no longer send events for this
registrant. The integration associated with the registrant will be determined
from the API Key used to access this route.
security:
- JwtAuthorizer: []
responses:
204:
description: registrant successfully disassociated from external registrant.
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/rating':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
put:
tags:
- Registrant Sales Details
operationId: 'put_registrants_rating'
description: >-
Set the rating for the registrant. If the rating does not exist, it will be
created.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Rating'
security:
- JwtAuthorizer: []
responses:
200:
description: Rating successfully updated.
content:
application/json:
schema:
$ref: '#/components/schemas/Rating'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/follow-up-process':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
put:
tags:
- Registrant Sales Details
operationId: 'put_registrants_follow_up_process'
description: Set the follow-up process. If the follow-up process does not exist,
it will be created.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/FollowUpProcess'
security:
- JwtAuthorizer: []
responses:
200:
description: Follow-up process successfully set.
content:
application/json:
schema:
$ref: '#/components/schemas/FollowUpProcess'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/source-type':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
put:
tags:
- Registrant Sales Details
operationId: 'put_registrants_source_type'
description: Set the source type. If the source type does not exist, it will
be created.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SourceType'
security:
- JwtAuthorizer: []
responses:
200:
description: Source type successfully set.
content:
application/json:
schema:
$ref: '#/components/schemas/SourceType'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/secondary-source-type':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
put:
tags:
- Registrant Sales Details
operationId: 'put_registrants_secondarysource_type'
description: Set the secondary source type. If the secondary source type does
not exist, it will be created.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SecondarySourceType'
security:
- JwtAuthorizer: []
responses:
200:
description: Secondary source type successfully set.
content:
application/json:
schema:
$ref: '#/components/schemas/SecondarySourceType'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/assigned-sales-reps':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
get:
tags:
- Registrant Assigned Sales Reps
operationId: 'get_registrants_assigned_sales_reps'
description: >-
Gets a list of sales reps that this registrant is assigned to.
responses:
200:
description: >-
A list of sales reps that this registrant is assigned to.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SalesRepRead'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
put:
tags:
- Registrant Assigned Sales Reps
operationId: 'put_registrants_assigned_sales_reps'
description: >-
Update a registrant's assigned sales reps. This list will overwrite the assigned
sales reps for the registrant.
Only one sales rep can be set to primary. If more than one has isPrimary set
to true, an error will be thrown.
requestBody:
required: false
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SalesRepWrite'
security:
- JwtAuthorizer: []
responses:
200:
description: Sales reps successfully assigned.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/SalesRepRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/emails':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
post:
tags:
- Registrant Contact Information
operationId: 'post_registrants_emails'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/EmailWrite'
security:
- JwtAuthorizer: []
responses:
201:
description: Email successfully created.
content:
application/json:
schema:
$ref: '#/components/schemas/EmailRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/emails/{emailId}':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
- in: path
name: emailId
required: true
schema:
type: string
put:
tags:
- Registrant Contact Information
operationId: 'put_registrants_emails_by_id'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/EmailWrite'
security:
- JwtAuthorizer: []
responses:
200:
description: Email updated.
content:
application/json:
schema:
$ref: '#/components/schemas/EmailRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
delete:
tags:
- Registrant Contact Information
operationId: 'delete_registrants_emails_by_id'
security:
- JwtAuthorizer: []
responses:
204:
description: Item deleted
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/phones':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
post:
tags:
- Registrant Contact Information
operationId: 'post_registrants_phones'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PhoneWrite'
security:
- JwtAuthorizer: []
responses:
201:
description: Phone number successfully created.
content:
application/json:
schema:
$ref: '#/components/schemas/PhoneRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/phones/{phoneId}':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
- in: path
name: phoneId
required: true
schema:
type: string
put:
tags:
- Registrant Contact Information
operationId: 'put_registrants_phones_by_id'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PhoneWrite'
security:
- JwtAuthorizer: []
responses:
200:
description: Phone number updated.
content:
application/json:
schema:
$ref: '#/components/schemas/PhoneRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
delete:
tags:
- Registrant Contact Information
operationId: 'delete_registrants_phones_by_id'
security:
- JwtAuthorizer: []
responses:
204:
description: Item deleted
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/addresses':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
post:
tags:
- Registrant Contact Information
operationId: 'post_registrants_addresses'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AddressWrite'
security:
- JwtAuthorizer: []
responses:
201:
description: Address successfully created.
content:
application/json:
schema:
$ref: '#/components/schemas/AddressRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/addresses/{addressId}':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
- in: path
name: addressId
required: true
schema:
type: string
put:
tags:
- Registrant Contact Information
operationId: 'put_registrants_addresses_by_id'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AddressWrite'
security:
- JwtAuthorizer: []
responses:
200:
description: Address updated.
content:
application/json:
schema:
$ref: '#/components/schemas/AddressRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
delete:
tags:
- Registrant Contact Information
operationId: 'delete_registrants_addresses_by_id'
security:
- JwtAuthorizer: []
responses:
204:
description: Item deleted
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/questions':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
post:
tags:
- Registrant Question Answers
operationId: 'post_registrants_questions'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Question'
security:
- JwtAuthorizer: []
responses:
201:
description: Question successfully answered
content:
application/json:
schema:
$ref: '#/components/schemas/Question'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/questions/{questionId}':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
- in: path
name: questionId
required: true
schema:
type: string
put:
tags:
- Registrant Question Answers
operationId: 'put_registrants_questions_by_id'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Answers'
security:
- JwtAuthorizer: []
responses:
200:
description: Question successfully answered
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Question'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/notes':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
post:
tags:
- Registrant Notes
operationId: 'post_registrants_notes'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RegistrantNoteWrite'
security:
- JwtAuthorizer: []
responses:
201:
description: Note successfully created.
content:
application/json:
schema:
$ref: '#/components/schemas/RegistrantNoteRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/histories':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
post:
tags:
- Registrant History
operationId: 'post_registrants_histories'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/HistoryWrite'
security:
- JwtAuthorizer: []
responses:
201:
description: History successfully created.
content:
application/json:
schema:
$ref: '#/components/schemas/HistoryReadFull'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/histories/{historyId}':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
- in: path
name: historyId
schema:
type: string
required: true
get:
tags:
- Registrant History
operationId: 'get_registrants_histories_by_id'
security:
- JwtAuthorizer: []
responses:
200:
description: History item with full content
content:
application/json:
schema:
$ref: '#/components/schemas/HistoryReadFull'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
put:
tags:
- Registrant History
operationId: 'put_registrants_histories_by_id'
description: >-
Update a history item. `createdBy` is ignored and cannot be updated.
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/HistoryWrite'
security:
- JwtAuthorizer: []
responses:
200:
description: History item with full content
content:
application/json:
schema:
$ref: '#/components/schemas/HistoryReadFull'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/notes/{noteId}':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
- in: path
name: noteId
schema:
type: string
required: true
delete:
tags:
- Registrant Notes
operationId: 'delete_registrants_notes_by_id'
security:
- JwtAuthorizer: []
responses:
204:
description: Note successfully deleted
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/relationships':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
post:
tags:
- Registrant Relationships
operationId: 'postt_registrants_relationships'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RegistrantRelationshipCreate'
security:
- JwtAuthorizer: []
responses:
201:
description: Relationship successfully created.
content:
application/json:
schema:
$ref: '#/components/schemas/RegistrantRelationshipRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/relationships/{relationshipId}':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
- in: path
name: relationshipId
required: true
schema:
type: string
put:
tags:
- Registrant Relationships
operationId: 'put_registrants_relationships_by_id'
description: >-
Edits a relationship type only. This method cannot be used to edit a relationship's
registrant. To do so, please delete the relationship, then re-add.
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RegistrantRelationshipUpdate'
security:
- JwtAuthorizer: []
responses:
200:
description: Relationship successfully updated.
content:
application/json:
schema:
$ref: '#/components/schemas/RegistrantRelationshipRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
delete:
tags:
- Registrant Relationships
operationId: 'delete_registrants_relationships_by_id'
security:
- JwtAuthorizer: []
responses:
204:
description: Relationship deleted
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/website-tracking/':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
post:
tags:
- Registrant Website Tracking
operationId: 'post_registrants_website_tracking'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RegistrantWebsiteTrackingRequired'
security:
- JwtAuthorizer: []
responses:
200:
description: Registrant tracking information successfully added
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/appointments':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
get:
summary: Retrieve a registrant's appointments
operationId: 'get_registrants_appointments'
tags:
- Registrant Appointments
security:
- JwtAuthorizer: []
responses:
200:
description: Appointments found.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/AppointmentRead'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
post:
summary: Create an appointment
operationId: 'post_registrants_appointments'
tags:
- Registrant Appointments
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AppointmentCreate'
security:
- JwtAuthorizer: []
responses:
201:
description: Appointment successfully created.
content:
application/json:
schema:
$ref: '#/components/schemas/AppointmentRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/appointments/{appointmentId}':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
- in: path
name: appointmentId
required: true
schema:
type: string
get:
summary: Retrieve a single appointment
operationId: 'get_registrants_appointments_by_id'
tags:
- Registrant Appointments
security:
- JwtAuthorizer: []
responses:
200:
description: Appointment found.
content:
application/json:
schema:
$ref: '#/components/schemas/AppointmentRead'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
put:
summary: Update an appointment
operationId: 'put_registrants_appointments_by_id'
description: >-
Update an appointment. This will overwrite all of the appointments data with
the entity provided in the request payload. To avoid accidentally deleting
appointment data, first perform a GET on the same resource, then modify the
returned entity, and finally apply the entity through this PUT method.
tags:
- Registrant Appointments
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AppointmentUpdate'
security:
- JwtAuthorizer: []
responses:
200:
description: Appointment successfully updated.
content:
application/json:
schema:
$ref: '#/components/schemas/AppointmentRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
delete:
summary: Delete an appointment
operationId: 'delete_registrants_appointments_by_id'
tags:
- Registrant Appointments
security:
- JwtAuthorizer: []
responses:
204:
description: Appointment Deleted
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
500:
$ref: '#/components/responses/InternalServerError'
'/registrants/{registrantId}/appointments/{appointmentId}/email-confirmations':
parameters:
- in: path
name: registrantId
required: true
schema:
type: string
- in: path
name: appointmentId
required: true
schema:
type: string
post:
summary: Send email confirmations for an already existing appointment
operationId: 'post_registrants_appointments_email_confirmation'
tags:
- Registrant Appointments
requestBody:
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/AppointmentEmailConfirmationRecipient'
security:
- JwtAuthorizer: []
responses:
200:
description: Email confirmations successfully sent.
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/emails/{email}/opted-status/':
parameters:
- in: path
name: email
required: true
schema:
type: string
get:
summary: Retrieve an opted status
operationId: 'get_registrants_opted_status_by_email'
tags:
- Registrant Opted-Status
security:
- JwtAuthorizer: []
responses:
200:
description: Opted-status found.
content:
application/json:
schema:
$ref: '#/components/schemas/OptedStatusRepresentation'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
put:
summary: Update an opted-status
operationId: 'put_registrants_opted_status_by_email'
description: >-
Update an opted-status. This will overwrite the existing opted-status for
that user with the one in the request payload. If the payload is not a valid
StatusEnum value ("Non-Opted", "Opted-In", or "Opted-Out"), the request will
be discarded as malformed.
tags:
- Registrant Opted-Status
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/OptedStatusRepresentation'
security:
- JwtAuthorizer: []
responses:
200:
description: Opted-status successfully updated.
content:
application/json:
schema:
$ref: '#/components/schemas/OptedStatusRepresentation'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
/projects/settings:
get:
summary: Retrieve a project's settings
operationId: 'get_project_settings'
tags:
- Project
security:
- JwtAuthorizer: []
responses:
200:
description: Settings for this project
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectSettings'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
500:
$ref: '#/components/responses/InternalServerError'
/projects/appointments:
get:
summary: Retrieves a project's appointments
operationId: 'get_project_appointments'
description: |
Fetches appointments for the project.
Paging: Use the `next` link to page through the available appointments.
Sort Order: Appointments are sorted by most recently created (largest appointmentId), with newest on top.
Page Limit: 1000 appointments per page is the maximum and also the default page limit if no initial cursor is specified.
tags:
- Project Appointments
parameters:
- $ref: '#/components/parameters/Cursor'
security:
- JwtAuthorizer: []
responses:
200:
description: >-
Fetches a list of appointments, sorted newest-first.
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectAppointments'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
500:
$ref: '#/components/responses/InternalServerError'
/inventory/search:
get:
summary: 'Search inventories by strataLot and inventoryNumber.'
operationId: 'get_inventory_search'
description: >-
This endpoint is optimized for speed with a smaller payload than `/inventory`.
This is handy for live search features, e.g. a drop-down with suggested results
for a search bar.
tags:
- Inventory
parameters:
- name: strataLot
in: query
schema:
type: string
description: '/inventory/search?strataLot=123'
- name: inventoryNumber
in: query
schema:
type: string
description: '/inventory/search?inventoryNumber=123'
security:
- JwtAuthorizer: []
responses:
200:
description: Inventories found
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/InventoryRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
500:
$ref: '#/components/responses/InternalServerError'
/inventory:
get:
summary: 'Returns a list of all inventories'
operationId: 'get_inventory'
tags:
- Inventory
security:
- JwtAuthorizer: []
responses:
200:
description: Inventories found
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/InventoryRead'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
500:
$ref: '#/components/responses/InternalServerError'
post:
tags:
- Inventory
summary: Create an inventory
operationId: 'post_inventory_search'
description: >-
Creates an inventory, if no component is specified the default is used.
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/InventoryCreate'
security:
- JwtAuthorizer: []
responses:
201:
description: Inventory created
content:
application/json:
schema:
$ref: '#/components/schemas/InventoryRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
409:
$ref: '#/components/responses/ErrorInventoryAlreadySynced'
500:
$ref: '#/components/responses/InternalServerError'
'/inventory/{inventoryId}':
parameters:
- in: path
name: inventoryId
schema:
type: string
required: true
description: "/inventory/123"
get:
tags:
- Inventory
summary: Get a single inventory
operationId: 'get_inventory_by_id'
security:
- JwtAuthorizer: []
responses:
200:
description: Return an inventory item
content:
application/json:
schema:
$ref: '#/components/schemas/InventoryFull'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
put:
tags:
- Inventory
summary: Update an inventory
operationId: 'put_inventory'
description: >-
Updates an inventory. Note that this will overwrite all of the inventory's
information with the entity provided in the request payload. To avoid accidentally
deleting existing information, first perform a GET on the same resource, then
modify the returned entity, then finally apply the entity through this PUT
method.
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/InventoryUpdate'
security:
- JwtAuthorizer: []
responses:
200:
description: Inventory updated
content:
application/json:
schema:
$ref: '#/components/schemas/InventoryRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
409:
$ref: '#/components/responses/ErrorInventoryAlreadySynced'
500:
$ref: '#/components/responses/InternalServerError'
delete:
tags:
- Inventory
summary: Delete an inventory
operationId: 'delete_inventory'
description: >-
Deletes an inventory, in order to remove an inventory it must have a status
of "Available" and not be "locked"
security:
- JwtAuthorizer: []
responses:
204:
description: Inventory deleted
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
409:
$ref: '#/components/responses/ErrorInventoryCannotBeDeleted'
500:
$ref: '#/components/responses/InternalServerError'
'/inventory/{inventoryId}/sync':
parameters:
- in: path
name: inventoryId
schema:
type: string
required: true
description: "/inventory/123/sync"
put:
tags:
- Inventory
summary: Sync an inventory
operationId: 'put_inventory_sync'
description: >-
Syncs an inventory item with Lasso. This can only be done once, afterwards
Lasso will reject any subsequent PUT request with a 409 error. This is done
to prevent accidental data loss in Lasso, as certain items may not be included
in the sync data.
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/InventorySync'
security:
- JwtAuthorizer: []
responses:
200:
description: Inventory updated
content:
application/json:
schema:
$ref: '#/components/schemas/InventoryFull'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
409:
$ref: '#/components/responses/ErrorInventoryAlreadySynced'
500:
$ref: '#/components/responses/InternalServerError'
'/inventory/{inventoryId}/reset':
parameters:
- in: path
name: inventoryId
schema:
type: string
required: true
description: "/inventory/123/reset"
post:
tags:
- Inventory
summary: >-
Reset an inventory items. Deletes all associated data with the inventory item,
e.g. pricing information, options and upgrades, deposits, etc.
operationId: 'post_inventory_reset'
security:
- JwtAuthorizer: []
responses:
200:
description: Inventory was successfully reset.
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/inventory/{inventoryId}/dates':
parameters:
- in: path
name: inventoryId
schema:
type: string
required: true
description: "/inventory/123/dates"
get:
tags:
- Inventory Dates
operationId: 'get_inventory_dates'
security:
- JwtAuthorizer: []
responses:
200:
description: Dates associated with this inventory
content:
application/json:
schema:
$ref: '#/components/schemas/Dates'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
put:
tags:
- Inventory Dates
operationId: 'put_inventory_dates'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Dates'
security:
- JwtAuthorizer: []
responses:
200:
description: Dates successfully updated
content:
application/json:
schema:
$ref: '#/components/schemas/Dates'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/inventory/{inventoryId}/pricing':
parameters:
- in: path
name: inventoryId
schema:
type: string
required: true
get:
tags:
- Inventory Pricing
operationId: 'get_inventory_pricing'
security:
- JwtAuthorizer: []
responses:
200:
description: Pricing associated with this inventory
content:
application/json:
schema:
$ref: '#/components/schemas/Pricing'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
put:
tags:
- Inventory Pricing
operationId: 'put_inventory_pricing'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/Pricing'
security:
- JwtAuthorizer: []
responses:
200:
description: Pricing successfully set
content:
application/json:
schema:
$ref: '#/components/schemas/Pricing'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/inventory/{inventoryId}/purchasers':
parameters:
- in: path
name: inventoryId
schema:
type: string
required: true
put:
tags:
- Inventory Purchasers
operationId: 'put_inventory_purchasers'
requestBody:
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PurchaserCreate'
security:
- JwtAuthorizer: []
responses:
200:
description: Purchasers successfully set
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Purchaser'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
get:
tags:
- Inventory Purchasers
operationId: 'get_inventory_purchasers'
security:
- JwtAuthorizer: []
responses:
200:
description: Purchasers associated with this inventory
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Purchaser'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/inventory/{inventoryId}/pricing-revisions':
parameters:
- in: path
name: inventoryId
schema:
type: string
required: true
get:
tags:
- Inventory Pricing Revisions
operationId: 'get_inventory_pricing_revisions'
security:
- JwtAuthorizer: []
responses:
200:
description: Pricing revisions associated with this inventory
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PricingRevision'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
post:
tags:
- Inventory Pricing Revisions
operationId: 'post_inventory_pricing_revisions'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PricingRevision'
security:
- JwtAuthorizer: []
responses:
201:
description: Add a pricing revision
content:
application/json:
schema:
$ref: '#/components/schemas/PricingRevision'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/inventory/plans':
get:
tags:
- Inventory Plan Types
description: >-
Get the plan types associated with this project
operationId: 'get_inventory_plans'
security:
- JwtAuthorizer: []
responses:
200:
description: Plan types associated with this project
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/PlanTypeRead'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
500:
$ref: '#/components/responses/InternalServerError'
post:
tags:
- Inventory Plan Types
description: >-
Create a new plan type for this project
operationId: 'post_inventory_plans'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PlanTypeWrite'
security:
- JwtAuthorizer: []
responses:
201:
description: Plan type created
content:
application/json:
schema:
$ref: '#/components/schemas/PlanTypeRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
500:
$ref: '#/components/responses/InternalServerError'
'/inventory/plans/{planTypeId}':
parameters:
- in: path
name: planTypeId
schema:
type: string
required: true
get:
tags:
- Inventory Plan Types
description: >-
Get a plan type associated with this project
operationId: 'get_inventory_plans_by_plan_id'
security:
- JwtAuthorizer: []
responses:
200:
description: Plan type associated with this project
content:
application/json:
schema:
$ref: '#/components/schemas/PlanTypeRead'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
put:
tags:
- Inventory Plan Types
description: >-
Update a plan type associated with this project
operationId: 'put_inventory_plans_by_plan_id'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PlanTypeWrite'
security:
- JwtAuthorizer: []
responses:
200:
description: Plan type updated
content:
application/json:
schema:
$ref: '#/components/schemas/PlanTypeRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
'/inventory/{inventoryId}/plans':
parameters:
- in: path
name: inventoryId
schema:
type: string
required: true
get:
tags:
- Inventory Plan Types
description: >-
Get the plan type associated with this inventory
operationId: 'get_inventory_plans_by_id'
security:
- JwtAuthorizer: []
responses:
200:
description: Plan type associated with this inventory
content:
application/json:
schema:
$ref: '#/components/schemas/PlanTypeRead'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
put:
tags:
- Inventory Plan Types
description: >-
Associate an inventory with a plan type by ID or by plan type. If both are
provided, then lookup will be by ID
operationId: 'put_inventory_plans_by_id'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/InventoryPlanTypeWrite'
security:
- JwtAuthorizer: []
responses:
200:
description: Plan type updated
content:
application/json:
schema:
$ref: '#/components/schemas/PlanTypeRead'
400:
$ref: '#/components/responses/BadRequest'
401:
$ref: '#/components/responses/Unauthorized'
403:
$ref: '#/components/responses/Forbidden'
404:
$ref: '#/components/responses/NotFound'
500:
$ref: '#/components/responses/InternalServerError'
components:
schemas:
Registrant:
title: Registrant
type: object
properties:
websiteTracking:
type: object
properties:
domainAccountId:
type: string
example: 'LAS-123456-01'
guid:
type: string
example: UID123
excludeFromTraffic:
type: boolean
description: Exclude this registrant from traffic reports
example: false
registrationDate:
type: string
format: datetime
description: When the registrant was created in the system. Dates are in
ISO 8601 UTC format.
example: '2017-08-31T21:18:39Z'
externalId:
type: string
example: 'ABC123'
description: >-
identifies this registrant in an externally linked system. The external
system is determined from the api key
externalDuplicateIds:
type: array
description: >-
a registrant that has been merged with another will inherit the other's
externalId. This list keeps track of all other externalId's linked to
this single registrant
items:
type: string
example: "DEF456"
person:
$ref: '#/components/schemas/RegistrantPersonalInfo'
rating:
$ref: '#/components/schemas/Rating'
sourceType:
$ref: '#/components/schemas/SourceType'
secondarySourceType:
$ref: '#/components/schemas/SecondarySourceType'
followUpProcess:
$ref: '#/components/schemas/FollowUpProcess'
assignedSalesReps:
type: array
items:
$ref: '#/components/schemas/SalesRepWrite'
questions:
type: array
items:
$ref: '#/components/schemas/Question'
RegistrantRead:
title: RegistrantRead
type: object
properties:
websiteTracking:
type: object
properties:
domainAccountId:
type: string
example: 'LAS-123456-01'
guid:
type: string
example: UID123
excludeFromTraffic:
type: boolean
description: Exclude this registrant from traffic reports
example: false
registrationDate:
type: string
format: datetime
description: When the registrant was created in the system. Dates are in
ISO 8601 UTC format.
example: '2017-08-31T21:18:39Z'
externalId:
type: string
example: 'ABC123'
description: >-
identifies this registrant in an externally linked system. The external
system is determined from the api key
externalDuplicateIds:
type: array
description: >-
a registrant that has been merged with another will inherit the other's
externalId. This list keeps track of all other externalId's linked to
this single registrant
items:
type: string
example: "DEF456"
person:
$ref: '#/components/schemas/RegistrantPersonalInfo'
rating:
$ref: '#/components/schemas/Rating'
sourceType:
$ref: '#/components/schemas/SourceType'
secondarySourceType:
$ref: '#/components/schemas/SecondarySourceType'
followUpProcess:
$ref: '#/components/schemas/FollowUpProcess'
assignedSalesReps:
type: array
items:
$ref: '#/components/schemas/SalesRepWrite'
questions:
type: array
items:
$ref: '#/components/schemas/Question'
registrantId:
type: string
example: 123
project:
$ref: '#/components/schemas/Project'
emails:
type: array
items:
$ref: '#/components/schemas/EmailRead'
phones:
type: array
items:
$ref: '#/components/schemas/PhoneRead'
addresses:
type: array
items:
$ref: '#/components/schemas/AddressRead'
history:
type: array
items:
$ref: '#/components/schemas/HistoryRead'
notes:
type: array
items:
$ref: '#/components/schemas/RegistrantNoteRead'
relationships:
type: array
items:
$ref: '#/components/schemas/RegistrantRelationshipRead'
appointments:
type: array
items:
$ref: '#/components/schemas/AppointmentRead'
_links:
$ref: '#/components/schemas/RegistrantLinks'
RegistrantAccepted:
type: object
title: RegistrantAccepted
properties:
registrantId:
type: string
example: 123
messages:
type: array
items:
$ref: '#/components/schemas/RegistrantCreateMessage'
_links:
$ref: '#/components/schemas/RegistrantLinks'
RegistrantCreateMessage:
type: object
title: RegistrantCreateMessage
properties:
message:
type: string
description: contains a message describing warnings and errors during processing
example: 'Warning: first name is greater than max size 20 and will be truncated'
RegistrantLinks:
type: object
properties:
self:
type: string
description: Link to the registrant
example: '/registrants/123'
update:
type: string
description: Link to update the registrant
example: '/registrants/123'
RegistrantPersonalInfo:
type: object
title: Registrant Personal Info
required:
- firstName
- lastName
properties:
personalId:
type: string
example: 1234
description: >-
Providing a personalId when creating a new registrant will attempt to
match and automatically merge the new registrant with an existing duplicate
nameTitle:
type: string
example: Mrs
firstName:
type: string
example: Jane
lastName:
type: string
example: Doe
company:
type: string
example: First Contracting
contactPreference:
type: string
description: How the registrant would like to be contacted
enum:
- noPreference
- any
- email
- mail
- phone
- text
- noEmail
- noContact
example: any
gender:
type: string
enum:
- unspecified
- male
- female
example: female
nickname:
type: string
example: Jane
birthday:
type: string
description: Contains only the month and day.
example: '08/14'
ssnSin:
type: string
description: >-
The social insurance number or social security number. Please ensure that
you are allowed to collect this information in your jurisdiction.
example: '046 454 286'
Project:
title: Project
type: object
properties:
name:
type: string
example: 'Birch Towers'
projectId:
type: string
example: 123
Rating:
type: object
title: Rating
description: If rating does not exist, it will be created
properties:
rating:
type: string
minLength: 1
maxLength: 50
example: A
SourceType:
type: object
title: Source Type
description: If the source type doesn't exist, it will be created
properties:
sourceType:
type: string
minLength: 1
maxLength: 100
example: 'Online Registration'
SecondarySourceType:
type: object
title: Secondary Source Type
description: If the secondary source type does not exist, it will be created
properties:
secondarySourceType:
type: string
minLength: 1
maxLength: 100
example: 'Facebook'
FollowUpProcess:
type: object
title: Follow-up Process
description: >-
If `followUpProcessId` is provided, the system will attempt to lookup the
process by id, and fail if not found. If `followUpProcessId` is not provided,
but `followUpProcess` is instead provided, the system will then attempt to
lookup the process by value. If the value doesn't exist, it will be created
properties:
followUpProcessId:
type: string
example: 1
followUpProcess:
type: string
minLength: 1
maxLength: 20
example: '30 day follow up'
ExternalId:
type: object
title: External ID
required:
- externalId
description: >-
Integration externalId associated with a registrant in Lasso
properties:
externalId:
type: string
example: '123ABC'
EmailRead:
type: object
title: Email Read
properties:
emailId:
type: string
example: 123
email:
type: string
example: 'test_registrant@lassocrm.com'
type:
type: string
example: 'Personal'
primary:
type: boolean
example: true
optedStatus:
type: string
enum:
- opted_in
- opted_out
- non_opted
example: opted_in
PhoneRead:
type: object
title: Phone Read
properties:
phoneId:
type: string
example: 123
phone:
type: string
example: '123-456-7890'
type:
type: string
example: 'Mobile'
primary:
type: boolean
example: true
AddressRead:
type: object
title: Address Read
properties:
addressId:
type: string
example: 123
address:
type: string
example: '350 Fifth Avenue'
city:
type: string
example: 'New York'
country:
type: string
example: 'USA'
state:
type: string
example: 'NY'
zipCode:
type: string
example: '10118'
type:
type: string
example: 'Mobile'
primary:
type: boolean
example: true
SalesRep:
type: object
title: SalesRep Generic Model
properties:
userId:
type: string
example: 123
firstName:
type: string
example: Lasso
lastName:
type: string
example: Autobot
isPrimary:
type: boolean
example: true
SalesRepWrite:
type: object
title: SalesRep Write Model
description: |
When inputting a salesRep, you can provide a userId and the system
will try to look up the salesRep by the ID.
If no userId is provided but a first and last name are, then
the system will lookup the salesRep by name and assign it to this registrant.
Otherwise, no salesRep will be assigned.
Notes:
- if multiple salesReps are being assigned, take care to only
choose one to be primary. If multiple are designated as primary, an error will
be returned
- on registrant create, if both rotationId and assignedSalesReps are specified,
assignedSalesReps will override rotationId in salesRep selection.
properties:
userId:
type: string
example: 123
firstName:
type: string
example: Lasso
lastName:
type: string
example: Autobot
isPrimary:
type: boolean
example: true
SalesRepRead:
type: object
title: SalesRep Read Model
description: >-
Describes a sales rep, typically assigned to a set of registrants.
properties:
userId:
type: string
example: 123
firstName:
type: string
example: Lasso
lastName:
type: string
example: Autobot
isPrimary:
type: boolean
example: true
Question:
type: object
title: Question
description: |
Questions in Lasso are sorted into folders. You can use `path` to
specify which folder the question should be saved to.
Specifying the questionId will override name and path and the
question will be looked up by its ID. If no question is found the
question is *not* created and the request fails.
Any existing registrant answers to the question will be replaced by the
answers from this request. Existing answer options on the question will
not be removed.
If the question does not exist and no question ID is provided, a new
question will be created. If the path is empty, the question will be
created in a folder named after the API key vendor type - ie, `lassoLeadCapture`.
The possible answer options are created for each answer provided in the
`answer` key. Only question type `checkbox` supports multiple answers. All
of them will be marked as checked for the registrant.
properties:
questionId:
type: string
description: >-
Specifies precisely which question
example: 123
type:
type: string
description: |
If the question does not exist, this defines which type of question is
going to be created. Defaults to type `Text`. Available types are:
- Checkbox
Multiple possible answers, and multiple set answers
- Text
Only one possible answer which is freeform text
- Date
Only one possible answer, a date in the ISO 8601 UTC format
- Single Select
Only one possible answer from a set of answers
- Multi Select
Multiple possible answers from a set of answers
enum:
- checkbox
- text
- single_select
- multi_select
- date
example: checkbox
name:
type: string
example: How did you hear about us?
maxLength: 100
path:
type: string
description: >-
Specify which folder the question is in. Format: `/folder/subfolder`.
If no path is given, the `integrations` folder will be used.
example: /marketing/inbound
maxLength: 40
answers:
type: array
items:
$ref: '#/components/schemas/Answer'
Answers:
type: object
title: Question Answers
description: Represents a collection of answers for a question
properties:
answers:
type: array
items:
$ref: '#/components/schemas/Answer'
Answer:
type: object
title: Question Answer
description: Represents an answer for a question for the registrant
properties:
answerId:
type: string
description: >-
Specifies the answer by id. If present, `answer` will be ignored. If no
answer matches `answerId` the answer will be looked-up by its answer string.
example: 123
answer:
type: string
description: >-
If no `answerId` is given, the answer will be looked-up by its answer
string. If no answer with the given answer string exists, the answer will
be created.
example: 'Recommended by a friend'
HistoryWithoutContent:
type: object
description: >-
History tracks communication with the registrant. Various types of history
items are supported, e.g. emails, phone call or appointments. The content
for history items is limited to the first 200 characters, as emails may grow
very large and include embedded content (e.g. images) that makes transferring
all history content at once unfeasible. If you need the full content for any
given history item, you can request it from the `self` link.
properties:
type:
type: string
description: >
Clients can create their own history types, so an exhaustive list of available
history items is currently not available. Defaults:
Appointment Cancelled Appointment Email Email Reply Fax Mail Mass Mail
Merge Opted-Out Phone - Left Message Return Visit SSRU Visit
example: Email
typeId:
type: string
description: ID of the history type (could be client-created)
example: 123
subject:
type: string
description: Short summary of history item
example: 'Welcome to Birch Towers'
date:
type: string
format: datetime
description: When the history item was received, e.g. send-date for email
example: '2017-08-31T21:18:39Z'
createdBy:
$ref: '#/components/schemas/Creator'
_links:
type: object
properties:
self:
type: string
example: '/registrants/123/history/123'
HistoryRead:
type: object
title: History Read Item
properties:
type:
type: string
description: >
Clients can create their own history types, so an exhaustive list of available
history items is currently not available. Defaults:
Appointment Cancelled Appointment Email Email Reply Fax Mail Mass Mail
Merge Opted-Out Phone - Left Message Return Visit SSRU Visit
example: Email
typeId:
type: string
description: ID of the history type (could be client-created)
example: 123
subject:
type: string
description: Short summary of history item
example: 'Welcome to Birch Towers'
date:
type: string
format: datetime
description: When the history item was received, e.g. send-date for email
example: '2017-08-31T21:18:39Z'
createdBy:
$ref: '#/components/schemas/Creator'
_links:
type: object
properties:
self:
type: string
example: '/registrants/123/history/123'
historyId:
type: string
example: 123
RegistrantNoteRead:
type: object
title: Note Read
description: Contains a free-form text field
properties:
noteId:
type: string
example: 123
note:
type: string
example: Offer a $10.000 credit
createdBy:
$ref: '#/components/schemas/Creator'
_links:
$ref: '#/components/schemas/RegistrantNoteLinks'
RegistrantNoteLinks:
type: object
properties:
delete:
type: string
example: '/registrants/123/notes/123'
RegistrantRelationshipRead:
type: object
title: Relationship Read
description: Contains a registrant's relationships
properties:
relationshipId:
type: string
example: 123
registrantId:
type: string
example: 456
relationship:
type: string
example: Wife
reverse:
type: string
example: Husband
firstName:
type: string
example: John
lastName:
type: string
example: Doe
Creator:
type: object
title: Creator
description: |
Determines the user that created this entity based on an ordered set of Heuristics:
- if creator is null or empty, then default to user: Lasso Autobot
- if userId is provided, then lookup user by id, respond with 400 level error if specified user does not exist
- if user first and last name are provided, then lookup user by name, otherwise default to user: Lasso Autobot
properties:
firstName:
type: string
example: John
lastName:
type: string
example: Smith
userId:
type: string
example: 123
EmailTemplateMetadata:
type: object
title: Email Template Metadata
description: |
Size conservative metadata representation of Email Template i.e. no content body
properties:
templateId:
type: string
example: 123
folderId:
type: string
example: 123
name:
type: string
example: 'Welcoming email'
subject:
type: string
example: 'You are offically welcomed'
AppointmentRegistrant:
type: object
title: Appointment Registrant
description: >-
This model is a subset of `RegistrantRead`, which describes a minimal set
of details of an appointment registrant. Use the `GET /registrants/{registrantId}`
route to get full details on this registrant.
properties:
registrantId:
type: string
example: '123'
person:
$ref: '#/components/schemas/RegistrantPersonalInfo'
project:
$ref: '#/components/schemas/Project'
emails:
type: array
items:
$ref: '#/components/schemas/EmailRead'
phones:
type: array
items:
$ref: '#/components/schemas/PhoneRead'
addresses:
type: array
items:
$ref: '#/components/schemas/AddressRead'
assignedSalesReps:
type: array
items:
$ref: '#/components/schemas/SalesRepRead'
_links:
$ref: '#/components/schemas/RegistrantLinks'
Appointment:
type: object
title: Appointment
description: >-
Describes the basic details of a scheduled appointment.
Limitations: Note that only the appointment's registrant as well as their
assigned sales reps are described here. Additional attendee information that
is not described here, are those that were sent out calendar invites, as well
as any SMS text message reminder recipients.
properties:
name:
type: string
example: 'Design Center Selections'
description:
type: string
example: 'Come on in and make it yours'
details:
type: string
example: 'Appointment to make selection'
startTime:
type: string
format: datetime
description: When the appointment is scheduled to start. Datetimes are in
ISO-8601 UTC format.
example: '2019-01-31T18:30:00Z'
endTime:
type: string
format: datetime
description: When the appointment is scheduled to end. Datetimes are in
ISO-8601 UTC format.
example: '2019-01-31T19:30:00Z'
location:
type: string
example: '4601 US-377, Brownwood, TX 76801, United States'
isPublic:
type: boolean
example: false
status:
type: string
enum:
- Open
- Tentative
- Confirmed
- Cancelled
- Completed
- No Show
AppointmentEmailConfirmationRecipient:
type: object
title: Appointment Confirmation Recipient
required:
- email
properties:
firstName:
type: string
example: John
lastName:
type: string
example: Smith
email:
type: string
minLength: 1
maxLength: 50
example: 'test_registrant@lassocrm.com'
AppointmentSmsReminderRecipient:
type: object
title: AppointmentReminderRecipient
properties:
phone:
type: string
minLength: 1
maxLength: 20
example: '123-456-7890'
message:
type: string
example: 'Del Boca Vista: your appt is Today at 9:45 am with Andrew. Call
123.456.7890 to contact us. Reply STOP to opt out'
AppointmentRead:
title: Appointment Read
type: object
properties:
name:
type: string
example: 'Design Center Selections'
description:
type: string
example: 'Come on in and make it yours'
details:
type: string
example: 'Appointment to make selection'
startTime:
type: string
format: datetime
description: When the appointment is scheduled to start. Datetimes are in
ISO-8601 UTC format.
example: '2019-01-31T18:30:00Z'
endTime:
type: string
format: datetime
description: When the appointment is scheduled to end. Datetimes are in
ISO-8601 UTC format.
example: '2019-01-31T19:30:00Z'
location:
type: string
example: '4601 US-377, Brownwood, TX 76801, United States'
isPublic:
type: boolean
example: false
status:
type: string
enum:
- Open
- Tentative
- Confirmed
- Cancelled
- Completed
- No Show
appointmentId:
type: string
example: '123'
scheduledSmsReminders:
type: array
items:
$ref: '#/components/schemas/AppointmentSmsReminderRecipient'
createdBy:
$ref: '#/components/schemas/Creator'
_links:
$ref: '#/components/schemas/AppointmentLinks'
AppointmentLinks:
type: object
properties:
self:
type: string
description: Link to the appointment
example: '/registrants/456/appointments/123'
update:
type: string
description: Link to update the appointment
example: '/registrants/456/appointments/123'
delete:
type: string
description: Link to delete the appointment
example: '/registrants/456/appointments/123'
StandardError:
type: object
title: Standard Error
description: >-
A standard error response format.
properties:
errorCode:
type: integer
example: 4xx
error:
type: string
description: A summary of the error
example: A summary of the error
errorMessage:
type: string
description: Details of the error
example: Details of the error
RegistrantWebhookEvent:
title: Registrant Webhook Event
type: object
description: >
This format describes a webhook event that is fired off to an external system
when an action is performed on a registrant. It is an envelope that wraps
the RegistrantRead entity, as well as containing additional metadata.
properties:
timestamp:
type: string
format: datetime
example: '2017-08-31T21:18:39Z'
description: the time of the event in ISO 8601 UTC format
id:
type: string
example: '123'
description: >-
The Lasso registrantId. This is useful in case the enclosed entity is
null (ie, on a deleted event)
externalId:
type: string
example: '345'
description: >-
The external integrated system's ID associated to this registrant. This
is the same externalId found in RegistrantRead.externalId. This is useful
in case the enclosed entity is null (ie, on a deleted event)
action:
type: string
enum:
- inserted
- deleted
- updated
example: 'updated'
description: >-
Describes the action that took place on the registrant that triggered
this event. On 'inserted' and 'updated', the 'entity' field will be set.
On 'deleted', the 'entity' field will not be set.
customParams:
type: array
description: >-
Static custom values that are passed through from the webhook configuration.
These values are manually set on the webhook configuration page. They
can be useful for mapping a webhook event to a specific value that's meaningful
in another system. For example, if the external system has the concept
of a "community", then a unique community ID can be set at the Lasso project-level
webhook configuration. Then, any events on registrants to that project
will propagate this unique community ID with the webhook event. The external
system could then use this community ID to map the event to.
items:
type: object
properties:
key:
type: string
example: 'communityId'
value:
type: string
example: '12345'
changed:
type: array
description: >-
On update events, lists the RegistrantRead field names that triggered
this webhook. Empty on inserted and deleted events. Only the following
field names may appear: person, rating, excludeFromTraffic, registrationDate,
followUpProcess, sourceType, secondarySourceType, questions, notes, assignedSalesReps,
history. Changes to person include personal info, emails, phones, addresses,
and relationships. Internal metadata changes (status, LastModified, activities,
emailOptedStatus) trigger webhooks but are not included in this list.
items:
type: string
example:
- person
- rating
entity:
$ref: '#/components/schemas/RegistrantRead'
RegistrantWrite:
title: RegistrantWrite
type: object
properties:
websiteTracking:
type: object
properties:
domainAccountId:
type: string
example: 'LAS-123456-01'
guid:
type: string
example: UID123
excludeFromTraffic:
type: boolean
description: Exclude this registrant from traffic reports
example: false
registrationDate:
type: string
format: datetime
description: When the registrant was created in the system. Dates are in
ISO 8601 UTC format.
example: '2017-08-31T21:18:39Z'
externalId:
type: string
example: 'ABC123'
description: >-
identifies this registrant in an externally linked system. The external
system is determined from the api key
externalDuplicateIds:
type: array
description: >-
a registrant that has been merged with another will inherit the other's
externalId. This list keeps track of all other externalId's linked to
this single registrant
items:
type: string
example: "DEF456"
person:
$ref: '#/components/schemas/RegistrantPersonalInfo'
rating:
$ref: '#/components/schemas/Rating'
sourceType:
$ref: '#/components/schemas/SourceType'
secondarySourceType:
$ref: '#/components/schemas/SecondarySourceType'
followUpProcess:
$ref: '#/components/schemas/FollowUpProcess'
assignedSalesReps:
type: array
items:
$ref: '#/components/schemas/SalesRepWrite'
questions:
type: array
items:
$ref: '#/components/schemas/Question'
emails:
type: array
items:
$ref: '#/components/schemas/EmailWrite'
phones:
type: array
items:
$ref: '#/components/schemas/PhoneWrite'
addresses:
type: array
items:
$ref: '#/components/schemas/AddressWrite'
history:
type: array
items:
$ref: '#/components/schemas/HistoryWrite'
notes:
type: array
items:
$ref: '#/components/schemas/RegistrantNoteWrite'
sendSalesRepAssignmentNotification:
type: boolean
example: true
thankYouEmailTemplateId:
type: string
example: 123
sendOptInEmail:
type: boolean
example: true
rotationId:
type: string
description: >-
Assign a sales rep from next in rotation. assignedSalesReps override rotationId
example: 1
automaticallyMerge:
type: boolean
example: true
description: "Set this directive to true to tell the system to look for\
\ and merge this new lead with an existing\nduplicate registrant. Defaults\
\ to true if not set. \n\nA duplicate registrant will be matched according\
\ to these criteria: (in order of precedence)\n- Match by personalId provided\
\ in `RegistrantWrite.personalId`\n- Match by email provided in `RegistrantWrite.emails[].email`\
\ (if multiple emails, then match at least one)\n- Match by phone provided\
\ in `RegistrantWrite.phones[].phone` (if multiple phones, then match\
\ at least one)\n"
_links:
$ref: '#/components/schemas/RegistrantLinks'
ContactInformation:
type: object
title: Contact Information
required:
- firstName
- lastName
properties:
personalId:
type: string
example: 1234
nameTitle:
type: string
example: Mrs
firstName:
type: string
example: Jane
lastName:
type: string
example: Doe
company:
type: string
example: First Contracting
contactPreference:
type: string
description: How the registrant would like to be contacted
enum:
- noPreference
- any
- email
- mail
- phone
- text
- noEmail
- noContact
example: any
gender:
type: string
enum:
- unspecified
- male
- female
example: female
nickname:
type: string
example: Jane
birthday:
type: string
description: Contains only the month and day.
example: '08/14'
emails:
type: array
items:
$ref: '#/components/schemas/Email'
phones:
type: array
items:
$ref: '#/components/schemas/Phone'
addresses:
type: array
items:
$ref: '#/components/schemas/Address'
EmailWrite:
type: object
title: Email Write
properties:
email:
type: string
minLength: 1
maxLength: 50
example: 'test_registrant@lassocrm.com'
type:
type: string
minLength: 0
maxLength: 25
example: 'Personal'
primary:
type: boolean
example: true
Email:
type: object
title: Email
properties:
email:
type: string
minLength: 1
maxLength: 50
example: 'test_registrant@lassocrm.com'
type:
type: string
minLength: 0
maxLength: 25
example: 'Personal'
primary:
type: boolean
description: there can be only one primary email in a non-empty collection
of emails
example: true
PhoneWrite:
type: object
title: Phone Write
properties:
phone:
type: string
minLength: 1
maxLength: 20
example: '123-456-7890'
type:
type: string
minLength: 0
maxLength: 25
example: 'Mobile'
primary:
type: boolean
example: true
Phone:
type: object
title: Phone
properties:
phone:
type: string
minLength: 1
maxLength: 20
example: '123-456-7890'
type:
type: string
minLength: 0
maxLength: 25
example: 'Mobile'
primary:
type: boolean
description: there can be only one primary phone in a non-empty collection
of phones
example: true
AddressWrite:
type: object
title: Address Write
properties:
address:
type: string
example: '350 Fifth Avenue'
city:
type: string
example: 'New York'
country:
type: string
example: 'USA'
state:
type: string
example: 'NY'
zipCode:
minLength: 0
maxLength: 15
type: string
example: '10118'
type:
type: string
example: 'Mobile'
primary:
type: boolean
example: true
Address:
type: object
title: Address
properties:
address:
type: string
example: '350 Fifth Avenue'
city:
type: string
example: 'New York'
country:
type: string
example: 'USA'
state:
type: string
example: 'NY'
zipCode:
type: string
example: '10118'
type:
type: string
example: 'Mobile'
primary:
type: boolean
description: there can be only one primary address in a non-empty collection
of addresses
example: true
HistoryWrite:
type: object
title: History Write Item
properties:
type:
type: string
description: >
Clients can create their own history types, so an exhaustive list of available
history items is currently not available. Defaults:
Appointment Cancelled Appointment Email Email Reply Fax Mail Mass Mail
Merge Opted-Out Phone - Left Message Return Visit SSRU Visit
example: Email
typeId:
type: string
description: ID of the history type (could be client-created)
example: 123
subject:
type: string
description: Short summary of history item
example: 'Welcome to Birch Towers'
date:
type: string
format: datetime
description: When the history item was received, e.g. send-date for email
example: '2017-08-31T21:18:39Z'
createdBy:
$ref: '#/components/schemas/Creator'
_links:
type: object
properties:
self:
type: string
example: '/registrants/123/history/123'
body:
type: string
description: |
Full content of history item. For emails, this may include
serialized attachments, which may lead to a large payload.
Limitations: 4-byte UTF-8 characters are not supported and will be stripped during write.
This means that some emoticons and foreign language characters are unsupported.
HistoryReadFull:
type: object
title: History Read With Full Content
properties:
type:
type: string
description: >
Clients can create their own history types, so an exhaustive list of available
history items is currently not available. Defaults:
Appointment Cancelled Appointment Email Email Reply Fax Mail Mass Mail
Merge Opted-Out Phone - Left Message Return Visit SSRU Visit
example: Email
typeId:
type: string
description: ID of the history type (could be client-created)
example: 123
subject:
type: string
description: Short summary of history item
example: 'Welcome to Birch Towers'
date:
type: string
format: datetime
description: When the history item was received, e.g. send-date for email
example: '2017-08-31T21:18:39Z'
createdBy:
$ref: '#/components/schemas/Creator'
_links:
type: object
properties:
self:
type: string
example: '/registrants/123/history/123'
historyId:
type: string
example: 123
body:
type: string
description: >-
Full content of history item. For emails, this may include serialized
attachments, which may lead to a large payload.
RegistrantNoteWrite:
type: object
title: Note Write
description: |
Contains a free-form text field.
Limitations: 4-byte UTF-8 characters are not supported and will be stripped during write.
This means that some emoticons and foreign language characters are unsupported.
properties:
note:
type: string
example: Offer a $10.000 credit
createdBy:
$ref: '#/components/schemas/Creator'
_links:
$ref: '#/components/schemas/RegistrantNoteLinks'
RegistrantRelationshipCreate:
type: object
title: Relationship Create
required:
- registrantId
description: Data for creating a relationship
properties:
registrantId:
type: string
example: 456
description: >-
Identifies the registrant related to this registrant.
relationship:
type: string
example: Realtor
description: >-
The related registrant's relationship to this registrant.
RegistrantRelationshipUpdate:
type: object
title: Relationship Update
description: Data for updating a relationship
properties:
relationship:
type: string
example: Realtor
description: >-
The related registrant's relationship to this registrant.
RegistrantWebsiteTrackingRequired:
type: object
required:
- domainAccountId
- guid
properties:
domainAccountId:
type: string
example: 'LAS-123456-01'
guid:
type: string
example: UID123
AppointmentCreate:
type: object
title: Appointment Create
required:
- name
- startTime
- endTime
properties:
name:
type: string
example: 'Design Center Selections'
description:
type: string
example: 'Come on in and make it yours'
details:
type: string
example: 'Appointment to make selection'
startTime:
type: string
format: datetime
description: When the appointment is scheduled to start. Datetimes are in
ISO-8601 UTC format.
example: '2019-01-31T18:30:00Z'
endTime:
type: string
format: datetime
description: When the appointment is scheduled to end. Datetimes are in
ISO-8601 UTC format.
example: '2019-01-31T19:30:00Z'
location:
type: string
example: '4601 US-377, Brownwood, TX 76801, United States'
isPublic:
type: boolean
example: false
status:
type: string
enum:
- Open
- Tentative
- Confirmed
- Cancelled
- Completed
- No Show
sendEmailConfirmation:
type: array
items:
$ref: '#/components/schemas/AppointmentEmailConfirmationRecipient'
scheduledSmsReminders:
type: array
items:
$ref: '#/components/schemas/AppointmentSmsReminderRecipient'
createdBy:
$ref: '#/components/schemas/Creator'
AppointmentUpdate:
type: object
title: Appointment Update
required:
- name
- startTime
- endTime
properties:
name:
type: string
example: 'Design Center Selections'
description:
type: string
example: 'Come on in and make it yours'
details:
type: string
example: 'Appointment to make selection'
startTime:
type: string
format: datetime
description: When the appointment is scheduled to start. Datetimes are in
ISO-8601 UTC format.
example: '2019-01-31T18:30:00Z'
endTime:
type: string
format: datetime
description: When the appointment is scheduled to end. Datetimes are in
ISO-8601 UTC format.
example: '2019-01-31T19:30:00Z'
location:
type: string
example: '4601 US-377, Brownwood, TX 76801, United States'
isPublic:
type: boolean
example: false
status:
type: string
enum:
- Open
- Tentative
- Confirmed
- Cancelled
- Completed
- No Show
scheduledSmsReminders:
type: array
items:
$ref: '#/components/schemas/AppointmentSmsReminderRecipient'
createdBy:
$ref: '#/components/schemas/Creator'
OptedStatusRepresentation:
type: object
title: The representation of the opted-status for an e-mail
properties:
status:
type: string
enum:
- Non-Opted
- Opted-In
- Opted-Out
description: This registrant's opted-status value
ProjectSettings:
type: object
title: ProjectSettings
properties:
project:
$ref: '#/components/schemas/Project'
websiteTracking:
type: array
items:
$ref: '#/components/schemas/ProjectWebsiteTracking'
rotations:
type: array
items:
$ref: '#/components/schemas/ProjectRotation'
salesReps:
type: array
items:
$ref: '#/components/schemas/ProjectSalesRep'
sourceTypes:
type: array
items:
$ref: '#/components/schemas/ProjectSourceType'
secondarySourceTypes:
type: array
items:
$ref: '#/components/schemas/ProjectSecondarySourceType'
ratings:
type: array
items:
$ref: '#/components/schemas/ProjectRating'
followUpProcesses:
type: array
items:
$ref: '#/components/schemas/FollowUpProcess'
questions:
type: array
items:
$ref: '#/components/schemas/Question'
autoReplyTemplates:
type: array
items:
$ref: '#/components/schemas/EmailTemplateMetadata'
ProjectWebsiteTracking:
type: object
title: Website Tracking
properties:
domainAccountId:
type: string
example: 'LAS-123456-01'
domain:
type: string
example: 'http://example.com/'
ProjectRotation:
type: object
title: Rotation
properties:
rotationId:
type: string
example: 123
rotationName:
type: string
example: 'Newsletter'
ProjectSourceType:
type: object
title: Source Type
properties:
sourceTypeId:
type: string
example: 123
sourceType:
type: string
example: 'Online Registration'
ProjectSecondarySourceType:
type: object
title: Secondary Source Type
properties:
secondarySourceTypeId:
type: string
example: 123
secondarySourceType:
type: string
example: 'Facebook'
ProjectRating:
type: object
title: Rating
properties:
ratingId:
type: string
example: 123
rating:
type: string
example: 'A'
ProjectSalesRep:
type: object
title: Sales Rep
properties:
userId:
type: string
example: 123
firstName:
type: string
example: 'Lasso'
lastName:
type: string
example: 'Autobot'
email:
type: string
example: 'john.smith@example.com'
phone:
type: string
example: '123-456-7890'
ProjectAppointment:
title: Project Appointment
type: object
properties:
name:
type: string
example: 'Design Center Selections'
description:
type: string
example: 'Come on in and make it yours'
details:
type: string
example: 'Appointment to make selection'
startTime:
type: string
format: datetime
description: When the appointment is scheduled to start. Datetimes are in
ISO-8601 UTC format.
example: '2019-01-31T18:30:00Z'
endTime:
type: string
format: datetime
description: When the appointment is scheduled to end. Datetimes are in
ISO-8601 UTC format.
example: '2019-01-31T19:30:00Z'
location:
type: string
example: '4601 US-377, Brownwood, TX 76801, United States'
isPublic:
type: boolean
example: false
status:
type: string
enum:
- Open
- Tentative
- Confirmed
- Cancelled
- Completed
- No Show
appointmentId:
type: string
example: '123'
owner:
$ref: '#/components/schemas/Creator'
registrant:
$ref: '#/components/schemas/AppointmentRegistrant'
ProjectAppointments:
type: object
title: Project Appointments
properties:
items:
type: array
items:
$ref: '#/components/schemas/ProjectAppointment'
links:
type: object
properties:
next:
type: string
description: Link to the next page of appointments
example: '/appointments?cursor=ewogICJ2IjogIjEuMCIsCiAgIm8iOiAiMTIzIiwKICAibCI6ICIxMDAiCn0='
Inventory:
title: Inventory
type: object
properties:
statusOverwrite:
type: string
description: >-
Current status of inventory. Will default to existing value if not provided.
enum:
- Available
- Unavailable
- Reserved
- Subject
- Firm
- Firm(R)
- Offer
- Closed
example: Available
plan:
type: string
example: 'E2'
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
squareFootage:
type: number
example: 1251
description: >-
Will default to existing value if not provided.
patioSquareFootage:
type: number
example: 70
description: >-
Will default to existing value if not provided.
colorScheme:
type: string
example: 'Beige'
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
maintenanceFee:
type: number
example: '351.12'
description: >-
Will default to existing value if not provided.
floor:
type: number
example: 11
description: >-
Will default to existing value if not provided.
bedrooms:
type: string
example: 2 Bedroom + Den
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
bathrooms:
type: string
example: 2 1/2
description: >-
Will default to existing value if not provided.
direction:
type: string
example: SE
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
exposure:
type: string
example: South East
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
definition:
type: string
enum:
- Unit
- Townhome
- Lot
- Homesite
example: Unit
description: >-
Will default to existing value if not provided.
dates:
$ref: '#/components/schemas/Dates'
pricing:
$ref: '#/components/schemas/Pricing'
_links:
type: object
properties:
self:
type: string
example: '/inventory/123-123'
delete:
type: string
example: '/inventory/123-123'
InventoryCreate:
title: InventoryCreate
required:
- strataLot
- inventoryNumber
properties:
statusOverwrite:
type: string
description: >-
Current status of inventory. Will default to existing value if not provided.
enum:
- Available
- Unavailable
- Reserved
- Subject
- Firm
- Firm(R)
- Offer
- Closed
example: Available
plan:
type: string
example: 'E2'
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
squareFootage:
type: number
example: 1251
description: >-
Will default to existing value if not provided.
patioSquareFootage:
type: number
example: 70
description: >-
Will default to existing value if not provided.
colorScheme:
type: string
example: 'Beige'
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
maintenanceFee:
type: number
example: '351.12'
description: >-
Will default to existing value if not provided.
floor:
type: number
example: 11
description: >-
Will default to existing value if not provided.
bedrooms:
type: string
example: 2 Bedroom + Den
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
bathrooms:
type: string
example: 2 1/2
description: >-
Will default to existing value if not provided.
direction:
type: string
example: SE
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
exposure:
type: string
example: South East
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
definition:
type: string
enum:
- Unit
- Townhome
- Lot
- Homesite
example: Unit
description: >-
Will default to existing value if not provided.
dates:
$ref: '#/components/schemas/Dates'
pricing:
$ref: '#/components/schemas/Pricing'
_links:
type: object
properties:
self:
type: string
example: '/inventory/123-123'
delete:
type: string
example: '/inventory/123-123'
component:
$ref: '#/components/schemas/Component'
strataLot:
type: string
example: 123
inventoryNumber:
type: string
example: 123
InventoryUpdate:
title: InventoryUpdate
properties:
statusOverwrite:
type: string
description: >-
Current status of inventory. Will default to existing value if not provided.
enum:
- Available
- Unavailable
- Reserved
- Subject
- Firm
- Firm(R)
- Offer
- Closed
example: Available
plan:
type: string
example: 'E2'
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
squareFootage:
type: number
example: 1251
description: >-
Will default to existing value if not provided.
patioSquareFootage:
type: number
example: 70
description: >-
Will default to existing value if not provided.
colorScheme:
type: string
example: 'Beige'
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
maintenanceFee:
type: number
example: '351.12'
description: >-
Will default to existing value if not provided.
floor:
type: number
example: 11
description: >-
Will default to existing value if not provided.
bedrooms:
type: string
example: 2 Bedroom + Den
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
bathrooms:
type: string
example: 2 1/2
description: >-
Will default to existing value if not provided.
direction:
type: string
example: SE
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
exposure:
type: string
example: South East
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
definition:
type: string
enum:
- Unit
- Townhome
- Lot
- Homesite
example: Unit
description: >-
Will default to existing value if not provided.
dates:
$ref: '#/components/schemas/Dates'
pricing:
$ref: '#/components/schemas/Pricing'
_links:
type: object
properties:
self:
type: string
example: '/inventory/123-123'
delete:
type: string
example: '/inventory/123-123'
strataLot:
type: string
example: 123
minLength: 1
maxLength: 15
inventoryNumber:
type: string
example: 123
minLength: 1
maxLength: 11
InventoryRead:
title: InventoryRead
properties:
statusOverwrite:
type: string
description: >-
Current status of inventory. Will default to existing value if not provided.
enum:
- Available
- Unavailable
- Reserved
- Subject
- Firm
- Firm(R)
- Offer
- Closed
example: Available
plan:
type: string
example: 'E2'
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
squareFootage:
type: number
example: 1251
description: >-
Will default to existing value if not provided.
patioSquareFootage:
type: number
example: 70
description: >-
Will default to existing value if not provided.
colorScheme:
type: string
example: 'Beige'
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
maintenanceFee:
type: number
example: '351.12'
description: >-
Will default to existing value if not provided.
floor:
type: number
example: 11
description: >-
Will default to existing value if not provided.
bedrooms:
type: string
example: 2 Bedroom + Den
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
bathrooms:
type: string
example: 2 1/2
description: >-
Will default to existing value if not provided.
direction:
type: string
example: SE
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
exposure:
type: string
example: South East
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
definition:
type: string
enum:
- Unit
- Townhome
- Lot
- Homesite
example: Unit
description: >-
Will default to existing value if not provided.
dates:
$ref: '#/components/schemas/Dates'
pricing:
$ref: '#/components/schemas/Pricing'
_links:
type: object
properties:
self:
type: string
example: '/inventory/123-123'
delete:
type: string
example: '/inventory/123-123'
inventoryId:
type: string
description: Lasso-internal inventory ID
example: 123
component:
$ref: '#/components/schemas/Component'
project:
$ref: '#/components/schemas/Project'
strataLot:
type: string
example: 123
inventoryNumber:
type: string
example: 123
Component:
title: Component
type: object
properties:
name:
type: string
example: 'Birch Towers'
componentId:
type: string
example: 123
InventorySync:
title: InventorySync
properties:
statusOverwrite:
type: string
description: >-
Current status of inventory. Will default to existing value if not provided.
enum:
- Available
- Unavailable
- Reserved
- Subject
- Firm
- Firm(R)
- Offer
- Closed
example: Available
plan:
type: string
example: 'E2'
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
squareFootage:
type: number
example: 1251
description: >-
Will default to existing value if not provided.
patioSquareFootage:
type: number
example: 70
description: >-
Will default to existing value if not provided.
colorScheme:
type: string
example: 'Beige'
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
maintenanceFee:
type: number
example: '351.12'
description: >-
Will default to existing value if not provided.
floor:
type: number
example: 11
description: >-
Will default to existing value if not provided.
bedrooms:
type: string
example: 2 Bedroom + Den
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
bathrooms:
type: string
example: 2 1/2
description: >-
Will default to existing value if not provided.
direction:
type: string
example: SE
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
exposure:
type: string
example: South East
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
definition:
type: string
enum:
- Unit
- Townhome
- Lot
- Homesite
example: Unit
description: >-
Will default to existing value if not provided.
dates:
$ref: '#/components/schemas/Dates'
pricing:
$ref: '#/components/schemas/Pricing'
_links:
type: object
properties:
self:
type: string
example: '/inventory/123-123'
delete:
type: string
example: '/inventory/123-123'
revisions:
type: array
items:
$ref: '#/components/schemas/PricingRevision'
notes:
type: array
items:
$ref: '#/components/schemas/Note'
subjects:
type: array
items:
$ref: '#/components/schemas/Subject'
deposits:
type: array
items:
$ref: '#/components/schemas/Deposit'
realtors:
type: array
description: >-
Realtors associated with the inventory. Only a realtor's compensation
may be updated, all non compensation fields will be ignored.
items:
$ref: '#/components/schemas/Realtor'
bicycleLockers:
type: array
items:
$ref: '#/components/schemas/BicycleLocker'
storageLockers:
type: array
items:
$ref: '#/components/schemas/StorageLocker'
parkingStalls:
type: array
items:
$ref: '#/components/schemas/ParkingStall'
assignedSalesReps:
type: array
description: Assigned sales reps to this inventory
items:
$ref: '#/components/schemas/InventorySalesRep'
salesReps:
type: array
items:
type: string
description: Name of sales rep. Deprecated, use `assignedSalesReps` instead
example: 'John Smith'
deprecated: true
purchasers:
type: array
description: >-
List of registrant IDs to associate as purchasers with this inventory.
Use the registrant create route to create a registrant if it does not
exist yet.
example: [123, 456]
items:
type: string
options:
type: array
items:
$ref: '#/components/schemas/Option'
InventorySalesRep:
type: object
title: SalesRep Read Model
description: >-
Describes a sales rep.
properties:
firstName:
type: string
example: 'John'
lastName:
type: string
example: 'Doe'
InventoryFull:
title: InventoryFull
properties:
statusOverwrite:
type: string
description: >-
Current status of inventory. Will default to existing value if not provided.
enum:
- Available
- Unavailable
- Reserved
- Subject
- Firm
- Firm(R)
- Offer
- Closed
example: Available
plan:
type: string
example: 'E2'
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
squareFootage:
type: number
example: 1251
description: >-
Will default to existing value if not provided.
patioSquareFootage:
type: number
example: 70
description: >-
Will default to existing value if not provided.
colorScheme:
type: string
example: 'Beige'
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
maintenanceFee:
type: number
example: '351.12'
description: >-
Will default to existing value if not provided.
floor:
type: number
example: 11
description: >-
Will default to existing value if not provided.
bedrooms:
type: string
example: 2 Bedroom + Den
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
bathrooms:
type: string
example: 2 1/2
description: >-
Will default to existing value if not provided.
direction:
type: string
example: SE
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
exposure:
type: string
example: South East
description: >-
This field has to be set up in Lasso. It is matched to an existing option
via the name. If no existing option is found, a new one is created. Will
default to existing value if not provided.
definition:
type: string
enum:
- Unit
- Townhome
- Lot
- Homesite
example: Unit
description: >-
Will default to existing value if not provided.
dates:
$ref: '#/components/schemas/Dates'
pricing:
$ref: '#/components/schemas/Pricing'
_links:
type: object
properties:
self:
type: string
example: '/inventory/123-123'
delete:
type: string
example: '/inventory/123-123'
inventoryId:
type: string
description: Lasso-internal inventory ID
example: 123
component:
$ref: '#/components/schemas/Component'
project:
$ref: '#/components/schemas/Project'
strataLot:
type: string
example: 123
inventoryNumber:
type: string
example: 123
revisions:
type: array
items:
$ref: '#/components/schemas/PricingRevision'
notes:
type: array
items:
$ref: '#/components/schemas/Note'
subjects:
type: array
items:
$ref: '#/components/schemas/Subject'
deposits:
type: array
items:
$ref: '#/components/schemas/Deposit'
realtors:
type: array
items:
$ref: '#/components/schemas/Realtor'
bicycleLockers:
type: array
items:
$ref: '#/components/schemas/BicycleLocker'
storageLockers:
type: array
items:
$ref: '#/components/schemas/StorageLocker'
parkingStalls:
type: array
items:
$ref: '#/components/schemas/ParkingStall'
assignedSalesReps:
type: array
description: Assigned sales reps to this inventory
items:
$ref: '#/components/schemas/InventorySalesRep'
salesReps:
type: array
items:
type: string
description: Name of sales rep. Deprecated, use `assignedSalesReps` instead
example: 'John Smith'
deprecated: true
purchasers:
type: array
description: >-
List of registrant IDs to associate as purchasers with this inventory.
Use the registrant create route to create a registrant if it does not
exist yet.
example: [123, 456]
items:
type: string
options:
type: array
items:
$ref: '#/components/schemas/Option'
PricingRevision:
title: PricingRevision
type: object
required:
- name
- amount
properties:
name:
type: string
example: Adapt to higher mortgage rates
amount:
type: number
example: '-100000'
Purchaser:
title: Purchaser
type: object
required:
- registrantId
properties:
registrantId:
type: string
example: 1
firstName:
type: string
example: John
lastName:
type: string
example: Doe
purchaserType:
type: string
example: Assignee
purchaserReason:
type: string
example: Investment Property
dateAssigned:
type: string
description: Date in the ISO 8601 UTC format
example: '2017-08-30T05:48:35Z'
PurchaserCreate:
title: Purchaser
type: object
required:
- registrantId
properties:
registrantId:
type: string
example: 1
purchaserType:
type: string
example: Assignee
purchaserReason:
type: string
example: Investment Property
Note:
title: Note
type: object
required:
- note
properties:
noteId:
type: string
example: '123'
note:
type: string
example: Offered $10.000 credit
createdAt:
type: string
description: Date in the ISO 8601 UTC format
example: '2017-08-30T05:48:35Z'
Dates:
title: Dates
type: object
description: >-
All dates are in the ISO 8601 UTC format, limited to year, month and day (YYYY-MM-DD).
Will set all dates to blank if not provided.
properties:
contract:
type: string
format: date
example: '2017-08-05'
acceptance:
type: string
format: date
example: '2017-08-08'
completion:
type: string
format: date
example: '2017-08-11'
release:
type: string
format: date
example: '2017-08-08'
possession:
type: string
format: date
example: '2017-08-15'
occupancy:
type: string
format: date
example: '2017-08-19'
sendToLawyer:
type: string
format: date
example: '2017-08-12'
adjustment:
type: string
format: date
example: '2017-08-30'
_links:
type: object
properties:
self:
type: string
example: '/inventory/123-123/dates'
update:
type: string
example: '/inventory/123-123/dates'
Pricing:
title: Pricing
type: object
description: >-
Sets the pricing information for the inventory in Lasso. Setting all fields
to 0 except the `initialPrice` allows you to specify an exact sales price.
required:
- initialPrice
properties:
initialPrice:
type: number
description: Base price of inventory
example: '4300000'
adjustedGrossPrice:
type: number
example: '-50000'
offTheTopDiscount:
type: number
example: '-10000'
inLieuOfIncentive:
type: number
example: '10000'
credit:
type: number
example: '25000'
_links:
type: object
properties:
self:
type: string
example: '/inventory/123-123/pricing'
update:
type: string
example: '/inventory/123-123/pricing'
Storage:
type: object
description: >-
For all storage types, if no specific storage option is given (by setting
`uniqueId`), the next unassigned storage option is associated to the inventory.
required:
- price
properties:
uniqueId:
type: string
example: '077'
price:
type: number
example: '12000'
date:
type: string
format: date
example: '2017-08-30'
paymentReceivedDate:
type: string
format: date
example: '2017-08-30'
outsideOfContract:
type: boolean
example: true
description:
type: string
example: Part of storage package
ParkingStall:
title: Parking Stall
properties:
uniqueId:
type: string
example: '077'
price:
type: number
example: '12000'
date:
type: string
format: date
example: '2017-08-30'
paymentReceivedDate:
type: string
format: date
example: '2017-08-30'
outsideOfContract:
type: boolean
example: true
description:
type: string
example: Part of storage package
StorageLocker:
title: Storage Locker
properties:
uniqueId:
type: string
example: '077'
price:
type: number
example: '12000'
date:
type: string
format: date
example: '2017-08-30'
paymentReceivedDate:
type: string
format: date
example: '2017-08-30'
outsideOfContract:
type: boolean
example: true
description:
type: string
example: Part of storage package
BicycleLocker:
title: Bicycle Locker
properties:
uniqueId:
type: string
example: '077'
price:
type: number
example: '12000'
date:
type: string
format: date
example: '2017-08-30'
paymentReceivedDate:
type: string
format: date
example: '2017-08-30'
outsideOfContract:
type: boolean
example: true
description:
type: string
example: Part of storage package
Deposit:
title: Deposit
required:
- amount
- dueDate
properties:
depositId:
type: string
example: '123'
amount:
type: number
example: '145000'
dueDate:
type: string
format: date
example: '2017-08-30'
amountReceived:
type: number
example: '145000'
receivedDate:
type: string
format: date
example: '2017-09-10'
Realtor:
type: object
required:
- firstName
- lastName
- company
properties:
realtorId:
type: string
example: '123'
nameTitle:
type: string
example: Mrs
firstName:
type: string
example: Susan
lastName:
type: string
example: Smith
email:
type: string
example: susan.smith@example.com
fax:
type: string
example: '(604) 123-1234'
phone:
type: string
example: '(604) 555-1234'
company:
type: string
example: Realtor Inc
address:
type: string
example: '123 Street'
city:
type: string
example: 'Vancouver'
province:
type: string
example: 'BC'
postalCode:
type: string
example: 'V6V1T1'
country:
type: string
example: 'Canada'
gender:
type: string
enum:
- unspecified
- male
- female
example: female
compensation:
$ref: '#/components/schemas/RealtorCompensation'
RealtorCompensation:
type: object
properties:
bonuses:
type: array
items:
type: number
example: '10000.00'
percentages:
type: array
items:
type: object
properties:
cutOff:
type: object
properties:
type:
type: string
enum:
- under
- over
example: under
value:
type: number
example: '100000'
margin:
type: number
description: Percentage as fraction of 100 as float, e.g. '0.0125'
=> 1.25%
example: '0.022'
Option:
type: object
required:
- name
- price
properties:
name:
type: string
example: 'Marble counter tops'
description:
type: string
example: 'Upgrade for kitchen counter tops'
price:
type: number
example: '1000'
area:
type: string
example: 'Kitchen'
description: >-
Areas have to be set up in Lasso, they are matched via string. If no area
is found, one will be created.
date:
type: string
format: date
example: '2017-08-29'
outsideContract:
type: boolean
example: true
Subject:
type: object
required:
- purchaser
- subjectDate
- description
properties:
purchaser:
type: string
example: '123'
description: >-
RegistrantId of a registrant assigned to the inventory
subjectDate:
type: string
format: date
example: '2017-08-14'
description:
type: string
example: 'Adjust doors that do not close properly'
removed:
type: boolean
example: false
removalDate:
type: string
format: date
example: '2017-08-25'
removalDescription:
type: string
example: 'Contractor sanded doors, all close properly now'
PlanTypeRead:
title: Plan Type (Read)
type: object
properties:
planTypeId:
type: string
example: 1
planType:
type: string
example: 'E2'
planPrice:
type: number
example: '13000'
PlanTypeWrite:
title: Plan Type (Write)
type: object
required:
- planType
- planPrice
properties:
planType:
type: string
minLength: 1
maxLength: 20
example: 'E2'
planPrice:
type: number
example: '13000'
InventoryPlanTypeWrite:
title: Inventory Plan Type (Write)
type: object
description: >-
Associate an inventory with a plan type by ID or by plan type. If both are
provided, then lookup will be by ID
properties:
planTypeId:
type: string
example: 1
planType:
type: string
example: 'E2'
responses:
Forbidden:
description: The provided authentication credentials does not have sufficient
privileges to access this resource
content:
application/json:
schema:
$ref: '#/components/schemas/StandardError'
NotFound:
description: The specified resource was not found
content:
application/json:
schema:
$ref: '#/components/schemas/StandardError'
Unauthorized:
description: The request has not been fulfilled because it lacks valid authentication
credentials
content:
application/json:
schema:
$ref: '#/components/schemas/StandardError'
BadRequest:
description: |
The request could not be processed due to invalid input:
- Is the request payload malformed?
- Are all required fields present?
- Are field values of the expected type (ie, number format, date format)?
- Are field values within the expected constraints (ie, greater than max size of string)?
- Are query params of the expected format?
Check the body model for more documentation on field constraints and limits.
content:
application/json:
schema:
$ref: '#/components/schemas/StandardError'
InternalServerError:
description: Receiving a 5xx response indicates an error on Lasso's end. Please
contact us to report the problem
ErrorInventoryCannotBeDeleted:
description: The inventory you tried to delete was either "locked" or its status
is not "Available"
content:
application/json:
schema:
$ref: '#/components/schemas/StandardError'
ErrorInventoryAlreadySynced:
description: |
The inventory item you tried to create or sync with Lasso already exists
or is already synced. Right now, it is only possible to sync an inventory
item with Lasso once. Any subsequent changes will have to be applied
manually (ie, adding a note)
Alternatively, you can reset the inventory and sync again. Resetting
the inventory will remove any associated information (ie, deposits,
notes, etc). Any information that is not included in the sync will be
lost. In addition, there may be issues with custom reports that inspect
the system creation date of data (this is not related to dates included
in the sync, like the deposit received date). If you choose to reset
and sync the inventory, please ensure that you are not deleted data
in Lasso.
content:
application/json:
schema:
$ref: '#/components/schemas/StandardError'
parameters:
Cursor:
name: cursor
in: query
schema:
type: string
description: >-
A cursor for the next batch of registrants is providing in the metadata of
the body. Provide the `next` cursor as a query parameter in your next request
to access the next batch of registrants.
It's a base64 encoded json object with the fields `v` for version, `o` for
offset and `l` for limit. You don't have to create the cursor object as it
is embedded in the `next` link provided in the result set.
Version is an integer that indicates the layout of the cursor. Future layouts
may provide a different way to access parts of a result set, e.g. by providing
a primary key as a reference point. This prevents the missing/repeated data
issue with paged results, if the result set is modified during paging (e.g.
a registrant is added while on page 2, and when loading page 3, the last registrant
from page is pushed down to be the first registrant on page three and being
included in two result pages. The opposite happens if a registrant is deleted,
one result will be skipped.)
securitySchemes:
JwtAuthorizer:
type: http
scheme: bearer
bearerFormat: JWT