# Key BMS API Schemas Source: `GET https://api.bms.kaseya.com/swagger/v2/swagger.json` ## TicketInputDto (POST/PUT /v2/servicedesk/tickets) | Field | Type | Required | Notes | |---|---|---|---| | Title | string | ✅ | Ticket subject | | Details | string | ✅ | Body/description | | AccountId | integer | ✅ | Client account ID | | LocationId | integer | ✅ | Account location ID | | StatusId | integer | ✅ | Use `bms lookup statuses` | | PriorityId | integer | ✅ | Use `bms lookup priorities` | | TypeId | integer | ✅ | Use `bms lookup ticket-types` | | SourceId | integer | ✅ | Use `bms lookup sources` | | OpenDate | string (ISO 8601) | ✅ | e.g. `2024-01-15T00:00:00` | | ContactId | integer | | Contact person at the account | | AssigneeId | integer | | Technician assigned | | QueueId | integer | | Queue to place ticket in | | IssueTypeId | integer | | | | SubIssueTypeId | integer | | | | DueDate | string | | ISO 8601 | | SLAId | integer | | | | WorkTypeId | integer | | | ## TicketFilterDto (inside GetTicketsInputDto.Filter) Useful filter fields for `POST /v2/servicedesk/tickets/search`: | Field | Type | Notes | |---|---|---| | StatusNames | string | Comma-separated or single status name | | AssigneeName | string | Partial match supported | | PriorityNames | string | Priority name(s) | | QueueNames | string | Queue name(s) | | Account | string | Account name search | | Title | string | Ticket title search | | CreatedOnFrom | string (ISO 8601) | Date range start | | CreatedOnTo | string (ISO 8601) | Date range end | | OpenDateFrom / OpenDateTo | string | Open date range | | DueDateFrom / DueDateTo | string | Due date range | | ExcludeCompleted | integer | 1 = exclude completed | | AccountIds | string | Comma-separated account IDs | ## TicketNotePostInputDto (POST /v2/servicedesk/tickets/{id}/notes) | Field | Type | Required | Notes | |---|---|---|---| | Details | string | ✅ | Note body | | IsInternal | boolean | ✅ | true = internal (hidden from client portal) | | TypeId | integer | ✅ | Note type ID — use `bms lookup note-types` | | NoteDate | string (ISO 8601) | ✅ | When the note was created | | StatusId | integer | | Change ticket status simultaneously | ## AssignTicketInputDto (POST /v2/servicedesk/tickets/{id}/assignticket) | Field | Type | Required | Notes | |---|---|---|---| | Details | string | ✅ | Assignment note text | | IsInternal | boolean | ✅ | | | TypeId | integer | ✅ | Note type | | NoteDate | string | ✅ | | | StatusId | integer | ✅ | Status after assignment | | AssigneeId | integer | | New assignee | | QueueId | integer | | Queue to move to | ## ResolveTicketDto (POST /v2/servicedesk/tickets/{id}/resolve) | Field | Type | Required | Notes | |---|---|---|---| | Comment | string | ✅ | Resolution description | | StatusId | integer | | Override resolved status | | IsPublishToKnowledgeBase | boolean | | Add to KB | | IsInternal | boolean | | | ## Pagination (GetTicketsInputDto) | Field | Notes | |---|---| | PageNumber | 1-indexed | | PageSize | Max ~100 | | Sort | e.g. `"CreatedOn desc"` | ## Auth: POST /v2/security/authenticate Multipart form-data: | Field | Notes | |---|---| | GrantType | `"password"` or `"client_credentials"` | | UserName | For password grant | | Password | For password grant | | Tenant | Your tenant name (required) | | ClientId | For client_credentials grant | | ClientSecret | For client_credentials grant | Response contains: `AccessToken`, `RefreshToken`, `ExpiresIn` ## Auth: POST /v2/security/refreshtoken JSON body: | Field | Required | |---|---| | AccessToken | ✅ | | RefreshToken | ✅ |