# BOSS Public API — Full documentation API version: v1 Generated: 2026-10-12T21:08:46+00:00 Canonical index: https://pieceofmind.coreware.app/llms.txt OpenAPI: https://pieceofmind.coreware.app/openapi.json This file is generated from the same sources as the Developer Portal. It is authoritative. Do not invent BOSS endpoints or fields that are not present here. # Overview Canonical URL: https://pieceofmind.coreware.app/docs/overview.md API version: v1 Last generated: 2026-10-12T21:08:46+00:00 The BOSS Public API is a tenant-scoped REST API. Staff manage tokens in Company Settings → Developer API. - Base URL: `https://pieceofmind.coreware.app/api/public/v1` - Version: `v1` - Auth: `Authorization: Bearer cw_live_` - Format: JSON - OpenAPI: https://pieceofmind.coreware.app/openapi.json Only endpoints present in the OpenAPI specification exist. Token catalog modules that still have no public routes in v1 are marketing, pawn, and company. Do not call those modules until they appear in OpenAPI. --- # Authentication Canonical URL: https://pieceofmind.coreware.app/docs/authentication.md API version: v1 Last generated: 2026-10-12T21:08:46+00:00 Use an API token created by a tenant admin. ``` Authorization: Bearer cw_live_YOUR_TOKEN Accept: application/json ``` Rules: 1. Never expose tokens in browsers, mobile apps, or public repositories. 2. Store tokens in environment variables or a secrets manager. 3. Tokens are scoped. A contacts:read token cannot write contacts or access knowledge. 4. Knowledge Studio scopes are granted only on the primary tenant. 5. Optional IP allow lists can be set on the token. Example: ```bash curl -X GET "https://pieceofmind.coreware.app/api/public/v1/contacts" \ -H "Authorization: Bearer cw_live_YOUR_TOKEN" \ -H "Accept: application/json" ``` --- # API conventions Canonical URL: https://pieceofmind.coreware.app/docs/conventions.md API version: v1 Last generated: 2026-10-12T21:08:46+00:00 - HTTPS only. - JSON request and response bodies. - Resource IDs are integers or opaque strings. Do not assume they are sequential. - List responses use `{ "data": [], "meta": { "current_page", "last_page", "per_page", "total" } }`. - Success create responses use HTTP 201 when documented. - Error responses use HTTP status codes with a `message` field. - Timestamps in API payloads are ISO-8601 UTC. - Date-only fields are calendar dates without timezone conversion. - Location and tenant boundaries are enforced server-side. Do not assume the token can see every location. --- # Pagination Canonical URL: https://pieceofmind.coreware.app/docs/pagination.md API version: v1 Last generated: 2026-10-12T21:08:46+00:00 Documented list endpoints accept: - `page` — 1-based page number - `per_page` — page size, typically 1–100, default 25 or 50 depending on the endpoint Response meta: ```json { "meta": { "current_page": 1, "last_page": 4, "per_page": 25, "total": 92 } } ``` Stop requesting more pages when `current_page >= last_page` or `data` is empty. Do not invent cursor or `since` parameters unless they appear on the specific operation. --- # Errors Canonical URL: https://pieceofmind.coreware.app/docs/errors.md API version: v1 Last generated: 2026-10-12T21:08:46+00:00 Handle these documented statuses explicitly: | Status | Meaning | | --- | --- | | 401 | Missing or invalid token | | 403 | Token lacks the required scope, IP is blocked, or the tenant cannot use the resource | | 404 | Resource not found | | 422 | Validation failed | | 429 | Rate limited | Do not infer undocumented error codes. Validation errors may include an `errors` object. Rate-limited responses include `Retry-After`. --- # Rate limits Canonical URL: https://pieceofmind.coreware.app/docs/rate-limits.md API version: v1 Last generated: 2026-10-12T21:08:46+00:00 The public API allows 120 requests per minute per token and IP. When you receive HTTP 429: 1. Read the `Retry-After` header. 2. Wait that many seconds. 3. Retry the same request once. 4. Back off if 429 continues. Do not retry 401, 403, 404, or 422 in a loop. --- # Idempotency Canonical URL: https://pieceofmind.coreware.app/docs/idempotency.md API version: v1 Last generated: 2026-10-12T21:08:46+00:00 Public API v1 does not have a generic `Idempotency-Key` contract. Exceptions: - `POST /service-requests/{id}/messages`: send `Idempotency-Key` or `idempotency_key` so a retry returns the original message with `posted: false` instead of a second comment. - Resource Center guide writes (article/step create/update, reorder, still upload, promote): send `Idempotency-Key` or `idempotency_key` so a retry returns the original response body and status. For other POST/PUT calls, store the returned resource ID and check before creating again. --- # Webhooks Canonical URL: https://pieceofmind.coreware.app/docs/webhooks.md API version: v1 Last generated: 2026-10-12T21:08:46+00:00 Token scopes: `webhooks:read`, `webhooks:write`, `webhooks:delete`. Staff can create and manage endpoints in Company → Tools → Developer API → Webhooks. There is no separate Webhooks menu. The same subscriptions are available over the Public API. ## Create a subscription `POST /webhooks` ```json { "name": "CRM sync", "url": "https://example.com/hooks/coreware", "events": ["contact.created", "form.submitted"] } ``` HTTPS URLs only. `events` may include `*` to receive every dispatched event. The signing secret (`whsec_...`) is returned once on create. Rotate it with `POST /webhooks/{webhookId}/rotate-secret`. `GET /webhook-events` lists event names. Subscribe only to events with `available: true`. Reserved events (`knowledge.published`, `guide.created`) are documented but not dispatched in v1. ## Delivery payload BOSS POSTs JSON to your URL: ```json { "id": "whevt_abc", "event": "contact.created", "created_at": "2026-09-15T16:00:00+00:00", "data": { "id": 42, "object": "contact" } } ``` Headers: - `Signature` — HMAC-SHA256 of the raw JSON body using the webhook secret - `X-Coreware-Event` — event name - `X-Coreware-Webhook-Id` — public webhook id Failed deliveries retry three times with exponential backoff. `POST /webhooks/{webhookId}/test` queues `webhook.test` to that endpoint even if the event is not in the subscription filter. Do not invent unsigned webhook URLs or events that are not in `GET /webhook-events`. --- # Service requests Canonical URL: https://pieceofmind.coreware.app/docs/service.md API version: v1 Last generated: 2026-10-12T21:08:46+00:00 Token scopes: `service:read` and `service:write`. Every `{id}` path accepts `REQ-010299` or the numeric id. Statuses and types are tenant-configured. Read them; do not hardcode an enum. ## Daily loop 1. List work: `GET /service-requests?queue=mine` or `?queue=open&request_type=Development` 2. Open a ticket: `GET /service-requests/REQ-010299` — metadata, contact, thread (`messages[].body`), attachments, `deep_link` 3. Comment: `POST /service-requests/REQ-010299/messages` with `{ "body": "line one\\nline two" }`. Visible staff reply. `internal: true` for a note. Send `Idempotency-Key` so a retry returns `posted: false` 4. Route it: `PATCH /service-requests/REQ-010299` with `{ "status": "QA", "assignee_id": 17 }` `assignee.id`, `original_poster.id` (when `kind` is `staff`), and `/service-assignees` `id` are the same person id. Copy that value into `assignee_id`. If `original_poster.kind` is `contact`, they are not assignable — look up Ryan / Colt / Tyler on `GET /service-assignees?search=`. ## Lookups - `GET /request-statuses` — In Progress, QA, Needs Review, Needs Updates, Closed, plus tenant extras - `GET /request-types` — Development, Guides, … - `GET /service-assignees?search=ryan` ## Handoffs Dev QA: post the fix comment, then `PATCH { "status": "QA", "assignee_id": original_poster.id }` when the poster is staff. Guide Needs Review: post the update comment, then `PATCH { "status": "Needs Review", "assignee_id": }`. Create a ticket with `POST /service-requests` (`title`, `description`, `request_type_id`, `priority_id`, `contact_id`). Work-order types are rejected. Not in v1: Guide Builder, bulk edits, unread-since, work-order writes. Service request create/update and message create emit documented webhook events. --- # Changelog Canonical URL: https://pieceofmind.coreware.app/docs/changelog.md API version: v1 Last generated: 2026-10-12T21:08:46+00:00 API version: v1 - Public API v1 includes contacts, subscriptions, memberships, products, sales, invoices, payments, service, scheduling, widget auth, Knowledge Studio, websites, forms, accounting, opportunities, proposals, branding, meetings, Resource Center authoring, action plans, notebooks, outbound webhooks, purchasing, and FFL. - Documentation resource groups are listed alphabetically. - Knowledge Studio routes are primary-tenant only and require `knowledge:read` or `knowledge:write`. - Websites support site/page/theme/media writes, draft page documents, banners, banner collections, site or page publish, and website template list/show/create/update/delete. Template list payloads include agent-facing descriptions and page summaries. - Forms cover CRM contact intake, waivers, HR/employee packets, surveys, field-type catalog, survey results, publish/unpublish/archive/duplicate, submissions, prefill, nested contact waiver status, and file uploads. Unauthenticated embed routes stay outside this API. - Accounting covers chart of accounts, accounts, balanced manual journal entries, reverse, expenses, and reports. Auto-post settings, bank match, and QuickBooks are not available. - Opportunities and proposals use dedicated scopes. `contacts:write` is not sufficient. - Branding covers brand kits, colors, fonts, logos, and website assignment. AI generate, virtual backgrounds, and uploaded font files are not available. - Meetings cover staff meeting CRUD, duplicate, cancel, leave, and the meetings calendar layer. Notetaker, transcripts, briefing, and Google OAuth internals are not available. - Resource Center covers tenant and global catalog user guides, walkthrough steps, step screenshot upload/delete, step reorder, guided tours, collections, page hotspots, onboarding checklists, and tenant-to-global promotion. Pass source=global for global catalog access (primary tenant + Coreware employee). AI generate, analytics, learner progress, reviews, and capture are not available. - Action Plans cover plans, folders, runs, versions, and trigger or step metadata. AI generate, API-connector execute, batch test, and comprehensive simulation are not available. - Notebooks cover notebooks, pages, comments, tags, collections, favorites, and markdown export. AI chat/generate/audio/format, Yjs collaboration, live viewers, landlord global catalog, and Notion or spreadsheet import are not available. - Outbound webhooks cover tenant-scoped HTTPS subscriptions with HMAC `Signature` headers, `GET /webhook-events`, create/update/delete, secret rotation, and test delivery. Setup lives on Developer API → Webhooks. Knowledge publish and Resource Center create events are reserved and not dispatched in v1. - Customer invoices cover create, update, delete, aging, terms, offline payment recording, email, and payment links with `sales:read` / `sales:write` / `sales:delete`. Card charging, hosted fields, vault, BIN lookup, POS sale create, and supplier invoices are not available. - Payments cover payment types, merchant account metadata, gateway transactions, and processor settlement batches with `payments:read`. Credentials, hosted fields, vault, BIN lookup, virtual terminal, filter presets, payment-type configuration toggles, live batch sync, and dashboard KPIs are not available. - Recurring membership SKUs and general catalog products can be created, updated, and deleted with `products:write` / `products:delete`. Inventory, serials, variations, categories, and manufacturers are included. Required membership forms are read and attached with `memberships:read` / `memberships:write`. - Purchasing covers purchase orders, receivings, inventory transfers (out, in, immediate, cancel), and suppliers with `purchasing:read` / `purchasing:write` / `purchasing:delete`. - FFL covers Form 4473 list/show/create/update/close/reopen/invalidate/pdf, bound books acquire/dispose, firearm transfers, transfer statuses, and Form 3310 reads with `ffl:read` / `ffl:write`. - Customer invoices are writable with `sales:write` / `sales:delete`. Sale items, notes, returns, and sale types are documented. Payment types, merchant accounts, and gateway transactions are read-only with `payments:read`. Subscription enroll, pause, resume, and cancel use `subscriptions:write` and the same billing rules as staff. POS sale create, hosted fields, vault, BIN lookup, and supplier invoices are not available. - Service requests support get-by-REQ-number, list/filter with page+total, staff replies with newline preservation and comment idempotency, status+assignee updates, assignee search, tasks, and attachments with `service:write`. Work orders stay read-only. - Do not send a generic `Idempotency-Key` header except on `POST /service-requests/{id}/messages` and Resource Center guide write endpoints. - Scheduling supports offering create, update, and delete for service, class/event, facility, and walk-in queue, plus resource and facility create, update, and delete with weekly availability. Waitlist list, add, promote, and remove are on `/offerings/{offering}/waitlist` and `/waitlist/{entry}`. Sessions are produced from schedule_rules. Booking create, update, reschedule, reserve, and cancel stay on the booking routes. Hero images, badges, notification templates, and booking card capture are not available. Deprecated behavior is called out on the operation when it exists. If a page or field is marked deprecated, do not use it in new integrations. --- # Knowledge Studio Canonical URL: https://pieceofmind.coreware.app/docs/knowledge.md API version: v1 Last generated: 2026-10-12T21:08:46+00:00 Manage Knowledge Studio library entries and crawl sources over the public API. Availability: - Primary tenant only - Token must include `knowledge:read` and/or `knowledge:write` - A token without those scopes receives 403 even for an admin user Library: - `GET /knowledge/library` - `GET /knowledge/library/{entry}` - `POST /knowledge/library` - `PUT /knowledge/library/{entry}` - `POST /knowledge/library/{entry}/publish` - `POST /knowledge/library/bulk-status` - `POST /knowledge/library/import/preview` - `POST /knowledge/library/import` Sources: - `GET /knowledge/sources` - `POST /knowledge/sources` - `PUT /knowledge/sources/{source}` - `POST /knowledge/sources/bulk-status` - `POST /knowledge/sources/{source}/discover` - `POST /knowledge/documents/{document}/publish` Required create fields for a library entry: `question`, `answer`. --- # Websites Canonical URL: https://pieceofmind.coreware.app/docs/websites.md API version: v1 Last generated: 2026-10-12T21:08:46+00:00 Manage sites, pages, theme, templates, media, banners, and banner collections. Scopes: `websites:read`, `websites:write`, `websites:delete`. - List templates with `GET /website-templates`. Each row includes `description`, `tags`, `category`, and `pages` summaries so an agent can pick a template. `GET /website-templates/{id}` adds the full `content` snapshot. - Create a template with `POST /website-templates`: snapshot an existing site (`website_id`) or author `content.pages`. `description` is required and should explain audience and page structure. Categories come from `GET /website-template-categories`. - Create a site with `POST /websites`. Optional `template_id` clones an active published template. - Upload media with `POST /media` (multipart `file`). There is no separate `media:write` scope. - `PATCH /websites/{websiteId}/theme` accepts `colors`, `fonts`, `spacing`, and `logo_media_id`. - `PUT /pages/{pageId}` replaces `draft_content`. `GET` returns `document` as draft ?? published plus `published_document`. - Build pages from `section`, `row`, `column`, `heading`, `text`, `image`, and `button` blocks. Copy goes in `props.content` or `props.text`. Color, font, spacing, radius, background, and column width go on block props, not in HTML. Content columns stack on a phone, short toolbars wrap, and a single desktop font size is scaled down for mobile. `text.content` must not contain `
`, `