{
    "name": "flowerfly.ee",
    "operator": "Kolostov OÜ",
    "service_type": "on-demand custom flower delivery",
    "summary": "The customer describes the flowers and chooses a budget. There is no catalogue of fixed bouquets. The courier fee is priced for the destination and returned by the quote endpoint.",
    "languages": [
        {
            "code": "et",
            "url_slug": "et"
        },
        {
            "code": "en",
            "url_slug": "gb"
        },
        {
            "code": "ru",
            "url_slug": "ru"
        }
    ],
    "currency": "EUR",
    "payment": {
        "psp": "stripe",
        "mode": "checkout_url",
        "delegate_payment": false,
        "note": "The buyer approves payment on the Stripe Checkout page. This service does not take a delegated card token."
    },
    "cities": [
        {
            "slug": "tallinn",
            "name": "Tallinn",
            "lat": 59.437,
            "lng": 24.7536,
            "url": "https://flowerfly.ee/gb/tallinn/"
        },
        {
            "slug": "tartu",
            "name": "Tartu",
            "lat": 58.378,
            "lng": 26.729,
            "url": "https://flowerfly.ee/gb/tartu/"
        },
        {
            "slug": "parnu",
            "name": "Pärnu",
            "lat": 58.3859,
            "lng": 24.4971,
            "url": "https://flowerfly.ee/gb/parnu/"
        },
        {
            "slug": "voru",
            "name": "Võru",
            "lat": 57.8338,
            "lng": 27.0194,
            "url": "https://flowerfly.ee/gb/voru/"
        },
        {
            "slug": "rakvere",
            "name": "Rakvere",
            "lat": 59.3481602,
            "lng": 26.36298,
            "url": "https://flowerfly.ee/gb/rakvere/"
        }
    ],
    "constraints": {
        "min_budget_eur": 10,
        "max_budget_eur": 400,
        "min_budget_cents": 1000,
        "max_budget_cents": 40000,
        "order_cutoff_minutes_before_close": 60,
        "timezone": "Europe/Tallinn",
        "coordinates": "lat and lng are required and must be inside Estonia. This server does not look up the address.",
        "agreement": "Checkout requires agree true, and only after the person has accepted the courier fee."
    },
    "pricing": {
        "currency": "EUR",
        "base_fee_cents": 500,
        "per_km_cents": 100,
        "base_fee_eur": 5,
        "per_km_eur": 1,
        "road_factor": 1.3,
        "formula": "The quote endpoint is the price. It bills the distance from the city coordinates in this file: straight-line kilometres, times road_factor, rounded to a tenth of a kilometre, then base_fee_cents plus per_km_cents for each kilometre."
    },
    "hours": {
        "timezone": "Europe/Tallinn",
        "orders_paused": false,
        "order_cutoff_minutes_before_close": 60,
        "endpoint": "https://flowerfly.ee/api/hours",
        "days": {
            "mon": {
                "open": "11:00",
                "close": "19:00",
                "closed": false
            },
            "tue": {
                "open": "11:00",
                "close": "19:00",
                "closed": false
            },
            "wed": {
                "open": "11:00",
                "close": "19:00",
                "closed": false
            },
            "thu": {
                "open": "11:00",
                "close": "19:00",
                "closed": false
            },
            "fri": {
                "open": "11:00",
                "close": "19:00",
                "closed": false
            },
            "sat": {
                "open": "12:00",
                "close": "16:00",
                "closed": false
            },
            "sun": {
                "open": "10:00",
                "close": "16:00",
                "closed": true
            }
        }
    },
    "endpoints": {
        "manifest": {
            "method": "GET",
            "url": "https://flowerfly.ee/ai-manifest.json"
        },
        "openapi": {
            "method": "GET",
            "url": "https://flowerfly.ee/openapi.yaml"
        },
        "agent_card": {
            "method": "GET",
            "url": "https://flowerfly.ee/.well-known/agent-card.json"
        },
        "mcp": {
            "method": "POST",
            "url": "https://flowerfly.ee/api/mcp",
            "content_type": "application/json",
            "note": "JSON-RPC 2.0. Methods initialize, tools/list, tools/call, and message/send. A text-only message/send does not create an order."
        },
        "quote": {
            "method": "POST",
            "url": "https://flowerfly.ee/api/quote",
            "content_type": "application/json",
            "fields": [
                "city",
                "address",
                "lat",
                "lng",
                "budget_eur",
                "lang"
            ]
        },
        "checkout": {
            "method": "POST",
            "url": "https://flowerfly.ee/api/agent-checkout",
            "content_type": "application/json",
            "fields": [
                "city",
                "address",
                "lat",
                "lng",
                "budget_eur",
                "description",
                "recipient_name",
                "recipient_phone",
                "client_name",
                "client_phone",
                "agree",
                "lang"
            ]
        },
        "hours": {
            "method": "GET",
            "url": "https://flowerfly.ee/api/hours"
        },
        "order_status": {
            "method": "GET",
            "url": "https://flowerfly.ee/api/order-status",
            "query": {
                "id": "order id returned by checkout"
            }
        },
        "website_order": {
            "method": "POST",
            "url": "https://flowerfly.ee/api/order",
            "note": "Used by the website form. Requires the session token from the page. Agents use checkout."
        },
        "stripe_webhook": {
            "method": "POST",
            "url": "https://flowerfly.ee/api/stripe-webhook",
            "caller": "Stripe",
            "note": "Stripe posts checkout.session.completed here. The signature is checked with the webhook secret, and a paid session captures the order. A buying agent does not call this."
        }
    },
    "public_email": "flowerfly@flowerfly.ee",
    "public_phone": "+37253678186"
}
