Ir para o conteúdo
Floweet
Acesso profissional

Coverage simulations

Simulate your network's coverage around a client, track the sales status and write the sales pitch, with AI or from the template.

api.floweet.com/v1 · Contract 1.0.0-beta.1 · Beta

This documentation is written in English and French; it is shown to you in English.

Sections · Simulations

A simulation measures your organization's network coverage around a client: how many of your network's stations lie within a given radius of its site, against competing networks. It then tracks the deal's sales status, and the API writes the sales pitch to hand to the client.

Good to know

  • Creating a simulation computes a zone's results right away: the organization's network stations within the radius (stationCount), the total listed (networkTotal), coverage (coveragePct) and a confidence level. A network absent from the zone gives 0% coverage.
  • The client is given by SIRET (companySiret, linked to the directory) or by name (companyName). The simulation is created for the API account's designated member, and shows up in the application.
  • Statuses: todo, progress, won, lost, archived; change them with PATCH. The API creates zone simulations; routes and multi-site simulations are prepared in the application.
  • The pitch is written by AI with an fw_live_ key, when AI is available and under the organization's daily cap; otherwise, and always with an fw_test_ key, it comes from the template. generator tells which. Each call replaces the pitch saved on the simulation.
  • Pitch texts use reduced Markdown (**bold**, ==highlight==, numbered lists), in the Accept-Language language.
  • These operations need the Simulation module in the organization's plan (see plans and AI).

Example: from prospect to pitch

Find the establishment in the directory, geocode its address with geocoding, create the simulation with its SIRET and those coordinates, then write the pitch. When the deal is signed, set the simulation to won.

The SimulationSummary object

FieldTypeDescription
idalways presentstring (uuid)
namealways presentstring
modealways present"zone" | "trajet" | "multi"
statusalways present"todo" | "progress" | "won" | "lost" | "archived"
confidencealways present"high" | "med" | "low"
coveragePctalways presentnumber | null
stationCountalways presentnumber | null
companyIdalways presentstring (uuid) | null
createdAtalways presentstring (date-time)
updatedAtalways presentstring (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"
}

The Simulation object

FieldTypeDescription
idalways presentstring (uuid)
namealways presentstring
modealways present"zone" | "trajet" | "multi"
statusalways present"todo" | "progress" | "won" | "lost" | "archived"
confidencealways present"high" | "med" | "low"
coveragePctalways presentnumber | null
stationCountalways presentnumber | null
companyIdalways presentstring (uuid) | null
createdAtalways presentstring (date-time)
updatedAtalways presentstring (date-time)
productIdalways presentstring (uuid) | null
zonealways presentobject | null
zone.centeralways presentobject
zone.center.labelalways presentstring
zone.center.latalways presentnumber
zone.center.lngalways presentnumber
zone.radiusKmalways presentnumber
fuelsalways presentstring[]
servicesalways presentstring[]
competitorsalways presentobject[]
competitors[].namealways presentstring
competitors[].pctalways presentnumber
competitors[].stationsalways presentnumber
networkTotalalways presentnumber | null
savingsPerMonthalways presentinteger | nullEstimated savings, cents per month.
recommendationalways presentstring | null
companyalways presentobject | null
company.idalways presentstring (uuid)
company.namealways presentstring
company.siretalways presentstring | null
company.cityalways presentstring | 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"
  }
}

The Pitch object

FieldTypeDescription
titlealways presentstring | null
sectionsalways presentobject[]
sections[].headingalways presentstring
sections[].bodyalways presentstringMarkdown: bold, ==highlight==, numbered lists.
nextStepalways presentstring | null
sourcesalways presentstring[]
generatoralways present"gemini" | "template"gemini: written by AI; template: fallback template (always with an fw_test_ key).
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"
}

Coverage simulations of the organization, most recently updated first

GET/v1/simulationsScope simulations:read

Parameters

FieldInTypeDescription
limitoptionalqueryintegerfrom 1 to 100 · default 20Number of items per page (1 to 100, 20 by default).
cursoroptionalquerystringat most 400 charactersOpaque cursor: the nextCursor value of the previous page.
statusoptionalquery"todo" | "progress" | "won" | "lost" | "archived"
modeoptionalquery"zone" | "trajet" | "multi"
qoptionalquerystringat most 100 charactersSearch in the name.

Response 200

OK — A page of SimulationSummary { data, nextCursor, hasMore }

Errors

HTTPMeaning
400Invalid request
401Missing, invalid or revoked API key
403Forbidden (scope, plan or account status)
404Resource not found
429Too many requests
500Internal error
Request
curl "https://api.floweet.com/v1/simulations" \
  -H "Authorization: Bearer $FLOWEET_API_KEY"
Response 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
}

Create a zone simulation: network coverage around a point for a client

POST/v1/simulationsScope simulations:write

Parameters

FieldInTypeDescription
Idempotency-Keyoptionalheaderstringat most 255 charactersUnique key for this request (a new UUID v4, kept for its retries): the first response is replayed for 24 hours.

Request body SimulationInput

FieldTypeDescription
nameoptionalstring1 to 200 charactersDefault: « <company> · Zone <radius> km ».
companySiretoptionalstringSIRET of the client (directory); otherwise companyName.
companyNameoptionalstring1 to 200 characters
centerrequiredobject
center.labelrequiredstringat most 300 characters
center.latrequirednumberfrom -90 to 90
center.lngrequirednumberfrom -180 to 180
radiusKmrequirednumberfrom 1 to 300
fuelsoptionalstring[]at most 20 itemsFuel codes the client needs (B7, GNV…).
servicesoptionalstring[]at most 20 items
competitorsoptionalstring[]at most 10 items

Response 201

Simulation created — A Simulation object

Errors

HTTPMeaning
400Invalid request
401Missing, invalid or revoked API key
403Forbidden (scope, plan or account status)
404Resource not found
422Unprocessable request
429Too many requests
500Internal error
502Upstream service error
Request
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"
  ]
}'
Response 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"
  }
}

A simulation: zone, coverage, competitors, client

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

Parameters

FieldInTypeDescription
idrequiredpathstring (uuid)

Response 200

OK — A Simulation object

Errors

HTTPMeaning
400Invalid request
401Missing, invalid or revoked API key
403Forbidden (scope, plan or account status)
404Resource not found
429Too many requests
500Internal error
Request
curl "https://api.floweet.com/v1/simulations/7d0c1f8e-2a4b-4c6d-9e8f-0a1b2c3d4e5f" \
  -H "Authorization: Bearer $FLOWEET_API_KEY"
Response 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"
  }
}

Change the sales status or the name of a simulation

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

Parameters

FieldInTypeDescription
idrequiredpathstring (uuid)

Request body SimulationUpdate

FieldTypeDescription
statusoptional"todo" | "progress" | "won" | "lost" | "archived"
nameoptionalstring1 to 200 characters

Response 200

OK — A Simulation object

Errors

HTTPMeaning
400Invalid request
401Missing, invalid or revoked API key
403Forbidden (scope, plan or account status)
404Resource not found
429Too many requests
500Internal error
Request
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"
}'
Response 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"
  }
}

Write the sales pitch of a simulation (AI when available, otherwise a template)

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

With an fw_test_ key the pitch always comes from the template: no AI call is made.

Parameters

FieldInTypeDescription
idrequiredpathstring (uuid)
Idempotency-Keyoptionalheaderstringat most 255 charactersUnique key for this request (a new UUID v4, kept for its retries): the first response is replayed for 24 hours.

Response 200

OK — A Pitch object

Errors

HTTPMeaning
400Invalid request
401Missing, invalid or revoked API key
403Forbidden (scope, plan or account status)
404Resource not found
429Too many requests
500Internal error
Request
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"
Response 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"
}