# Mason external API Read APIs for your property management account. Business-data endpoints require an Authorization: Bearer token issued for your account; you cannot select a different account through request parameters. Public documentation requires no token. Dates are ISO 8601 timestamps unless stated otherwise. Null means no value is recorded; it is distinct from false, zero, an empty string, and an empty array. JSON snapshots are returned unchanged, and optional provider-specific keys may vary. v2 uses low/normal/urgent attention priorities; v1 retains its legacy numeric-or-null priority contract. This specification describes implemented endpoints only. Contract revision: `2-c8807bb9565ac15c` Base URL: `https://mason.enduring-labs.com/api/external/v2` Business-data authentication: `Authorization: Bearer `. Your token is scoped to one property management account. The OpenAPI document is public. Reference: https://www.thisismason.com/docs/api-reference Full machine-readable contract: https://www.thisismason.com/openapi.json Agent guidance: Use only the documented read-only GET endpoints. Load the bearer token from your secret store or environment, never from a prompt; keep it out of logs and shared output. Start with a small limit, follow pagination.nextCursor while pagination.hasMore is true, and resolve related records by ID when needed. Do not infer write capabilities from response fields. ```sh curl "https://mason.enduring-labs.com/api/external/v2/work-orders?limit=5" \ -H "Authorization: Bearer mason_your_token_here" ``` Resource lists return `data` and `pagination`. Pass `pagination.nextCursor` as `cursor` until `pagination.hasMore` is false. On-call coverage returns `data` without cursor pagination. ## Endpoints ### work-orders #### GET /work-orders Maintenance work orders belonging to your property management account. Priority describes office attention; urgencyLevel and isEmergency describe maintenance urgency. Returned values reflect current stored state, not a historical snapshot. Filters are combined with AND, except the documented id/ids aliases. Unknown query parameters and empty filter values are ignored. Results are ordered newest first by record creation time, then by ID descending. Continue with nextCursor and the same filters. Incremental date bounds filter current rows; they do not provide complete historical changes or a snapshot across pages. Parameters: - `limit` (integer): Page size, normally 1–100. Defaults to 50 when omitted, zero, or not parseable as an integer; other parsed values are clamped to 1–100. - `cursor` (string): Opaque nextCursor from the preceding page. Omit for the first page; do not construct or modify cursor values. - `status` (string): Exact match on status. Stored work-order lifecycle status, for example created, reviewed, dispatched, work_in_progress, work_done, closed, cancelled, or duplicate. Other stored statuses may occur. - `workOrderType` (string): Exact match on workOrderType. Stored work category: reactive, reactive:recall, turn, recurring, misc, inspection, or an inspection subtype such as inspection:annual, inspection:move_in, inspection:move_out, inspection:pre_move_out, inspection:onboarding, inspection:semi_annual, or inspection:drive_by. Legacy values are returned unchanged. - `source` (string): Exact match on source. Stored intake channel, commonly pms:portal, pms:text, pms:email, pms:call, pms:system, mason:portal, mason:text, mason:email, mason:call, mason:system, or mason:recurring. It describes the origin/channel, not the requester identity. Legacy values are returned unchanged. - `createdAfter` (string (date-time)): Inclusive lower bound on createdAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `createdBefore` (string (date-time)): Inclusive upper bound on createdAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `updatedAfter` (string (date-time)): Inclusive lower bound on lastUpdated. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. Related-record changes do not necessarily advance this timestamp. - `updatedBefore` (string (date-time)): Inclusive upper bound on lastUpdated. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. Related-record changes do not necessarily advance this timestamp. Response: `{ data: WorkOrder[], pagination: Pagination }` #### GET /work-orders/{id} Maintenance work orders belonging to your property management account. Priority describes office attention; urgencyLevel and isEmergency describe maintenance urgency. Returned values reflect current stored state, not a historical snapshot. Returns one record by its Mason UUID. Missing records and records outside the token's property management account both return 404. Parameters: - `id` (string (uuid), required): Mason UUID returned in the record id field. This is not a provider identifier or display number. Response: `{ data: WorkOrder }` ### calls #### GET /calls Recorded phone calls scoped to your property management account. Call content and recording availability depend on the stored record. Filters are combined with AND, except the documented id/ids aliases. Unknown query parameters and empty filter values are ignored. Results are ordered newest first by record creation time, then by ID descending. Continue with nextCursor and the same filters. Incremental date bounds filter current rows; they do not provide complete historical changes or a snapshot across pages. Parameters: - `limit` (integer): Page size, normally 1–100. Defaults to 50 when omitted, zero, or not parseable as an integer; other parsed values are clamped to 1–100. - `cursor` (string): Opaque nextCursor from the preceding page. Omit for the first page; do not construct or modify cursor values. - `callStatus` (string): Exact match on callStatus. Stored call outcome, such as completed, failed, busy, or no-answer. - `callerRole` (string): Exact match on callerRole. Recorded role of the other party, such as tenant, vendor, or property_manager. Legacy roles may occur. - `inBound` (boolean): Exact match on inBound. True for an incoming call; false for an outgoing call. - `workOrderId` (string (uuid)): Exact match on internalWorkOrderId. Linked Mason work-order ID. Resolve it using GET /work-orders/{id}; null means no work order is linked. - `contactId` (string (uuid)): Exact match on masonContactId. Linked Mason contact ID. Resolve it using GET /contacts/{id}; null means no contact is linked. - `createdAfter` (string (date-time)): Inclusive lower bound on createdAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `createdBefore` (string (date-time)): Inclusive upper bound on createdAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. Response: `{ data: Call[], pagination: Pagination }` #### GET /calls/{id} Recorded phone calls scoped to your property management account. Call content and recording availability depend on the stored record. Returns one record by its Mason UUID. Missing records and records outside the token's property management account both return 404. Parameters: - `id` (string (uuid), required): Mason UUID returned in the record id field. This is not a provider identifier or display number. Response: `{ data: Call }` ### text-messages #### GET /text-messages Stored inbound and outbound text messages for your property management account. Work-order filtering matches the primary linked work order. Filters are combined with AND, except the documented id/ids aliases. Unknown query parameters and empty filter values are ignored. Results are ordered newest first by record creation time, then by ID descending. Continue with nextCursor and the same filters. Incremental date bounds filter current rows; they do not provide complete historical changes or a snapshot across pages. Parameters: - `limit` (integer): Page size, normally 1–100. Defaults to 50 when omitted, zero, or not parseable as an integer; other parsed values are clamped to 1–100. - `cursor` (string): Opaque nextCursor from the preceding page. Omit for the first page; do not construct or modify cursor values. - `senderRole` (string): Exact match on senderRole. Recorded sender role, such as tenant, vendor, owner, tech, or property_manager. Legacy roles may occur. - `workOrderId` (string (uuid)): Exact match on internalWorkOrderId. Linked Mason work-order ID. Resolve it using GET /work-orders/{id}; null means no work order is linked. - `contactId` (string (uuid)): Exact match on masonContactId. Linked Mason contact ID. Resolve it using GET /contacts/{id}; null means no contact is linked. - `createdAfter` (string (date-time)): Inclusive lower bound on createdAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `createdBefore` (string (date-time)): Inclusive upper bound on createdAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. Response: `{ data: TextMessage[], pagination: Pagination }` #### GET /text-messages/{id} Stored inbound and outbound text messages for your property management account. Work-order filtering matches the primary linked work order. Returns one record by its Mason UUID. Missing records and records outside the token's property management account both return 404. Parameters: - `id` (string (uuid), required): Mason UUID returned in the record id field. This is not a provider identifier or display number. Response: `{ data: TextMessage }` ### invoices #### GET /invoices Stored invoices, matching results, and review/billing state. Top-level monetary amounts are integer cents. Nested document data is returned as stored and may use different representations. Filters are combined with AND, except the documented id/ids aliases. Unknown query parameters and empty filter values are ignored. Results are ordered newest first by record creation time, then by ID descending. Continue with nextCursor and the same filters. Incremental date bounds filter current rows; they do not provide complete historical changes or a snapshot across pages. Parameters: - `limit` (integer): Page size, normally 1–100. Defaults to 50 when omitted, zero, or not parseable as an integer; other parsed values are clamped to 1–100. - `cursor` (string): Opaque nextCursor from the preceding page. Omit for the first page; do not construct or modify cursor values. - `status` (string): Exact match on status. Stored invoice processing status, such as pending, processed, incomplete, not_invoice, reprocessing, failed, failed_with_partial_data, or no_pdf_attachments. - `confidence` (string): Exact match on confidence. Stored extraction confidence or processing classification. Common values include high, medium, low, failed, failed_with_partial_data, and no_pdf_attachments. - `isInvoice` (boolean): Exact match on isInvoice. Whether this record is classified as an invoice. - `isRecurring` (boolean): Exact match on isRecurring. Whether the invoice was classified as recurring. - `reviewed` (boolean): Exact match on reviewed. Whether the invoice has been marked reviewed by the office/accounting process. - `reviewReason` (string): Exact match on reviewReason. Recorded review disposition, commonly bill_created, completed_outside_mason, duplicate, not_an_invoice, or archived. - `pmApproved` (boolean): Exact match on pmApproved. Whether the invoice is marked approved. - `pmRejected` (boolean): Exact match on pmRejected. Whether the invoice is marked rejected. - `needsReview` (boolean): Exact match on needsReview. Whether the recorded validation result requires review. - `workOrderId` (string (uuid)): Exact match on internalWorkOrderId. Linked Mason work-order ID. Resolve it using GET /work-orders/{id}; null means no work order is linked. - `workOrderNumber` (string): Case-insensitive literal substring match on workOrderNumber. Human-readable work-order number associated with the invoice. Percent and underscore characters are treated literally, not as wildcards. - `invoiceNumber` (string): Case-insensitive literal substring match on invoiceNumber. Invoice number printed on the document. Percent and underscore characters are treated literally, not as wildcards. - `emailSender` (string): Case-insensitive literal substring match on emailSender. Source email sender. Percent and underscore characters are treated literally, not as wildcards. - `emailSubject` (string): Case-insensitive literal substring match on emailSubject. Source email subject. Percent and underscore characters are treated literally, not as wildcards. - `createdAfter` (string (date-time)): Inclusive lower bound on createdAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `createdBefore` (string (date-time)): Inclusive upper bound on createdAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `updatedAfter` (string (date-time)): Inclusive lower bound on updatedAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. Related-record changes do not necessarily advance this timestamp. - `updatedBefore` (string (date-time)): Inclusive upper bound on updatedAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. Related-record changes do not necessarily advance this timestamp. - `invoiceDateAfter` (string (date-time)): Inclusive lower bound on invoiceDate. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `invoiceDateBefore` (string (date-time)): Inclusive upper bound on invoiceDate. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `dueDateAfter` (string (date-time)): Inclusive lower bound on dueDate. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `dueDateBefore` (string (date-time)): Inclusive upper bound on dueDate. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `pmsUploadedAfter` (string (date-time)): Inclusive lower bound on pmsUploadedAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `pmsUploadedBefore` (string (date-time)): Inclusive upper bound on pmsUploadedAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. Response: `{ data: Invoice[], pagination: Pagination }` #### GET /invoices/{id} Stored invoices, matching results, and review/billing state. Top-level monetary amounts are integer cents. Nested document data is returned as stored and may use different representations. Returns one record by its Mason UUID. Missing records and records outside the token's property management account both return 404. Parameters: - `id` (string (uuid), required): Mason UUID returned in the record id field. This is not a provider identifier or display number. Response: `{ data: Invoice }` ### contacts #### GET /contacts People and businesses in your property management account. Hydrate contact references with a detail request or the id/ids filters, even when the contact predates your incremental sync window. Filters are combined with AND, except the documented id/ids aliases. Unknown query parameters and empty filter values are ignored. Results are ordered newest first by record creation time, then by ID descending. Continue with nextCursor and the same filters. Incremental date bounds filter current rows; they do not provide complete historical changes or a snapshot across pages. Parameters: - `limit` (integer): Page size, normally 1–100. Defaults to 50 when omitted, zero, or not parseable as an integer; other parsed values are clamped to 1–100. - `cursor` (string): Opaque nextCursor from the preceding page. Omit for the first page; do not construct or modify cursor values. - `id` (string): Filter by one or more comma-separated Mason contact UUIDs. id and ids are aliases; when both are supplied their IDs are combined. Invalid UUID entries are ignored, and a set with no valid IDs matches nothing. Results still use normal pagination. - `ids` (string): Filter by one or more comma-separated Mason contact UUIDs. id and ids are aliases; when both are supplied their IDs are combined. Invalid UUID entries are ignored, and a set with no valid IDs matches nothing. Results still use normal pagination. - `contactType` (string): Exact match on contactType. Contact category, such as tenant, vendor, owner, tech, or property_manager. - `isActive` (boolean): Exact match on isActive. Whether the contact is marked active. - `search` (string): Case-insensitive literal substring match on name. Contact display name. Percent and underscore characters are treated literally, not as wildcards. - `createdAfter` (string (date-time)): Inclusive lower bound on createdAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `createdBefore` (string (date-time)): Inclusive upper bound on createdAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `updatedAfter` (string (date-time)): Inclusive lower bound on updatedAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. Related-record changes do not necessarily advance this timestamp. - `updatedBefore` (string (date-time)): Inclusive upper bound on updatedAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. Related-record changes do not necessarily advance this timestamp. Response: `{ data: Contact[], pagination: Pagination }` #### GET /contacts/{id} People and businesses in your property management account. Hydrate contact references with a detail request or the id/ids filters, even when the contact predates your incremental sync window. Returns one record by its Mason UUID. Missing records and records outside the token's property management account both return 404. Parameters: - `id` (string (uuid), required): Mason UUID returned in the record id field. This is not a provider identifier or display number. Response: `{ data: Contact }` ### control-logs #### GET /control-logs Maintenance visit/control-log records. Assigned technicians describe assignment, not completed labor. Nested JSON is returned as stored; changes to related records do not necessarily update this record timestamp. Filters are combined with AND, except the documented id/ids aliases. Unknown query parameters and empty filter values are ignored. Results are ordered newest first by record creation time, then by ID descending. Continue with nextCursor and the same filters. Incremental date bounds filter current rows; they do not provide complete historical changes or a snapshot across pages. Parameters: - `limit` (integer): Page size, normally 1–100. Defaults to 50 when omitted, zero, or not parseable as an integer; other parsed values are clamped to 1–100. - `cursor` (string): Opaque nextCursor from the preceding page. Omit for the first page; do not construct or modify cursor values. - `finalDisposition` (string): Exact match on finalDisposition. Recorded disposition, commonly Complete, Still Working, Canceled, Estimate, or an empty string. - `priority` (string): Exact match on priority. Recorded visit priority, commonly urgent, normal, or low. - `noteReviewed` (boolean): Exact match on noteReviewed. Whether the office has reviewed the recorded work notes; null means not recorded. - `assignedTech` (string): Match control logs whose assignedTechs contains this exact Mason technician contact ID. - `initialRoutingTech` (string): Match control logs whose legacy initialRouting contains this exact technician name. - `workOrderId` (string (uuid)): Exact match on internalWorkOrderId. Linked Mason work-order ID. Resolve it using GET /work-orders/{id}; null means no work order is linked. - `logDateAfter` (string (date-time)): Inclusive lower bound on logDate. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `logDateBefore` (string (date-time)): Inclusive upper bound on logDate. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `createdAfter` (string (date-time)): Inclusive lower bound on createdAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `createdBefore` (string (date-time)): Inclusive upper bound on createdAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `updatedAfter` (string (date-time)): Inclusive lower bound on updatedAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. Related-record changes do not necessarily advance this timestamp. - `updatedBefore` (string (date-time)): Inclusive upper bound on updatedAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. Related-record changes do not necessarily advance this timestamp. Response: `{ data: ControlLog[], pagination: Pagination }` #### GET /control-logs/{id} Maintenance visit/control-log records. Assigned technicians describe assignment, not completed labor. Nested JSON is returned as stored; changes to related records do not necessarily update this record timestamp. Returns one record by its Mason UUID. Missing records and records outside the token's property management account both return 404. Parameters: - `id` (string (uuid), required): Mason UUID returned in the record id field. This is not a provider identifier or display number. Response: `{ data: ControlLog }` ### properties #### GET /properties Properties associated with your account, including stored address, ownership, and provider details. No geocoding or owner lookup runs as part of this read. Filters are combined with AND, except the documented id/ids aliases. Unknown query parameters and empty filter values are ignored. Results are ordered newest first by record creation time, then by ID descending. Continue with nextCursor and the same filters. Incremental date bounds filter current rows; they do not provide complete historical changes or a snapshot across pages. Parameters: - `limit` (integer): Page size, normally 1–100. Defaults to 50 when omitted, zero, or not parseable as an integer; other parsed values are clamped to 1–100. - `cursor` (string): Opaque nextCursor from the preceding page. Omit for the first page; do not construct or modify cursor values. - `isActive` (boolean): Exact match on isActive. Whether the property is marked active. - `city` (string): Exact match on city. City. - `state` (string): Exact match on state. State or region. - `search` (string): Case-insensitive literal substring match on formattedAddress. Formatted property address. Percent and underscore characters are treated literally, not as wildcards. - `createdAfter` (string (date-time)): Inclusive lower bound on createdAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `createdBefore` (string (date-time)): Inclusive upper bound on createdAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `updatedAfter` (string (date-time)): Inclusive lower bound on updatedAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. Related-record changes do not necessarily advance this timestamp. - `updatedBefore` (string (date-time)): Inclusive upper bound on updatedAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. Related-record changes do not necessarily advance this timestamp. Response: `{ data: Property[], pagination: Pagination }` #### GET /properties/{id} Properties associated with your account, including stored address, ownership, and provider details. No geocoding or owner lookup runs as part of this read. Returns one record by its Mason UUID. Missing records and records outside the token's property management account both return 404. Parameters: - `id` (string (uuid), required): Mason UUID returned in the record id field. This is not a provider identifier or display number. Response: `{ data: Property }` ### scheduling-blocks #### GET /scheduling-blocks Stored availability and appointment blocks. blockType=confirmed identifies a confirmed work window. A confirmed block and tenantConfirmationStatus are distinct facts. Range endpoints can be null for unbounded windows. Filters are combined with AND, except the documented id/ids aliases. Unknown query parameters and empty filter values are ignored. Results are ordered newest first by record creation time, then by ID descending. Continue with nextCursor and the same filters. Incremental date bounds filter current rows; they do not provide complete historical changes or a snapshot across pages. Parameters: - `limit` (integer): Page size, normally 1–100. Defaults to 50 when omitted, zero, or not parseable as an integer; other parsed values are clamped to 1–100. - `cursor` (string): Opaque nextCursor from the preceding page. Omit for the first page; do not construct or modify cursor values. - `workOrderId` (string (uuid)): Exact match on workOrderId. Linked Mason work-order ID. Resolve it using GET /work-orders/{id}; null means no work order is linked. - `controlLogId` (string (uuid)): Exact match on controlLogId. Linked Mason control-log ID; resolve using GET /control-logs/{id}. - `contactId` (string (uuid)): Exact match on contactId. Linked Mason contact ID. Resolve it using GET /contacts/{id}; null means no contact is linked. - `blockType` (string): Exact match on blockType. Stored scheduling category, such as tenant_available, vendor_available, tentative, confirmed, tech_scheduling_proposal, blocked, superseded, on_call_assignment, on_call_override, or on_call_cancellation. - `source` (string): Exact match on source. Stored scheduling source, such as tenant_portal, vendor_portal, pm_manual, or ai_suggested. - `tenantConfirmationStatus` (string): Exact match on tenantConfirmationStatus. Stored tenant confirmation status, commonly pending or confirmed; null means legacy or unknown. - `linkKey` (string (uuid)): Exact match on linkKey. Identifier grouping blocks from one scheduling submission. - `createdAfter` (string (date-time)): Inclusive lower bound on createdAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `createdBefore` (string (date-time)): Inclusive upper bound on createdAt. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `startAfter` (string (date-time)): Inclusive lower bound on start. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `startBefore` (string (date-time)): Inclusive upper bound on start. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `endAfter` (string (date-time)): Inclusive lower bound on end. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. - `endBefore` (string (date-time)): Inclusive upper bound on end. Use an ISO 8601 timestamp with a timezone. Invalid dates match no records. Response: `{ data: SchedulingBlock[], pagination: Pagination }` #### GET /scheduling-blocks/{id} Stored availability and appointment blocks. blockType=confirmed identifies a confirmed work window. A confirmed block and tenantConfirmationStatus are distinct facts. Range endpoints can be null for unbounded windows. Returns one record by its Mason UUID. Missing records and records outside the token's property management account both return 404. Parameters: - `id` (string (uuid), required): Mason UUID returned in the record id field. This is not a provider identifier or display number. Response: `{ data: SchedulingBlock }` ### on-call-coverage #### GET /on-call-coverage Returns recorded effective coverage for the requested time window, ordered by coverage start, rotation name, then row ID. Projected coverage is excluded. This endpoint returns the full requested range and does not use limit/cursor pagination or a detail endpoint. Absence of a record does not establish complete coverage history. Parameters: - `start` (string (date-time), required): Beginning of the requested time window. Use an ISO 8601 timestamp with a timezone. start must precede end and the range must not exceed 400 days. - `end` (string (date-time), required): End of the requested time window. Use an ISO 8601 timestamp with a timezone. start must precede end and the range must not exceed 400 days. Response: `{ data: OnCallCoverage[] }` ### documentation #### GET /openapi.json Public OpenAPI 3.1 JSON document bundled with the API deployment. No token is needed. info.version is a content-derived contract revision; it changes when this specification changes. ETag supports identifying the published document. It contains documentation only and performs no customer-data reads. Response: `object` ## Response models ### Pagination Cursor pagination information. Fetch pages until hasMore is false. Reads are not an immutable historical snapshot. - `hasMore`: boolean — Whether another page of matching records exists at the time of this read. - `nextCursor`: string — Opaque continuation token. Present only when hasMore is true; omitted on the last page. Reuse the same resource and filters with this cursor. ### Error Error response returned instead of a data envelope. - `error`: string — Human-readable error message. No diagnostic stack or execution details are returned. ### OnCallCoverage One recorded on-call coverage segment. Results are ordered by coverage start, rotation name, and row ID. - `id`: string — Opaque coverage-row identifier. It is not a UUID and has no detail endpoint. - `rotationId`: string (uuid) — Mason on-call rotation ID. - `rotationName`: string — Recorded rotation name, or the current name when no snapshot is available. - `markets`: string[] — Recorded property-class coverage labels for the rotation; an empty array means no labels are recorded. - `scheduledShiftStart`: string (date-time) — Original scheduled shift start. - `scheduledShiftEnd`: string (date-time) — Original scheduled shift end. - `coverageStart`: string (date-time) — Start of this effective coverage segment within the requested range. - `coverageEnd`: string (date-time) — End of this effective coverage segment within the requested range. - `contactId`: string (uuid) | null — Covered technician/contact Mason ID, when available. - `contactName`: string — Recorded contact name; Unknown contact when a name is unavailable. - `contactEmail`: string | null - `source`: string; values: `rotation`, `override` — Whether coverage comes from the rotation or an override. - `overrideReason`: string | null - `overrideRecurrence`: string | null — Override repetition; null indicates no repeating override. - `canCorrect`: boolean — Whether the current application permits a correction to this coverage record; this API itself is read-only. - `recordStatus`: string — This endpoint returns recorded coverage only and excludes projected coverage. - `ledgerBlockId`: string (uuid) | null — Scheduling-block ID supporting this coverage record. - `recordedAt`: string (date-time) | null - `recordedBy`: string | null - `ledgerSource`: string | null - `recordReason`: string | null ### WorkOrder Maintenance work orders belonging to your property management account. Priority describes office attention; urgencyLevel and isEmergency describe maintenance urgency. Returned values reflect current stored state, not a historical snapshot. - `id`: string (uuid) — Unique Mason record ID. Use this value in the corresponding detail endpoint. - `description`: string — Recorded description of the maintenance request. - `status`: string — Stored work-order lifecycle status, for example created, reviewed, dispatched, work_in_progress, work_done, closed, cancelled, or duplicate. Other stored statuses may occur. - `propertyAddress`: string | null — Formatted address associated with the request. - `source`: string — Stored intake channel, commonly pms:portal, pms:text, pms:email, pms:call, pms:system, mason:portal, mason:text, mason:email, mason:call, mason:system, or mason:recurring. It describes the origin/channel, not the requester identity. Legacy values are returned unchanged. - `workOrderType`: string — Stored work category: reactive, reactive:recall, turn, recurring, misc, inspection, or an inspection subtype such as inspection:annual, inspection:move_in, inspection:move_out, inspection:pre_move_out, inspection:onboarding, inspection:semi_annual, or inspection:drive_by. Legacy values are returned unchanged. - `friendlyId`: string | null — Human-readable Mason work-order number, when assigned. Use id for API lookups. - `isEmergency`: boolean — Whether the work order is currently marked as an emergency. - `approved`: boolean | null — Recorded work-order approval flag; null means not recorded. - `vendorWorkOrderStatus`: string | null — Stored vendor progress status, such as sent, receipt_confirmed, or completed. - `hasEntryPermission`: boolean | null — Recorded permission to enter: true permits entry, false denies entry, and null means permission was not recorded. - `propertyId`: string (uuid) | null — Linked Mason property ID. Resolve using GET /properties/{id}. - `unitId`: string (uuid) | null — Linked Mason unit ID, when present. This API version currently has no units resource. - `tenantContactId`: string (uuid) | null — Primary tenant Mason contact ID. Resolve using GET /contacts/{id}. - `vendorContactId`: string (uuid) | null — Assigned vendor or in-house technician Mason contact ID. Resolve using GET /contacts/{id}; contactType may be vendor or tech. - `intakeMetadata`: object | null — Stored intake metadata returned unchanged. Available keys vary by intake source and record age; this is an extensible JSON object, not a complete history. - `priority`: string | null — Effective attention priority: the explicit priorityOverride when present, otherwise aiPriority. Null means no recognized value is available. - `aiPriority`: string | null — Stored assessed attention priority, before an explicit user override. - `priorityOverride`: string | null — Explicit user override of attention priority; null means no override. - `urgencyLevel`: string | null — Stored physical maintenance urgency from the work-order assessment; separate from office attention priority. - `createdAt`: string (date-time) — When the record was created in Mason, as an ISO 8601 timestamp. - `lastUpdated`: string (date-time) — Timestamp used by updatedAfter/updatedBefore. Includes initial import into Mason as well as stored work-order updates. Related-record changes and representation-only backfills may not advance it. ### Call Recorded phone calls scoped to your property management account. Call content and recording availability depend on the stored record. - `id`: string (uuid) — Unique Mason record ID. Use this value in the corresponding detail endpoint. - `phoneNumber`: string — Phone number associated with the other party. - `summary`: string | null — Stored readable summary of the call. - `transcript`: string | null — Stored call transcript as text. - `callDuration`: integer | null — Recorded call duration in seconds. - `recordingUrl`: string | null — URL of the stored call recording, when available. - `inBound`: boolean — True for an incoming call; false for an outgoing call. - `callStatus`: string | null — Stored call outcome, such as completed, failed, busy, or no-answer. - `callerRole`: string | null — Recorded role of the other party, such as tenant, vendor, or property_manager. Legacy roles may occur. - `callType`: string | null — Recorded business purpose of the call, such as vendor follow-up, scheduling, or work-order creation. - `requiresAction`: boolean — Whether the call is currently marked as requiring attention. - `internalWorkOrderId`: string (uuid) | null — Linked Mason work-order ID. Resolve it using GET /work-orders/{id}; null means no work order is linked. - `masonContactId`: string (uuid) | null — Linked Mason contact ID. Resolve it using GET /contacts/{id}; null means no contact is linked. - `createdAt`: string (date-time) — When the record was created in Mason, as an ISO 8601 timestamp. - `endedAt`: string (date-time) | null — When the call ended, if recorded, as an ISO 8601 timestamp. ### TextMessage Stored inbound and outbound text messages for your property management account. Work-order filtering matches the primary linked work order. - `id`: string (uuid) — Unique Mason record ID. Use this value in the corresponding detail endpoint. - `phoneNumber`: string — Phone number associated with the other party. - `message`: string — Stored message text. - `mediaUrls`: string[] | null — Stored URLs of media attached to this message. - `inBound`: boolean — True for a received message; false for a sent message. - `senderRole`: string | null — Recorded sender role, such as tenant, vendor, owner, tech, or property_manager. Legacy roles may occur. - `internalWorkOrderId`: string (uuid) | null — Linked Mason work-order ID. Resolve it using GET /work-orders/{id}; null means no work order is linked. - `masonContactId`: string (uuid) | null — Linked Mason contact ID. Resolve it using GET /contacts/{id}; null means no contact is linked. - `fromNumber`: string | null — Recorded sending phone number. - `toNumber`: string | null — Recorded receiving phone number. - `createdAt`: string (date-time) — When the record was created in Mason, as an ISO 8601 timestamp. ### Invoice Stored invoices, matching results, and review/billing state. Top-level monetary amounts are integer cents. Nested document data is returned as stored and may use different representations. - `id`: string (uuid) — Unique Mason record ID. Use this value in the corresponding detail endpoint. - `invoiceNumber`: string | null — Invoice number printed on the document. - `invoiceDate`: string (date-time) | null — Invoice date as an ISO 8601 timestamp. - `dueDate`: string (date-time) | null — Invoice due date as an ISO 8601 timestamp. - `totalAmount`: integer | null — Invoice total in integer cents. - `currency`: string | null — Stored currency code, commonly USD. - `subtotal`: integer | null — Invoice subtotal in integer cents. - `tax`: integer | null — Invoice tax in integer cents. - `vendorInfo`: object | null — Vendor information recorded on the invoice document. - `billToInfo`: object | null — Bill-to party recorded on the invoice document. - `items`: object[] | null — Stored invoice line items; nested amounts are not normalized by this read API. - `workOrderNumber`: string | null — Human-readable work-order number associated with the invoice. - `internalWorkOrderId`: string (uuid) | null — Linked Mason work-order ID. Resolve it using GET /work-orders/{id}; null means no work order is linked. - `confidence`: string | null — Stored extraction confidence or processing classification. Common values include high, medium, low, failed, failed_with_partial_data, and no_pdf_attachments. - `isInvoice`: boolean — Whether this record is classified as an invoice. - `additionalNotes`: string | null — Additional notes recorded with the invoice. - `isRecurring`: boolean — Whether the invoice was classified as recurring. - `recurringDescription`: string | null — Recorded description of the recurring charge. - `matchedVendor`: object | null — Vendor matched to the invoice. Provider-specific keys may be present; this is a stored snapshot, not a fresh vendor lookup. - `matchedProperty`: object | null — Property matched to the invoice. Stored provider snapshot; optional keys vary by provider and record age. - `matchedWorkOrder`: object | null — Work order matched to the invoice. Identifiers here belong to the connected system; use the invoice internalWorkOrderId for Mason API joins. - `emailMessageId`: string | null — Stored source email identifier; it is not necessarily a Mason record UUID. - `emailSender`: string | null — Source email sender. - `emailSubject`: string | null — Source email subject. - `filename`: string | null — Primary document filename. - `pdfBlobUrl`: string | null — URL of the primary document. Despite this field name, the document can be an image or another supported attachment type; inspect attachment mimeType. - `attachments`: object[] | null — Stored attachment records; optional metadata varies by document. - `status`: string — Stored invoice processing status, such as pending, processed, incomplete, not_invoice, reprocessing, failed, failed_with_partial_data, or no_pdf_attachments. - `reviewed`: boolean — Whether the invoice has been marked reviewed by the office/accounting process. - `reviewReason`: string | null — Recorded review disposition, commonly bill_created, completed_outside_mason, duplicate, not_an_invoice, or archived. - `pmApproved`: boolean — Whether the invoice is marked approved. - `pmApprovedAt`: string (date-time) | null — Recorded approval timestamp. - `pmApprovedBy`: string | null — Recorded approving user identifier, typically an email address. - `pmRejected`: boolean — Whether the invoice is marked rejected. - `pmRejectedAt`: string (date-time) | null — Recorded rejection timestamp. - `pmRejectionReason`: string | null — Recorded business reason for rejection. - `pmsUploadedAt`: string (date-time) | null — When bill upload to the connected property management system was recorded. - `pmsBillUrl`: string | null — Link to the bill created in the connected property management system. - `workDoneDescription`: string | null — Recorded description of the completed work used for billing. - `selectedGlAccountId`: string | null — Selected ledger account identifier in the connected system. - `selectedTerms`: string | null — Stored payment terms selected for billing. - `selectedMarkupPercentage`: string | null — Stored markup percentage as a decimal string; 10 means ten percent. - `selectedMarkupAccountId`: string | null — Selected ledger account identifier for markup. - `selectedDiscountPercentage`: string | null — Stored discount percentage as a decimal string; 10 means ten percent. - `shareInvoiceWithOwner`: boolean | null — Whether the invoice is marked to be shared with the owner; this flag alone does not prove delivery. - `suggestedBillSplits`: object[] | null — Recorded proposed bill allocations, when available. - `tenantChargeSignal`: object | null — Recorded recommendation about charging the resident. - `needsReview`: boolean — Whether the recorded validation result requires review. - `agreementValidation`: object | null — Stored invoice validation result describing whether the vendor, property, and work order agree. The explanation is also displayed in the invoice review UI. Optional historical processing metadata may be present. - `createdAt`: string (date-time) — When the record was created in Mason, as an ISO 8601 timestamp. - `updatedAt`: string (date-time) — When this record was last updated, as an ISO 8601 timestamp. Changes to related records do not necessarily advance this value. ### Contact People and businesses in your property management account. Hydrate contact references with a detail request or the id/ids filters, even when the contact predates your incremental sync window. - `id`: string (uuid) — Unique Mason record ID. Use this value in the corresponding detail endpoint. - `name`: string — Contact display name. - `phoneNumber`: string | null — Recorded contact phone number. - `email`: string | null — Recorded contact email address. - `contactType`: string — Contact category, such as tenant, vendor, owner, tech, or property_manager. - `isActive`: boolean — Whether the contact is marked active. - `preferredContactMethod`: string | null — Recorded preferred communication method. - `language`: string | null — Recorded preferred language. - `pmsUniqueId`: string | null — Contact identifier from the connected property management system; scoped to your account. - `createdAt`: string (date-time) — When the record was created in Mason, as an ISO 8601 timestamp. - `updatedAt`: string (date-time) — When this record was last updated, as an ISO 8601 timestamp. Changes to related records do not necessarily advance this value. ### ControlLog Maintenance visit/control-log records. Assigned technicians describe assignment, not completed labor. Nested JSON is returned as stored; changes to related records do not necessarily update this record timestamp. - `id`: string (uuid) — Unique Mason record ID. Use this value in the corresponding detail endpoint. - `logDate`: string (date-time) — Date represented by this control log, serialized as an ISO 8601 timestamp. - `controlNumber`: string — Legacy control-log reference. Use id for API lookups. - `location`: string — Recorded location of the work. - `problem`: string — Recorded description of the issue. - `instructions`: string | null — Dispatch instructions for the technician. - `priority`: string — Recorded visit priority, commonly urgent, normal, or low. - `finalDisposition`: string | null — Recorded disposition, commonly Complete, Still Working, Canceled, Estimate, or an empty string. - `noteReviewed`: boolean | null — Whether the office has reviewed the recorded work notes; null means not recorded. - `initialRouting`: string[] — Legacy routing technician names. Use assignedTechs for contact identifiers. - `workNotes`: object | null — Recorded work notes. Keys may be absent on older records. - `estimate`: object | null — Recorded visit estimate. Amounts retain their stored representation. - `activity`: object[] — Stored control-log activity entries; this is not a complete work-order history. - `assignedTechs`: string[] — Assigned technician Mason contact IDs. These are assignments, not evidence of hours worked. - `internalWorkOrderId`: string (uuid) | null — Linked Mason work-order ID. Resolve it using GET /work-orders/{id}; null means no work order is linked. - `createdAt`: string (date-time) — When the record was created in Mason, as an ISO 8601 timestamp. - `updatedAt`: string (date-time) — When this record was last updated, as an ISO 8601 timestamp. Changes to related records do not necessarily advance this value. ### Property Properties associated with your account, including stored address, ownership, and provider details. No geocoding or owner lookup runs as part of this read. - `id`: string (uuid) — Unique Mason record ID. Use this value in the corresponding detail endpoint. - `formattedAddress`: string — Formatted property address. - `address`: string — First address line. - `address2`: string | null — Second address line. - `city`: string — City. - `state`: string — State or region. - `zip`: string — Postal code. - `isActive`: boolean — Whether the property is marked active. - `multiUnit`: boolean — Whether the property is marked as containing multiple units. - `ownerInfo`: object[] | null — Stored property owner records; null means no ownership data was recorded, while an empty array contains no listed owners. - `propertyDetails`: object | null — Stored property details. Available keys and their representations depend on the connected property management system; additional keys may be present. - `createdAt`: string (date-time) — When the record was created in Mason, as an ISO 8601 timestamp. - `updatedAt`: string (date-time) — When this record was last updated, as an ISO 8601 timestamp. Changes to related records do not necessarily advance this value. ### SchedulingBlock Stored availability and appointment blocks. blockType=confirmed identifies a confirmed work window. A confirmed block and tenantConfirmationStatus are distinct facts. Range endpoints can be null for unbounded windows. - `id`: string (uuid) — Unique Mason record ID. Use this value in the corresponding detail endpoint. - `workOrderId`: string (uuid) | null — Linked Mason work-order ID. Resolve it using GET /work-orders/{id}; null means no work order is linked. - `controlLogId`: string (uuid) | null — Linked Mason control-log ID; resolve using GET /control-logs/{id}. - `contactId`: string (uuid) | null — Linked Mason contact ID. Resolve it using GET /contacts/{id}; null means no contact is linked. - `blockType`: string — Stored scheduling category, such as tenant_available, vendor_available, tentative, confirmed, tech_scheduling_proposal, blocked, superseded, on_call_assignment, on_call_override, or on_call_cancellation. - `source`: string — Stored scheduling source, such as tenant_portal, vendor_portal, pm_manual, or ai_suggested. - `tenantConfirmationStatus`: string | null — Stored tenant confirmation status, commonly pending or confirmed; null means legacy or unknown. - `timezone`: string — IANA timezone associated with the scheduling block, for example America/Los_Angeles. - `linkKey`: string (uuid) — Identifier grouping blocks from one scheduling submission. - `notes`: string | null — Stored scheduling notes. - `start`: string (date-time) | null — Beginning of the stored scheduling window; null means the range is unbounded at the start. - `end`: string (date-time) | null — End of the stored scheduling window; null means the range is unbounded at the end. - `createdAt`: string (date-time) — When the record was created in Mason, as an ISO 8601 timestamp. - `expiresAt`: string (date-time) | null — Expiration timestamp, when one is recorded. Expired records are not automatically excluded by this endpoint.