Skip to main content
KVL GrowthOS is now live — automate your first pipeline in 15 minutes.Get started
Developer Platform

Build on GrowthOS

A real, small API today — 4 documented endpoints, real Bearer-key auth, real rate limits, a working SDK and CLI. We'd rather ship an honest, growing surface than a docs site describing features that don't exist.

REST API

4 real endpoints, documented in full

Base URL: https://growthos.kvlbusinesssolutions.com — Bearer-token auth on every call.

POST/api/v1/workflows/{workflowId}/triggerworkflows:trigger

Triggers a workflow run.

curl -X POST "https://growthos.kvlbusinesssolutions.com/api/v1/workflows/{workflowId}/trigger" \
  -H "Authorization: Bearer YOUR_API_KEY"
GET/api/export/companiesexport:companies:read

Exports your organization's companies (format=csv|crm|excel|pdf).

curl "https://growthos.kvlbusinesssolutions.com/api/export/companies?format=csv" \
  -H "Authorization: Bearer YOUR_API_KEY"
GET/api/export/dealsexport:deals:read

Exports your organization's deals (format=csv|crm|excel|pdf).

curl "https://growthos.kvlbusinesssolutions.com/api/export/deals?format=csv" \
  -H "Authorization: Bearer YOUR_API_KEY"
GET/api/export/contactsexport:contacts:read

Exports your organization's contacts (format=csv|crm|excel|pdf).

curl "https://growthos.kvlbusinesssolutions.com/api/export/contacts?format=csv" \
  -H "Authorization: Bearer YOUR_API_KEY"
GraphQL

A real, minimal GraphQL endpoint

One query, one mutation today — the same real auth and business logic as the REST API, exposed through GraphQL. Not yet a full schema.

SchemaPOST /api/graphql
type Query {
  apiKeyInfo: ApiKeyInfo
}

type Mutation {
  triggerWorkflow(workflowId: String!): TriggerResult
}

type ApiKeyInfo {
  organizationId: String!
  scopes: [String!]!
  rateLimitPerHour: Int!
}

type TriggerResult {
  runId: String!
}
Example request
curl -X POST "https://growthos.kvlbusinesssolutions.com/api/graphql" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query": "{ apiKeyInfo { organizationId scopes rateLimitPerHour } }"}'

Auth failures return GraphQL's own error envelope ({ errors: [...] }), not the REST API's { error } shape.

SDKs

Real client libraries, honestly scoped

Two real, hand-written SDKs today — not yet published to a package registry, but genuinely functional. The rest are on our roadmap, not faked.

JavaScript / TypeScriptAvailable

A real, working client covering all 4 endpoints, usable in Node.js or the browser.

Copy the client from our docs — not yet published to npm

PythonAvailable

A real, working client covering all 4 endpoints.

Copy the client from our docs — not yet published to PyPI

PHPComing Soon

Not built yet.

JavaComing Soon

Not built yet.

GoComing Soon

Not built yet.

C#Coming Soon

Not built yet.

RubyComing Soon

Not built yet.

CLI

A real command-line client

Every command below genuinely works against the live API — not a mockup.

Not published to npm yet — run it directly
git clone <this repo>
cd growthos
node cli/kvl.js --help
kvl auth <apiKey> [--base-url <url>]Save your API key locally.
kvl workflows:trigger <workflowId>Trigger a real workflow run.
kvl export:companies [--format csv|crm|excel|pdf]Export your companies to a local file.
kvl export:deals [--format csv|excel|pdf]Export your deals to a local file.
kvl export:contacts [--format csv|excel|pdf]Export your contacts to a local file.
kvl --helpList real commands.
Authentication

How authentication actually works

Real methods only — no SSO/SAML claims that aren't true yet.

API Keys (Bearer)

Bcrypt-hashed, scoped, per-key rate limit — the real authentication method for the public API.

OAuth 2.0 (Sign-in)

Google, Microsoft, GitHub, and LinkedIn — for signing into the product, not for public API access.

Webhook Signing

HMAC-SHA256 signatures on every outbound webhook, so you can verify authenticity.

Enterprise SSO / SAML

Not built yet — see our Trust Center for the current honest status.

Webhooks

Real HMAC-signed webhook delivery

Every webhook we send is signed, with automatic retry on failure. There's no fixed catalog of event types yet — webhooks are configured per Automation Builder workflow, not a platform-wide event bus.

Verify a webhook signature (real HMAC-SHA256)
import crypto from "crypto";

function verifySignature(secret, rawBody, signatureHeader) {
  const expected = crypto
    .createHmac("sha256", secret)
    .update(rawBody)
    .digest("hex");
  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signatureHeader)
  );
}

Every outbound webhook request carries a signature header computed the same way — configure webhook steps from the Automation Builder in your dashboard.

Rate limits

Real limits, not a live quota dashboard yet

Every API key is rate-limited by a real, Redis-backed sliding window — here's exactly how it works.

Default limit

1,000 requests / hour, per API key

Window

Rolling 1-hour window

Configurable

Per-key limit can be set at creation

Exceeded response

429 { "error": "Rate limit exceeded." }

On a 429, back off and retry — the response body always tells you exactly what happened: { "error": "Rate limit exceeded." }. A live, per-key quota-remaining view is on our roadmap, not built yet.

Errors

Error reference

Every real error shape the API returns, verbatim.

401Invalid or missing API key
{ "error": "Invalid or missing API key." }

Check your Authorization header is exactly `Bearer YOUR_API_KEY`.

403Missing scope
{ "error": "This API key does not have the '<scope>' scope." }

Generate a new key with the required scope from API settings.

429Rate limit exceeded
{ "error": "Rate limit exceeded." }

Back off and retry after your rolling 1-hour window resets.

Resources

Real, downloadable resources

OpenAPI Specification

A real, valid OpenAPI 3.0 spec for every documented endpoint.

Postman Collection

Import directly into Postman — Bearer auth pre-configured.

CLI Tool

A real command-line client covering all 4 endpoints. Not published to npm yet — clone the repo and run it locally.

See CLI docs below

Community & support

No public community yet — but we want to hear from you

We don't have a Discord, Slack community, or public forum today. Rather than link somewhere that doesn't exist, tell us directly.

Talk to us directly

Questions, feedback, or interested in an early developer community when we launch one? Reach out.

Put your growth engine on autopilot

Start qualifying, engaging, and converting pipeline with AI agents today. No credit card required, and your first workflow can be live in under fifteen minutes.