Your editor knows the API
Generated from the OpenAPI spec: every method, parameter and webhook event is typed and documented, so autocomplete tells you that posts.create() takes several channels in one call.
One typed client to publish, schedule and track posts on every network. Retries, pagination, uploads and webhooks handled for you.
$ npm install bulkitThe plumbing every API client ends up rewriting, already done.
Generated from the OpenAPI spec: every method, parameter and webhook event is typed and documented, so autocomplete tells you that posts.create() takes several channels in one call.
Pass several channels to one posts.create() and each network gets the post in its own format, with its own text if you want it.
Timeouts, rate limits and 5xx responses are retried with backoff, and every write carries an Idempotency-Key the SDK reuses across its own retries.
verifyWebhook() checks the x-bulkit-signature header and hands you a typed event, so you hear about every published or failed post without polling.
Node.js 22 or later. Other runtimes with fetch and Web Crypto, like Bun, Deno and Cloudflare Workers, should work too.
Both. The package ships ESM and CommonJS builds with types for each, and has zero runtime dependencies.
Not by default. Your API key is a secret, so the client refuses to run in a browser where every visitor could read it. Call Bulkit from your server; dangerouslyAllowBrowser exists for cases like an internal tool.
No. Every POST and PUT is sent with an Idempotency-Key that the SDK reuses across its own retries. Pass your own idempotencyKey to stay safe across process restarts too.
Yes. A test key (bk_test_…) checks and saves everything like a live key, but never posts and is never billed. bulkit.isTestMode tells you which kind a client holds.
No. SDK calls are billed like any other action, included in your 500 monthly actions, then $0.01 each. The package itself is MIT-licensed.
$4.99/mo, 500 actions included. The SDK is free on every plan.