MishkanMishkan

API

Publier sur Mishkan depuis l'extérieur de l'app.

Mis à jour le 2026-08-19

Une clé API Mishkan permet à un studio, un script ou un serveur de lire le fil et d'y publier en votre nom. C'est une deuxième porte vers votre propre identité — pas un compte de service : une clé obéit à toutes vos règles, de votre niveau de vérification au coût en Mem d'une publication, en passant par les personnes que vous avez bloquées.

Tout ce qui suit est servi par https://api.mishkan.tech. Les réponses sont en JSON ; une erreur porte un statut HTTP et une seule chaîne « error ».

Obtenir une clé

Les clés se créent dans l'app : Profil → Clés API → +. En créer une demande le niveau 4 (vérification formelle), la même barre que les comptes business — une clé agit en votre nom hors de l'app, on ne la confie donc qu'à un compte qu'un admin a identifié. Lister et révoquer restent possibles à tous les niveaux.

  • Nom — pour vous y retrouver (« Studio Midbar »).
  • Publier en tant que — votre compte personnel, ou l'un de vos comptes business. Une clé épinglée sur un business ne peut publier QUE sous cette identité ; nommer une autre identité dans une requête est refusé.
  • Autoriser la publication — coupé, la clé ne peut que lire.

Le secret (msk_live_…) n'est affiché qu'une fois. Le serveur n'en garde que le SHA-256 : il est irrécupérable — une clé perdue se révoque et se remplace. Vous pouvez détenir jusqu'à 20 clés actives, chacune avec une expiration facultative allant jusqu'à dix ans.

Authentification

Envoyez la clé comme jeton bearer. L'en-tête X-API-Key est accepté aussi, pour les clients qui se réservent Authorization.

curl https://api.mishkan.tech/api/users/me \
  -H "Authorization: Bearer $MISHKAN_KEY"

Une clé inconnue, révoquée ou expirée répond le même 401 — volontairement : sonder l'API n'apprend rien à un attaquant.

Portées

Une clé porte posts:read, posts:write, ou les deux. Tout le reste — messages, Mem, vérification, administration, et la gestion des clés elle-même — reste réservé à une session signée dans l'app. Une clé qui fuite ne peut ni en créer une autre, ni lire vos conversations, ni vider votre solde.

Points d'entrée

RoutePortéeNiveau requis
GET /api/users/meposts:read
GET /api/businessesposts:read
GET /api/citiesposts:read
GET /api/posts/mineposts:read
GET /api/feed?kind=visual|textposts:read1 (e-mail vérifié)
GET /api/posts/{id}posts:read1 (e-mail vérifié)
POST /api/postsposts:write3 pour publier sur le fil public
POST /api/posts/visualposts:write3 pour publier sur le fil public
POST /api/posts/youtubeposts:write3 pour publier sur le fil public
DELETE /api/posts/{id}posts:writeauteur ou admin

Publier dans le fil d'un groupe (conversation_id) remplace le gate de niveau par l'appartenance au groupe et sa politique de publication, et paie le prix du groupe à son propriétaire.

curl "https://api.mishkan.tech/api/feed?kind=text&limit=20" \
  -H "Authorization: Bearer $MISHKAN_KEY"

Publier

Une publication sur le fil public coûte 2 מ et demande la vérification mezouza (niveau 3). Le débit est remboursé si l'enregistrement échoue.

POST /api/posts publie du texte et des liens, en JSON :

ChampSignification
content4000 caractères maximum
link_urlURL http(s) absolue facultative, dépliée et affichée en carte
languagefr | en | he — le filtre de langue du fil
cityslug de ville — le filtre de ville du fil
business_idfacultatif ; doit correspondre à l'identité de la clé si elle est épinglée
conversation_idfacultatif ; publie dans le fil de ce groupe plutôt que dans le fil public
curl -X POST https://api.mishkan.tech/api/posts \
  -H "Authorization: Bearer $MISHKAN_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content":"Chag sameach","language":"en"}'

POST /api/posts/visual publie un reel ou un carrousel en multipart/form-data : 1 à 10 fichiers, dans l'ordre du formulaire, 30 Mo pour la requête entière. La légende va dans content (1000 caractères), et les mêmes champs facultatifs s'appliquent.

curl -X POST https://api.mishkan.tech/api/posts/visual \
  -H "Authorization: Bearer $MISHKAN_KEY" \
  -F "content=Kabbalat Shabbat, 18:30" \
  -F "media=@reel.mp4;type=video/mp4"

POST /api/posts/youtube publie un reel adossé à une vidéo YouTube. url désigne la vidéo ; link_url est un bouton « En savoir plus » distinct — renseignez les deux si vous voulez les deux.

curl -X POST https://api.mishkan.tech/api/posts/youtube \
  -H "Authorization: Bearer $MISHKAN_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://youtu.be/abc123","link_url":"https://example.org"}'

Limites

LimiteValeur
Lectures~60 par minute, rafale de 30
Écritures~20 par minute, rafale de 5
Par adresse IP~300 par minute, rafale de 60
Taille d'une requête30 Mo (App Engine plafonne à 32 Mo)
Médias par publication10
Clés actives par compte20

Erreurs

{ "error": "missing the posts:write scope" }
StatutCe qu'il veut dire
401 invalid API keyinconnue, révoquée ou expirée — les trois se ressemblent volontairement
403 missing the posts:write scopela clé est en lecture seule
403 verification level 3 requiredle compte n'est pas vérifié mezouza, ce qu'exige le fil public
403 can only publish as the business account it is bound tola requête a nommé une autre identité que celle de la clé
402solde en מ insuffisant pour payer la publication
429quota dépassé — attendez avant de réessayer

Révoquer

Balayez la clé (iOS) ou touchez la corbeille (Android), ou appelez DELETE /api/api-keys/{id} avec un jeton de session. L'effet est immédiat. Les publications déjà faites restent en ligne : révoquer un identifiant n'est pas retirer ce qui a été publié avec.