Public RPC endpoints for organizers, hotels, and partners — plus transparent documentation of how Easy RFP scores hotels, calculates savings, and measures response rates.
Webhooks & Pages-Functions endpoints: see the interactive OpenAPI 3.1 explorer (raw spec: /openapi.json).
Are you a planner who landed here from a tooltip?
This page documents how Easy RFP works under the hood. The technical sections (auth, rate limits, RPCs) are for integrators. The methodology sections explain the numbers you see in the app.
Quick links for planners: How "hours saved" is calculated · How hotel scores work (TOPSIS) · Response rate benchmark source · Currency & FX handling
All endpoints require a valid Supabase JWT in the Authorization header:
POST https://jhihwzfikvndybbyaoul.supabase.co/rest/v1/rpc/{function_name}
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
apikey: {your_anon_key}
Content-Type: application/json
Tokens are obtained via magic-link OTP at /app/. Token TTL: 60 minutes. Use refreshSession to extend.
Returns a normalized score (0–1) for a given hotel against a published brief. Includes breakdown by criterion.
| Param | Type | Required | Description |
|---|---|---|---|
p_hotel_id | uuid | yes | Hotel UUID |
p_brief_id | uuid | yes | RFP brief UUID |
Returns: {score: 0.78, breakdown: {price: 0.85, location: 0.72,...}}
The score you see next to every proposal (e.g. "78/100") is a TOPSIS multi-criteria score. TOPSIS ranks each hotel by how close it is to an ideal proposal across four criteria — by default price (35%), location (25%), MICE fit (25%), and response time (15%). You can change the weights yourself on any RFP.
The technical RPC that computes this is topsis_rank_hotels (documented just below) — but you don't need to call anything. The app does it for you on the Compare view, and the score updates live as you drag the weight sliders.
TOPSIS multi-criteria ranking of hotels for a given RFP. Honors organizer-defined scoring weights and applies mice_role multipliers (event_venue 1.2x, full_service 1.0x).
| Param | Type | Required |
|---|---|---|
p_rfp_id | uuid | yes |
p_limit | integer | no (default 50) |
Returns: ranked list with rank, topsis_score, price_score, location_score, cluster_boost, why_this_hotel array.
AHP-lite weight suggestions based on RFP characteristics (sector, intent, attendees). Returns 4-criterion split summing to 1.0.
Returns: {price: 0.35, location: 0.25, mice_fit: 0.25, response_time: 0.15, rationale: "..."}
Recommends counter-offer terms based on cohort history (sector × city × pax band). Requires N≥5 comparable proposals.
9-factor heuristic returning probability that a given hotel wins a given RFP (0.0–1.0). Factors: completeness, response_rate, mice_fit, price_position, cluster_boost, intent_score, sector_match, history, recency.
Detects price outliers (z-score against cohort), duplicate proposals, and rate manipulation. Severity: low/medium/high.
Adds DDR, F&B, AV, perks to base room rate. Returns per-attendee and total. Used by Compare view.
Hotel-side stats: rankings 30d, response_rate, completeness_pct, RFPs received vs responded, cluster_boost current value.
Returns all data Easy RFP holds about a given hotel or organizer. JSON or ZIP. Includes proposals, sends, field_facts, deltas.
Initiates right-to-be-forgotten flow. Cascades delete in 5 child tables. Confirmation email required (TTL 24h).
OpenTravel-compatible CSV view. Compatible with Cvent, Knowland, AventriOnArena import flows.
The "~Nh sourcing time saved" figure on your dashboard uses an industry-anchored heuristic:
| Activity | Hours saved per unit | Source |
|---|---|---|
| RFP brief drafting + venue research | 1.0 h per RFP | SITE Index, ReadyBid 2024 |
| Hotel outreach (one personalized email each) | 0.15 h per invite | SITE Index, ReadyBid 2024 |
| Proposal triage + comparison | 0.33 h per proposal received | SITE Index, ReadyBid 2024 |
Total hours × €40/h average loaded planner labor cost = labor saved. Divided by your monthly subscription cost = ROI multiplier shown in the dashboard tile.
Numbers are intentionally conservative — heavy users with multi-property RFPs typically save 2–3× more.
The "industry average ~22%" comparison shown on your Reports page is anchored to ReadyBid's 2025 hotel response rate report, which surveys typical email-only RFP outreach. Easy RFP customers typically see 35–45% response rates due to brief completeness and curated shortlists.
Your number is computed live: responded / sends × 100, where responded means the hotel returned at least one proposal artifact (rate, document, decline reason).
See the Currency & FX section below for the full reference (default ECB rates, lock-on-send, configurable corporate rates, audit trail).
| Endpoint type | Limit | Window |
|---|---|---|
| Anonymous (hotel-prefill, dsar) | 30 | 1 hour |
| Authenticated (organizer) | 1000 | 1 hour |
| RPC heavy (TOPSIS, parser) | 100 | 1 hour |
System health: easyhotelrfp.com/status · Uptime target: 99.5% · API response p95: <800ms.
Email [email protected] · GDPR / DSAR: [email protected]
Easy RFP processes RFPs and proposals across multiple currencies. To make rates comparable in a single reporting currency, conversion rules are explicit:
EUR 1,150.00 (from USD 1,247.53 at ECB rate 2026-05-04)Every FX conversion stores: source rate, source date, source provider (ECB / corporate / contract-locked), and the converted amount. Available via audit log export at /app/admin/audit/ in CSV/JSON format.
Easy RFP follows IFRS standard for currency rounding: half-up at 2 decimal places, applied at line-item level. Aggregate totals are computed from rounded line-items (not from unrounded source values), making every total reconcilable to its components.
Organization-level FX configuration via POST /api/v1/organization/fx-config (Enterprise tier). Contact [email protected] for access.