# Protodesk > Build with Protodesk. Guides, REST API reference, webhooks, realtime, and Help Center authoring with MCP. - [Build with Protodesk](https://docs.protodesk.io/index.md): Connect your product, automate support workflows, and bring AI into Help Center authoring. - [Make your first request](https://docs.protodesk.io/quickstart.md): Verify your API key and read customer records from your workspace. - [Authentication and permissions](https://docs.protodesk.io/guides/authentication.md): Authenticate server-side requests with a scoped workspace API key. - [Pagination](https://docs.protodesk.io/guides/pagination.md): Read complete result sets with opaque cursors. - [Errors and retries](https://docs.protodesk.io/guides/errors-and-retries.md): Handle failures, rate limits, and uncertain writes without creating duplicates. - [Customers and conversations](https://docs.protodesk.io/guides/customers-and-conversations.md): Connect your application's customer records to support conversations. - [Webhooks](https://docs.protodesk.io/guides/webhooks.md): Receive signed workspace events and process deliveries safely. - [Realtime events](https://docs.protodesk.io/guides/realtime.md): Listen to workspace updates with a server-sent event stream. - [API reference](https://docs.protodesk.io/api-reference/overview.md): The production REST API, with schemas generated from Protodesk's published OpenAPI specification. - [Check authentication](https://docs.protodesk.io/api-reference/account/me.md) - [List customers](https://docs.protodesk.io/api-reference/customers/listCustomers.md) - [Create a customer](https://docs.protodesk.io/api-reference/customers/createCustomer.md) - [Upsert a customer by externalId](https://docs.protodesk.io/api-reference/customers/upsertCustomer.md): Creates a customer when no customer with the given externalId exists (201), or patches the existing one (200). Only the provided fields are written on update. externalId is the natural key and is required. - [Get a customer](https://docs.protodesk.io/api-reference/customers/getCustomer.md) - [Delete a customer](https://docs.protodesk.io/api-reference/customers/deleteCustomer.md): Soft-deletes the customer: it disappears from lists but is retained so conversation history still resolves. Idempotent. - [Update a customer](https://docs.protodesk.io/api-reference/customers/updateCustomer.md) - [List a customer's channel identities](https://docs.protodesk.io/api-reference/channel-identities/listIdentities.md) - [Link a channel identity to a customer](https://docs.protodesk.io/api-reference/channel-identities/createIdentity.md): API-created identities default verified=false. Passing verified=true asserts your system authenticated the identity (recorded with verifiedAt) and allows it to auto-merge. A (channel, identifier) already claimed by another customer returns 409 with the owning customerId. - [Remove a channel identity](https://docs.protodesk.io/api-reference/channel-identities/deleteIdentity.md) - [List conversations](https://docs.protodesk.io/api-reference/conversations/listConversations.md) - [Create a conversation](https://docs.protodesk.io/api-reference/conversations/createConversation.md) - [Get a conversation](https://docs.protodesk.io/api-reference/conversations/getConversation.md) - [Update a conversation](https://docs.protodesk.io/api-reference/conversations/updateConversation.md) - [Assign a conversation](https://docs.protodesk.io/api-reference/conversations/assignConversation.md) - [Resolve a conversation](https://docs.protodesk.io/api-reference/conversations/resolveConversation.md) - [List workspace statuses](https://docs.protodesk.io/api-reference/statuses-and-priorities/listStatuses.md) - [List workspace priorities](https://docs.protodesk.io/api-reference/statuses-and-priorities/listPriorities.md) - [List a conversation's assignments](https://docs.protodesk.io/api-reference/assignments/listAssignments.md) - [List messages](https://docs.protodesk.io/api-reference/messages/listMessages.md) - [Create a message](https://docs.protodesk.io/api-reference/messages/createMessage.md) - [List webhook subscriptions](https://docs.protodesk.io/api-reference/webhooks/listWebhooks.md) - [Create a webhook subscription](https://docs.protodesk.io/api-reference/webhooks/createWebhook.md) - [Update a webhook subscription](https://docs.protodesk.io/api-reference/webhooks/updateWebhook.md) - [Delete a webhook subscription](https://docs.protodesk.io/api-reference/webhooks/deleteWebhook.md) - [Send a test delivery](https://docs.protodesk.io/api-reference/webhooks/testWebhook.md): Sends a synthetic `webhook.test` event through the real delivery path (same headers and HMAC signature) and returns the result synchronously. Use this to verify your endpoint before real traffic. - [List recent deliveries](https://docs.protodesk.io/api-reference/webhooks/listWebhookDeliveries.md): Recent delivery attempts for one subscription, newest first. - [Stream workspace events (SSE)](https://docs.protodesk.io/api-reference/realtime/streamEvents.md): A Server-Sent Events stream of the workspace event outbox — the same events and payloads delivered to webhooks. Each message carries the event id in the SSE `id:` field; reconnect with `Last-Event-ID` (or the `cursor` query param) to replay events missed while disconnected. Without a cursor, only ev… - [Identify an explicitly delegated Help Center connection](https://docs.protodesk.io/api-reference/help-authoring/getAuthoringContext.md): Requires help:read on an unexpired human-owned authoring connection. Generic keys do not gain access. Every request rechecks the creator's current owner/admin membership. Environment labels do not create a sandbox; workspaceId is the actual target. - [Propose a set of new Help Center articles](https://docs.protodesk.io/api-reference/help-authoring/createAuthoringArticleSet.md): Requires help:read and help:drafts:write. Atomically stores 1–20 immutable candidates, not canonical articles. Human approval adds unpublished drafts. Maximum serialized request 64 KiB. Retry only identical payload and Idempotency-Key. Duplicate locale/slug candidates or canonical URLs conflict; not… - [Read this connection's generated article set](https://docs.protodesk.io/api-reference/help-authoring/getAuthoringArticleSet.md) - [List draft and published Help Center article summaries](https://docs.protodesk.io/api-reference/help-authoring/listAuthoringArticles.md): Requires help:read. Orders by stable article ID; pass nextCursor as after. Searches titles and excerpts, never returns bodies in list results. Pagination is not a historical snapshot; concurrent additions may require a fresh listing. No private Knowledge or ticket data is included. Workspace comes o… - [Read one authorized Help Center article and revision](https://docs.protodesk.io/api-reference/help-authoring/getAuthoringArticle.md): Requires help:read. Includes Markdown, never private Knowledge import metadata or ticket data. Response is not cacheable. - [Propose immutable content changes without publishing](https://docs.protodesk.io/api-reference/help-authoring/createAuthoringProposal.md): Requires help:read and help:drafts:write. Existing article only. Expected revision must match. Reusing the same key and payload for the same connection returns its existing proposal; another payload conflicts. Keys are retained with proposals. Replays recheck connection expiry, revocation, and creat… - [Read a proposal originating from this connection](https://docs.protodesk.io/api-reference/help-authoring/getAuthoringProposal.md): Requires help:read. Other connections' proposals are not available through this endpoint, even when they belong to the same human. No approve, publish, or delete tool is exposed. - [List API keys](https://docs.protodesk.io/api-reference/api-keys/listApiKeys.md): Lists the workspace's API keys. Secrets are never returned. - [Create an API key](https://docs.protodesk.io/api-reference/api-keys/createApiKey.md): Mints a new API key. The raw secret is returned once in the response and is never retrievable afterward. Requires the keys:manage scope. - [Revoke an API key](https://docs.protodesk.io/api-reference/api-keys/revokeApiKey.md): Revokes an API key immediately. Subsequent requests using it are rejected with 401. Revoking is idempotent. - [API index](https://docs.protodesk.io/api-reference/system/getApiIndex.md) - [Health check](https://docs.protodesk.io/api-reference/system/getHealth.md) - [Protodesk MCP](https://docs.protodesk.io/mcp/overview.md): Let your AI assistant read Help Center articles and propose content for human review. - [Connect your assistant](https://docs.protodesk.io/mcp/setup.md): Configure the local stdio adapter with explicit Help Center permissions. - [Tool reference](https://docs.protodesk.io/mcp/tools.md): The Help Center authoring tools exposed by the current stdio adapter. - [Review workflow](https://docs.protodesk.io/mcp/review-workflow.md): Understand what a proposal changes and what requires human approval. - [Troubleshooting](https://docs.protodesk.io/mcp/troubleshooting.md): Resolve connection, permission, and proposal errors. ## OpenAPI Specs - [openapi](https://protodesk.io/openapi.yaml) ## Optional - [Help Center](https://help.protodesk.io) - [Dashboard](https://app.protodesk.io) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.