Connectez vos systèmes à Marcomm AI
Lisez les synthèses d’actualité, les actualités critiques et les validations en attente depuis vos propres systèmes, et approuvez ou rejetez depuis vos outils de validation. L’API est disponible avec l’offre Team et supérieures, après une courte vérification.
Pour commencer
- 1Demander l’accès
Décrivez votre système et choisissez les données dont vous avez besoin. Nous examinons les demandes.
- 2Créer une clé
Après approbation, créez une clé dans Paramètres, API. La clé n’est affichée qu’une fois, enregistrez-la donc dans votre système.
- 3Envoyer une requête
Envoyez la clé dans l’en-tête Authorization et appelez l’un des points d’accès ci-dessous.
Exemple de requête
curl https://app.marcomm.works/api/v1/news/digest?days=7 \
-H "Authorization: Bearer mc_live_..."Authentification
Envoyez votre clé comme jeton Bearer à chaque requête. Une clé personnelle agit au nom de la personne qui l’a créée : elle peut donc lire et trancher des validations en son nom. Une clé d’espace de travail est créée par un administrateur et ne peut que lire. Les clés peuvent expirer, être limitées à des adresses IP et être renouvelées : l’ancienne clé reste valable 24 heures après un renouvellement.
Scopes
Une clé ne porte que les scopes pour lesquels votre demande a été approuvée.
- news
- Synthèse d’actualité, articles et médias.
- crisis
- Actualités critiques et incidents de crise.
- approvals
- Validations en attente, avec approbation ou rejet à l’aide d’une clé personnelle.
- content
- Lecture des communiqués de presse et des articles de blog.
Points d’accès
Les chemins commencent par /api/v1. Les points de lecture utilisent GET et acceptent des paramètres de requête. La réponse est du JSON de la forme {"data": ...}.
| Méthode | Chemin | Scope | Fonction |
|---|---|---|---|
| GET | /api/v1/news/digest | news | Volume de couverture, tonalité et principaux médias sur une période. |
| GET | /api/v1/news/articles | news | Recherche dans la couverture médiatique. |
| GET | /api/v1/news/outlets | news | Médias qui parlent de vos entreprises. |
| GET | /api/v1/crisis/incidents | crisis | Incidents de crise et articles critiques. |
| GET | /api/v1/approvals | approvals | Communiqués et articles de blog en attente du titulaire de la clé, et ceux dont le titulaire a demandé la validation. |
| GET | /api/v1/press-releases | content | Liste les communiqués de presse. |
| GET | /api/v1/press-releases/{id} | content | Un communiqué de presse avec son chapeau et son texte. |
| GET | /api/v1/blog-posts | content | Liste les articles de blog. |
| GET | /api/v1/blog-posts/{id} | content | Un article de blog avec son texte. |
| POST | /api/v1/approvals/press-releases/{id} | approvals | Approuve ou rejette un communiqué en attente du titulaire de la clé. |
| POST | /api/v1/approvals/blog-posts/{id} | approvals | Approuve ou rejette un article de blog en attente du titulaire de la clé. |
Approuver et rejeter
Envoyez {"decision": "approve"} ou {"decision": "reject", "comment": "..."} à l’élément. Un rejet exige un commentaire. La décision suit les mêmes règles que l’application et Slack, et elle est enregistrée au nom du titulaire de la clé. Si le texte contient des formulations qui demandent confirmation, vous recevez 409 confirmation_required avec les avertissements, et vous pouvez renvoyer la requête avec "force": true.
curl -X POST https://app.marcomm.works/api/v1/approvals/press-releases/<id> \
-H "Authorization: Bearer mc_live_..." \
-H "Content-Type: application/json" \
-d '{"decision":"reject","comment":"Please fix the headline."}'Limites de débit
Les limites s’appliquent par espace de travail, par minute et par jour (UTC). Les réponses portent les en-têtes ci-dessous. Au-delà d’une limite, vous recevez 429 avec Retry-After. Pour relever une limite, faites une demande dans Paramètres, API. Notre équipe l’examine.
- X-RateLimit-Limit
- Requêtes autorisées par minute.
- X-RateLimit-Remaining
- Requêtes restantes dans la minute en cours.
- X-RateLimit-Reset
- Heure Unix de réinitialisation de la fenêtre d’une minute.
- X-RateLimit-Day-Limit
- Requêtes autorisées par jour.
- X-RateLimit-Day-Remaining
- Requêtes restantes aujourd’hui.
- Retry-After
- Secondes à attendre avant de réessayer. Uniquement avec 429.
Erreurs
Les erreurs renvoient du JSON de la forme {"error": {"code": ..., "message": ...}}.
| Code | Statut | Signification |
|---|---|---|
| invalid_key | 401 | La clé est absente, mal formée ou révoquée. |
| expired | 401 | La clé a expiré. Créez ou renouvelez une clé. |
| ip_denied | 403 | La clé est limitée à d’autres adresses IP. |
| plan_required | 403 | L’espace de travail n’a pas l’offre Team ou supérieure. |
| access_required | 403 | L’accès à l’API n’est pas approuvé pour cet espace de travail. |
| suspended | 403 | L’accès à l’API de cet espace de travail est suspendu. |
| scope_denied | 403 | La clé n’a pas le scope requis par ce point d’accès. |
| personal_key_required | 403 | Seule une clé personnelle peut approuver ou rejeter. |
| denied | 403 | Le rôle du titulaire de la clé ne l’autorise pas. |
| unknown_endpoint | 404 | Ce point d’accès n’existe pas. |
| comment_required | 400 | Un motif est requis pour rejeter. |
| confirmation_required | 409 | Les avertissements demandent confirmation. Renvoyez la requête avec force à true. |
| rate_limited | 429 | La limite par minute a été dépassée. |
| daily_limit | 429 | La limite quotidienne a été atteinte. |
Webhooks
Les alertes, les demandes de validation et le briefing du matin peuvent aussi être envoyés à votre système. Ajoutez une destination dans Paramètres, API, Webhooks. Chaque requête est du JSON avec les champs event (alert, approval ou briefing), workspace, title, text, url, data et sentAt. Une demande de validation contient data.kind (press_release, blog ou event) et data.id, que vous pouvez utiliser pour lire et trancher via l’API.
Les requêtes sont signées. Calculez le HMAC-SHA256 du corps brut de la requête avec votre secret de signature et comparez-le à l’en-tête X-Marcomm-Signature, de la forme sha256=<hex>. Rejetez les requêtes qui ne correspondent pas.
Vérifier un webhook en Node.js
import { createHmac, timingSafeEqual } from 'node:crypto';
export function isFromMarcomm(rawBody: string, signature: string, secret: string) {
const expected = 'sha256=' + createHmac('sha256', secret).update(rawBody).digest('hex');
const a = Buffer.from(expected);
const b = Buffer.from(signature);
return a.length === b.length && timingSafeEqual(a, b);
}Guides de connexion
Approuver depuis votre système de validation
- Ajoutez une destination de webhook générique et activez les demandes de validation.
- Quand un webhook de validation arrive, vérifiez la signature et lisez data.kind et data.id.
- Affichez la demande dans votre système de validation. Si besoin, lisez le texte avec GET press-releases/{id} ou blog-posts/{id}.
- Envoyez la décision avec la clé personnelle de la personne qui décide. Les événements et les envois d’e-mails se décident dans l’application, via le lien du message.
Alimenter votre tableau de bord avec la synthèse d’actualité
- Créez une clé d’espace de travail avec les scopes news et crisis.
- Appelez news/digest selon un calendrier, par exemple chaque matin.
- Appelez crisis/incidents plus souvent si vous voulez vos propres alertes. Surveillez les en-têtes X-RateLimit pour rester dans vos limites.
Alertes dans votre messagerie
- Pour Teams et Google Chat, créez l’URL de webhook du salon et ajoutez-la comme destination dans Paramètres, API, Webhooks.
- Pour JANDI, Dooray! et Chatwork, connectez-les depuis Paramètres, Intégrations.
- Choisissez si chaque destination reçoit les alertes, les demandes de validation et le briefing du matin, puis envoyez un message de test.
Prêt à vous connecter ?
Le propriétaire ou un administrateur de l’espace de travail dépose la demande dans Paramètres, API. Vous êtes prévenu par e-mail et dans l’application une fois la vérification terminée.
Ouvrir les paramètres de l’API