Connections
Manage your agency's connected publisher and social accounts, their ad accounts, boost configuration presets, and connected business apps.
Returns your agency's connected publisher/social accounts (Google, Facebook, Instagram, LinkedIn, TikTok, and others), optionally filtered by client or platform.
List connected accounts
/api/v1/connections{
"data": {
"accounts": [
{
"id": "conn_1",
"platform": "google",
"displayName": "Acme Dental — Google",
"providerAccountId": "112233445566",
"credentialsValid": true,
"fetchStatus": "ok",
"fetchError": null,
"errorTag": null,
"gmbGroupIds": [],
"expiresAt": null,
"dataAccessExpiresAt": "2026-05-01T00:00:00.000Z",
"channel": "local",
"clientId": "cli_123",
"synupLocationId": null,
"clientLocationId": "loc_456"
}
],
"nextCursor": null,
"totalCount": 1
}
}How many of this client's (or the whole agency's) locations have Google/Facebook connected vs. not. Scope to a subset with tags.
Get a connected-accounts summary
/api/v1/connections/summary{
"data": {
"total": 5,
"google": {
"connected": 3,
"notConnected": 2
},
"facebook": {
"connected": 1,
"notConnected": 4
}
}
}Returns a Google OAuth authorize URL to open in a browser to connect this location's Google Business Profile. This endpoint can't complete the connection itself — Google's consent screen requires an interactive human.
Get a Google connect URL
/api/v1/connections/google/connect-url{
"data": {
"provider": "google",
"locationId": "loc_456",
"url": "https://accounts.google.com/o/oauth2/v2/auth?client_id=...&redirect_uri=...&response_type=code&scope=...&state=...",
"note": "Open this URL in a browser under the account owner's control. There is no callback to your integration — once approved, poll GET /api/v1/connections to see the new connection."
}
}Returns a Facebook OAuth authorize URL to open in a browser to connect this location's Facebook Page. This endpoint can't complete the connection itself — Facebook's consent screen requires an interactive human.
Get a Facebook connect URL
/api/v1/connections/facebook/connect-url{
"data": {
"provider": "facebook",
"locationId": "loc_456",
"url": "https://www.facebook.com/v19.0/dialog/oauth?client_id=...&redirect_uri=...&scope=...&state=...&response_type=code",
"note": "Open this URL in a browser under the account owner's control. There is no callback to your integration — once approved, poll GET /api/v1/connections to see the new connection."
}
}Returns the paid-social ad accounts available on one connected account (Facebook, Instagram, LinkedIn, or TikTok).
List ad accounts
/api/v1/connections/ad-accounts{
"data": {
"adAccounts": [
{
"id": "adacct_1",
"connectionId": "conn_1",
"platformAccountId": "act_549988676430053",
"name": "Acme Dental Ads",
"platform": "facebook",
"status": "active",
"isSelected": true,
"currency": "USD",
"archived": false,
"createdAt": "2026-01-15T10:00:00.000Z",
"updatedAt": "2026-01-15T10:00:00.000Z"
}
]
}
}Forces an immediate re-fetch of a connected account's ad accounts from the platform, instead of waiting for the daily background sync. Returns the refreshed list.
Sync ad accounts
/api/v1/connections/ad-accounts/sync{
"data": {
"adAccounts": [
{
"id": "adacct_1",
"connectionId": "conn_1",
"platformAccountId": "act_549988676430053",
"name": "Acme Dental Ads",
"platform": "facebook",
"status": "active",
"isSelected": false,
"currency": "USD",
"archived": false,
"createdAt": "2026-01-15T10:00:00.000Z",
"updatedAt": "2026-02-01T09:00:00.000Z"
}
]
}
}Chooses which of a connected account's ad accounts is used when boosting posts. Only one ad account can be selected per connected account at a time.
Select an ad account
/api/v1/connections/ad-accounts/select{
"data": {
"selected": true
}
}Pairs an already-connected account's already-fetched listing to a location with no connection of its own yet. Not a fresh OAuth grant — caId must already be a connected account; this reuses that login. Google and Facebook only.
Assign a listing to a location
/api/v1/connections/locations/assign{
"data": {
"id": "listing_1",
"platform": "google",
"synupLocationId": null,
"clientLocationId": "loc_456",
"platformResourceName": "accounts/123/locations/456",
"platformPageName": "Acme Dental — Downtown"
}
}Confirms a NAP-scoring suggestion, creating a location-level connection from a fetched listing already matched to a Synup location. Fails if the listing has no matched location (400), is already connected (409), or the location already has a connection on that platform (409).
Confirm a suggested match
/api/v1/connections/locations/confirm-match{
"data": {
"id": "listing_1",
"platform": "google",
"synupLocationId": null,
"clientLocationId": "loc_456",
"platformResourceName": "accounts/123/locations/456",
"platformPageName": "Acme Dental — Downtown"
}
}Re-runs NAP (name/address/phone) match scoring on a connected account's already-fetched listings. Does not re-fetch from the platform — pair with POST /api/v1/connections/fetch-listings for that. Rate-limited to once per 24 hours per account; a call inside the window returns 429 with a retryAt timestamp.
Request new match suggestions
/api/v1/connections/request-matches{
"data": {
"scored": 4,
"message": null
}
}Forces an immediate re-fetch of a connected account's listings straight from the platform — not just a re-score of what's already stored, which is POST /api/v1/connections/request-matches. Runs synchronously; the response confirms the fetch already completed.
Force-refetch an account's listings
/api/v1/connections/fetch-listings{
"data": {
"status": "completed",
"count": 4
}
}Returns the saved boost configurations (reusable targeting and budget presets for boosting a post) on one connected account.
List boost configs
/api/v1/connections/boost-configs{
"data": {
"boostConfigs": [
{
"id": "boost_1",
"connectionId": "conn_1",
"adAccountId": "adacct_1",
"name": "Local awareness — $10/day",
"platform": "facebook",
"targeting": {
"ageMin": 25,
"ageMax": 55,
"genders": [],
"geoLocations": {
"countries": [],
"regions": [],
"cities": [],
"zips": []
},
"interests": [],
"publisherPlatforms": [
"facebook"
]
},
"dailyBudget": 10,
"durationDays": 7,
"delayHours": 0,
"publisherPlatforms": [
"facebook"
],
"archived": false,
"createdAt": "2026-01-15T10:00:00.000Z",
"updatedAt": "2026-01-15T10:00:00.000Z"
}
]
}
}Saves a new reusable boost configuration (targeting, daily budget, and duration) on a connected account's ad account. This only stores a preset for later use — it does not itself boost a post, submit anything to the ad platform, or spend any money. Money is only spent when this saved config is later applied to boost a specific post.
Create a boost config
/api/v1/connections/boost-configs{
"data": {
"boostConfig": {
"id": "boost_1",
"connectionId": "conn_1",
"adAccountId": "adacct_1",
"name": "Local awareness — $10/day",
"platform": "facebook",
"targeting": {
"ageMin": 25,
"ageMax": 55,
"genders": [],
"publisherPlatforms": [
"facebook"
]
},
"dailyBudget": 10,
"durationDays": 7,
"delayHours": 0,
"publisherPlatforms": [
"facebook"
],
"archived": false,
"createdAt": "2026-01-15T10:00:00.000Z",
"updatedAt": "2026-01-15T10:00:00.000Z"
}
}
}Edits an existing, non-archived boost configuration. Only the fields you provide are changed.
Update a boost config
/api/v1/connections/boost-configs/update{
"data": {
"boostConfig": {
"id": "boost_1",
"connectionId": "conn_1",
"adAccountId": "adacct_1",
"name": "Local awareness — $15/day",
"platform": "facebook",
"targeting": {
"ageMin": 25,
"ageMax": 55,
"genders": [],
"publisherPlatforms": [
"facebook"
]
},
"dailyBudget": 15,
"durationDays": 7,
"delayHours": 0,
"publisherPlatforms": [
"facebook"
],
"archived": false,
"createdAt": "2026-01-15T10:00:00.000Z",
"updatedAt": "2026-02-01T09:00:00.000Z"
}
}
}Archives a saved boost configuration so it no longer appears as a reusable preset. Does not affect any boost already in progress that was created from it.
Archive a boost config
/api/v1/connections/boost-configs/archive{
"data": {
"archived": true
}
}Returns the business apps (CRMs and other third-party tools) your agency has connected through Pipedream. These are agency-wide — a key scoped to specific clients still sees the full list, since there is no per-client ownership of an app connection.
List connected apps
/api/v1/connections/apps{
"data": {
"connections": [],
"count": 0
}
}