@social-media-scheduler/sdk
v0.1.0
Published
Server-side TypeScript SDK for embedding So-me social account connections and post scheduling in your app.
Maintainers
Readme
@social-media-scheduler/sdk
Server-side TypeScript SDK for apps that let their own customers connect social accounts and publish or schedule posts through So-me Studio.
The SDK is separate from @social-media-scheduler/cli: use the CLI for your own
So-me account, and use this SDK to embed So-me into a multi-customer product.
Install
npm install @social-media-scheduler/sdkPartner API keys start with pk_test_ or pk_live_. They have access to all
end users in your project, so never expose them in browser or mobile code.
Connect a customer
import { SoMePlatformClient } from "@social-media-scheduler/sdk";
const soMe = new SoMePlatformClient({
apiKey: process.env.SOME_PARTNER_API_KEY!,
});
const customer = await soMe.endUsers.upsert({
externalId: "customer_123",
displayName: "Acme",
});
const session = await soMe.connectSessions.create({
endUserId: customer.id,
platform: "THREADS",
returnUrl: "https://app.example.com/settings/social",
});
// Redirect the customer's browser to this short-lived hosted URL.
console.log(session.connectUrl);After OAuth returns the customer to your returnUrl, read the completed session
or list their connections from your backend.
const completed = await soMe.connectSessions.get(session.id);
const connections = await soMe.connections.list(customer.id);Publish or schedule
const post = await soMe.posts.create(
customer.id,
{
connectionId: connections[0].id,
socialMedia: "THREADS",
postType: "TEXT",
text: "Scheduled through our app",
scheduledAt: "2026-08-20T10:00:00Z",
},
{ idempotencyKey: "our_post_456" },
);Use a stable idempotency key for every logical post so a network retry cannot create a duplicate.
Verify webhooks
Webhook signing must use the raw request body, before JSON parsing.
import { verifyWebhookSignature } from "@social-media-scheduler/sdk";
const valid = verifyWebhookSignature(
rawBody,
request.headers["x-webhook-signature"],
process.env.SOME_WEBHOOK_SECRET!,
);Errors
Failed requests throw SoMePlatformError, which includes the HTTP status and
the response details. Network and timeout failures use status 0.
The SDK requires Node.js 20 or newer and has no runtime dependencies.
