Clients
Créez, consultez, mettez à jour et archivez les clients (entreprises) de votre agence.
Renvoie une page des clients de votre agence, les plus récents en premier. Tous les filtres sont facultatifs et se combinent (un client doit correspondre à tous); pour parcourir plus de résultats, renvoyez le nextCursor reçu.
Lister / rechercher des clients
/api/v1/clients{
"data": {
"clients": [
{
"id": "cli_123",
"businessName": "Acme Dental",
"industry": "Dental",
"status": "complete",
"goal": "get_reviews",
"healthScore": 82,
"locationCount": 1,
"googleRating": 4.8,
"googleReviewCount": 26,
"archived": false,
"archivedAt": null,
"scheduledArchiveAt": null,
"packageType": null,
"planName": null,
"createdAt": "2026-01-15T10:00:00.000Z",
"primaryRepresentative": {
"id": "usr_123",
"firstName": "Jamie",
"lastName": "Lee",
"email": "jamie@youragency.com"
}
}
],
"nextCursor": null,
"total": 1
}
}Crée un nouveau client dans votre agence, ainsi qu'un premier établissement lorsque les coordonnées correspondent à un lieu réel.
Créer un client
/api/v1/clients{
"data": {
"client": {
"id": "cli_123",
"businessName": "Acme Dental",
"website": null,
"industry": null,
"primaryContactEmail": "owner@acmedental.com",
"primaryRepresentativeId": "usr_123",
"visibility": "public",
"goal": null,
"notes": null,
"gbpLink": null,
"trackingKeyword": null,
"healthScore": null,
"planName": null,
"archived": false,
"archivedAt": null,
"scheduledArchiveAt": null,
"createdAt": "2026-01-15T10:00:00.000Z",
"updatedAt": "2026-01-15T10:00:00.000Z"
},
"locationId": "loc_456",
"locationSkipped": null
}
}Renvoie tous les détails d'un client : profil de l'entreprise, représentant assigné, créateur, score de santé et plan.
Obtenir un client
/api/v1/clients/{id}{
"data": {
"id": "cli_123",
"businessName": "Acme Dental",
"website": "https://acmedental.com",
"industry": "Dental",
"primaryContactEmail": "owner@acmedental.com",
"primaryRepresentativeId": "usr_123",
"visibility": "public",
"goal": "get_reviews",
"notes": null,
"gbpLink": null,
"trackingKeyword": "dentist near me",
"healthScore": 82,
"planName": null,
"archived": false,
"archivedAt": null,
"scheduledArchiveAt": null,
"createdAt": "2026-01-15T10:00:00.000Z",
"updatedAt": "2026-01-15T10:00:00.000Z",
"primaryRepresentative": {
"id": "usr_123",
"firstName": "Jamie",
"lastName": "Lee",
"email": "jamie@youragency.com"
},
"createdBy": {
"id": "usr_123",
"firstName": "Jamie",
"lastName": "Lee",
"email": "jamie@youragency.com"
},
"clientPlan": null
}
}Modifie les champs modifiables d'un client existant. Envoyez uniquement les champs que vous souhaitez changer. Le primaryContactEmail du client (son identifiant de connexion au portail) ne peut être défini ici que tant qu'il est encore vide — il ne peut plus jamais être modifié une fois défini.
Mettre à jour un client
/api/v1/clients/{id}{
"data": {
"id": "cli_123",
"businessName": "Acme Dental",
"website": "https://acmedental.com",
"industry": "Dental",
"primaryContactEmail": "owner@acmedental.com",
"primaryRepresentativeId": "usr_123",
"visibility": "public",
"goal": "get_reviews",
"notes": null,
"gbpLink": null,
"trackingKeyword": "dentist near me",
"healthScore": 82,
"planName": null,
"archived": false,
"archivedAt": null,
"scheduledArchiveAt": null,
"createdAt": "2026-01-15T10:00:00.000Z",
"updatedAt": "2026-02-01T09:30:00.000Z"
}
}Demande l'archivage d'un client — cette API ne le supprime jamais définitivement. Si le client possède des établissements, cela PLANIFIE l'opération : le client et tous ses établissements s'archivent à la fin de la période de facturation en cours, et jusque-là tout reste pleinement actif et facturé — l'archivage peut être annulé via l'endpoint cancel-archive. Un client sans aucun établissement est en revanche archivé immédiatement (il n'y a rien à différer). Le champ outcome de la réponse indique lequel des deux s'est réellement produit.
Archiver un client
/api/v1/clients/{id}{
"data": {
"outcome": "scheduled",
"clientId": "cli_123",
"businessName": "Acme Dental",
"scheduledArchiveAt": "2026-02-01T00:00:00.000Z",
"archiveAt": "2026-03-01T00:00:00.000Z",
"locationCount": 1
}
}Annule un archivage de client en attente, afin qu'un client planifié pour archivage à la fin de la période de facturation continue normalement. Libère également les établissements qui étaient planifiés avec lui. Ne fonctionne que tant que l'archivage est encore en attente — un client déjà entièrement archivé doit plutôt être réactivé, via l'endpoint reactivate.
Annuler un archivage planifié
/api/v1/clients/{id}/cancel-archive{
"data": {
"cancelled": true,
"locationsReleased": 1
}
}Envoie (ou renvoie) l'e-mail d'invitation au portail client au contact principal d'un client — un lien magique sans mot de passe. Le renvoyer invalide tout lien précédemment envoyé. Échoue si le client n'a pas de primaryContactEmail défini.
Envoyer l'invitation au portail client
/api/v1/clients/{id}/invite{
"data": {
"portalLink": "https://portal.synup.com/invite/aB3dE9fGhJ"
}
}Restaure un client déjà archivé, ainsi que tous les établissements archivés avec lui. Un client qui n'est pas actuellement archivé se traduit par un succès sans effet, pas par une erreur. C'est le seul moyen de revenir en arrière pour un client dont outcome est archived — un client encore planifié doit plutôt passer par cancel-archive.
Réactiver un client archivé
/api/v1/clients/{id}/reactivate{
"data": {
"archived": false,
"locationsArchived": 1,
"locationsFailed": 0,
"cancelledScheduledPosts": 0
}
}Renvoie un instantané consolidé pour un client : statistiques agrégées d'emplacements, d'avis et de référencement SEO.
Obtenir le résumé du client
/api/v1/clients/summary{
"data": {
"locations": {
"total": 1,
"byStatus": {
"approved": 1
},
"byVerification": {
"unknown": 1
}
},
"reviews": {
"avgRating": 4.8,
"total": 26
},
"seo": {
"avgRank": 3.2,
"top3Pct": 0.62
}
}
}