Developers

Build on Strkr.

The public REST API is live. OpenAPI 3.1 spec, Swagger UI you can hit from a browser, bearer API keys with per-scope access, and tenant isolation on every query. No ticket to open, no partner program to apply to, no 'contact us for API access.' Spin up a workspace, mint a key, start calling.

Core concepts

Four things worth knowing before the first call.

Authentication

Bearer API keys, scoped per endpoint.

Every request carries Authorization: Bearer stk_live_<token>. Keys are minted by workspace admins and tagged with explicit scopes like accounts:read, contacts:write, deals:delete. A key only sees what its scopes permit. No session cookies on the public surface.

Tenant isolation

Every query filtered by the key's workspace.

A key is bound to a single tenant at mint time. Every row the API returns is scoped to that tenant at the database layer. Cross-tenant reads are architecturally impossible, not a convention. Audit log on every write confirms it.

Rate limits

Generous by default. Lift on request.

200 requests per minute per key. 1,000 requests per minute per workspace. Response headers surface current usage. Rate-limited requests return 429 with a Retry-After. Need higher ceilings for an import, a batch job, or a sync product? Email support with volumes and we lift.

Errors

HTTP codes that mean what they say.

401 for an invalid key. 403 for a key missing the scope. 404 for a record outside the tenant or genuinely gone. 422 for a validation failure with the offending field named. 429 when the rate limit bites. 409 CONSENT_DENIED when a send-path hits an opted-out contact. Every error is JSON, every error is parseable.

What's in the API

30+ endpoints across the records you work with every day.

Accounts

List, create, read, update, delete the companies in your pipeline. Custom fields round-trip on every call. Preferences bag gates send-paths.

GET POST PATCH DELETE /v1/accounts

Contacts

Full CRUD on people records plus a preferences endpoint that reads and writes consent state across email, SMS, phone, postal, and WhatsApp.

GET POST PATCH DELETE /v1/contacts

Deals

The revenue pipeline. Stage transitions, amount, close date, owner, custom fields. List endpoint supports filtering and pagination.

GET POST PATCH DELETE /v1/deals

Leads

Pre-qualified records before they convert into contacts. First-class leadId relation on tasks and activities. On convert, polymorphic links replay onto the created contact.

GET POST PATCH DELETE /v1/leads

Tasks

To-dos linked polymorphically to any record. Filter by leadId, assignee, due date. Round-trips the customFields bag like every standard object.

GET POST PATCH DELETE /v1/tasks

Activities

Timeline rows: calls, meetings, notes, emails. Also polymorphic. The feed that powers every record detail page in the product.

GET POST PATCH DELETE /v1/activities

Custom objects

The custom objects your tenant has defined, read as records at /v1/objects/{apiName}/records. Full list, filter, create, update, delete. Field definitions are introspectable.

GET POST PATCH DELETE /v1/objects/{apiName}/records

Schema

Every object definition and every field definition in your tenant, listable through /v1/objects. Codegen a type-safe client against the real schema the tenant uses, not a static assumption.

GET /v1/objects, /v1/objects/{apiName}

Files

Attachments to any record via a presign flow. POST to /v1/attachments/presign for an S3 upload URL, then confirm. Download URLs are per-call signed. List and delete attachments linked to a record.

POST /v1/attachments/presign

Messaging

Strkr Messaging SMS and MMS. Channels, threads, messages, and send endpoints. Consent-gated at the API layer, auto-STOP keyword handling, carrier segment counting, usage metered to Stripe.

POST /v1/messaging/send

Inbox

Email threads polymorphically linked to a record. Query by entityType and entityId. Gmail-sync auto-links threads to the matching contact, lead, or account.

GET /v1/inbox/threads/for-entity

Consent

Preferences bags on contacts, accounts, and leads. Opt-in and opt-out state per channel, quiet hours in a timezone, global do-not-contact, audit row on every change.

PATCH /v1/{contacts|accounts|leads}/{id}/preferences
Three curl calls

Copy, paste, replace the token, send.

List contacts

curl https://api.strkr.io/v1/contacts?limit=50 \
  -H "Authorization: Bearer stk_live_YOUR_TOKEN"

Returns a JSON object with a contacts array. Each row includes id, email, firstName, lastName, accountId, customFields, and audit timestamps.

Create a contact

curl https://api.strkr.io/v1/contacts \
  -X POST \
  -H "Authorization: Bearer stk_live_YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "jane@example.com",
    "firstName": "Jane",
    "lastName": "Doe",
    "customFields": { "externalId": "crm-9821" }
  }'

Returns 201 with the created record. Unknown top-level keys return 422 UNKNOWN_FIELD. Put integration metadata on customFields and it round-trips untouched.

Create a deal

curl https://api.strkr.io/v1/deals \
  -X POST \
  -H "Authorization: Bearer stk_live_YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme expansion Q4",
    "amount": 48000,
    "stage": "qualified",
    "accountId": "01HC9...uuid",
    "closeDate": "2026-12-31"
  }'

Amount is in major units of the tenant currency. Stage must be one of the stages defined on the pipeline. Deal fields are introspectable through the Schema endpoints.

Integration patterns

The three ways teams build on Strkr today.

API keys

Server-to-server, available today.

Mint a scoped key in Admin, store it in your secrets manager, call the API. Right path for sync jobs, data imports, admin tooling, internal dashboards, and anything running on your own infrastructure.

Webhooks

Event-driven listeners, in beta.

Subscribe to record changes and have Strkr POST signed payloads to your endpoint. Right path for cross-system automation that reacts to new deals, new contacts, or stage changes. Signed with a shared secret, retried on failure, DLQ for permanent failures.

OAuth

Third-party apps, on the roadmap.

Three-legged OAuth for apps acting on behalf of a workspace user is scheduled for 2027 Q1. Until then, workspace admins can mint delegated API keys per integration partner and revoke them per partner. If you need OAuth sooner, email support with the use case.

SDKs

No official SDK yet. The OpenAPI spec is the SDK.

The OpenAPI 3.1 spec at /v1/openapi.json is the only thing Strkr publishes. Point your codegen at it (openapi-generator, openapi-typescript, oapi-codegen, kiota) and produce a typed client in TypeScript, Python, Go, Rust, Ruby, Java, or anything else your codegen targets. The spec is regenerated on every API deploy, so the client stays in sync with the surface.

An official TypeScript client is on the roadmap for 2027. Until then, generated clients work and are, in practice, what most integrators prefer because they match the version of the API they're actually calling.

Try it free. Bring your team next week.

No sales call, no migration consultant, no four-month implementation. Enter your card, get 14 days of the full Pro tier, cancel any time before day 14 with zero charge. Spin up a workspace, import your CSV, and have something useful before lunch.