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
| Route | Portée | Niveau requis |
|---|---|---|
| GET /api/users/me | posts:read | — |
| GET /api/businesses | posts:read | — |
| GET /api/cities | posts:read | — |
| GET /api/posts/mine | posts:read | — |
| GET /api/feed?kind=visual|text | posts:read | 1 (e-mail vérifié) |
| GET /api/posts/{id} | posts:read | 1 (e-mail vérifié) |
| POST /api/posts | posts:write | 3 pour publier sur le fil public |
| POST /api/posts/visual | posts:write | 3 pour publier sur le fil public |
| POST /api/posts/youtube | posts:write | 3 pour publier sur le fil public |
| DELETE /api/posts/{id} | posts:write | auteur 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 :
| Champ | Signification |
|---|---|
| content | 4000 caractères maximum |
| link_url | URL http(s) absolue facultative, dépliée et affichée en carte |
| language | fr | en | he — le filtre de langue du fil |
| city | slug de ville — le filtre de ville du fil |
| business_id | facultatif ; doit correspondre à l'identité de la clé si elle est épinglée |
| conversation_id | facultatif ; 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
| Limite | Valeur |
|---|---|
| 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ête | 30 Mo (App Engine plafonne à 32 Mo) |
| Médias par publication | 10 |
| Clés actives par compte | 20 |
Erreurs
{ "error": "missing the posts:write scope" }| Statut | Ce qu'il veut dire |
|---|---|
| 401 invalid API key | inconnue, révoquée ou expirée — les trois se ressemblent volontairement |
| 403 missing the posts:write scope | la clé est en lecture seule |
| 403 verification level 3 required | le compte n'est pas vérifié mezouza, ce qu'exige le fil public |
| 403 can only publish as the business account it is bound to | la requête a nommé une autre identité que celle de la clé |
| 402 | solde en מ insuffisant pour payer la publication |
| 429 | quota 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.