Quickstart

De zéro à votre premier pin publié en quelques minutes.

1. Connectez votre compte Pinterest

Depuis le tableau de bord, ouvrez Comptes Pinterestet cliquez sur « Connecter un compte Pinterest ». Autorisez l'accès : Pincast gère ensuite les jetons pour vous.

2. Créez une clé API

Dans Clés API, créez une clé. Elle commence par pk_live_et n'est affichée qu'une seule fois — copiez-la immédiatement.

3. Récupérez vos comptes et tableaux

curl https://api.pincast.io/v1/accounts \
  -H "Authorization: Bearer pk_live_VOTRE_CLE"

# Puis les tableaux du compte
curl https://api.pincast.io/v1/accounts/ACCOUNT_ID/boards \
  -H "Authorization: Bearer pk_live_VOTRE_CLE"

4. Publiez un pin

curl -X POST https://api.pincast.io/v1/pins \
  -H "Authorization: Bearer pk_live_VOTRE_CLE" \
  -H "Content-Type: application/json" \
  -d '{
    "account_id": "ACCOUNT_ID",
    "board_id": "BOARD_ID",
    "image_url": "https://votre-cdn.com/image.jpg",
    "title": "Mon premier pin"
  }'

# Réponse : { "id": "...", "status": "queued", "publish_at": null }

5. Suivez le statut

curl https://api.pincast.io/v1/pins/PIN_ID \
  -H "Authorization: Bearer pk_live_VOTRE_CLE"

# status passe de "queued" à "published" avec pinterest_pin_id

Pour être notifié en temps réel plutôt que d'interroger l'API, configurez un webhook depuis le tableau de bord.

ℹ️ À savoir : un pin peut rester en statut queuedplus longtemps que prévu — c'est le pacing qui respecte les limites de l'API Pinterest. Le pin partira automatiquement, ne le re-soumettez pas. Si un pin reste bloqué plus d'une heure, contactez le support.

Vérifier la signature d'un webhook

Chaque livraison porte un header X-Pincast-Signature: t=<timestamp>,v1=<hmac>. Recalculez le HMAC-SHA256 de <timestamp>.<body>avec le secret de l'endpoint :

import crypto from "node:crypto";

function verify(rawBody, header, secret) {
  const [t, v1] = header.split(",").map((p) => p.split("=")[1]);
  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${t}.${rawBody}`)
    .digest("hex");
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}