Ce guide est disponible en anglais.
How to Build a White-Label Local Marketing Platform
Build a multi-tenant white-label local marketing platform on the API, with client provisioning, team access, per-client summaries and scoped API keys.
En bref
- Ce que ce guide permet
- Stand up a multi-tenant platform where each of your customers is a client, provisioned, staffed and reported on through the API.
- API utilisées
- post
/api/v1/clientsCréer un client - get
/api/v1/clientsLister / rechercher des clients - get
/api/v1/clients/{id}Obtenir un client - get
/api/v1/clients/summaryObtenir le résumé du client - post
/api/v1/clients/{id}/inviteEnvoyer l'invitation au portail client - post
/api/v1/team/membersInviter un membre de l'équipe - get
/api/v1/team/membersLister les membres de l'équipe - get
/api/v1/workspace/summaryObtenir le résumé de l'espace de travail
- post
- Référence
- ClientsTeamEspace de travail
- Prérequis
- An API key with write access
- A plan that covers the clients and locations you will create
- Cas d'usage typiques
- An agency reselling local marketing under its own brand
- A platform giving each customer their own workspace
- Provisioning new customers without manual setup
Every customer sees their own branded product. Underneath, they are all clients in one account you own. That split is the whole idea of a white-label platform: your brand on the outside, one client per customer on the inside, each with its own locations, team, and reporting. The API hands you the tenancy model. The work left to you is provisioning, access, and roll-up.
The tenancy model
- Workspace
GET /api/v1/workspace/summaryYour account, across all clients - Client
POST /api/v1/clientsOne per customer you onboard - LocationsCreated under the client, the customer's own
- AccessTeam members you employ, plus the client's own login
A client is the tenant. Everything (locations, reviews, rank, analytics) hangs off a client id, so the whole platform is a matter of creating clients and reading their data back scoped by id.
Provision a customer
POST /api/v1/clients creates the tenant and returns its id, which you store against your own customer
record. From there, create the customer's locations under that id, the same
create-location flow as anywhere else. Provisioning a new customer is: create client,
create their locations, kick off their Google connections, done.
curl -X POST https://ai.synup.com/api/v1/clients \
-H "Authorization: Bearer $SYNUP_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "businessName": "Grove Street Dental Group" }'const API = "https://ai.synup.com/api/v1";
const headers = {
Authorization: `Bearer ${process.env.SYNUP_API_KEY}`,
"Content-Type": "application/json",
};
async function onboardCustomer(businessName) {
const res = await fetch(`${API}/clients`, { method: "POST", headers, body: JSON.stringify({ businessName }) });
if (res.status === 422) throw new Error(`invalid client: ${(await res.json()).error}`);
if (!res.ok) throw new Error(`${res.status}: ${(await res.json()).error}`);
const { data } = await res.json();
return data.clients[0].id; // store against your customer record, then create their locations
}import os, requests
API = "https://ai.synup.com/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['SYNUP_API_KEY']}", "Content-Type": "application/json"}
def onboard_customer(business_name):
r = requests.post(f"{API}/clients", headers=HEADERS, timeout=30, json={"businessName": business_name})
if r.status_code == 422:
raise ValueError(r.json()["error"])
r.raise_for_status()
return r.json()["data"]["clients"][0]["id"]Give people access, two kinds
There are two access questions on a white-label platform, and they use different endpoints:
- Your staff. People who work across clients (account managers, support) are team members.
POST /api/v1/team/membersinvites one andGET /api/v1/team/memberslists them with theirrole,statusand last session. This is your internal org. - The customer. The business owner who logs in to see only their own client uses
POST /api/v1/clients/{id}/invite, which invites them into their tenant. That is the "white-label login" your customer gets.
Keeping these separate is what makes the platform feel like each customer has their own product while your team sees across all of them.
Report per client and across the workspace
GET /api/v1/clients/summary is the one-call overview for a single tenant: its locations (with a
verification breakdown), reviews (average rating and total) and seo (average rank and top-three percentage).
It is exactly the header of a customer's dashboard.
curl "https://ai.synup.com/api/v1/clients/summary?clientId=CLIENT_ID" \
-H "Authorization: Bearer $SYNUP_API_KEY"GET /api/v1/workspace/summary is the level above: your whole account across every client, for your internal
"how is the business doing" view.
Next
The cross-client operational view is the multi-location marketing dashboard. The feature set each tenant gets (listings, reviews, posts, analytics, rankings, AEO) is the local marketing guide, and reviews as a full module is the reputation platform guide.