{"info":{"_postman_id":"e2baf2ff-2068-4586-8a21-dacdeb82a8e5","name":"Lawmatics OAuth API v1.22.0","description":"
Welcome to the Official Lawmatics RESTful API Documentation.
\nLike the Lawmatics Platform, our API is under active development!
For any API related questions or feedback, reach out to us at api@lawmatics.com.
Add new endpoint: GET Collections
\nAdd new endpoint: GET Collection
\nAdd new endpoint: POST Collection
\nAdd new endpoint: PUT Collection
\nAdd new endpoint: DELETE Collection
\nAdd new endpoint: GET Collection Items
\nAdd new endpoint: GET Collection Item
\nAdd new endpoint: POST Collection Item
\nAdd new endpoint: PUT Collection Item
\nAdd new endpoint: DELETE Collection Item
\nAdd new endpoint: POST Time Entry.
\nAdd new endpoint: PUT Time Entry.
\nAdd new endpoint: GET Expenses.
\nAdd new endpoint: GET Expense
\nAdd new endpoint: POST Expense
\nAdd new endpoint: PUT Expense
\nAdd new endpoint: DEL Expense
\nAdd new endpoint: GET Time Entry.
\nAdd new endpoint: GET Time Entries.
\nAdd new endpoint: DEL Time Entry.
\nAdd Company Finder endpoints, they behave the same as the Contact Finder endpoints, but return a Company.
\nAdd new endpoint: GET Find Company by Name.
\nAdd new endpoint: GET Find Company by Email.
\nAdd new endpoint: GET Find Company by Phone.
\nUpdate Filter Operator capabilities for presence checking: e.g. \"null\", \"not_null\"
\nAdd new endpoint: POST Matter Sub Status.
\nAdd new endpoint: PUT Matter Sub Status.
\nAdd new endpoint: DEL Matter Sub Status.
\nAdd new endpoint: GET Custom Contact Type.
\nAdd new endpoint: GET Custom Contact Types.
\nAdd new endpoint: POST Custom Contact Type.
\nAdd new endpoint: PUT Custom Contact Type.
\nAdd new endpoint: DEL Custom Contact Type.
\nAdd new endpoint: GET Email Campaign.
\nAdd new endpoint: GET Email Campaigns.
\nAdd new endpoint: GET Email Campaign Stats.
\nAdd new endpoint: GET Folder.
\nAdd new endpoint: GET Folders.
\nAdd new endpoint: POST Folder.
\nAdd new endpoint: PUT Folder.
\nAdd new endpoint: DEL Folder.
\nUpdate Task endpoints to create/read/update/delete Task recurrence_rule.
Expose assigned_by_id on Task endpoints.
Add new endpoint: GET Task Status.
\nAdd new endpoint: GET Task Statuses.
\nAdd new endpoint: POST Task Status.
\nAdd new endpoint: PUT Task Status.
\nAdd new endpoint: DEL Task Status.
\nAdd new endpoint: GET Subtask.
\nAdd new endpoint: GET Subtasks.
\nAdd new endpoint: POST Subtask.
\nAdd new endpoint: PUT Subtask.
\nAdd new endpoint: DEL Subtask.
\nAdd new endpoint: GET Comment.
\nAdd new endpoint: GET Comments.
\nAdd new endpoint: POST Comment.
\nAdd new endpoint: PUT Comment.
\nAdd new endpoint: DEL Comment.
\nAdd new endpoint: POST User.
\nAdd new endpoint: PUT User.
\nAdd new endpoint: DELETE User.
\nExpose creating Company Matters by name, passing company_name to POST Matters
\nExpose creating Company Matters by passing Company ID to POST Matters
\nImprove Contact deduplication (if matches on email or phone) on POST Matters
\nNOTE - Any passed Contact Info (phone/email/address) for a Company Matter will be set on a found/created Contact as the Company Matter's P.o.C (primary_contact)
\nAdd new endpoint: GET Company.
\nAdd new endpoint: GET Companies.
\nAdd new endpoint: PUT Company.
\nAdd new endpoint: POST Company.
\nAdd new endpoint: DEL Company.
\nAdd new endpoint: GET Interaction.
\nAdd new endpoint: GET Interactions.
\nAdd new endpoint: PUT Interaction.
\nAdd new endpoint: POST Interaction.
\nAdd new endpoint: DEL Interaction.
\nAdd new endpoint: GET Relationship Types.
\nAdd new endpoint: GET Relationship Type.
\nAdd new endpoint: PUT Relationship Type.
\nAdd new endpoint: POST Relationship Type.
\nAdd new endpoint: GET Relationships.
\nAdd new endpoint: GET Relationship.
\nAdd new endpoint: PUT Relationship.
\nAdd new endpoint: POST Relationship.
\nAdd new endpoint: DEL Relationship.
\nAdd new endpoint: PUT File.
\nAdd new endpoint: DEL File.
\nAdd new endpoint: GET Phone Numbers.
\nAdd new endpoint: GET Phone Number.
\nAdd new endpoint: PUT Phone Number.
\nAdd new endpoint: POST Phone Number.
\nAdd new endpoint: DEL Phone Number.
\nAdd new endpoint: GET Email Addresses.
\nAdd new endpoint: GET Email Address.
\nAdd new endpoint: PUT Email Address.
\nAdd new endpoint: POST Email Address.
\nAdd new endpoint: DEL Email Address.
\nAdd new endpoint: GET Event Type.
\nAdd new endpoint: PUT Event Type.
\nAdd new endpoint: POST Event Type.
\nAdd new endpoint: DEL Event Type.
\nImprove validations, and error handling on many endpoints.
\nAdd new endpoint: PUT Address.
\nAdd new endpoint: POST Address.
\nAdd new endpoint: DEL Address.
\nAdd new endpoint: POST Upload File.
\nImprove validations, and error handling on many endpoints.
\nAdd new endpoint: GET Event.
\nAdd new endpoint: GET Custom Field.
\nAdd new endpoint: GET Custom Fields.
\nAdd new endpoint: PUT Custom Field.
\nAdd new endpoint: POST Custom Field.
\nAdd new endpoint: DEL Custom Field.
\nAdd new endpoint: GET Practice Area.
\nAdd new endpoint: GET Practice Areas.
\nAdd new endpoint: PUT Practice Area.
\nAdd new endpoint: POST Practice Area.
\nAdd new endpoint: DEL Practice Area.
\nAdd new endpoint: GET Note.
\nAdd new endpoint: GET Note.
\nAdd new endpoint: PUT Note.
\nAdd new endpoint: POST Note.
\nAdd new endpoint: DEL Note.
\nAdd new endpoint: GET Address.
\nAdd new endpoint: GET Addresses.
\nAdd new endpoint: GET File.
\nAdd new endpoint: GET Files.
\nAdd new endpoint: GET Download File.
\nAdd ability to filter list GET endpoints by contact_id, matter_id, client_id, company_id on polymorphic relationships.
\nAdd type specific custom field value attribute keys to Matter payload (e.g. value_string, value_int, value_datetime).
\nUpdate documentation.
\nOriginating Attorney, Lead Attorney, Salesperson, Assigned Staff fields on PUT/POST Prospect endpoints.Add new endpoint: GET Task.
\nAdd new endpoint: GET Tasks.
\nAdd new endpoint: PUT Task.
\nAdd new endpoint: POST Task.
\nAdd new endpoint: DEL Task.
\nAdd new endpoint: GET Invoice.
\nAdd new endpoint: GET Invoices.
\nAdd new endpoint: GET Transaction.
\nAdd new endpoint: GET Transactions.
\nAdd new endpoint: POST Transaction.
\nAdd new endpoint: POST Event.
\nAdd new endpoint: DELETE Event
\nAdd new endpoint: GET Locations.
\nAdd new endpoint: GET Events.
\nAdd new endpoint: GET Event Types.
\nFix bug with '.' included in email param for GET Contact find_by_email endpoint.
\nFix bug with '.' included in email param for GET Matter find_by_email endpoint.
\nThis update allows you to get more information about firm Pipelines or a specific Pipeline.
\nAdd new endpoint: GET Pipeline by id
\nAdd new endpoint: GET Pipelines.
\nUpdate documentation.
\nThis update allows you to search for a Contact and adds an important field to Stages.
\nUpdate GET Stages endpoint to return its Pipeline Relationship with fields=pipeline.
Add Contact Finder endpoints, they behave the same as the Matter Finder endpoints, but return a Contact.
\nUpdate documentation.
\nThis update adds the ability to create a Matter for an existing Contact.
\nAdd contact_id option to the POST Matter (Create) endpoint.
Add match_contact_by option to the POST Matter (Create) endpoint.
If you just are looking for info on submitting Custom Forms: You do not need to make a devleoper app. So disregard auth info below and use our UNAUTHENTICATED Custom Form Submit endpoint: https://docs.lawmatics.com/?version=latest#c34ea101-b7af-46ac-a6c7-d185495af4f4
You will not need to create a developer app, and you do not need to go through the OAuth2.0 grant flow!
Lawmatics' REST API uses the standard OAuth2.0 token grant flow. If you are familiar with OAuth2.0, auth should be straightforward. If you are not this webpage explains OAuth2.0 concisely: https://aaronparecki.com/oauth-2-simplified/
\nTo create a new developer app, you must first register a new Lawmatics account and have developer settings granted by a support rep. You can reach out via email, phone, or the chat on our homepage.
While logged in to your Lawmatics account, go to https://app.lawmatics.com/settings/developers.
You can see how it's done here: https://www.useloom.com/share/bfbfa6642b0b4b97aa3ef87d29817e0b
\nTo get credentials for programatic access. Click 'New Application' and enter the Name, Description, and Logo that your app users will see when connecting through your app. As well as the Callback URL they will be redirected back to, after they grant your app access to their account.
\nIn your application, users click the following authorize link. They will auth their Lawmatics account, and then grant or deny your Client App to make changes to their Lawmatics account on their behalf. Then we will redirect the user back to your website along with our grant token as a query param.
\nSTEP 1: Getting a Grant Code
\nOur authorize url: https://app.lawmatics.com/oauth/authorize.
This url must pass the following Query Params:
\nclient_id: The app id shown in developer settings.
redirect_uri: The callback url that you set when creating your developer app, shown in developer settings, we will redirect the user to this url along with the grant token.
response_type: This should always be set to 'code'
state (optional): This can be sent by your application to maintain state between the request and the callback.
All together, a valid request link will look something like this:
\nhttps://app.lawmatics.com/oauth/authorize?client_id=&redirect_uri=&response_type=code.
When the user authenticates, and grants access to your app, they will be redirected back to GET
\nhttps://www.callbackurl.com/?code=f2da562a94981e24d610b021aedaae03eb286acab7cd855013f9165aebbeef48
along with a code query param. This code is a short lived grant token that needs to be captured by your backend and utilized to receive the access_token.
STEP 2: Getting an Access Token
\nIn your backend make a POST request to https://api.lawmatics.com/oauth/token.
The POST body must contain the following required params:
\nclient_id: The app key from above
client_secret: The app secret from above
grant_type: \"authorization_code\"
code: The authorization code returned from the redirect above
redirect_uri: The callback URL used in the authorization request above
This will create and return a non-expiring access_token that you should save associated with your user.
HTTP/1.1 200 OK\n {\n \"token_type\":\"bearer\",\n \"access_token\":\"WjR8HLdo847Z8kdfUtewJpCvkRX4JYLCIF2dUUul\",\n \"created_at\": 1539723267\n }\n\nThis token can now be passed as an Authorization header to authenticate all of our endpoints on behalf of that tokens user!
E.g. Authorization= Bearer
We have a 50 req/min per-firm rate limit on all endpoints. Exceeding this limit returns a 429 error with `Retry-After: 60` header
\nWe currently do not support scopes. Once a user authenticates your app, they are giving you full CRUD access to their account.
\nWe do not have a deauthorization endpoint.
\nWe do not give you a refresh token. Access tokens do not expire so they are not needed.
\nField Selection allows you to shape the response data to only include fields that are needed for your development. A field is considered an association to the record, or attributes on the record itself. Field Selection can only return data one level deep (for now!).
\nField Selection works on every Lawmatics endpoint unless specified otherwise.
\nA valid ?fields= value is a comma separated list of attributes/relationships. It could like this: ?fields=first_name,last_name,source,custom_fields. Fields are returned in the order you select them.
Requests that don't include the field param will return a small set of commonly used default attributes (such as name, or email).
Associated fields response data, will only return the id and type of the associated record. This means to get more data about a relationship record, the id from the response must be used to query the relationship endpoint.
You want to get more information about Prospect 74's related, Source data.
\nStart by making an authenticated curl to retrieve the association data.
\ncurl -H \"Authorization: Bearer <access_token>\" -i https://api.lawmatics.com/v1/prospects/74?fields=source
returning:
\n{\n \"data\": {\n \"id\": \"74\",\n \"type\": \"prospect\",\n \"attributes\": {},\n \"relationships\": {\n \"source\": {\n \"data\": {\n \"id\": \"3\",\n \"type\": \"source\"\n }\n }\n }\n }\n}\nNow call https://api.lawmatics.com/v1/sources/3?fields=all to expose all available related attributes and relationships about the Source.
It's efficient in production code to only request fields that are going to be used.
\nNote: If you are curious to the attributes/relationships available on a record, try the ?fields=all query param value on ANY endpoint unless stated otherwise.
Pagination meta information is found at the bottom of any List response.
\nYou can change pages by passing ?page=X, where X is the page number, as a Query Param appended to the endpoint URL.
E.g. to see page 3 you would pass ?page=3
By default List responses are sorted by id from biggest to smallest. (descending)
Customizing the sort order of the response works with Two Query Params:
\nsort_order: Can be asc or desc.sort_byAvailable sort_by columns are:\nid, created_at, updated_at\nAs well as most fields listed by the fields='all' response.
If you use sort_order without sort_by, sort_by defaults to sort by id.
Filtering AND sorting by the actual_value_cents column.
\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[{"key":"accessToken","value":"Using the not equals (!=) filter operator.
\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[{"key":"accessToken","value":"\n\nStage
\n
https://api.lawmatics.com/v1/prospects?filter_by=stage_id&filter_on=123\n\n\nCase Title (exact)
\n
https://api.lawmatics.com/v1/prospects?filter_by=case_title&filter_on=Sauls Wild Ride\n\n\nCase Title (case sensitive fuzzy matches the end)
\n
https://api.lawmatics.com/v1/prospects?filter_by=case_title&filter_on=Sauls Wi%&filter_operator=like\n\n\nCase Title (case insensitive fuzzy matches the start)
\n
https://api.lawmatics.com/v1/prospects?filter_by=case_title&filter_on=%uls Wild Ride\n\n\nCase Title (case insensitive fuzzy matches both ends)
\n
https://api.lawmatics.com/v1/prospects?filter_by=case_title&filter_on=%ls Wild Ri%\n\n\nEstimated Value Less Than or Equal to 1000 Dollars
\n
https://api.lawmatics.com/v1/prospects?filter_by=estimated_value_cents&filter_on=10000&filter_operator=<=\n\n\nFirst Name
\n
https://api.lawmatics.com/v1/prospects?filter_by=first_name&filter_on=Mat%\n","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""],"id":"7f545943-fccc-42a6-ac33-2fe1fbcb0b37"}},{"listen":"test","script":{"type":"text/javascript","exec":[""],"id":"ac1bbbef-816d-4e9f-9da2-881d6c77c189"}}],"_postman_id":"f036c2cd-2ab7-4499-8b6b-7f8959d8c754","auth":{"type":"oauth2","oauth2":{"basicConfig":[{"key":"accessToken","value":"By default List responses will return all records without any filters.
\nFiltering the request works by appending these Query Params:
\nfilter_by or filter_field: This specifies the field name to filter on.filter_on or filter_value: This is the value to filter on.filter_with or filter_operator: (Optional) This is the operator used to filter. (default: '=')The available filter_by columns are:
_id to be appended. E.g practice_area_id.Additional Notes:
\nIf you use filter_by without filter_on, we will return an error response.
Valid filter_operators are one of: ['=', '!=', <=','<','>=','>','like','ilike']
Additional validfilter_operators for checking presence:['null', 'not_null']
These do not require a filter_value
Aliases: ['empty', 'present', 'blank']
You do not need to have the field selected, for it to be filterable.
\nCurrently only one filter is supported at a time.
\nlike and ilike are fuzzy String matching operators (ilike is case insensitive).
As a convenience ilike is the operator used by default when filtering on fields of String type.
If you are using a fuzzy matcher, you must put \"%\" on the filter_value, where you want the fuzzy matching to occur.
Note - (Keep in mind urls must encode special characters: so '%' becomes '%25')
\n","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""],"id":"f655b696-79d6-41b9-9c8e-c2727c03b3ad"}},{"listen":"test","script":{"type":"text/javascript","exec":[""],"id":"81b1ade7-233d-47c0-91b0-e013c5b40865"}}],"_postman_id":"7f995af9-0042-49dd-a34f-2b1a1b6e2e7c","auth":{"type":"oauth2","oauth2":{"basicConfig":[{"key":"accessToken","value":"We currently have three possible types of Query Param options that can be included with any request to modify the results.
\nThere are two types of Queries,
\nA specific Stage by id
\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[{"key":"accessToken","value":"A paginated list of all Addresses in Lawmatics
\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[{"key":"accessToken","value":"Create a new Address
\nRequired Fields: addressable, label, street
\naddressable_type: Prospect, Contact, Company, or Firm that the Address belongs to.
\naddressable_id: Id of Record. Firm type doesn't need an ID passed and it will be ignored.
\nNote - Setting the Address through a Prospect (Matter) will set the address on the Prospects' Contact/Company.
\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[{"key":"accessToken","value":"Updates an Address by ID
\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[{"key":"accessToken","value":"Delete an Address
\naddress_id: ID of the Address to delete
\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[{"key":"accessToken","value":"An Address belongs to a Firm, a Contact, or Company.
\n","event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""],"id":"084f0b80-c857-4fa6-9655-01766fe75758"}},{"listen":"test","script":{"type":"text/javascript","exec":["pm.test(\"Response time is less than 400ms\", function () {"," pm.expect(pm.response.responseTime).to.be.below(1400);","});"],"id":"09ef3c52-7358-4aa5-b100-394f9ce832dc"}}],"_postman_id":"36a5d065-e72a-459c-8954-db31d8309730","auth":{"type":"oauth2","oauth2":{"basicConfig":[{"key":"accessToken","value":"Retrieves a list of all Collections in the Lawmatics account.
\nGET {{host}}/v1/collections
This request uses OAuth 2.0. Ensure a valid access_token is set in the active environment.
Returns a JSON object with a data array. Each item in the array represents a Collection and includes:
Retrieves a single Collection by its ID.
\nReturns a data object representing the collection with the following attributes:
Creates a new Collection in Lawmatics. Collections are used to group and organize records (such as contacts or matters) with custom fields tailored to your needs.
\nThe request body must be a JSON object with the following fields:
\nEach object in the custom_fields array supports the following properties:
Returns 201 Created on success with a JSON object containing the created collection's data under the data key.
Updates an existing collection by its ID. This endpoint allows you to modify the collection's associated custom fields.
\nSend a JSON object with the following fields:
\ncustom_fields Object PropertiesDeletes an existing collection by its ID.
\nReturns a 200 OK with the deleted collection's data on success, including:
id – The collection's unique identifier.
type – Resource type (collection).
attributes – Collection attributes:
name – Name of the collection.
custom_fields – Array of custom fields associated with the collection.
created_at – Timestamp when the collection was created.
updated_at – Timestamp when the collection was last updated.
Returns a paginated list of all collection items.
\nSupports standard Lawmatics query parameters for filtering, sorting, pagination, and field selection.
\nReturns a 200 OK with an array of collection item objects under data. Each item includes:
id – The collection item's unique identifier.type – Resource type (collection_item).attributes – Collection item attributes:collection_id – The ID of the parent collection.contactable_type – The type of the associated record (e.g., Prospect, Contact).contactable_id – The ID of the associated record.custom_field_values – Array of custom field values for this item.created_at – Timestamp when the item was created.updated_at – Timestamp when the item was last updated.Returns a single collection item by its ID.
\nReturns a 200 OK with the collection item object under data, including:
id – The collection item's unique identifier.type – Resource type (collection_item).attributes – Collection item attributes:collection_id – The ID of the parent collection.contactable_type – The type of the associated record (e.g., Prospect, Contact).contactable_id – The ID of the associated record.custom_field_values – Array of custom field values for this item.created_at – Timestamp when the item was created.updated_at – Timestamp when the item was last updated.Creates a new collection item, associating a contact or matter record with a collection and optionally setting custom field values.
\ncustom_field_values Object{\n \"contactable_type\": \"Prospect\",\n \"contactable_id\": 185,\n \"collection_id\": 1,\n \"custom_field_values\": [\n {\n \"id\": 295,\n \"value\": \"The Matrix\"\n },\n {\n \"id\": 296,\n \"value\": \"1999-03-31\"\n }\n ]\n}\n\nReturns a 201 Created with the newly created collection item object under data.
Updates an existing collection item's custom field values.
\ncustom_field_values ObjectReturns a 200 OK with the updated collection item object under data.
Deletes an existing collection item by its ID.
\nReturns a 200 OK with the deleted collection item's data on success, including:
id – The collection item's unique identifier.type – Resource type (collection_item).attributes – Collection item attributes:collection_id – The ID of the parent collection.contactable_type – The type of the associated record.contactable_id – The ID of the associated record.custom_field_values – Array of custom field values associated with the item.created_at – Timestamp when the item was created.updated_at – Timestamp when the item was last updated.Fuzzy find a specific Contact by Phone Number.
\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[{"key":"accessToken","value":"Fuzzy find a specific Contact by Email Address.
\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[{"key":"accessToken","value":"Fuzzy find (case-insensitive) a specific Contact by their Name. You can pass either '{first_name} {last_name}' or simply '{first_name}'
\n","auth":{"type":"oauth2","oauth2":{"basicConfig":[{"key":"accessToken","value":"