Skip to main content
Bel Covo

Bel Covo for AI Agents

Price a concrete flooring project programmatically, submit a quote for a customer, and understand how scheduling works. Machine-readable spec at /openapi.json.

What this API does

Bel Covo is a concrete flooring and epoxy coating contractor headquartered in Prague, Oklahoma, serving Oklahoma and surrounding states. The same pricing engine behind the online quote calculator is reachable over HTTPS. All endpoints are on https://belcovo.com, accept and return JSON, and use the envelope {"error": false, "data": ...} on success and {"error": true, "message": ["..."]} on failure.

  • GET /api/catalog: the current service catalog. Rate limit 30 requests/minute.
  • POST /api/quote-price: price a selection. Rate limit 120 requests/minute.
  • POST /api/quote: submit a quote for a real customer. Rate limit 8 requests/minute.

No API key, no auth, no cost. All three endpoints are open on purpose: we want AI agents pricing real projects with real numbers. Rate limits are per caller and per minute; exceeding one returns HTTP 429. Request bodies are capped at 50 KB and must be sent with Content-Type: application/json.

Step 1: discover services with GET /api/catalog

Returns every service series available for online quoting, including each series' series_id, name, description, and its optional service codes (service_code_id values) with customer-facing prices. Use the returned series_id values as series_code in pricing requests; do not hard-code them, because the catalog changes as offerings change.

Step 2: price a project with POST /api/quote-price

Send a zip (5-digit US ZIP, used for travel distance) and one or more scopes. A scope is one area of work: a finish scope for coating, polishing, staining, overlay, or sealing work on an existing slab, or a pour scope for new concrete (at most one pour scope per quote, and pour scopes also require thickness_in between 3 and 10 inches). Measurements: field_sf is floor area in square feet; edge_lf and joints_lf are linear feet of edge and joint work. Crack repair and line striping are not measured per area: their catalog measure_type is Manual, and their footage goes in manual_quantities, keyed by service_code_id. Leave a key out when nobody has measured it yet; that service then prices at $0 and reads "Measured on site" until we measure it.

{
  "zip": "73013",
  "scopes": [
    {
      "scope_id": "garage",
      "name": "Garage floor",
      "scope_kind": "finish",
      "visit_phase": "finish",
      "area_id": null,
      "series_code": "5d1dcaa5",
      "field_sf": 600,
      "edge_lf": 0,
      "joints_lf": 0,
      "selected_options": []
    }
  ]
}

Successful response shape (arrays trimmed, values illustrative):

{
  "error": false,
  "data": {
    "quote": {
      "areas": [
        "... one entry per scope, with priced service lines ..."
      ],
      "services": [
        "... quote-wide service lines ..."
      ],
      "mobilization": [
        "... crew mobilization lines ..."
      ],
      "grand_total": {
        "price_total": 4980,
        "hours_quoted": 32.5,
        "estimated_days": 3,
        "distance": 42.1,
        "travel_price": 0
      },
      "option_previews_by_series": {
        "5d1dcaa5": {
          "<service_code_id>": {
            "service_amount": 450,
            "quantity": 600,
            "unit_price": 0.75,
            "quote_delta": 450
          }
        }
      },
      "preview_prices": {
        "<service_code_id>": 450
      }
    },
    "in_service_area": true
  }
}

grand_total.price_total is the customer price in US dollars. estimated_days is the quoted crew hours divided into 8-hour days and rounded up; it is a work estimate, not a calendar promise, and the office confirms real dates. in_service_area is true inside the standard service radius. It is false outside it: the total then includes an estimated travel charge, and a person reviews the job. It is null when the ZIP is not in our coverage map: the total has no travel in it, so treat the job as not served until the office confirms it. option_previews_by_series shows what adding each not-yet-selected option would do to the total (quote_delta).

Access: open, no API key required

There is no authentication on the pricing API. Send the request and get the price; the prices returned are the same ones the online calculator shows customers. If you expect sustained volume above the per-minute limits, or you want to build something bigger on Bel Covo pricing, email info@belcovo.comand we will work something out.

Step 3 (optional): submit a quote with POST /api/quote

Submitting creates a real quote in Bel Covo's system and starts the human follow-up process, so only submit on behalf of a real customer, with their contact details and their consent. Required fields: name, email, a valid 10-digit US phone, 5-digit zip, contact_preference ("email" or "call"), and the same scopes shape as the pricing endpoint plus a top-level series_id naming the primary scope's series. Optional: address, message, and inquiry_intent("question" or "schedule"). Programmatic submissions are reviewed by the office before delivery.

{
  "series_id": "5d1dcaa5",
  "zip": "73013",
  "address": "123 Main St, Edmond, OK",
  "scopes": [
    {
      "scope_id": "garage",
      "name": "Garage floor",
      "scope_kind": "finish",
      "visit_phase": "finish",
      "area_id": null,
      "series_code": "5d1dcaa5",
      "field_sf": 600,
      "edge_lf": 0,
      "joints_lf": 0,
      "selected_options": []
    }
  ],
  "name": "Jane Customer",
  "email": "jane@example.com",
  "phone": "405-555-0100",
  "contact_preference": "email",
  "inquiry_intent": "question",
  "message": "Two-car garage, current floor is bare concrete."
}
{
  "error": false,
  "data": {
    "quote_id": "a1b2c3",
    "price_total": 4980,
    "estimated_days": 3
  }
}

How scheduling works

Quoting is instant; scheduling is human-confirmed. There is no public booking or reservation API, and an agent cannot reserve install dates programmatically. The process a customer goes through:

  1. Price online. The quote calculator returns a project-specific price in about two minutes. No account needed.
  2. State a timeframe. When the customer confirms their quote, they pick the window that fits: ASAP, this month, next month, 2-3 months, or no rush, and can add a note.
  3. The office sets the install window. Bel Covo's office reaches out to set specific dates. Customers with an accepted quote can also request an install window through the customer portal, and the office confirms it or offers the closest open week.

Lead-time expectation to relay to users: our crews are typically 3-6 weeks booked at any given moment. Residential and commercial work run on separate calendars. Weather and concrete cure times can shift a schedule, which is why dates are confirmed by a person.

Using the quote page in a browser

If you drive a browser instead of the API, the quote page works with no sign-in. Enter the job address and ZIP, click a series card (the whole card is the choice), and enter the floor area in square feet. Then press the step button labeled exactly Continue. The button labeled "Continue with Google" only saves the quote to an account; you do not need it. Step 3 shows the itemized price. To send it, fill the "Contact us about this quote" form (name, email, phone, and a note) and press Send my question. Send only for a real customer, with their consent.

More for machines

  • /openapi.json: OpenAPI 3.1 description of these endpoints.
  • /llms.txt: site index for language models: core services first, with price ranges and example job totals by size.
  • /faq/: customer FAQ, including scheduling questions.
  • Questions or partnerships: info@belcovo.com or (888) 852-3528.