{"openapi":"3.1.0","info":{"title":"Evaluaprop Agent API","version":"2.0.0","summary":"Plans, prices, coverage and inspection requests for property inspections in Uruguay.","description":"Public API for AI agents and integrations of Evaluaprop, a property inspection service in Uruguay.\nInspections are performed by licensed local architects and the report is delivered within 24 hours.\n\n## How an agent should use it\n1. Answer questions with the read endpoints: GET /api/v1/plans, GET /api/v1/recommend-plan, GET /api/v1/coverage. They never create anything.\n2. Only call POST /api/v1/agendar after the user has explicitly confirmed they want to send the request and has given their real contact details. Set user_consent to true only in that case.\n\n## What every inspection report includes\n- Repair cost estimate.\n- Valoración estimada de mercado: Rango de precio con índice de confianza, calculado comparando la propiedad con avisos de portales inmobiliarios de acceso público. No es una tasación bancaria.\n- Análisis de barrio y entorno: Transporte público, escuelas y liceos, conexión a saneamiento, riesgo de inundación y entorno industrial en un radio de 500 metros. No incluye seguridad, ruido ni tránsito.\nThese are included in every plan except DJCU. They use Cadastre and public open data: in Montevideo they are usually available; in other departments it depends on the public data for the area and in some places it may not apply.\n\n## Prices (VAT included)\n- Up to 50 m² (plan50): $10,000 UYU / US$250\n- 51 - 80 m² (plan80): $12,000 UYU / US$310\n- 81 - 120 m² (plan120): $15,000 UYU / US$390\n- 121 - 180 m² (plan180): $18,000 UYU / US$470\n- 181 - 250 m² (plan250): $21,000 UYU / US$545\n- Specific-issue inspection (puntual): $6,000 UYU / US$150\n- New-build handover (recepcion): $10,000 UYU / US$250 per hour\nA second inspection with Evaluaprop is 10% off.\n\n## Independence\nEvaluaprop has no real estate agency, does not build and does not refer companies. It only inspects.\n\n## Contact\nWebsite: https://evaluaprop.com.uy\nEmail: contacto@evaluaprop.com\nWhatsApp: +598 94 512 338","contact":{"name":"Evaluaprop","url":"https://evaluaprop.com.uy","email":"contacto@evaluaprop.com"},"license":{"name":"Proprietary","url":"https://evaluaprop.com.uy/terminos"}},"servers":[{"url":"https://evaluaprop.com.uy","description":"Production"}],"tags":[{"name":"Information","description":"Read-only, no side effects."},{"name":"Booking","description":"Creates a request that the Evaluaprop team follows up."}],"paths":{"/api/v1/plans":{"get":{"operationId":"getPlans","tags":["Information"],"summary":"List inspection plans and prices","description":"All plans with price in UYU and USD, VAT included, and what each one includes. Read-only.","security":[],"responses":{"200":{"description":"Plans.","content":{"application/json":{"schema":{"type":"object","properties":{"vat_included":{"type":"boolean"},"second_inspection_discount_pct":{"type":"number"},"plans":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","enum":["plan50","plan80","plan120","plan180","plan250","puntual","recepcion","custom","djcu"]},"name":{"type":"string"},"name_en":{"type":"string"},"area_m2":{"type":["object","null"],"properties":{"min":{"type":["number","null"]},"max":{"type":["number","null"]}}},"price_uyu":{"type":["number","null"]},"price_usd":{"type":["number","null"]},"price_unit":{"type":"string","enum":["pago único","por hora","a presupuesto"]},"vat_included":{"type":"boolean"},"includes":{"type":"object","properties":{"cost_estimate":{"type":"boolean"},"market_valuation":{"type":"boolean"},"neighborhood_analysis":{"type":"boolean"}}},"bookable":{"type":"boolean"},"url":{"type":"string","format":"uri"},"note":{"type":["string","null"]}}}}}}}}}}}},"/api/v1/recommend-plan":{"get":{"operationId":"recommendPlan","tags":["Information"],"summary":"Recommend the plan for a property size","description":"Returns the plan that corresponds to the property area and its price. Read-only.","security":[],"parameters":[{"name":"m2","in":"query","required":true,"schema":{"type":"number","minimum":1},"description":"Built area of the property in square meters.","example":85},{"name":"departamento","in":"query","required":false,"schema":{"type":"string","enum":["Montevideo","Canelones","Maldonado","Colonia","San José","Lavalleja","Rocha","Otro"]},"description":"Department where the property is located, to add coverage notes."}],"responses":{"200":{"description":"Recommended plan.","content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"type":"object","properties":{"id":{"type":"string","enum":["plan50","plan80","plan120","plan180","plan250","puntual","recepcion","custom","djcu"]},"name":{"type":"string"},"name_en":{"type":"string"},"area_m2":{"type":["object","null"],"properties":{"min":{"type":["number","null"]},"max":{"type":["number","null"]}}},"price_uyu":{"type":["number","null"]},"price_usd":{"type":["number","null"]},"price_unit":{"type":"string","enum":["pago único","por hora","a presupuesto"]},"vat_included":{"type":"boolean"},"includes":{"type":"object","properties":{"cost_estimate":{"type":"boolean"},"market_valuation":{"type":"boolean"},"neighborhood_analysis":{"type":"boolean"}}},"bookable":{"type":"boolean"},"url":{"type":"string","format":"uri"},"note":{"type":["string","null"]}}},"reason":{"type":"string"},"coverage":{"type":["object","null"]}}}}}},"400":{"description":"Invalid m2.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"fields":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}}},"/api/v1/coverage":{"get":{"operationId":"getCoverage","tags":["Information"],"summary":"Coverage by department and what the valuation and neighborhood analysis include","description":"Departments served, travel conditions and the availability of public data for the valuation and neighborhood analysis. Read-only.","security":[],"responses":{"200":{"description":"Coverage.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/agendar":{"post":{"operationId":"submitBooking","tags":["Booking"],"summary":"Send an inspection request on behalf of a user","description":"Creates an inspection request. The Evaluaprop team contacts the client to confirm the visit. No payment is due until after the inspection.\n\n**Only call this endpoint after the user explicitly confirmed they want to send the request.** Set `user_consent` to `true` only in that case; requests without it are rejected.\n\nAccess: an `X-API-Key` raises the limits (contact Evaluaprop to get one). Without a key the endpoint still works with strict limits: 3 requests per IP per hour and 2 per email per day. Send an `Idempotency-Key` header so retries do not create duplicates.","security":[{},{"apiKeyAuth":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":120},"description":"Unique value per user request. A retry with the same key returns the original response."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["user_consent","source_funnel","nombre","email","telefono","tipo_propiedad","direccion","departamento"],"properties":{"user_consent":{"type":"boolean","const":true,"description":"Must be true: the user explicitly confirmed they want to send this request."},"locale":{"type":"string","enum":["es","en","pt"],"default":"es","description":"Language of messages in the response."},"source_funnel":{"type":"string","enum":["plan_page","funnel_solicitar","contacto_page","ai_assistant"],"description":"Use \"ai_assistant\" for every request generated by an AI agent."},"selected_plan":{"type":"string","enum":["plan50","plan80","plan120","plan180","plan250","puntual","recepcion","custom"],"description":"Plan id from GET /api/v1/plans. Do not invent ids. If unsure, call GET /api/v1/recommend-plan first."},"nombre":{"type":"string","minLength":2,"maxLength":100,"description":"Real full name of the client. Never use placeholders."},"email":{"type":"string","format":"email","maxLength":254,"description":"Client email. A confirmation is sent here."},"telefono":{"type":"string","minLength":6,"maxLength":30,"description":"Client phone, with country code if international."},"tipo_propiedad":{"type":"string","enum":["Apartamento","Casa","Local comercial","Oficina","Otro"]},"direccion":{"type":"string","minLength":5,"maxLength":200,"description":"Street address of the property to inspect."},"departamento":{"type":"string","enum":["Montevideo","Canelones","Maldonado","Colonia","San José","Lavalleja","Rocha","Otro"]},"ciudad":{"type":"string","maxLength":80,"description":"City or neighborhood."},"padron":{"type":"string","maxLength":20,"description":"Cadastral parcel number (padrón), if known."},"metraje_m2":{"type":"number","minimum":1,"description":"Built area in m²."},"buyer_present":{"type":"string","enum":["si","no"],"description":"Whether the buyer will attend the inspection."},"property_occupied":{"type":"string","enum":["si","no"]},"motivo_inspeccion":{"type":"string","enum":["Quiero comprar","Ya soy propietario","Otro"]},"comentarios":{"type":"string","maxLength":1000},"cupon_descuento":{"type":"string","maxLength":40}}},"examples":{"english":{"summary":"Buyer abroad, house in Punta del Este","value":{"user_consent":true,"locale":"en","source_funnel":"ai_assistant","selected_plan":"plan120","nombre":"John Smith","email":"john@example.com","telefono":"+1 555 123 4567","tipo_propiedad":"Casa","direccion":"Rambla Lorenzo Batlle 2000","departamento":"Maldonado","ciudad":"Punta del Este","metraje_m2":110,"motivo_inspeccion":"Quiero comprar","comentarios":"Buying remotely, need English report"}},"spanish":{"summary":"Apartamento de 80 m² en Montevideo","value":{"user_consent":true,"locale":"es","source_funnel":"ai_assistant","selected_plan":"plan80","nombre":"María González","email":"maria@example.com","telefono":"099 456 789","tipo_propiedad":"Apartamento","direccion":"Av. Brasil 1234","departamento":"Montevideo","ciudad":"Pocitos","metraje_m2":80,"motivo_inspeccion":"Quiero comprar"}}}}}},"responses":{"200":{"description":"Request received (or a replay of an earlier identical request).","headers":{"Idempotent-Replay":{"schema":{"type":"string"},"description":"true when the response is a replay."}},"content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"status":{"type":"string","example":"received"},"reference":{"type":["string","null"],"example":"EP-42"},"lead_id":{"type":["integer","null"]},"message":{"type":"string"},"next_steps":{"type":"string"},"contact":{"type":"object"},"duplicate":{"type":"boolean"}}}}}},"400":{"description":"Validation error or missing user_consent.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"fields":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"401":{"description":"X-API-Key was sent but is not valid.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"fields":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"403":{"description":"An API key is required (the service is in key-only mode).","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"fields":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"429":{"description":"Rate limit exceeded.","headers":{"Retry-After":{"schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"fields":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"500":{"description":"Internal server error.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"fields":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"502":{"description":"The lead could not be stored; retry later.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"},"fields":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}}},"/api/v1/openapi.json":{"get":{"operationId":"getOpenAPISchema","summary":"This OpenAPI document","security":[],"responses":{"200":{"description":"OpenAPI 3.1.","content":{"application/json":{"schema":{"type":"object"}}}}}}}},"components":{"securitySchemes":{"apiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Optional. Raises the booking limits. Contact Evaluaprop to get one."}}},"x-agent-guidance":{"use_read_endpoints_for":["prices","which plan fits a property size","coverage and what the valuation and neighborhood analysis include"],"use_booking_when":["the user explicitly asked to request an inspection","the user gave real name, email, phone and property address","the user confirmed sending"],"never":["invent contact data or plan ids","submit without explicit user confirmation","retry a failed booking without an Idempotency-Key"],"booking_funnel_url":"https://evaluaprop.com.uy/solicitar-inspeccion/"}}