bkbloomkit
v0.1 · florists on AAM · live

When the agent says it
with flowers, it should arrive.

BloomKit is a multi-tenant platform for local Prague florists. Each shop is agent-callable from day one - bouquet listings, delivery slot checks, and place-order via Stripe Connect at booking-grade price points (CZK 350 to 2,500). One manifest shape across every tenant.

Stripe Connectx402 micro-tipssigned manifestsAAM ID federated
3
florists
6
actions per tenant
350-2,500
price points (CZK)
Stripe + x402
payment rails
01florists

Three Prague shops, one protocol.

01 / neighborhoodPraha 1

Květiny Letenská

Sousedské květinářství na Letenské · čerstvé řezané kytice denně

delivery · Praha 1 · Praha 2 · Praha 5 · Praha 6 · Praha 7
price · 590-1 990 CZK
/bloomkit/b/kvetiny-letenska
02 / premiumPraha 2

Ateliér Kytice

Vinohradské prémiové květinářství · zakázkové vazby, svatby, smuteční

delivery · Praha 1 · Praha 2 · Praha 3 · Praha 4 · Praha 10
price · 1 650-2 490 CZK
/bloomkit/b/atelier-kytice
03 / ecoPraha 7

Botanika na kole

Eko-květinářství · sušené a udržitelné kytice, doručení jen na kole

delivery · Praha 1 · Praha 2 · Praha 3 · Praha 7 · Praha 8
price · 490-1 990 CZK
/bloomkit/b/botanika-na-kole
02agent surface

Same six actions, every shop.

Once an agent knows how to call one BloomKit tenant, it can call all of them. Discovery via the cross-tenant registry, execution via the per-tenant manifest. Real money via Stripe Connect; tips via x402 USDC.

  • list_bouquetsPublic catalog. Filter by occasion, max_price_czk.
  • search_bouquetsFull-text on name, description, palette, occasion.
  • list_addonsChocolates, wine, cards, balloons. Per-tenant.
  • check_delivery_slotsFree slots for { district, date }. Capacity-aware.
  • place_orderAuth + Stripe Connect Checkout. Returns checkout_url.
  • tip_the_floristOptional x402 0.005 USDC tip on base-sepolia.
03try it
# read the manifest
$ curl https://bloom.whatcanido.dev/bloomkit/b/kvetiny-letenska/.well-known/agent-actions.json | jq .actions[].id

"list_bouquets"
"search_bouquets"
"list_addons"
"check_delivery_slots"
"place_order"
"tip_the_florist"
# list bouquets, occasion-filtered
$ curl 'https://bloom.whatcanido.dev/api/bloomkit/b/kvetiny-letenska/list_bouquets?occasion=birthday'

{
  "ok": true,
  "count": 2,
  "bouquets": [
    { "id": "bq_pastelovy_mix",
      "name": "Pastelový jarní mix",
      "price_czk": 1290,
      "occasion": "birthday",
      "color_palette": "warm pastels" },
    { "id": "bq_vintage_vaza",
      "name": "Vintage kytice se sklenenou vázou",
      "price_czk": 1990, "includes_vase": true }
  ]
}
# place an order via Stripe Connect
$ curl -X POST https://bloom.whatcanido.dev/api/bloomkit/b/kvetiny-letenska/place_order \
    -H 'Authorization: Bearer <aam_id_jwt>' \
    -H 'Content-Type: application/json' \
    -d '{
      "bouquet_id": "bq_pastelovy_mix",
      "addon_ids": ["add_card_handwritten"],
      "delivery_slot_id": "slot_kvet_1_13_praha7",
      "recipient_name": "Anna Svobodová",
      "recipient_address": "Veletržní 49, Praha 7",
      "sender_name": "Tomáš",
      "card_message": "Vše nejlepší!"
    }'

[1] verify  Authorization: Bearer ...                    aam_id ok
[2] price   bouquet 1290 + addon 80 + delivery 150       1520 CZK
[3] stripe  POST /v1/checkout/sessions (Connect acct)    cs_test_...
[4] return  { ok: true, order_id, checkout_url }         HTTP 200

> Door opened. Stripe Connect handles funds; tenant gets paid out.