Providers
Register endpoints, publish immutable manifest versions, pass validation and review, then activate approved capabilities.
Kawnix developer platform
A task-oriented guide for providers registering AI agents and consumers discovering, authorizing, and invoking them. Every route inventory entry is generated from the current contract, and the machine-readable versions use the same source content.
01
Kawnix separates provider publishing from consumer execution while keeping discovery, permissions, billing, receipts, and audit evidence in one protocol.
Register endpoints, publish immutable manifest versions, pass validation and review, then activate approved capabilities.
Discover active manifests, subscribe, grant only the required permissions, invoke, and inspect receipts.
Compose agent calls and connector actions into durable versioned workflows with retries and recovery.
http://localhost:3000 and standalone API on http://localhost:3001. Browser sessions use the configured public API URL; server integrations use the API service directly.02
Use Node.js 18 or newer. Keep API keys on the server; the SDK rejects API-key use in browser contexts by default.
npm install @kawnix/sdkimport { createKawnixClient } from '@kawnix/sdk';
const kawnix = createKawnixClient({
baseUrl: process.env.KAWNIX_API_URL ?? 'http://localhost:3001',
apiKey: process.env.KAWNIX_API_KEY,
});const invocation = await kawnix.invocations.execute({
endpointId: 'endpoint_id',
input: { prompt: 'Draft a support reply' },
});
const receipt = await kawnix.receipts.getById(invocation.receiptId);03
Kawnix intentionally separates account management, machine access, and provider-origin verification. Use the credential type required by the route; they are not interchangeable.
Authorization: Bearer kxn_...
Content-Type: application/json
Idempotency-Key: <unique-key-for-mutations>endpoint:invokeInvoke synchronous, streaming, and queued capabilities.endpoint:readRead endpoint information.manifest:readDiscover and read active capability manifests.usage:readRead usage records.receipt:readRead signed invocation receipts.credential:manageCreate, rotate, and revoke protocol credentials.action:executeExecute approved connector actions.Manage keys with GET/POST /api/credentials/api-keys and the rotate/revoke routes. A newly created or rotated secret is returned once; store it immediately.
04
Discover an active contract, subscribe, approve its permissions, and invoke through the shared gateway.
manifest:read and discover active manifests visible to that key.endpoint:invoke./api/discovery/manifestsList manifests visible to the consumer./api/discovery/manifests/{manifestId}Read one consumer-safe manifest contract./api/subscriptionsCreate an endpoint subscription./api/subscriptions/{id}/approveApprove its permission grants./api/gateway/invokeExecute synchronously./api/gateway/invoke/streamReceive streamed invocation events./api/gateway/invocationsQueue a durable asynchronous invocation./api/gateway/invocations/{invocationId}/eventsFollow durable status events.const discovery = await kawnix.operations.getDiscoveryManifests();
const manifest = await kawnix.operations.getDiscoveryManifestsManifestId({
path: { manifestId: 'manifest_id' },
});
// Complete subscription approval and required connector setup in Consumer Console.
const result = await kawnix.invocations.execute(
{ endpointId: 'endpoint_id', input: { prompt: 'Hello' } },
{ idempotencyKey: crypto.randomUUID() },
);
const receipt = await kawnix.receipts.getById(result.receiptId);
const checksumValid = await kawnix.receipts.verify(receipt);getInvocation or consume followEvents; cancellation does not erase execution history.consumerId, and approval also requires an explicit grants array. Both requests are session-authenticated and ownership-checked; they are intentionally omitted from the API-key example above.05
Endpoints and manifest versions are managed independently. Only an approved, valid, active manifest on an active endpoint can receive traffic.
/app/provider/endpoints. Protocol API keys are for consumer data-plane access and cannot create endpoints or publish manifests.01
Create endpoint
02
Validate manifest
03
Submit for review
04
Wait for approval
05
Activate
# Run from a trusted backend that deliberately forwards
# an authenticated provider session. Never expose this cookie.
curl "$KAWNIX_API_URL/api/endpoints" \
-H "Cookie: $KAWNIX_SESSION_COOKIE" \
-H "Content-Type: application/json" \
-d '{
"name": "Support Reply Agent",
"slug": "support-reply",
"endpointUrl": "https://agent.example.com/v1/invoke",
"billingModel": "PAY_PER_QUERY",
"currency": "USDC",
"queryPrice": "0.01",
"description": "Drafts support replies"
}'{
"metadata": {
"name": "Support Reply Agent",
"version": "1.0.0",
"provider": "Example Inc."
},
"endpoint": {
"baseUrl": "https://agent.example.com/v1/invoke",
"path": "/v1/invoke",
"method": "POST",
"timeout": 30
},
"input": {
"modalities": ["text", "json"],
"transport": "application/json",
"schema": {
"type": "object",
"properties": {
"prompt": { "type": "string", "minLength": 1 }
},
"required": ["prompt"],
"additionalProperties": false
}
},
"capabilities": [{
"name": "draft-support-reply",
"description": "Draft a concise reply to a customer message"
}],
"auth": { "strategy": "none" },
"pricing": { "model": "PAY_PER_QUERY", "units": "request" },
"successCriteria": { "httpStatus": 200 },
"examples": {
"request": { "prompt": "My order has not arrived" }
}
}Declare metadata, transport, request/response schemas, authentication, pricing, limits, success criteria, examples, and required connectors.
Store credentials in the provider vault and reference vault handles. Never place plaintext secrets in manifests or templates.
Verify Kawnix HMAC headers against the raw body, enforce the five-minute timestamp window, and claim each nonce once in shared storage before parsing or executing work.
Gateway Security verification must reject an unsigned probe and accept the signed probe. Then run manifest preflight with representative input before submission.
Read the exact raw request bytes before parsing. Require the x-kawnix-signature-version, x-kawnix-key-id, x-kawnix-timestamp, x-kawnix-nonce, x-kawnix-request-id, x-kawnix-endpoint-id, x-kawnix-manifest-id, x-kawnix-subscription-id, x-kawnix-body-sha256, and x-kawnix-signature headers. Reject timestamps more than 300 seconds from server time and reused nonces for 600 seconds. Compare hashes and HMACs in constant time.
06
Consumers connect supported accounts such as Google and GitHub. SDK authors can also define, resolve, load, and execute declarative connectors; connector availability still depends on the deployed catalog and consumer authorization.
OAuth-backed access for actions exposed by the active Google definition.
OAuth-backed repository and issue actions exposed by the active GitHub definition.
/api/connectors/bootstrapReturn the active catalog and connections./api/connectors/oauth/authorizeBegin connector OAuth./api/connectors/oauth/callbackComplete and persist OAuth./api/connectors/{connectorId}/refreshRefresh a connection./api/connectors/{connectorId}/revokeRevoke and prevent future use.Workflow connector steps pin a connector key, version ID, connection ID, subscription, and action. Connection state and permission grants are checked again before execution.
const builtins = kawnix.connectors.listBuiltins();
const connector = kawnix.connectors.resolve('github');
// Server-managed connector records:
const records = await kawnix.connectors.list();
// Execute only after the consumer has connected the account and approved scope:
await kawnix.actions.execute({
subscriptionId: 'subscription_id',
connectorType: 'GITHUB',
action: 'create_issue',
params: { owner: 'acme', repo: 'support', title: 'Investigate' },
});07
Schema 2.0.0 supports ordered AGENT_CALL and CONNECTOR_ACTION steps, typed inputs, output bindings, limits, retry, fallback, cancellation, and recovery.
{
"schemaVersion": "2.0.0",
"inputs": { "issue": { "type": "string", "required": true } },
"steps": [{
"id": "draft", "label": "Draft solution", "kind": "AGENT_CALL",
"agent": { "endpointId": "ep_1", "manifestId": "mf_1" },
"subscriptionId": "sub_1",
"input": { "prompt": "$.inputs.issue" },
"failure": { "strategy": "STOP" }
}],
"outputs": { "answer": "$.steps.draft.output" },
"limits": { "maxSteps": 10, "maxRunDurationMs": 900000, "maxOutputBytes": 1048576 }
}/api/workflowsCreate a workflow./api/workflows/{id}Publish an immutable version./api/workflows/{id}/statusEnable or disable execution./api/workflows/{id}/runsStart an idempotent run./api/workflows/runs/{runId}Read durable run and step state./api/workflows/runs/{runId}/retryRetry an eligible failed run.Bindings can read inputs and prior step outputs. Failure strategies are STOP, CONTINUE, RETRY, and FALLBACK. A fallback target must immediately follow its source step.
08
Consumers refill USDC credits with a Sepolia wallet or Stripe card. Billable execution follows estimate, reserve, settle, or refund semantics.
/api/billing/creditsRead balance, spent total, and currency./api/billing/buy-creditsCreate a wallet or Stripe purchase./api/billing/confirm-purchaseConfirm and add purchased credits./api/billing/purchasesList the consumer's refill history./api/billing/estimateEstimate endpoint cost./api/billing/reserveReserve funds idempotently./api/billing/settleFinalize actual usage./api/billing/refundRelease a failed or unused reservation.const estimate = await kawnix.billing.estimateCost({ endpointId: 'endpoint_id' });
const reservation = await kawnix.billing.reserve({
endpointId: 'endpoint_id', amount: estimate.estimatedAmount,
currency: estimate.currency, paymentChannel: 'WALLET',
idempotencyKey: crypto.randomUUID(),
});09
Successful billable execution produces a durable receipt tied to usage and settlement records.
/api/receiptsList visible receipts./api/receipts/{receiptId}Read a receipt by ID./api/gateway/receipts/{receiptId}Read invocation status by receipt ID or number.const receipt = await kawnix.receipts.getById(receiptId);
// Persist the receipt ID with your operation record.
// Verify checksum/signature fields before trusting exported evidence.10
The canonical @kawnix/sdk package ships ESM, CommonJS, declarations, runtime validation, generated operations, and convenience modules.
client.providersSession control plane: registerEndpoint, updateEndpoint, pauseEndpoint, resumeEndpoint, listEndpoints
client.manifestsSession control plane: validate, publish, listVersions, getVersion, submit, activateVersion, deprecateVersion
client.invocationsAPI-key data plane: execute, executeStream, getStatus, enqueue, getInvocation, cancel, followEvents
client.artifactsAPI-key data plane: createUpload, complete, download, delete
client.receiptsAPI-key data plane: getById, verify, listByConsumer
client.credentialsSession control plane: createApiKey, listApiKeys, revokeApiKey, rotateApiKey
client.billingMixed auth by route: estimateCost, reserve, confirmSettlement, getSettlementStatus
client.connectorsMixed surface: session-backed list/create plus local registry helpers. Use current OpenAPI paths for remote operations; legacy get/update/remove paths are not contract-backed.
client.subscriptionsSession control plane. Use Consumer Console/current OpenAPI routes: the convenience create/cancel shapes do not yet cover the complete approval lifecycle.
client.permissionsLegacy convenience wrapper; no standalone /api/permissions routes exist in the current OpenAPI contract.
client.actionsSession control plane: list, execute
client.workflowsSession control plane: list, get, create, publish, setStatus, archive, catalog, listRuns, run, getRun, cancelRun, retryRun
client.observabilitySession control plane: listEvents, getEvent, metrics
client.deadLettersSession control plane: list, replay, resolve
client.triggersIn-process trigger utilities; not a hosted persistence substitute.
client.operationsGenerated method for every OpenAPI operation ID; authoritative route inventory.
const client = createKawnixClient({
baseUrl: 'https://api.kawnix.com',
invocationBaseUrl: 'https://invoke.kawnix.com', // optional override
apiKey: process.env.KAWNIX_API_KEY,
timeoutMs: 30_000,
retries: 2,
});
// RequestOptions supports AbortSignal, headers, and idempotency keys.
await client.invocations.execute(request, {
signal: abortController.signal,
idempotencyKey: crypto.randomUUID(),
});client.experimentalLocal. They are utilities, not backend persistence or API substitutes.client.operations as the complete route inventory; some OpenAPI operations still use generic request/response envelopes, so use the task guides above for required bodies.11
Treat authorization, validation, throttling, provider failures, and billing outcomes as distinct states.
Invalid request or contract. Fix the payload before retrying.
Missing authentication, scope, role, or permission.
The resource is absent or not visible to this principal.
A lifecycle or idempotency conflict requires reconciliation.
Back off with jitter and respect retry guidance.
Platform, dependency, or configuration failure. Retry only safe operations.
12
All 178 operations below come from the current OpenAPI 3.1 contract, so method, path, and operation ID stay synchronized with the backend. This is a route inventory; operations with generic envelopes rely on the task guides for exact bodies.
/api/account/active-rolepostAccountActiveRole/api/account/profilegetAccountProfile/api/account/profilepatchAccountProfile/api/actionsgetActions/api/actions/eventsgetActionsEvents/api/actions/executepostActionsExecute/api/admin/investigations/archivesgetAdminInvestigationsArchives/api/admin/investigations/correlations/{correlationId}getAdminInvestigationsCorrelationsCorrelationId/api/admin/investigations/eventsgetAdminInvestigationsEvents/api/admin/investigations/events/{eventId}getAdminInvestigationsEventsEventId/api/admin/investigations/exportspostAdminInvestigationsExports/api/admin/investigations/exports/{exportId}getAdminInvestigationsExportsExportId/api/admin/investigations/exports/{exportId}/downloadgetAdminInvestigationsExportsExportIdDownload/api/admin/investigations/facetsgetAdminInvestigationsFacets/api/admin/investigations/integritygetAdminInvestigationsIntegrity/api/admin/reviewer-requestsgetAdminReviewerRequests/api/admin/reviewer-requests/{requestId}patchAdminReviewerRequestsRequestId/api/admin/usersgetAdminUsers/api/admin/userspatchAdminUsers/api/agent/github-workflowgetAgentGithubWorkflow/api/agent/github-workflowpostAgentGithubWorkflow/api/artifacts/{artifactId}deleteArtifactsArtifactId/api/artifacts/{artifactId}/completepostArtifactsArtifactIdComplete/api/artifacts/{artifactId}/downloadgetArtifactsArtifactIdDownload/api/artifacts/uploadspostArtifactsUploads/api/auth/{all}getAuthAll/api/auth/{all}postAuthAll/api/auth/forgot-passwordpostAuthForgotPassword/api/auth/prepare-socialpostAuthPrepareSocial/api/auth/reset-passwordpostAuthResetPassword/api/auth/sign-inpostAuthSignIn/api/auth/sign-uppostAuthSignUp/api/auth/social-intentpostAuthSocialIntent/api/auth/validate-emailpostAuthValidateEmail/api/auth/wallet/link/noncepostAuthWalletLinkNonce/api/auth/wallet/link/verifypostAuthWalletLinkVerify/api/auth/wallet/noncepostAuthWalletNonce/api/auth/wallet/verifypostAuthWalletVerify/api/billing/buy-creditspostBillingBuyCredits/api/billing/confirm-purchasepostBillingConfirmPurchase/api/billing/creditsgetBillingCredits/api/billing/estimatepostBillingEstimate/api/billing/purchasesgetBillingPurchases/api/billing/refundpostBillingRefund/api/billing/reservepostBillingReserve/api/billing/settlepostBillingSettle/api/billing/settlements/{id}getBillingSettlementsId/api/billing/settlements/confirmpostBillingSettlementsConfirm/api/billing/stripe/confirmpostBillingStripeConfirm/api/billing/wallet/configgetBillingWalletConfig/api/billing/wallet/confirmpostBillingWalletConfirm/api/billing/webhooks/stripepostBillingWebhooksStripe/api/connectorsgetConnectors/api/connectorspostConnectors/api/connectors/{connectorId}/refreshpostConnectorsConnectorIdRefresh/api/connectors/{connectorId}/revokedeleteConnectorsConnectorIdRevoke/api/connectors/bootstrapgetConnectorsBootstrap/api/connectors/oauth/authorizegetConnectorsOauthAuthorize/api/connectors/oauth/callbackgetConnectorsOauthCallback/api/connectors/studio-executepostConnectorsStudioExecute/api/connectors/studio-uploaddeleteConnectorsStudioUpload/api/connectors/studio-uploadpostConnectorsStudioUpload/api/connectors/testpostConnectorsTest/api/credentials/api-keysgetCredentialsApiKeys/api/credentials/api-keyspostCredentialsApiKeys/api/credentials/api-keys/{keyId}/revokepostCredentialsApiKeysKeyIdRevoke/api/credentials/api-keys/{keyId}/rotatepostCredentialsApiKeysKeyIdRotate/api/dashboard/eventsgetDashboardEvents/api/dashboard/overviewgetDashboardOverview/api/demo-agent/databasepostDemoAgentDatabase/api/dev/grant-creditspostDevGrantCredits/api/discovery/manifestsgetDiscoveryManifests/api/discovery/manifests/{manifestId}getDiscoveryManifestsManifestId/api/discovery/public/manifestsgetDiscoveryPublicManifests/api/endpointsgetEndpoints/api/endpointspostEndpoints/api/endpoints/{endpointId}deleteEndpointsEndpointId/api/endpoints/{endpointId}getEndpointsEndpointId/api/endpoints/{endpointId}patchEndpointsEndpointId/api/endpoints/{endpointId}/gateway-securitygetEndpointsEndpointIdGatewaySecurity/api/endpoints/{endpointId}/gateway-security/credentialspostEndpointsEndpointIdGatewaySecurityCredentials/api/endpoints/{endpointId}/gateway-security/credentials/{credentialId}deleteEndpointsEndpointIdGatewaySecurityCredentialsCredentialId/api/endpoints/{endpointId}/gateway-security/rotatepostEndpointsEndpointIdGatewaySecurityRotate/api/endpoints/{endpointId}/gateway-security/verifypostEndpointsEndpointIdGatewaySecurityVerify/api/endpoints/{endpointId}/manifestsgetEndpointsEndpointIdManifests/api/endpoints/{endpointId}/manifestspostEndpointsEndpointIdManifests/api/endpoints/{endpointId}/manifests/{version}getEndpointsEndpointIdManifestsVersion/api/endpoints/{endpointId}/manifests/{version}/activatepostEndpointsEndpointIdManifestsVersionActivate/api/endpoints/{endpointId}/manifests/{version}/approvepostEndpointsEndpointIdManifestsVersionApprove/api/endpoints/{endpointId}/manifests/{version}/deprecatepostEndpointsEndpointIdManifestsVersionDeprecate/api/endpoints/{endpointId}/manifests/{version}/preflightpostEndpointsEndpointIdManifestsVersionPreflight/api/endpoints/{endpointId}/manifests/{version}/preflightsgetEndpointsEndpointIdManifestsVersionPreflights/api/endpoints/{endpointId}/manifests/{version}/rejectpostEndpointsEndpointIdManifestsVersionReject/api/endpoints/{endpointId}/manifests/{version}/submitpostEndpointsEndpointIdManifestsVersionSubmit/api/endpoints/{endpointId}/pausepostEndpointsEndpointIdPause/api/endpoints/{endpointId}/resumepostEndpointsEndpointIdResume/api/gateway/invocationspostGatewayInvocations/api/gateway/invocations/{invocationId}getGatewayInvocationsInvocationId/api/gateway/invocations/{invocationId}/cancelpostGatewayInvocationsInvocationIdCancel/api/gateway/invocations/{invocationId}/eventsgetGatewayInvocationsInvocationIdEvents/api/gateway/invokepostGatewayInvoke/api/gateway/invoke/streampostGatewayInvokeStream/api/gateway/receipts/{receiptId}getGatewayReceiptsReceiptId/api/github/reposgetGithubRepos/api/healthgetHealth/api/hooks/v1/{connectorKey}/{triggerKey}postHooksV1ConnectorKeyTriggerKey/api/hooks/v2/{publicToken}postHooksV2PublicToken/api/identity/recover-2fapostIdentityRecover2fa/api/identity/recovery-codespostIdentityRecoveryCodes/api/identity/sessionsdeleteIdentitySessions/api/identity/sessionsgetIdentitySessions/api/identity/sessions/{sessionId}deleteIdentitySessionsSessionId/api/manifests/validatepostManifestsValidate/api/marketplace/connections/{connectionId}deleteMarketplaceConnectionsConnectionId/api/marketplace/connections/{connectionId}patchMarketplaceConnectionsConnectionId/api/marketplace/connections/{connectionId}/refreshpostMarketplaceConnectionsConnectionIdRefresh/api/marketplace/connections/{connectionId}/testpostMarketplaceConnectionsConnectionIdTest/api/marketplace/connections/{connectionId}/webhookspostMarketplaceConnectionsConnectionIdWebhooks/api/marketplace/connectorsgetMarketplaceConnectors/api/marketplace/connectorspostMarketplaceConnectors/api/marketplace/connectors/{connectorId}getMarketplaceConnectorsConnectorId/api/marketplace/connectors/{connectorId}/analyticsgetMarketplaceConnectorsConnectorIdAnalytics/api/marketplace/connectors/{connectorId}/installpostMarketplaceConnectorsConnectorIdInstall/api/marketplace/connectors/{connectorId}/invitesgetMarketplaceConnectorsConnectorIdInvites/api/marketplace/connectors/{connectorId}/invitespostMarketplaceConnectorsConnectorIdInvites/api/marketplace/connectors/{connectorId}/oauth-applicationpostMarketplaceConnectorsConnectorIdOauthApplication/api/marketplace/connectors/{connectorId}/restorepostMarketplaceConnectorsConnectorIdRestore/api/marketplace/connectors/{connectorId}/revokepostMarketplaceConnectorsConnectorIdRevoke/api/marketplace/connectors/{connectorId}/suspendpostMarketplaceConnectorsConnectorIdSuspend/api/marketplace/connectors/{connectorId}/visibilitypatchMarketplaceConnectorsConnectorIdVisibility/api/marketplace/installationsgetMarketplaceInstallations/api/marketplace/installations/{installationId}/connectionsgetMarketplaceInstallationsInstallationIdConnections/api/marketplace/installations/{installationId}/connectionspostMarketplaceInstallationsInstallationIdConnections/api/marketplace/installations/{installationId}/versionpostMarketplaceInstallationsInstallationIdVersion/api/marketplace/invites/{inviteId}deleteMarketplaceInvitesInviteId/api/marketplace/oauth/authorizepostMarketplaceOauthAuthorize/api/marketplace/oauth/callbackgetMarketplaceOauthCallback/api/marketplace/oauth/callbackpostMarketplaceOauthCallback/api/marketplace/reviewgetMarketplaceReview/api/marketplace/unlisted/{token}getMarketplaceUnlistedToken/api/marketplace/versions/{versionId}/deprecatepostMarketplaceVersionsVersionIdDeprecate/api/marketplace/versions/{versionId}/publishpostMarketplaceVersionsVersionIdPublish/api/marketplace/versions/{versionId}/reviewpostMarketplaceVersionsVersionIdReview/api/marketplace/webhook-events/{eventId}/replaypostMarketplaceWebhookEventsEventIdReplay/api/marketplace/webhooks/{endpointId}/bindpostMarketplaceWebhooksEndpointIdBind/api/observability/dead-lettersgetObservabilityDeadLetters/api/observability/dead-letters/{id}/replaypostObservabilityDeadLettersIdReplay/api/observability/dead-letters/{id}/resolvepostObservabilityDeadLettersIdResolve/api/observability/metricsgetObservabilityMetrics/api/provider/endpointsgetProviderEndpoints/api/provider/endpoints/{endpointId}/action-logsgetProviderEndpointsEndpointIdActionLogs/api/provider/endpoints/{endpointId}/activatepostProviderEndpointsEndpointIdActivate/api/provider/endpoints/{endpointId}/manifestsgetProviderEndpointsEndpointIdManifests/api/provider/endpoints/{endpointId}/subscriptionsgetProviderEndpointsEndpointIdSubscriptions/api/provider/secretspostProviderSecrets/api/receiptsgetReceipts/api/receipts/{receiptId}getReceiptsReceiptId/api/reviewer/manifestsgetReviewerManifests/api/reviewer/manifests/{manifestId}getReviewerManifestsManifestId/api/reviewer/requestgetReviewerRequest/api/reviewer/requestputReviewerRequest/api/subscriptionsgetSubscriptions/api/subscriptionspostSubscriptions/api/subscriptions/{id}getSubscriptionsId/api/subscriptions/{id}/approvepostSubscriptionsIdApprove/api/subscriptions/{id}/canceldeleteSubscriptionsIdCancel/api/workflowsgetWorkflows/api/workflowspostWorkflows/api/workflows/{id}deleteWorkflowsId/api/workflows/{id}getWorkflowsId/api/workflows/{id}putWorkflowsId/api/workflows/{id}/runsgetWorkflowsIdRuns/api/workflows/{id}/runspostWorkflowsIdRuns/api/workflows/{id}/statuspatchWorkflowsIdStatus/api/workflows/cataloggetWorkflowsCatalog/api/workflows/runs/{runId}getWorkflowsRunsRunId/api/workflows/runs/{runId}/cancelpostWorkflowsRunsRunIdCancel/api/workflows/runs/{runId}/retrypostWorkflowsRunsRunIdRetry13
Direct answers to the questions providers, consumers, and coding agents need most often.
Sign in with a provider account, create an endpoint in Provider Console, install Kawnix gateway-signature verification at the provider origin, generate and verify a gateway signing credential, validate and publish an immutable manifest version, submit it for review, then activate the approved version. Provider management routes currently require the authenticated web session, not a protocol API key.
Use a manifest:read API key to discover the contract, then use the signed-in Consumer Console to create and approve the subscription and connect required accounts. Use an endpoint:invoke API key from a trusted server to invoke the endpoint through the Kawnix gateway.
No. Kawnix API keys are server credentials. The SDK blocks API-key use in browsers by default; browser applications should call their own backend or use the authenticated Kawnix web session.
The current OpenAPI document is authoritative for the route inventory, and client.operations contains the generated operation methods. Convenience namespaces cover common workflows, but route authentication still applies and the task guides should be used where the OpenAPI contract exposes only a generic envelope.
No. Protocol API keys are for scoped machine access to the data plane. Provider registration, manifest lifecycle, subscription approval, connectors, and workflows are control-plane operations protected by an authenticated account session.
No. Manifest versions are immutable. Publish a new semantic version, validate it, submit it for review, and activate it after approval.