Demonstration dataA demonstration portfolio. Every property and every reading was authored to exercise the product. No hotel supplied any of it and no company is described.
The integration is one read call. There is no SDK package to install yet, and saying so is more useful than an install line that would fail — the interface below is the whole contract, and it is stable enough to build against once authentication exists.
Against endpoints that exist in this deployment today.
// One read. No SDK required — this is the whole integration.
const response = await fetch(
"https://paravida.app/api/enterprise/compatibility" +
"?property=cmp-batu-bolong" +
"&guest=movement" +
"&purpose=work", // optional trip context
{ headers: { accept: "application/json" } },
);
const fit = await response.json();// A refusal is a 200. Handle it, or your page breaks in week one.
if (!fit.scored) {
// fit.reason -> "insufficient_coverage"
// fit.coverage -> 0.31
// fit.explanation -> plain language, safe to show a guest
return null; // show nothing rather than a guess
}
render({
score: fit.score, // 0-100
band: fit.band, // "strong_fit" | ...
confidence: fit.confidence, // 0-100, evidence quality
counted: fit.dimensions.filter((d) => d.available),
versions: fit.versions, // store this with anything you persist
});Who holds what. This is the table a privacy review will ask for.
Store the tuple with anything you persist.
Every response carries the scoring, weights, ontology, climate-model and context versions it was produced under. A cached score without its tuple is unattributable the moment any layer moves — and the layers version independently on purpose, so the shape of an entity can change without a score changing.
It is about evidence, never about quality.
A confidence of 60 does not mean the property is mediocre. It means fewer dimensions carried verified readings, or the readings came from weaker sources. Rendering confidence as a quality signal is the most common way to make this data lie, so the response separates the two and the labels never blur them.
Read it beside coverage, always. High confidence over two dimensions tells a guest almost nothing about a building.
Unknown is never zero.
A dimension with no verified reading is excluded from the numerator and the denominator both. It lowers coverage and confidence; it does not lower the score. If you re-implement any part of this arithmetic on your side, that is the rule to get right.
An overlay, never a second profile.
Passing a trip purpose adjusts the weights for one computation and returns the provenance of every shift. Nothing is stored, nothing is learned, and the base profile is not modified — so a guest who says a trip is for work has not changed who they are.
There is no write endpoint, no event ingestion, no guest identifier, no recommendation feed, and no way to influence rank. Several of those are missing because they are not built; the rest are missing because building them would change what ParaVida is. A partner cannot pay for placement here, because there is no parameter through which placement could be expressed.
There is no published package
Produced underscoring 1 · weights 4 · ontology 1 · climate model 1 · engagement 1 · min coverage 0.5