Developers
Helmies, your way.
Bearer-token REST API, signed webhooks, TypeScript + Python SDKs. Live OpenAPI spec. Auto-derived from the same registry the dashboard uses, so it never drifts.
# Create a customer in your tenant
curl -X POST https://app.helmies.fi/api/v1/customers \
-H "Authorization: Bearer $HELMIES_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "ACME Oy", "email": "billing@acme.fi", "vat_id": "FI12345678" }'SDKs
Two install commands. Done.
TypeScript / Node
@helmies/sdk
npm install @helmies/sdkPython 3.10+
helmies
pip install helmiesEndpoints
RESTful, predictable, boring on purpose.
Plural resources, JSON in/out, ISO-8601 timestamps, idempotency keys on writes.
GET/api/v1/customersList customers in your tenant.
POST/api/v1/customersCreate a customer.
GET/api/v1/customers/{id}Read a single customer.
PATCH/api/v1/customers/{id}Update a customer.
GET/api/v1/projectsList projects.
POST/api/v1/invoices/draftDraft an invoice from billable time.
POST/api/v1/agent/runRun the agent inside your tenant.
POST/api/v1/agent/scheduleSchedule a recurring agent task.
GET/api/v1/leadsList leads + score.
POST/api/v1/sequenceStart a new email sequence.
GET/api/v1/ads/campaignsList ad campaigns across channels.
POST/api/v1/webhooksRegister a webhook endpoint + filters.
Live OpenAPI at /api/v1/openapi.json — generated from the same registry the dashboard uses.
Webhooks
Every event. Signed + replayable.
- HMAC-signed payloadsVerify with the secret in your dashboard. SDKs ship helpers.
- Replay from dashboardLast 30 days. One-click resend to any registered endpoint.
- Filterable subscriptionsSubscribe to a single event type or a tag pattern.
- Automatic retriesExponential backoff for 5 minutes, then dead-letter queue.
// app/api/helmies/route.ts
import { verifyHelmiesSignature } from "@helmies/sdk";
export async function POST(req: Request) {
const body = await req.text();
const sig = req.headers.get("helmies-signature")!;
if (!verifyHelmiesSignature(body, sig, process.env.HELMIES_WEBHOOK_SECRET!)) {
return new Response("invalid signature", { status: 401 });
}
const event = JSON.parse(body);
// event.type === "customer.created" | "invoice.paid" | "lead.qualified" | ...
return new Response("ok");
}Limits & guarantees
Fast, fair, predictable.
p99 read latency
< 110 ms
p99 write latency
< 240 ms
Rate limit · Pro
300 req/min
Idempotency window
24 hours