Skip to Content
APIOverview

API Overview

The KeeperHub API allows you to programmatically manage workflows, integrations, and executions.

Base URL

https://app.keeperhub.com/api

Authentication

API requests require authentication. Two methods are supported, but their accepted scope differs:

  • Session: Browser-based authentication via Better Auth. Accepted on every endpoint.
  • API Key (kh_): For programmatic access to organization-scoped endpoints (workflows, integrations, billing, organization management). Not accepted on user-account, wallet write, OAuth-account-bound, or per-user endpoints.

See Authentication for the full scope.

Response Format

All responses are returned as JSON with the following structure:

Success Response

{ "data": { ... } }

Error Response

Errors return JSON of the form:

{ "error": "wallet_not_configured", "detail": "No wallet provisioned for chain 8453 in org acme", "hint": "POST /api/integrations/wallet to provision a wallet for this org", "docs": "https://docs.keeperhub.com/api/integrations", "request_id": "5f5a7d4e-4f4f-4d6b-9c9a-3f7b1c0d2e1f" }

Fields:

FieldTypeDescription
errorstringMachine-readable, stable snake_case code. Branch on this — never on detail prose.
detailstringHuman-readable description of what went wrong. Safe to log or surface in developer tools, but not user-facing copy.
hintstringOptional. Suggested recovery action (e.g. which endpoint to call, which field to fix).
docsstringOptional. URL to the doc page that explains this error in depth.
request_idstringCorrelation id for the request. Echoed back on the x-request-id response header. Quote this in support tickets.

Clients should:

  • Branch on error only. Copy in detail and hint may change without notice.
  • Tolerate the absence of hint and docs.
  • Capture request_id (or read the x-request-id response header) and include it when reporting issues.

A short list of canonical error codes is reused across endpoints: unauthorized, insufficient_scope, not_found, invalid_input, conflict, rate_limited, internal_error. Endpoint-specific codes (e.g. wallet_not_configured, web3_integration_exists) are documented on the page for the resource that raises them.

The x-request-id request header is honored when present: send any value (≤ 128 chars, no control characters) and it is reflected back on both the request_id response field and the x-request-id response header.

Rate Limits

API requests are subject to rate limiting. Current limits:

  • 100 requests per minute for authenticated users
  • 10 requests per minute for unauthenticated requests

Available Endpoints

ResourceDescription
WorkflowsCreate, read, update, delete workflows
ExecutionsMonitor workflow execution status and logs
Direct ExecutionExecute blockchain transactions without workflows
AnalyticsWorkflow performance metrics and gas usage tracking
IntegrationsManage notification and service integrations
ProjectsOrganize workflows into projects
TagsLabel and categorize workflows
ChainsList supported blockchain networks
UserUser profile, preferences, and address book
OrganizationsOrganization membership management
API KeysManage API keys for programmatic access

SDKs

Official SDKs are planned for future release. In the meantime, you can interact with the API directly using any HTTP client or library such as fetch, axios, or requests.