generated: '2026-08-13' method: searched source: https://developer.knak.com/api/ derived_from: - openapi/knak-enterprise-openapi-original.yml - openapi/knak-send-openapi-original.yml authentication: style: bearer-token header: Authorization detail: authentication/knak-authentication.yml idempotency: supported: false notes: >- Knak documents no idempotency key header or parameter, and no Idempotency-Key parameter appears in any published OpenAPI. Bulk contact upsert on the Send API (POST /contacts/bulk, bulkUpsertContacts) is upsert-by-nature and therefore naturally repeatable, but this is not a general idempotency contract. pagination: style: page-number params: - name: page type: integer default: 1 description: The page number in the results set. - name: per_page type: integer default: 10 maximum: 100 description: Items per page. Requests for more than 100 items per page are capped at 100. notes: If neither page nor per_page is specified the API returns the first page with the default size of 10 items. filtering: style: bracketed-query-param param: filter[field_name] types: - id: exact description: Matches the exact value of a field. - id: partial description: Returns all matches that contain the specified value. - id: scope description: Filters on a static list of values. Supported items are listed per endpoint. notes: Supported filters are documented per endpoint. sorting: param: sort fields: - updated_at - created_at description: Order the results of a GET request by the given field. field_expansion: supported: false metadata: supported: true notes: Assets carry user-defined custom fields via asset custom fieldsets (GET/PATCH /assets/{asset_id}/custom-fields). request_tracing: request_id_header: null notes: Knak documents no request-id or correlation header. versioning: scheme: uri-path current: v1 detail: lifecycle/knak-lifecycle.yml error_envelope: format: mixed rfc9457: false notes: >- Enterprise and SCIM errors are signalled by HTTP status code alone; Knak documents 400, 401, 403 and 404 with plain-language reasons. The Knak Send Contacts API is different: it returns a named machine-readable code in three different envelope shapes — {"error": {"code", "message"}} for 400/401/403/404/409/503, a top-level errors ARRAY with identifier/details/meta for 422 validation failures, and {"message", "type"} for 429. A client must therefore detect the shape before reading a code. No application/problem+json media type is used anywhere. detail: errors/knak-problem-types.yml error_codes: errors/knak-error-codes.yml rate_limiting: documented: true detail: rate-limits/knak-rate-limits.yml headers: null status_on_exhaustion: 429 notes: >- Knak publishes numeric limits for the Knak Send Contacts API only — 1000 requests per minute per API client on standard endpoints and 60 per minute on the bulk endpoints — plus unquantified per-user and per-company asset generation limits and a 10-per-minute per-IP cap on MCP dynamic client registration. No limits are published for the Enterprise or SCIM APIs. No RateLimit-*, X-RateLimit-* or Retry-After response headers are documented on any surface, so a client cannot compute a backoff from the response. webhooks: signing: hmac-sha256 signature_header: knak-signature retry_policy: Up to three attempts, 60 seconds apart, until a successful response status is returned. detail: asyncapi/knak-enterprise-webhooks.yml media_type: application/json