S’exécute surWrit Cloud
Sur cette page
Quelqu’un l’a déjà construit.
Une annonce est un workflow ou une automatisation que quelqu’un a fait marcher, partagé comme quelque chose que vous pouvez exécuter. Vous l’installez — gratuitement — vous rattachez vos propres identifiants et entrées aux emplacements qu’elle déclare, et vous l’exécutez : POST /api/marketplace/listings/{slug}/run. Vous exécutez une annonce ; vous ne la lisez pas.
parcourir ▸ filtres
Trouvez-en une qui marche déjà.
GET /api/marketplace/listings prend les filtres ci-dessous, et GET /api/marketplace/listings/{slug} en lit une en entier. Les résultats portent des performances mesurées, pas des adjectifs.
| Filtre | Valeurs |
|---|---|
q · category · tag | Texte libre, catégorie, tag. |
asset_type | workflow | automation |
sort | rank | fastest | success | on_time | newest | most_used |
capability_key · target_site | Ce qu’elle fait, et sur quel site. |
min_success_rate | Plancher de réussite mesurée. |
max_p50_latency_ms · max_p95_latency_ms | Plafonds de latence mesurée. |
min_on_time_rate | À quelle fréquence elle finit dans la base annoncée. |
min_reputation_tier | rising | trusted | top |
verified_only · established_only | Restreindre aux créateurs vérifiés ou installés de longue date. |
limit · offset | limit 1–100, 24 par défaut. |
Ce que dit une carte d’annonce
Chaque carte porte les mêmes signaux mesurés : deux annonces pour le même travail sont donc directement comparables.
- Latence, taux de réussite et taux de ponctualité — mesurés sur de vraies exécutions.
- Un indicateur de pic d’échecs quand les exécutions récentes se dégradent.
- Le palier de réputation du créateur.
- Son rang dans l’ensemble de capacités où elle concourt.
installation ▸ gratuite
L’installation est gratuite, et elle est idempotente.
POST /api/marketplace/listings/{slug}/install pose l’annonce sur votre compte. L’appeler deux fois ne l’installe pas deux fois — une installation est idempotente par compte et par annonce. Ce qui atterrit est un snapshot figé et sans données : les étapes, plus le manifest des emplacements qu’elle demande, les identifiants du créateur ayant été retirés à la publication.
Rien n’est à vendre dans le marketplace. Installer ne coûte rien, le créateur ne facture rien, et une exécution ne coûte que le compute de la plateforme Writ — gratuit et sans compteur sur votre propre machine, facturé au temps d’exécution sur la flotte cloud managée.
rattachements ▸ la couture
Vous rattachez vos propres identifiants. C’est tout le principe.
Une annonce déclare des emplacements : la connexion dont elle a besoin, le secret dont elle a besoin, les entrées qu’elle prend. Elle n’embarque pas ceux du créateur. Vous remplissez les emplacements avec ce qui vous appartient, et une exécution les résout depuis vos rattachements et de nulle part ailleurs. Lisez les emplacements avec GET /api/marketplace/installs/{slug}/manifest, avant ou après l’installation.
| slot_kind | Ce qu’on y met |
|---|---|
persona | Une identité de connexion enregistrée. Installations workflow et automation. |
secret | Une référence à un secret de votre coffre, jamais la valeur elle-même. |
input | Une valeur simple que le workflow prend. |
monitor_url | Installations d’automatisation : la page à surveiller. |
notify_recipient | Installations d’automatisation : où part l’alerte. |
Poser et retirer un rattachement
PUT /api/marketplace/installs/{slug}/bindings pose un emplacement ; DELETE avec ?slot_kind= et ?slot_key= le retire. Le corps tient en cinq champs :
slot_kind · slot_key | Quel emplacement. Les deux sont requis, à la pose comme au retrait. |
persona_id | Pour un emplacement persona. |
vault_secret_ref | Pour un emplacement secret — le nom, pas le secret. |
input_value | Pour un emplacement input, monitor_url ou notify_recipient. |
Un rattachement persona ne peut pointer que vers une persona qui vous appartient. Il n’existe aucun moyen de rattacher l’identité de connexion d’un tiers, ni pour une annonce d’en apporter une.
Installer, rattacher, exécuter
Les quatre appels dans l’ordre où vous les faites.
install-bind-run.sh
# 1. See what slots this listing needs before you install it.
curl https://api.usewrit.app/api/marketplace/installs/invoice-puller/manifest \
-H "Authorization: Bearer $WRIT_API_KEY"
# 2. Install. Free, and idempotent per account + listing.
curl -X POST https://api.usewrit.app/api/marketplace/listings/invoice-puller/install \
-H "Authorization: Bearer $WRIT_API_KEY"
# 3. Bind YOUR persona and YOUR secret into the slots it declared.
curl -X PUT https://api.usewrit.app/api/marketplace/installs/invoice-puller/bindings \
-H "Authorization: Bearer $WRIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"slot_kind": "persona", "slot_key": "login", "persona_id": 12}'
curl -X PUT https://api.usewrit.app/api/marketplace/installs/invoice-puller/bindings \
-H "Authorization: Bearer $WRIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"slot_kind": "input", "slot_key": "account_number", "input_value": "88213"}'
# 4. Run it. Everything it signs in with came from step 3.
curl -X POST https://api.usewrit.app/api/marketplace/listings/invoice-puller/run \
-H "Authorization: Bearer $WRIT_API_KEY" slot kinds
// A workflow install declares these slot kinds:
{ "slot_kind": "persona", "slot_key": "login", "persona_id": 12 }
{ "slot_kind": "secret", "slot_key": "api_key", "vault_secret_ref": "acme-key" }
{ "slot_kind": "input", "slot_key": "region", "input_value": "eu-west" }
// An automation install adds two more:
{ "slot_kind": "monitor_url", "slot_key": "watch", "input_value": "https://example.com/pricing" }
{ "slot_kind": "notify_recipient", "slot_key": "alerts", "input_value": "[email protected]" }
// Clearing one is a DELETE with the same two identifiers:
// DELETE /api/marketplace/installs/{slug}/bindings?slot_kind=input&slot_key=region after-the-run.sh
# Where this install sits against the creator's caps.
curl https://api.usewrit.app/api/marketplace/installs/invoice-puller/usage \
-H "Authorization: Bearer $WRIT_API_KEY"
# Everything you have installed.
curl https://api.usewrit.app/api/marketplace/installs -H "Authorization: Bearer $WRIT_API_KEY"
# A run went wrong — open a report.
curl -X POST https://api.usewrit.app/api/marketplace/installs/invoice-puller/report \
-H "Authorization: Bearer $WRIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"reason": "The run signed in but returned no rows."}'
# Your own reports: open | reviewing | resolved | dismissed.
curl https://api.usewrit.app/api/marketplace/reports -H "Authorization: Bearer $WRIT_API_KEY" exécution ▸ ce qui est garanti
Ce qu’une exécution promet.
POST /api/marketplace/listings/{slug}/run exécute l’annonce sur votre compte. Quatre choses tiennent à chaque exécution :
- Elle utilise vos rattachements, et seulement les vôtres — Personas, identifiants, secrets et entrées sont résolus depuis ce que vous avez rattaché. Rien n’arrive du créateur.
- Elle exécute le snapshot que vous avez installé — L’installation fige la recette telle qu’elle était ce jour-là. Un créateur qui modifie son workflow en direct ne change pas ce que votre installation exécute.
- Un emplacement requis manquant la bloque — L’exécution répond 422 au lieu de démarrer et d’échouer à mi-chemin. Rattachez l’emplacement, relancez.
- L’annonce elle-même est gratuite — Aucun frais d’annonce, aucune commission du créateur sur une exécution. Ce qu’une exécution peut coûter, c’est le compute de la plateforme Writ : rien sur votre propre machine, du temps d’exécution facturé sur la flotte cloud managée.
Le reste du cycle de vie
Tout ce que vous pouvez faire d’autre avec une installation :
| Appel | Ce qu’il fait |
|---|---|
GET /api/marketplace/installs | Tout ce que vous avez installé. |
GET /api/marketplace/installs/{slug}/usage | status et last_run_at, plus les plafonds du créateur avec used, remaining et reset par fenêtre. |
POST /api/marketplace/installs/{slug}/sync | Passer votre installation sur la recette plus récente du créateur. Cela exige votre consentement — jamais tout seul. |
DELETE /api/marketplace/listings/{slug}/install | Désinstaller. Cascade sur vos rattachements. |
Une installation continue de fonctionner même si l’annonce est dépubliée plus tard. Vous avez installé un snapshot, pas un lien vivant vers l’espace du créateur.
avis ▸ exécutions vérifiées
Les avis viennent de gens qui l’ont exécutée.
Seule une personne qui a installé une annonce et accumulé assez d’exécutions réussies peut la noter, et une organisation dispose d’un avis. C’est pourquoi les notes suivent les signaux mesurés au lieu de s’en éloigner.
| Appel | Ce qu’il fait |
|---|---|
GET /api/marketplace/listings/{slug}/reviews | Les avis des comptes qui l’ont réellement exécutée, plus le résumé des notes. |
GET /api/marketplace/listings/{slug}/reviews/eligibility | Si vous pouvez déjà noter, et ce qui manque. |
POST /api/marketplace/listings/{slug}/reviews | Laisser le vôtre. Un par organisation. |
DELETE /api/marketplace/listings/{slug}/reviews/me | Le retirer. |
problèmes ▸ signalements
Quand ça ne tient pas ses promesses.
Signalez l’exécution qui a mal tourné. Le créateur et les administrateurs de la plateforme sont prévenus, et une annonce qui accumule des signalements non résolus est marquée pour examen.
| Appel | Ce qu’il fait |
|---|---|
POST /api/marketplace/installs/{slug}/report | Signaler un problème sur une installation, éventuellement rattaché à l’exécution qui a échoué. |
GET /api/marketplace/reports | Vos propres signalements, chacun avec status : open | reviewing | resolved | dismissed. |
publier ▸ créateurs
Publier la vôtre.
POST /api/marketplace/publish exige un compte vérifié et accept_creator_agreement: true. N’importe quel plan, Free compris, peut publier, et ce que vous publiez est une recette gratuite : vos personas, secrets et sessions sont retirés à la publication, donc ce que les autres installent ne peut jamais les contenir. Le corps décrit l’actif et les garde-fous que vous voulez sur chaque exécution.
| Champ | Rôle |
|---|---|
asset_type | workflow | automation. |
workflow_id · automation_id | Ce que vous publiez. |
title · summary · category | title jusqu’à 140 caractères. |
keywords[] · tags[] · icon · cover_image_url | Comment on la trouve et à quoi elle ressemble. |
intent | Jusqu’à 60 caractères — le travail qu’elle fait, en une ligne. |
visibility | Qui peut voir l’annonce. |
baseline_duration_ms | La vitesse que vous promettez. Le taux de ponctualité est mesuré contre elle. |
marketplace_exec_policy | customer | cloud | local | creator — où une exécution a le droit de tourner. |
usage_limits | Plafonds par installation, globaux et de simultanéité, chacun avec sa fenêtre et son mode. |
input_rules | Une regex par entrée, appliquée à chaque exécution de votre annonce. |
Publier une recette
L’appel de publication, et les garde-fous qui l’accompagnent.
publish.sh
curl -X POST https://api.usewrit.app/api/marketplace/publish \
-H "Authorization: Bearer $WRIT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accept_creator_agreement": true,
"asset_type": "workflow",
"workflow_id": 41,
"title": "Invoice puller",
"summary": "Signs in and pulls every invoice since a date you pass in.",
"category": "finance",
"keywords": ["invoices", "accounting"],
"tags": ["billing"],
"intent": "Pull invoices from a billing portal",
"baseline_duration_ms": 18000,
"marketplace_exec_policy": "cloud",
"usage_limits": {
"per_buyer": { "count": 200, "window": "day", "mode": "enforce" },
"global": { "count": 20000, "window": "month", "mode": "enforce" },
"max_concurrent_per_buyer": { "count": 4, "mode": "enforce" }
},
"input_rules": {
"rules": {
"account_number": { "pattern": "^[0-9]{4,8}$", "message": "4 to 8 digits" }
}
}
}' limits + rules
// usage_limits — three independent caps, each with its own mode.
// mode: "off" | "warn" | "enforce"
// window: per_buyer "day" | "month" · global "day" | "month" | "lifetime"
{
"per_buyer": { "count": 200, "window": "day", "mode": "enforce" },
"global": { "count": 20000, "window": "month", "mode": "enforce" },
"max_concurrent_per_buyer": { "count": 4, "mode": "enforce" }
}
// input_rules — one regex per input or secret slot, checked on every run.
// flags: any subset of "i", "m", "s". message is what the runner is shown.
{
"rules": {
"account_number": { "pattern": "^[0-9]{4,8}$", "flags": "", "message": "4 to 8 digits" }
}
} pi ▸ exécuter, pas lire
On exécute une annonce. On ne la lit pas.
Si vous publiez une recette que vous avez mis des semaines à régler, la partager ne doit pas revenir à la céder. C’est une contrainte de conception, pas une promesse — voici donc exactement comment c’est agencé :
- L’installation fige un snapshot sans données — Ce qui atterrit sur le compte d’un tiers est la forme de la recette, sans les données sur lesquelles elle a été construite.
- Aucun endpoint côté installation ne rend les étapes — Il n’existe pas de chemin de lecture de la recette. Ni sur l’annonce, ni sur l’installation, ni sur une exécution.
- Le chemin desktop reçoit une recette scellée — Quand une exécution se fait sur une machine, cette machine reçoit une forme qu’elle seule peut ouvrir.
référence ▸ suite
Autour du marketplace
Tous les endpoints marketplace au même endroit.
→ AuthentificationClés, scopes, et ce qu’une clé partenaire peut atteindre.
→ WorkflowsConstruire ce que vous allez publier.
→ Connexions et secretsPersonas et références de coffre — ce que vise un rattachement.
→ Facturation et usageComment exécutions, pages et tokens IA sont décomptés.
→ Compte et équipeQui, dans votre organisation, peut installer et publier.
→faq
Questions marketplace, répondues.
Le créateur récupère-t-il ma connexion quand j’installe son annonce ?
Si le créateur modifie son workflow, mon installation change-t-elle ?
Combien coûte une annonce ?
Que faut-il pour publier quelque chose ?
Peut-on voir les étapes de mon workflow ?
Où s’exécute une annonce installée ?
fin ▸ en installer une
Installez-en une et rattachez votre propre connexion.
Le manifest dit quels emplacements une annonce demande avant même que vous ne l’installiez. Lisez-le d’abord, installez ensuite.