# InboxOps Docs ## Docs - [Welcome to InboxOps](https://docs.inboxops.app/README.md): Customer-facing documentation for InboxOps — shared inbox and ticketing for end users and API integrators. ## API - [Public API](https://docs.inboxops.app/api/public-api.md): Authentication, limits, errors, pagination, custom fields on tickets and CRM, OpenAPI, API key scope, idempotency, and what is in-app only for InboxOps integrators. - [List SLA policies](https://docs.inboxops.app/api-reference/get-sla-policies.md): Read-only; same rows as in-app SLA settings, ordered by name. - [Get business hours](https://docs.inboxops.app/api-reference/get-sla-business_hours.md): Read-only weekly schedule and timezone; **data** is **null** if not configured. - [Bulk ticket actions](https://docs.inboxops.app/api-reference/post-tickets-bulk.md): Mirrors in-app bulk actions: **update_status**, **assign**, **add_tags**, **remove_tags**, **move_inbox**. Bulk delete is not available on the public API. Webhooks fire per affected ticket where applicable (**ticket.updated**, **ticket.status_changed**, **ticket.closed**, **ticket.assigned**). - [List tickets](https://docs.inboxops.app/api-reference/get-tickets.md): Optional **custom field** filters: any query parameter whose name is **`custom_field_` + `field_key`** (same snake_case key as in ticket `custom_fields`) restricts results to tickets whose stored value for that definition matches the parameter value (AND with other filters). Send the literal value **`__empty__`** to match tickets with **no** stored value for that field. At most **10** distinct keys; values are validated per definition type (for example option UUID for `select` / `multi_select`, `YYYY-MM-DD` for `date`, ISO 8601 for `date_time`). Definitions scoped to **selected mailboxes** only apply when the ticket’s inbox is linked to the definition. - [Create ticket](https://docs.inboxops.app/api-reference/post-tickets.md): No description found - [Get ticket](https://docs.inboxops.app/api-reference/get-tickets-id.md): No description found - [Update ticket](https://docs.inboxops.app/api-reference/patch-tickets-id.md): No description found - [Clear reminder / snooze](https://docs.inboxops.app/api-reference/delete-tickets-id-reminder.md): Idempotent: always 200 with success true if the ticket exists. - [List messages (timeline)](https://docs.inboxops.app/api-reference/get-tickets-id-messages.md): Returns **email** and **internal_note** rows, oldest first (same as in-app ticket timeline). Draft outbound messages are omitted. Optional **types** filters by comma-separated `email` and/or `internal_note` (default: both). - [Add internal note (no outbound reply)](https://docs.inboxops.app/api-reference/post-tickets-id-messages.md): Only type: 'internal_note' is allowed. Outbound replies are not supported via the API. - [List tags on ticket](https://docs.inboxops.app/api-reference/get-tickets-id-tags.md): No description found - [Add tag to ticket](https://docs.inboxops.app/api-reference/post-tickets-id-tags.md): No description found - [Remove tag from ticket](https://docs.inboxops.app/api-reference/delete-tickets-id-tags-tag_id.md): No description found - [Download attachment (presigned redirect)](https://docs.inboxops.app/api-reference/get-attachments-id-download.md): Returns **307 Temporary Redirect** to a presigned S3 URL. Clients should follow redirects (e.g. curl `-L`). URL expires in **15 minutes** (same default as in-app download). Attachment must belong to the API key tenant. - [List inboxes](https://docs.inboxops.app/api-reference/get-inboxes.md): No description found - [Get inbox](https://docs.inboxops.app/api-reference/get-inboxes-id.md): No description found - [List ticket statuses (read-only)](https://docs.inboxops.app/api-reference/get-ticket_statuses.md): Tenant custom statuses ordered by position (same data as in-app settings). - [List ticket priorities (read-only)](https://docs.inboxops.app/api-reference/get-ticket_priorities.md): No description found - [List tags](https://docs.inboxops.app/api-reference/get-tags.md): No description found - [Create tag](https://docs.inboxops.app/api-reference/post-tags.md): No description found - [Update tag](https://docs.inboxops.app/api-reference/patch-tags-id.md): No description found - [Delete tag](https://docs.inboxops.app/api-reference/delete-tags-id.md): No description found - [List contacts](https://docs.inboxops.app/api-reference/get-contacts.md): No description found - [Create or upsert contact by email](https://docs.inboxops.app/api-reference/post-contacts.md): Uses resolve-or-create by email; optional company_id. - [Get contact](https://docs.inboxops.app/api-reference/get-contacts-id.md): Includes up to 20 recent tickets for this contact. - [Update contact](https://docs.inboxops.app/api-reference/patch-contacts-id.md): No description found - [Delete contact](https://docs.inboxops.app/api-reference/delete-contacts-id.md): No description found - [List companies](https://docs.inboxops.app/api-reference/get-companies.md): No description found - [Create company](https://docs.inboxops.app/api-reference/post-companies.md): No description found - [Get company](https://docs.inboxops.app/api-reference/get-companies-id.md): Includes up to 50 contacts on the company. - [Update company](https://docs.inboxops.app/api-reference/patch-companies-id.md): No description found - [Delete company](https://docs.inboxops.app/api-reference/delete-companies-id.md): No description found - [Public API errors (RFC 7807)](https://docs.inboxops.app/api/problems.md): How InboxOps Problem Details work, request correlation, and links to each stable error code used in type URIs. - [Problem instance URIs](https://docs.inboxops.app/api/problems/instances.md): What the instance field in Public API Problem Details means and how it relates to X-Request-Id. - [bad_request (400)](https://docs.inboxops.app/api/problems/bad_request.md): Public API Problem code bad_request — the request was malformed or failed validation (HTTP 400). - [unauthorized (401)](https://docs.inboxops.app/api/problems/unauthorized.md): Public API Problem code unauthorized — missing, invalid, or revoked API credentials (HTTP 401). - [forbidden (403)](https://docs.inboxops.app/api/problems/forbidden.md): Public API Problem code forbidden — authenticated but not allowed to use the API for this workspace (HTTP 403). - [insufficient_scope (403)](https://docs.inboxops.app/api/problems/insufficient_scope.md): Public API Problem code insufficient_scope — read-only API key used for a mutating request (HTTP 403). - [not_found (404)](https://docs.inboxops.app/api/problems/not_found.md): Public API Problem code not_found — resource or route does not exist for this workspace (HTTP 404). - [method_not_allowed (405)](https://docs.inboxops.app/api/problems/method_not_allowed.md): Public API Problem code method_not_allowed — HTTP method not supported for this path (HTTP 405). - [conflict (409)](https://docs.inboxops.app/api/problems/conflict.md): Public API Problem code conflict — request conflicts with current state, such as a duplicate unique name (HTTP 409). - [idempotency_conflict (409)](https://docs.inboxops.app/api/problems/idempotency_conflict.md): Public API Problem code idempotency_conflict — same Idempotency-Key reused with a different JSON body (HTTP 409). - [rate_limit_exceeded (429)](https://docs.inboxops.app/api/problems/rate_limit_exceeded.md): Public API Problem code rate_limit_exceeded — workspace rate limit exceeded (HTTP 429). - [internal_error (500)](https://docs.inboxops.app/api/problems/internal_error.md): Public API Problem code internal_error — unexpected server failure (HTTP 500). - [service_unavailable (503)](https://docs.inboxops.app/api/problems/service_unavailable.md): Public API Problem code service_unavailable — dependency unavailable, e.g. attachment storage not configured (HTTP 503).