Getting started
Concepts
Who owns what, which key acts on what, and how to know what an account can do.
The model
Everything hangs off one chain:
Partner → org → workspace → social accounts
- A partner is a company that builds on WaSparks Social and manages clients. You are a partner if you were given a partner key.
- An org is one client business. A partner creates its orgs; a business that integrates directly has one org and no partner.
- A workspace groups accounts and content inside an org, for example one per brand. Every org has a default workspace.
workspace_idis optional when you create something (it defaults to the default workspace) and works as a filter on lists. - A social account is one connected Facebook Page, Instagram professional account, LinkedIn organization or LinkedIn member profile. Posts, comments and conversations belong to a workspace in an org.
Orgs are isolated from each other. Rate limits, idempotency keys and usage are all counted per org, so one client cannot affect another.
The keys
| Key | Looks like | Calls | Use it for |
|---|---|---|---|
| Partner key | wsk_live_partner_… |
/v1/partner/**, and the rest of /v1/** in operator mode |
Creating orgs, plans, redirect URIs and the partner webhook; reading usage. |
| Org key | wsk_live_org_… |
/v1/** except /v1/partner/** |
Connecting accounts, publishing, comments, messages and webhooks for one org. |
Platform keys belong to WaSparks and are not accepted by this API.
A partner key on its own sees counts and settings, never content. In operator mode it can also act on one org per request by naming it in the X-Tenant-Id header. Authentication has the details.
Capabilities
Every social account carries a capabilities object. Check it before you call a feature:
{
"publish": true,
"delete_post": true,
"comments": true,
"comment_hide": true,
"reactions": true,
"messaging": true,
"reshare": false
}A false flag means the matching endpoints answer 400 unsupported_for_platform for that account, without calling the platform. Capabilities are read from the permissions the user actually granted when they connected, so two accounts on the same platform can differ. They are also shown on each entry of available_accounts before you connect it.
What each platform supports today:
| Facebook Page | LinkedIn organization | LinkedIn profile | ||
|---|---|---|---|---|
publish |
yes | yes (media required) | yes | yes |
comments (read, reply) |
yes | not yet | yes | no |
comment_hide |
yes | not yet | no | no |
reactions |
yes (like) | no | yes | no |
messaging |
yes (Messenger) | yes (Instagram DM) | no | no |
reshare |
no | no | yes | yes |
delete_post (on the platform) |
yes, posts made through the API | no | yes | yes |
| How new comments arrive | webhook | webhook | polled | not available |
Platform behaviour you can run into is collected in Platform notes.
Conventions
- JSON with
snake_casefield names. Timestamps are ISO 8601 in UTC, ids are UUIDs. - Lists that paginate take
?limit=(default 25, maximum 100) and?cursor=, and answer{ "data": [...], "next_cursor": "…" | null }. Short lists, such as accounts, workspaces and plans, return everything in one page withnext_cursor: null. - Additive changes are not breaking: ignore fields and event types you do not know.
- Every response has an
X-Request-Idheader. Quote it when you write to support.
Next: Authentication