Aller au contenu
Floweet
Accès pro

Simulations de couverture

Simuler la couverture de votre réseau autour d'un client, suivre l'avancement commercial et rédiger l'argumentaire de vente, par l'IA ou au gabarit.

api.floweet.com/v1 · Contrat 1.0.0-beta.1 · Bêta

Sections · Simulations

Une simulation mesure la couverture du réseau de votre organisation autour d'un client : combien de stations de votre réseau se trouvent dans un rayon donné autour de son site, face aux réseaux concurrents. Elle suit ensuite l'avancement commercial du dossier, et l'API rédige l'argumentaire de vente à remettre au client.

À savoir

  • Créer une simulation calcule aussitôt les résultats d'une zone : stations du réseau de l'organisation dans le rayon (stationCount), total recensé (networkTotal), couverture (coveragePct) et niveau de confiance. Un réseau absent de la zone donne une couverture de 0 %.
  • Le client se désigne par son SIRET (companySiret, rattaché à l'annuaire) ou par son nom (companyName). La simulation est créée au nom du membre désigné du compte d'API, et apparaît dans l'application.
  • Statuts : todo, progress, won, lost, archived ; changez-les par PATCH. L'API crée des simulations de zone ; les trajets et les simulations multi-sites se préparent dans l'application.
  • L'argumentaire est rédigé par l'IA avec une clé fw_live_, si l'IA est disponible et sous le plafond quotidien de l'organisation ; sinon, et toujours avec une clé fw_test_, il vient du gabarit. generator dit lequel. Chaque appel remplace l'argumentaire enregistré sur la simulation.
  • Les textes de l'argumentaire sont en Markdown réduit (**gras**, ==surligné==, listes numérotées), dans la langue d'Accept-Language.
  • Ces opérations demandent le module Simulation dans l'offre de l'organisation (voir offres et IA).

Exemple : du prospect à l'argumentaire

Trouvez l'établissement dans l'annuaire, géocodez son adresse avec le géocodage, créez la simulation avec son SIRET et ces coordonnées, puis rédigez l'argumentaire. Quand le dossier est signé, passez la simulation en won.

L'objet SimulationSummary

ChampTypeDescription
idtoujours présentstring (uuid)
nametoujours présentstring
modetoujours présent"zone" | "trajet" | "multi"
statustoujours présent"todo" | "progress" | "won" | "lost" | "archived"
confidencetoujours présent"high" | "med" | "low"
coveragePcttoujours présentnumber | null
stationCounttoujours présentnumber | null
companyIdtoujours présentstring (uuid) | null
createdAttoujours présentstring (date-time)
updatedAttoujours présentstring (date-time)
SimulationSummary
{
  "id": "ffffffff-0000-0000-0000-000000000001",
  "name": "Transports Bonin · Zone 50 km",
  "mode": "zone",
  "status": "todo",
  "confidence": "high",
  "coveragePct": 98,
  "stationCount": 30,
  "companyId": "cccccccc-0000-0000-0000-000000000001",
  "createdAt": "2026-07-06T09:24:53.171192+00:00",
  "updatedAt": "2026-07-09T22:05:45.68844+00:00"
}

L'objet Simulation

ChampTypeDescription
idtoujours présentstring (uuid)
nametoujours présentstring
modetoujours présent"zone" | "trajet" | "multi"
statustoujours présent"todo" | "progress" | "won" | "lost" | "archived"
confidencetoujours présent"high" | "med" | "low"
coveragePcttoujours présentnumber | null
stationCounttoujours présentnumber | null
companyIdtoujours présentstring (uuid) | null
createdAttoujours présentstring (date-time)
updatedAttoujours présentstring (date-time)
productIdtoujours présentstring (uuid) | null
zonetoujours présentobject | null
zone.centertoujours présentobject
zone.center.labeltoujours présentstring
zone.center.lattoujours présentnumber
zone.center.lngtoujours présentnumber
zone.radiusKmtoujours présentnumber
fuelstoujours présentstring[]
servicestoujours présentstring[]
competitorstoujours présentobject[]
competitors[].nametoujours présentstring
competitors[].pcttoujours présentnumber
competitors[].stationstoujours présentnumber
networkTotaltoujours présentnumber | null
savingsPerMonthtoujours présentinteger | nullÉconomies estimées, centimes par mois.
recommendationtoujours présentstring | null
companytoujours présentobject | null
company.idtoujours présentstring (uuid)
company.nametoujours présentstring
company.sirettoujours présentstring | null
company.citytoujours présentstring | null
Simulation
{
  "id": "ffffffff-0000-0000-0000-000000000001",
  "name": "Transports Bonin · Zone 50 km",
  "mode": "zone",
  "status": "todo",
  "confidence": "high",
  "coveragePct": 98,
  "stationCount": 30,
  "companyId": "cccccccc-0000-0000-0000-000000000001",
  "createdAt": "2026-07-06T09:24:53.171192+00:00",
  "updatedAt": "2026-07-09T22:05:45.68844+00:00",
  "productId": "eeeeeeee-0000-0000-0000-000000000001",
  "zone": {
    "center": {
      "label": "Lyon 7e — Siège social",
      "lat": 45.7485,
      "lng": 4.8467
    },
    "radiusKm": 50
  },
  "fuels": [
    "B7",
    "SP95_E10",
    "SP98"
  ],
  "services": [
    "LAVAGE_PL",
    "PARKING_PL",
    "RESTAURATION"
  ],
  "competitors": [
    {
      "name": "Carbu Express",
      "pct": 98,
      "stations": 30
    },
    {
      "name": "TotalEnergies Pro",
      "pct": 98,
      "stations": 18
    },
    {
      "name": "BP+",
      "pct": 98,
      "stations": 18
    }
  ],
  "networkTotal": 160,
  "savingsPerMonth": null,
  "recommendation": null,
  "company": {
    "id": "cccccccc-0000-0000-0000-000000000001",
    "name": "Transports Bonin",
    "siret": "43219876500017",
    "city": "Lyon"
  }
}

L'objet Pitch

ChampTypeDescription
titletoujours présentstring | null
sectionstoujours présentobject[]
sections[].headingtoujours présentstring
sections[].bodytoujours présentstringMarkdown : gras, ==surligné==, listes numérotées.
nextSteptoujours présentstring | null
sourcestoujours présentstring[]
generatortoujours présent"gemini" | "template"gemini : rédigé par l'IA ; template : gabarit de repli (toujours avec une clé fw_test_).
Pitch
{
  "title": "Why Carbu Express is the right partner for your fleet",
  "sections": [
    {
      "heading": "Your current situation",
      "body": "You operate your fleet around Lyon 7e in the transports routiers de fret interurbains sector. Our simulation over a 50 km radius shows a ==coverage of 98%== of your activity by our current network (**30 stations** out of 160 listed in the zone) — solid, but with room to improve."
    },
    {
      "heading": "Three key benefits",
      "body": "1. Measurable savings from the first month — our average diesel price in the zone is competitive against the major networks present.\n2. 30 stations in the immediate vicinity of your rounds — your drivers save time on technical stops.\n3. A multi-energy card starting today — 3 energies covered (B7, SP95_E10, SP98), to anticipate the transition of your next renewals without changing supplier."
    },
    {
      "heading": "And what about the less covered areas?",
      "body": "This is our point of attention. Some secondary routes remain less covered. To compensate, we offer the Card + 24/7 breakdown assistance bundle — at no extra cost — and our network plan includes new openings in the area."
    }
  ],
  "nextStep": "Propose a 30-day trial on 5 vehicles to validate the actual savings before full rollout.",
  "sources": [
    "50 km zone simulation · 12:46 PM",
    "Carbu Express network: stations listed in Floweet",
    "Public prices: prix-carburants.gouv.fr"
  ],
  "generator": "template"
}

Simulations de couverture de l'organisation, les plus récemment modifiées d'abord

GET/v1/simulationsScope simulations:read

Paramètres

ChampOùTypeDescription
limitfacultatifrequêteintegerde 1 à 100 · défaut 20Nombre d'éléments par page (1 à 100, 20 par défaut).
cursorfacultatifrequêtestringau plus 400 caractèresCurseur opaque : la valeur nextCursor de la page précédente.
statusfacultatifrequête"todo" | "progress" | "won" | "lost" | "archived"
modefacultatifrequête"zone" | "trajet" | "multi"
qfacultatifrequêtestringau plus 100 caractèresRecherche dans le nom.

Réponse 200

Succès — Une page de SimulationSummary { data, nextCursor, hasMore }

Erreurs

HTTPSignification
400Requête invalide
401Clé d'API absente, invalide ou révoquée
403Accès refusé (scope, plan ou statut du compte)
404Ressource introuvable
429Trop de requêtes
500Erreur interne
Requête
curl "https://api.floweet.com/v1/simulations" \
  -H "Authorization: Bearer $FLOWEET_API_KEY"
Réponse 200
{
  "data": [
    {
      "id": "ffffffff-0000-0000-0000-000000000002",
      "name": "Garage Mercier & Fils · Zone 30 km",
      "mode": "zone",
      "status": "won",
      "confidence": "low",
      "coveragePct": 36,
      "stationCount": 14,
      "companyId": "cccccccc-0000-0000-0000-000000000009",
      "createdAt": "2026-07-05T08:24:53.171192+00:00",
      "updatedAt": "2026-09-28T20:47:50.083018+00:00"
    },
    {
      "id": "ffffffff-0000-0000-0000-000000000001",
      "name": "Transports Bonin · Zone 50 km",
      "mode": "zone",
      "status": "todo",
      "confidence": "high",
      "coveragePct": 98,
      "stationCount": 30,
      "companyId": "cccccccc-0000-0000-0000-000000000001",
      "createdAt": "2026-07-06T09:24:53.171192+00:00",
      "updatedAt": "2026-07-09T22:05:45.68844+00:00"
    }
  ],
  "nextCursor": "eyJwIjoyLCJzIjoyfQ",
  "hasMore": true
}

Créer une simulation de zone : couverture du réseau autour d'un point pour un client

POST/v1/simulationsScope simulations:write

Paramètres

ChampOùTypeDescription
Idempotency-Keyfacultatifen-têtestringau plus 255 caractèresClé unique de cette requête (un UUID v4 neuf, gardé pour ses nouvelles tentatives) : la première réponse est rejouée pendant 24 heures.

Corps de la requête SimulationInput

ChampTypeDescription
namefacultatifstring1 à 200 caractèresPar défaut : « <entreprise> · Zone <rayon> km ».
companySiretfacultatifstringSIRET du client (annuaire) ; sinon companyName.
companyNamefacultatifstring1 à 200 caractères
centerobligatoireobject
center.labelobligatoirestringau plus 300 caractères
center.latobligatoirenumberde -90 à 90
center.lngobligatoirenumberde -180 à 180
radiusKmobligatoirenumberde 1 à 300
fuelsfacultatifstring[]au plus 20 élémentsCodes carburant dont le client a besoin (B7, GNV…).
servicesfacultatifstring[]au plus 20 éléments
competitorsfacultatifstring[]au plus 10 éléments

Réponse 201

Simulation créée — Un objet Simulation

Erreurs

HTTPSignification
400Requête invalide
401Clé d'API absente, invalide ou révoquée
403Accès refusé (scope, plan ou statut du compte)
404Ressource introuvable
422Requête impossible à traiter
429Trop de requêtes
500Erreur interne
502Service partenaire en erreur
Requête
curl -X POST "https://api.floweet.com/v1/simulations" \
  -H "Authorization: Bearer $FLOWEET_API_KEY" \
  -H "Idempotency-Key: 6f1c2b0e-8d4a-4f7e-9a51-3c2d1e0f9b87" \
  -H "Content-Type: application/json" \
  -d '{
  "companyName": "Transports Bonin",
  "center": {
    "label": "Lyon 7e — Siège social",
    "lat": 45.7485,
    "lng": 4.8467
  },
  "radiusKm": 50,
  "fuels": [
    "B7",
    "SP95_E10",
    "SP98"
  ]
}'
Réponse 201
{
  "id": "ffffffff-0000-0000-0000-000000000001",
  "name": "Transports Bonin · Zone 50 km",
  "mode": "zone",
  "status": "todo",
  "confidence": "high",
  "coveragePct": 98,
  "stationCount": 30,
  "companyId": "cccccccc-0000-0000-0000-000000000001",
  "createdAt": "2026-07-06T09:24:53.171192+00:00",
  "updatedAt": "2026-07-09T22:05:45.68844+00:00",
  "productId": "eeeeeeee-0000-0000-0000-000000000001",
  "zone": {
    "center": {
      "label": "Lyon 7e — Siège social",
      "lat": 45.7485,
      "lng": 4.8467
    },
    "radiusKm": 50
  },
  "fuels": [
    "B7",
    "SP95_E10",
    "SP98"
  ],
  "services": [
    "LAVAGE_PL",
    "PARKING_PL",
    "RESTAURATION"
  ],
  "competitors": [
    {
      "name": "Carbu Express",
      "pct": 98,
      "stations": 30
    },
    {
      "name": "TotalEnergies Pro",
      "pct": 98,
      "stations": 18
    },
    {
      "name": "BP+",
      "pct": 98,
      "stations": 18
    }
  ],
  "networkTotal": 160,
  "savingsPerMonth": null,
  "recommendation": null,
  "company": {
    "id": "cccccccc-0000-0000-0000-000000000001",
    "name": "Transports Bonin",
    "siret": "43219876500017",
    "city": "Lyon"
  }
}

Une simulation : zone, couverture, concurrents, client

GET/v1/simulations/{id}Scope simulations:read

Paramètres

ChampOùTypeDescription
idobligatoirecheminstring (uuid)

Réponse 200

Succès — Un objet Simulation

Erreurs

HTTPSignification
400Requête invalide
401Clé d'API absente, invalide ou révoquée
403Accès refusé (scope, plan ou statut du compte)
404Ressource introuvable
429Trop de requêtes
500Erreur interne
Requête
curl "https://api.floweet.com/v1/simulations/7d0c1f8e-2a4b-4c6d-9e8f-0a1b2c3d4e5f" \
  -H "Authorization: Bearer $FLOWEET_API_KEY"
Réponse 200
{
  "id": "ffffffff-0000-0000-0000-000000000001",
  "name": "Transports Bonin · Zone 50 km",
  "mode": "zone",
  "status": "todo",
  "confidence": "high",
  "coveragePct": 98,
  "stationCount": 30,
  "companyId": "cccccccc-0000-0000-0000-000000000001",
  "createdAt": "2026-07-06T09:24:53.171192+00:00",
  "updatedAt": "2026-07-09T22:05:45.68844+00:00",
  "productId": "eeeeeeee-0000-0000-0000-000000000001",
  "zone": {
    "center": {
      "label": "Lyon 7e — Siège social",
      "lat": 45.7485,
      "lng": 4.8467
    },
    "radiusKm": 50
  },
  "fuels": [
    "B7",
    "SP95_E10",
    "SP98"
  ],
  "services": [
    "LAVAGE_PL",
    "PARKING_PL",
    "RESTAURATION"
  ],
  "competitors": [
    {
      "name": "Carbu Express",
      "pct": 98,
      "stations": 30
    },
    {
      "name": "TotalEnergies Pro",
      "pct": 98,
      "stations": 18
    },
    {
      "name": "BP+",
      "pct": 98,
      "stations": 18
    }
  ],
  "networkTotal": 160,
  "savingsPerMonth": null,
  "recommendation": null,
  "company": {
    "id": "cccccccc-0000-0000-0000-000000000001",
    "name": "Transports Bonin",
    "siret": "43219876500017",
    "city": "Lyon"
  }
}

Changer le statut commercial ou le nom d'une simulation

PATCH/v1/simulations/{id}Scope simulations:write

Paramètres

ChampOùTypeDescription
idobligatoirecheminstring (uuid)

Corps de la requête SimulationUpdate

ChampTypeDescription
statusfacultatif"todo" | "progress" | "won" | "lost" | "archived"
namefacultatifstring1 à 200 caractères

Réponse 200

Succès — Un objet Simulation

Erreurs

HTTPSignification
400Requête invalide
401Clé d'API absente, invalide ou révoquée
403Accès refusé (scope, plan ou statut du compte)
404Ressource introuvable
429Trop de requêtes
500Erreur interne
Requête
curl -X PATCH "https://api.floweet.com/v1/simulations/7d0c1f8e-2a4b-4c6d-9e8f-0a1b2c3d4e5f" \
  -H "Authorization: Bearer $FLOWEET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "status": "won"
}'
Réponse 200
{
  "id": "ffffffff-0000-0000-0000-000000000001",
  "name": "Transports Bonin · Zone 50 km",
  "mode": "zone",
  "status": "todo",
  "confidence": "high",
  "coveragePct": 98,
  "stationCount": 30,
  "companyId": "cccccccc-0000-0000-0000-000000000001",
  "createdAt": "2026-07-06T09:24:53.171192+00:00",
  "updatedAt": "2026-07-09T22:05:45.68844+00:00",
  "productId": "eeeeeeee-0000-0000-0000-000000000001",
  "zone": {
    "center": {
      "label": "Lyon 7e — Siège social",
      "lat": 45.7485,
      "lng": 4.8467
    },
    "radiusKm": 50
  },
  "fuels": [
    "B7",
    "SP95_E10",
    "SP98"
  ],
  "services": [
    "LAVAGE_PL",
    "PARKING_PL",
    "RESTAURATION"
  ],
  "competitors": [
    {
      "name": "Carbu Express",
      "pct": 98,
      "stations": 30
    },
    {
      "name": "TotalEnergies Pro",
      "pct": 98,
      "stations": 18
    },
    {
      "name": "BP+",
      "pct": 98,
      "stations": 18
    }
  ],
  "networkTotal": 160,
  "savingsPerMonth": null,
  "recommendation": null,
  "company": {
    "id": "cccccccc-0000-0000-0000-000000000001",
    "name": "Transports Bonin",
    "siret": "43219876500017",
    "city": "Lyon"
  }
}

Rédiger l'argumentaire d'une simulation (IA si disponible, sinon gabarit)

POST/v1/simulations/{id}/pitchScope simulations:write

Avec une clé fw_test_, l'argumentaire vient toujours du gabarit : aucun appel à l'IA.

Paramètres

ChampOùTypeDescription
idobligatoirecheminstring (uuid)
Idempotency-Keyfacultatifen-têtestringau plus 255 caractèresClé unique de cette requête (un UUID v4 neuf, gardé pour ses nouvelles tentatives) : la première réponse est rejouée pendant 24 heures.

Réponse 200

Succès — Un objet Pitch

Erreurs

HTTPSignification
400Requête invalide
401Clé d'API absente, invalide ou révoquée
403Accès refusé (scope, plan ou statut du compte)
404Ressource introuvable
429Trop de requêtes
500Erreur interne
Requête
curl -X POST "https://api.floweet.com/v1/simulations/7d0c1f8e-2a4b-4c6d-9e8f-0a1b2c3d4e5f/pitch" \
  -H "Authorization: Bearer $FLOWEET_API_KEY" \
  -H "Idempotency-Key: 6f1c2b0e-8d4a-4f7e-9a51-3c2d1e0f9b87"
Réponse 200
{
  "title": "Why Carbu Express is the right partner for your fleet",
  "sections": [
    {
      "heading": "Your current situation",
      "body": "You operate your fleet around Lyon 7e in the transports routiers de fret interurbains sector. Our simulation over a 50 km radius shows a ==coverage of 98%== of your activity by our current network (**30 stations** out of 160 listed in the zone) — solid, but with room to improve."
    },
    {
      "heading": "Three key benefits",
      "body": "1. Measurable savings from the first month — our average diesel price in the zone is competitive against the major networks present.\n2. 30 stations in the immediate vicinity of your rounds — your drivers save time on technical stops.\n3. A multi-energy card starting today — 3 energies covered (B7, SP95_E10, SP98), to anticipate the transition of your next renewals without changing supplier."
    },
    {
      "heading": "And what about the less covered areas?",
      "body": "This is our point of attention. Some secondary routes remain less covered. To compensate, we offer the Card + 24/7 breakdown assistance bundle — at no extra cost — and our network plan includes new openings in the area."
    }
  ],
  "nextStep": "Propose a 30-day trial on 5 vehicles to validate the actual savings before full rollout.",
  "sources": [
    "50 km zone simulation · 12:46 PM",
    "Carbu Express network: stations listed in Floweet",
    "Public prices: prix-carburants.gouv.fr"
  ],
  "generator": "template"
}