Developers

A REST API with four conventions and no surprises

Base URL https://getpullsy.com/api/v1. Authenticate with a scoped bearer key you create in the dashboard. Everything else on this page applies to every endpoint.

Learn these once

They hold for every resource, which is what makes the generated reference readable.

One envelope
Every success is { data } — an object for a single resource, an array plus { pagination } for a list. Every failure is { error } with a stable machine-readable code, a sentence you can show a user, and details when there are any.
Page and limit, not cursors
page is 1-based, limit defaults to 50 and caps at 200, and has_more tells you whether to ask again. Lists are never unbounded, so a missing filter degrades into slow rather than into an outage.
Scoped keys
A key carries some of data:read, sync:write and connections:write, and belongs to one workspace. Keys are shown once, stored as SHA-256 hashes, revocable, and can be given an expiry. A database id is never a credential.
Limits you can see
Rate limits are per key, per minute, and come from your plan. Every response carries X-RateLimit-Limit, -Remaining and -Reset; exceeding them returns 429 RATE_LIMITED with Retry-After, so backing off correctly needs no guesswork.
curl "https://getpullsy.com/api/v1/instagram/accounts" \
  -H "Authorization: Bearer pk_live_…"
A key belongs to one workspace, so the request needs no tenant parameter — and cannot reach another workspace's data if it tried.

What you can call

The published schema carries only what an API key is entitled to. Sign-in, members, billing and the dashboard aggregates are served but deliberately unpublished — none of them is a developer's to call.

Connections

data:read · connections:write
  • GET/connections
  • POST/connections/{provider}
  • DELETE/connections/{id}
  • POST/connections/{id}/sync

Instagram

data:read
  • GET/instagram/accounts
  • GET/instagram/accounts/{id}/metrics
  • GET/instagram/media
  • GET/instagram/media/{id}/metrics

Meta Ads

data:read
  • GET/meta-ads/campaigns
  • GET/meta-ads/insights
  • GET/meta-ads/actions
  • GET/meta-ads/summary

Operations

data:read
  • GET/sync/jobs
  • GET/billing/entitlements
  • GET/health/live

Full parameters, schemas and a “try it” console live in the API reference. Connector specifics are on the Instagram and Meta Ads pages.

Three steps from signup to first response

  1. 01

    Connect an account

    From Connections in the dashboard. The account owner authorizes through Meta; you never handle their credentials.

  2. 02

    Create a scoped key

    API keys, then pick the scopes this integration actually needs. The key is shown once.

  3. 03

    Call the API

    Send it as a bearer token. The first sync usually has data to read within a few minutes.

The reference is public. The key takes a minute.

Read the whole surface before you sign up, then create a scoped key and call it.