For AI agents: the complete documentation index is available at https://docs.clickmax.io/en/llms.txt, the full documentation bundle is available at https://docs.clickmax.io/en/llms-full.txt, and this page is available as Markdown at https://docs.clickmax.io/en/reference/api/index.md.
  • English
  • Clickmax API

    The Clickmax public API answers at https://mcp.clickmax.io/api/v0. Each request acts on one workspace and is authenticated with that workspace's API key.

    Interactive referenceExplore the API by endpointReview parameters, request examples, and response schemas in one place.Open reference
    v0 is still unstable

    The 0 in /api/v0/ indicates that this version can still change. Endpoints, parameters, and responses may change without prior notice. Always check the published schema before updating your integration.

    Client libraries

    For JavaScript and TypeScript, use the @clickmax/public-sdk package. It has a typed method for every endpoint and returns errors in the format described under Errors. From other languages, call the API over HTTP, as in the cURL example.

    Both examples below send the same request: they list the workspace tags.

    TypeScript SDK
    cURL
    npm install @clickmax/public-sdk
    import { Clickmax } from '@clickmax/public-sdk'
    
    const clickmax = new Clickmax(process.env.CLICKMAX_API_KEY!)
    
    const result = await clickmax.tags.list()
    
    if (result.ok) {
      console.log(result.value.data)
    } else {
      const { type, code, requestId } = result.error
      console.error('tags.list failed', { type, code, requestId })
    }

    Installation, options, and error handling for the package are covered in How to use the Clickmax TypeScript SDK.

    Authentication

    Workspace owners and admins create and revoke keys under Settings > Connections > API. Each workspace can keep up to 5 keys. If you cannot find the screen, ask Max where to create an API key: its button opens that tab directly.

    The key is displayed only after creation and cannot be viewed again. To replace a key or change its allowed IP addresses, revoke it and create another one.

    The prefix identifies the environment: cxp_ for production, cxs_ for staging, and cxd_ for development.

    A key without allowed IP addresses works from any IP. When the list is populated, the API accepts only the exact IPv4 or IPv6 addresses provided.

    Send the key with every request:

    Authorization: Bearer <api-key>

    The key acts on behalf of the whole workspace. Keep it on a server, in an environment variable or a secret manager, and never include it in code that runs in a browser or a mobile app.

    A missing or revoked key, a key from another environment, and a key used from an IP outside its list all get the same 401 response with code unauthorized. The response does not say which of these conditions failed.

    API keys do not authenticate MCP connections. MCP continues to use OAuth.

    Errors

    When a request fails, the API responds with a 4xx or 5xx status and a JSON body like this one:

    {
      "error": "Rate limit exceeded.",
      "type": "rate_limit",
      "code": "rate_limit_exceeded",
      "requestId": "8f1c2a3b4c5d6e7f-GRU"
    }
    FieldContent
    errorHuman-readable message. The text can change between versions, so do not use it to decide what to do.
    typeError category. The table below lists the values.
    codeSpecific reason in lowercase with underscores, such as invalid_input. When there is no more specific reason, it repeats the type.
    requestIdIdentifier of the request. Give this value to support.
    issuesList of validation problems, present when code is invalid_input. Each item has path (the field path), message, and code.
    capabilityThe missing permission, present when code is missing_permission.

    Decide how to handle an error by its type, and use the code for specific cases. If you receive a type that is not listed here, handle it by its HTTP status.

    typeHTTP statusMeaning and what to do
    invalid_request400, 405, 413, 415, 422, and any 4xx not listed in the other rowsThe request was rejected as sent. Fix the parameters or the body before sending it again.
    authentication401The key is missing or not accepted. Check the key, its environment, and its IP list.
    permission403The key cannot run this operation. Check the code and the capability field.
    not_found404, 410The endpoint or the record does not exist. Check the path and the IDs you sent.
    conflict409, 412The operation does not fit the current state of the record. Read the record again and adjust the request.
    rate_limit429The workspace went over the request limit. Wait the number of seconds given in Retry-After.
    api408, 500, 502, 504, and other 5xxFailure on the Clickmax side. Try again after a few seconds and, if it continues, give the requestId to support. Before repeating a write operation, check whether it was already applied.

    These are the most common code values:

    codeStatusWhen it happens
    unauthorized401The key was not accepted. Authentication lists the cases.
    rate_limit_exceeded429The workspace went over 100 requests in 10 seconds.
    route_not_found404The path does not match any v0 endpoint.
    method_not_allowed405The endpoint exists but expects another HTTP method. The Allow response header gives the right one.
    invalid_json400The request body is not valid JSON.
    invalid_json_object400The input is not a JSON object.
    invalid_input400The input does not match the endpoint schema. See the items in issues.
    validation_failed400An internal Clickmax service rejected the input after it matched the endpoint schema. The error field describes the problem, and there is no issues list.
    missing_permission403The key lacks the permission the operation requires. The capability field names it.
    module_disabled403The module of this operation is turned off in the workspace.
    upstream_error502An internal Clickmax service failed.
    upstream_unreachable502An internal Clickmax service could not be reached.
    upstream_timeout504An internal Clickmax service took too long to respond.
    internal_error500Unexpected error in the API.

    Other endpoints can return their own codes, always in lowercase with underscores.

    Request limit

    The public API accepts up to 100 requests every 10 seconds per workspace. All API keys in the workspace share this limit.

    Above that, the API responds 429 with type rate_limit, code rate_limit_exceeded, and the Retry-After: 10 header, which is the number of seconds to wait before the next attempt. If the error keeps happening, reduce concurrent requests.

    Other resources

    ResourceWhen to use it
    OpenAPI YAML schemaRead the current contract, generate clients, or give the schema directly to an AI agent.
    @clickmax/public-sdk package on npmInstall the TypeScript SDK and see its published versions.
    Clickmax MCPConnect AI clients that support MCP and OAuth.