{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://overa.example/contracts/managed-api-schemas-v1.json",
  "title": "Overa managed API v1 reusable schemas",
  "description": "Implementation-backed schemas for the deployed /api/managed/v1/integrations namespace. Domain payloads remain versioned by their contract or schema version fields.",
  "$defs": {
    "ClientTheme": {
      "$ref": "https://overa.example/contracts/client-theme-v1.schema.json"
    },
    "ManagedPresentation": {
      "type": "object",
      "required": ["schemaVersion", "experienceId", "configurationVersion", "policyVersion", "presentation"],
      "properties": {
        "schemaVersion": { "const": "managed-presentation-v1" },
        "experienceId": { "type": "string", "minLength": 1 },
        "configurationVersion": { "type": "string", "minLength": 1 },
        "policyVersion": { "type": "string", "minLength": 1 },
        "presentation": {
          "type": "object",
          "properties": {
            "clientTheme": { "$ref": "#/$defs/ClientTheme" },
            "clientThemeRevision": { "type": "string", "maxLength": 160 }
          },
          "dependentRequired": { "clientTheme": ["clientThemeRevision"] },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "Problem": {
      "type": "object",
      "required": ["code", "status", "title"],
      "properties": {
        "code": { "type": "string", "minLength": 1 },
        "status": { "type": "integer", "minimum": 400, "maximum": 599 },
        "title": { "type": "string", "minLength": 1 },
        "field": { "type": ["string", "null"] },
        "retryAfter": { "type": ["integer", "null"], "minimum": 0 },
        "details": { "type": ["object", "null"] }
      },
      "additionalProperties": true
    },
    "BootstrapRequest": {
      "type": "object",
      "required": ["parentOrigin"],
      "properties": {
        "parentOrigin": { "type": "string", "format": "uri" }
      },
      "additionalProperties": false
    },
    "VisitorCapability": {
      "type": "object",
      "required": [
        "schemaVersion",
        "integrationId",
        "kind",
        "token",
        "expiresAt",
        "configurationVersion"
      ],
      "properties": {
        "schemaVersion": { "const": "managed-visitor-capability-v1" },
        "integrationId": { "type": "string" },
        "kind": { "enum": ["visitor", "preview"] },
        "token": { "type": "string", "minLength": 24 },
        "expiresAt": { "type": "string", "format": "date-time" },
        "configurationVersion": { "type": "string" }
      },
      "additionalProperties": false
    },
    "SourceContext": {
      "type": "object",
      "required": ["sourceId", "dataRevision", "activeItemCount"],
      "properties": {
        "sourceId": { "type": "string" },
        "sourceRevision": { "type": "string" },
        "dataRevision": { "type": "string" },
        "activeItemCount": { "type": "integer", "minimum": 0 },
        "kind": { "type": "string" },
        "label": { "type": "string" },
        "completeness": { "type": "object" },
        "freshness": { "type": "object" }
      },
      "additionalProperties": true
    },
    "ExperienceProfile": {
      "type": "object",
      "required": [
        "experienceVersion",
        "experienceId",
        "configurationVersion",
        "domainProfileId",
        "studyArea",
        "source",
        "items",
        "decisionCapabilities"
      ],
      "properties": {
        "experienceVersion": {
          "enum": ["property-experience-v1", "located-item-experience-v1"]
        },
        "experienceId": { "type": "string" },
        "configurationVersion": { "type": "string" },
        "domainProfileId": { "type": "string" },
        "studyArea": { "type": "object" },
        "source": { "$ref": "#/$defs/SourceContext" },
        "items": { "type": "array", "items": { "type": "object" } },
        "decisionCapabilities": { "type": "object" },
        "travelCapabilities": { "type": "object" },
        "presentation": {
          "type": "object",
          "properties": {
            "clientTheme": { "$ref": "#/$defs/ClientTheme" },
            "clientThemeRevision": { "type": "string", "maxLength": 160 }
          },
          "additionalProperties": true
        },
        "regionalPolicy": { "type": "object" },
        "allowedEmbedOrigins": {
          "type": "array",
          "items": { "type": "string", "format": "uri" }
        }
      },
      "additionalProperties": true
    },
    "SourceStatus": {
      "type": "object",
      "required": [
        "experienceId",
        "configurationVersion",
        "sourceId",
        "sourceRevision"
      ],
      "anyOf": [
        { "required": ["contractVersion"] },
        { "required": ["schemaVersion"] }
      ],
      "properties": {
        "contractVersion": { "const": "experience-status-v1" },
        "schemaVersion": {
          "enum": ["property-source-status-v1", "located-item-source-status-v1"]
        },
        "experienceId": { "type": "string" },
        "configurationVersion": { "type": "string" },
        "sourceId": { "type": "string" },
        "sourceRevision": { "type": "string" },
        "sourceConnectionRevision": { "type": "integer", "minimum": 1 },
        "generatedAt": { "type": "string", "format": "date-time" },
        "freshness": { "type": "object" }
      },
      "additionalProperties": true
    },
    "CurrentItem": {
      "type": "object",
      "required": ["sourceId", "dataRevision", "item"],
      "properties": {
        "sourceId": { "type": "string" },
        "dataRevision": { "type": "string" },
        "item": { "type": "object" }
      },
      "additionalProperties": true
    },
    "PlaceSearchRequest": {
      "type": "object",
      "required": ["query"],
      "properties": {
        "inputRef": { "type": "string" },
        "query": { "type": "string", "minLength": 1 },
        "presentationProfileId": { "type": "string" }
      },
      "additionalProperties": false
    },
    "PlaceSearchResponse": {
      "type": "object",
      "required": ["contractVersion", "experienceId", "dataRevision"],
      "properties": {
        "contractVersion": { "const": "experience-place-search-v1" },
        "experienceId": { "type": "string" },
        "dataRevision": { "type": "string" },
        "places": { "type": "array", "items": { "type": "object" } },
        "attribution": { "type": ["object", "array", "string", "null"] }
      },
      "additionalProperties": true
    },
    "PlaceReverseRequest": {
      "type": "object",
      "required": ["contractVersion", "geometry"],
      "properties": {
        "contractVersion": { "const": "experience-place-reverse-request-v1" },
        "inputRef": { "type": "string" },
        "geometry": { "type": "object" },
        "presentationProfileId": { "type": "string" }
      },
      "additionalProperties": false
    },
    "PlaceReverseResponse": {
      "type": "object",
      "required": ["contractVersion", "experienceId", "dataRevision"],
      "properties": {
        "contractVersion": { "const": "experience-place-reverse-v1" },
        "experienceId": { "type": "string" },
        "dataRevision": { "type": "string" },
        "place": { "type": ["object", "null"] },
        "attribution": { "type": ["object", "array", "string", "null"] }
      },
      "additionalProperties": true
    },
    "EvaluationRequest": {
      "type": "object",
      "required": [
        "clientRevision",
        "expectedDataRevision",
        "studyAreaId",
        "spatialConstraints",
        "domainRequirements"
      ],
      "properties": {
        "clientRevision": { "type": "integer", "minimum": 0 },
        "inputRef": { "type": "string" },
        "expectedDataRevision": { "type": "string" },
        "studyAreaId": { "type": "string" },
        "subjectItemId": { "type": "string" },
        "spatialConstraints": {
          "type": "array",
          "maxItems": 3,
          "items": { "type": "object" }
        },
        "domainRequirements": { "type": "object" }
      },
      "additionalProperties": false
    },
    "DecisionStatus": {
      "enum": ["pass", "miss", "unknown"]
    },
    "TravelDecisionBasis": {
      "enum": ["displayed_area_membership", "provider_metric_fallback"]
    },
    "TravelAreaMetricConsistency": {
      "type": "object",
      "required": [
        "schemaVersion",
        "constraintId",
        "status",
        "reasonCode",
        "areaMembership",
        "metric",
        "metricOutcome",
        "pointBasis",
        "geometryBasis",
        "boundaryToleranceMetres",
        "requestedPoint",
        "snappedPoint",
        "itemSnapDistanceMetres",
        "explanation"
      ],
      "properties": {
        "schemaVersion": {
          "enum": [
            "travel-area-duration-consistency-v1",
            "travel-area-distance-consistency-v1"
          ]
        },
        "constraintId": { "type": "string" },
        "status": {
          "enum": [
            "agreement",
            "disagreement",
            "boundary_uncertain",
            "insufficient_evidence"
          ]
        },
        "reasonCode": { "type": "string" },
        "areaMembership": {
          "enum": ["inside", "boundary", "outside", "unavailable"]
        },
        "metric": {
          "enum": ["travel_time", "travel_distance", "straight_line_distance"]
        },
        "metricOutcome": {
          "enum": ["within_limit", "over_limit", "unreachable", "unknown"]
        },
        "durationOutcome": {
          "enum": ["within_limit", "over_limit", "unreachable", "unknown"]
        },
        "pointBasis": {
          "enum": ["requested_item_location", "unavailable"]
        },
        "geometryBasis": {
          "enum": [
            "displayed_clipped_area",
            "provider_empty_area",
            "unavailable"
          ]
        },
        "boundaryToleranceMetres": { "type": "number", "minimum": 0 },
        "requestedPoint": { "type": ["array", "null"] },
        "snappedPoint": { "type": ["array", "null"] },
        "itemSnapDistanceMetres": { "type": ["number", "null"] },
        "explanation": { "type": "string" }
      },
      "additionalProperties": true
    },
    "CanonicalTravelRule": {
      "type": "object",
      "required": [
        "ruleId",
        "ruleType",
        "label",
        "status",
        "reasonCode",
        "summary",
        "requiredValue",
        "unit",
        "metric",
        "decisionBasis",
        "metricStatus",
        "metricReasonCode",
        "areaMetricConsistency"
      ],
      "properties": {
        "ruleId": { "type": "string" },
        "ruleType": { "const": "travel" },
        "label": { "type": "string" },
        "status": { "$ref": "#/$defs/DecisionStatus" },
        "reasonCode": {
          "type": "string",
          "description": "Canonical area decisions use inside_displayed_area, on_displayed_area_boundary or outside_displayed_area. Metric fallback retains its typed metric reason."
        },
        "summary": { "type": "string" },
        "knownValue": { "type": ["number", "null"] },
        "requiredValue": { "type": "number" },
        "unit": { "enum": ["seconds", "metres"] },
        "metric": {
          "enum": ["travel_time", "travel_distance", "straight_line_distance"]
        },
        "decisionBasis": { "$ref": "#/$defs/TravelDecisionBasis" },
        "metricStatus": { "$ref": "#/$defs/DecisionStatus" },
        "metricReasonCode": { "type": "string" },
        "areaMetricConsistency": {
          "$ref": "#/$defs/TravelAreaMetricConsistency"
        },
        "areaDurationConsistency": {
          "$ref": "#/$defs/TravelAreaMetricConsistency"
        }
      },
      "additionalProperties": true
    },
    "DomainRule": {
      "type": "object",
      "required": ["ruleId", "ruleType", "label", "status", "reasonCode"],
      "properties": {
        "ruleId": { "type": "string" },
        "ruleType": { "type": "string" },
        "label": { "type": "string" },
        "status": { "enum": ["pass", "miss", "unknown", "not_applied"] },
        "reasonCode": { "type": "string" }
      },
      "additionalProperties": true
    },
    "EvaluationResult": {
      "type": "object",
      "required": [
        "itemId",
        "overall",
        "spatialStatus",
        "domainStatus",
        "evidenceConsistency",
        "rules"
      ],
      "properties": {
        "itemId": { "type": "string" },
        "overall": { "$ref": "#/$defs/DecisionStatus" },
        "spatialStatus": { "$ref": "#/$defs/DecisionStatus" },
        "domainStatus": { "$ref": "#/$defs/DecisionStatus" },
        "evidenceConsistency": { "type": "object" },
        "rules": {
          "type": "array",
          "items": {
            "anyOf": [
              { "$ref": "#/$defs/CanonicalTravelRule" },
              { "$ref": "#/$defs/DomainRule" }
            ]
          }
        }
      },
      "additionalProperties": true
    },
    "EvaluationResponse": {
      "type": "object",
      "required": [
        "experienceId",
        "configurationVersion",
        "dataRevision",
        "evaluationVersion",
        "decisionPolicyVersion",
        "counts",
        "results"
      ],
      "properties": {
        "experienceId": { "type": "string" },
        "configurationVersion": { "type": "string" },
        "dataRevision": { "type": "string" },
        "evaluationVersion": { "type": "string" },
        "decisionPolicyVersion": {
          "const": "displayed-area-authority-v1"
        },
        "counts": { "type": "object" },
        "results": {
          "type": "array",
          "items": { "$ref": "#/$defs/EvaluationResult" }
        },
        "source": { "type": "object" },
        "completeness": { "type": "object" },
        "freshness": { "type": "object" },
        "decisionEvidence": {
          "type": "object",
          "required": ["schemaVersion", "reference", "expiresAt"],
          "properties": {
            "schemaVersion": { "const": "decision-evidence-v1" },
            "reference": { "type": "string" },
            "expiresAt": { "type": "string", "format": "date-time" }
          },
          "additionalProperties": true
        }
      },
      "additionalProperties": true
    },
    "ComparisonRequest": {
      "type": "object",
      "required": ["schemaVersion", "expectedDataRevision", "itemIds"],
      "properties": {
        "schemaVersion": { "const": "located-item-comparison-request-v1" },
        "inputRef": { "type": "string" },
        "expectedDataRevision": { "type": "string" },
        "itemIds": {
          "type": "array",
          "minItems": 1,
          "maxItems": 3,
          "items": { "type": "string" }
        },
        "evaluationRef": { "type": "string" }
      },
      "additionalProperties": false
    },
    "ComparisonRequirementRow": {
      "type": "object",
      "required": [
        "requirementId",
        "label",
        "status",
        "reasonCode",
        "explanation",
        "actualValue",
        "thresholdValue",
        "unit",
        "decisionBasis",
        "metricStatus",
        "metricReasonCode",
        "areaMetricConsistency"
      ],
      "properties": {
        "requirementId": { "type": "string" },
        "label": { "type": "string" },
        "status": { "$ref": "#/$defs/DecisionStatus" },
        "reasonCode": { "type": "string" },
        "explanation": { "type": "string" },
        "actualValue": { "type": ["number", "null"] },
        "thresholdValue": { "type": ["number", "null"] },
        "unit": { "type": ["string", "null"] },
        "decisionBasis": { "$ref": "#/$defs/TravelDecisionBasis" },
        "metricStatus": { "$ref": "#/$defs/DecisionStatus" },
        "metricReasonCode": { "type": "string" },
        "areaMetricConsistency": {
          "$ref": "#/$defs/TravelAreaMetricConsistency"
        },
        "areaDurationConsistency": {
          "anyOf": [
            { "$ref": "#/$defs/TravelAreaMetricConsistency" },
            { "type": "null" }
          ]
        }
      },
      "additionalProperties": true
    },
    "ComparisonOutcome": {
      "type": "object",
      "required": [
        "overall",
        "spatialStatus",
        "domainStatus",
        "evidenceConsistency",
        "requirementRows",
        "domainRows"
      ],
      "properties": {
        "overall": { "$ref": "#/$defs/DecisionStatus" },
        "spatialStatus": { "$ref": "#/$defs/DecisionStatus" },
        "domainStatus": { "$ref": "#/$defs/DecisionStatus" },
        "evidenceConsistency": { "type": ["object", "null"] },
        "requirementRows": {
          "type": "array",
          "items": { "$ref": "#/$defs/ComparisonRequirementRow" }
        },
        "domainRows": { "type": "array", "items": { "type": "object" } }
      },
      "additionalProperties": true
    },
    "ComparisonAssessment": {
      "anyOf": [
        {
          "type": "object",
          "required": [
            "status",
            "evaluationVersion",
            "decisionPolicyVersion",
            "evaluationStatus",
            "calculatedAt",
            "expiresAt",
            "qualification",
            "providers",
            "applied"
          ],
          "properties": {
            "status": { "const": "evaluated" },
            "evaluationVersion": { "type": "string" },
            "decisionPolicyVersion": {
              "const": "displayed-area-authority-v1"
            },
            "evaluationStatus": {
              "enum": ["complete", "partial", "unavailable"]
            },
            "calculatedAt": { "type": "string", "format": "date-time" },
            "expiresAt": { "type": "string", "format": "date-time" },
            "qualification": {
              "enum": ["provider_estimate", "canonical_evaluation"]
            },
            "providers": { "type": "array", "items": { "type": "string" } },
            "applied": { "type": "object" }
          },
          "additionalProperties": true
        },
        {
          "type": "object",
          "required": ["status", "qualification", "applied"],
          "properties": {
            "status": { "const": "not_evaluated" },
            "qualification": { "const": "facts_only" },
            "applied": { "type": "null" }
          },
          "additionalProperties": true
        }
      ]
    },
    "ComparisonItem": {
      "type": "object",
      "required": [
        "identity",
        "state",
        "presentation",
        "facts",
        "action",
        "outcome"
      ],
      "properties": {
        "identity": {
          "type": "object",
          "required": ["sourceId", "itemId", "dataRevision"],
          "additionalProperties": true
        },
        "state": { "enum": ["active", "withdrawn", "missing"] },
        "presentation": { "type": ["object", "null"] },
        "facts": { "type": "array", "items": { "type": "object" } },
        "action": { "type": "object" },
        "outcome": {
          "anyOf": [{ "$ref": "#/$defs/ComparisonOutcome" }, { "type": "null" }]
        }
      },
      "additionalProperties": true
    },
    "ComparisonResponse": {
      "type": "object",
      "required": [
        "schemaVersion",
        "experience",
        "source",
        "assessment",
        "items"
      ],
      "properties": {
        "schemaVersion": { "const": "located-item-comparison-v1" },
        "experience": {
          "type": "object",
          "required": [
            "experienceId",
            "configurationVersion",
            "domainProfileId"
          ],
          "additionalProperties": true
        },
        "source": {
          "type": "object",
          "required": ["sourceId", "dataRevision"],
          "additionalProperties": true
        },
        "assessment": { "$ref": "#/$defs/ComparisonAssessment" },
        "items": {
          "type": "array",
          "items": { "$ref": "#/$defs/ComparisonItem" }
        }
      },
      "additionalProperties": true
    },
    "StreetLevelAdmissionRequest": {
      "type": "object",
      "required": ["schemaVersion", "action", "profileId"],
      "properties": {
        "schemaVersion": {
          "const": "street-level-admission-request-v2"
        },
        "action": { "enum": ["coverage", "panorama"] },
        "profileId": { "const": "google-photorealistic-v1" },
        "parentActionId": { "type": "string", "minLength": 8, "maxLength": 128 }
      },
      "additionalProperties": false
    },
    "StreetLevelAdmission": {
      "type": "object",
      "required": [
        "schemaVersion",
        "admitted",
        "action",
        "profileId",
        "actionId",
        "accounting",
        "configurationVersion",
        "policyVersion",
        "expiresAt",
        "chargePolicy",
        "daily"
      ],
      "properties": {
        "schemaVersion": { "const": "street-level-admission-v2" },
        "admitted": { "const": true },
        "actionId": { "type": "string", "minLength": 8, "maxLength": 128 },
        "action": { "enum": ["coverage", "panorama"] },
        "profileId": { "const": "google-photorealistic-v1" },
        "parentActionId": { "type": ["string", "null"] },
        "configurationVersion": { "type": ["string", "integer"] },
        "policyVersion": { "type": ["string", "integer"] },
        "expiresAt": { "type": "string", "format": "date-time" },
        "accounting": { "const": "durable-idempotent-admission" },
        "replayed": { "type": "boolean" },
        "chargePolicy": {
          "type": "object",
          "required": ["schemaVersion", "version", "status", "meterUnit"],
          "properties": {
            "schemaVersion": { "const": "street-level-charge-policy-v1" },
            "version": { "type": "string" },
            "status": { "const": "unbilled" },
            "meterUnit": { "const": "admitted-overa-panorama-session" }
          },
          "additionalProperties": true
        },
        "daily": {
          "type": "object",
          "required": ["utcDay", "timeZone", "started", "limit", "remaining"],
          "properties": {
            "utcDay": { "type": "string", "format": "date" },
            "timeZone": { "const": "UTC" },
            "started": { "type": "integer", "minimum": 0 },
            "limit": { "type": "integer", "minimum": 1 },
            "remaining": { "type": "integer", "minimum": 0 }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "StreetLevelOutcome": {
      "type": "object",
      "required": ["schemaVersion", "actionId", "eventId", "action", "outcome"],
      "properties": {
        "schemaVersion": { "const": "street-level-outcome-v2" },
        "actionId": { "type": "string", "minLength": 8, "maxLength": 128 },
        "eventId": { "type": "string", "minLength": 8, "maxLength": 128 },
        "action": { "enum": ["coverage", "panorama"] },
        "outcome": {
          "enum": [
            "ready",
            "no_coverage",
            "failed",
            "cancelled",
            "returned",
            "returned_by_zoom"
          ]
        }
      },
      "additionalProperties": false
    },
    "StreetLevelOutcomeReceipt": {
      "type": "object",
      "required": [
        "schemaVersion",
        "actionId",
        "eventId",
        "recorded",
        "deduplicated"
      ],
      "properties": {
        "schemaVersion": {
          "const": "street-level-outcome-receipt-v2"
        },
        "actionId": { "type": "string" },
        "eventId": { "type": "string" },
        "recorded": { "type": "boolean" },
        "deduplicated": { "type": "boolean" }
      },
      "additionalProperties": false
    },
    "InputDescriptor": {
      "type": "object",
      "required": [
        "schemaVersion",
        "experienceId",
        "configurationVersion",
        "sourceId",
        "snapshotSourceId",
        "domainProfileId",
        "submissionSchemaVersion",
        "snapshotSchemaVersion",
        "regionalPolicyId",
        "allowedActionOrigins",
        "limits",
        "retention"
      ],
      "properties": {
        "schemaVersion": { "const": "managed-input-descriptor-v1" },
        "experienceId": { "type": "string" },
        "configurationVersion": { "type": "string" },
        "sourceId": { "type": "string" },
        "snapshotSourceId": { "type": "string" },
        "domainProfileId": { "const": "generic-place-v1" },
        "submissionSchemaVersion": {
          "const": "located-item-input-submission-v1"
        },
        "snapshotSchemaVersion": { "const": "located-item-source-snapshot-v1" },
        "regionalPolicyId": { "type": "string" },
        "allowedActionOrigins": {
          "type": "array",
          "items": { "type": "string", "format": "uri" }
        },
        "limits": {
          "type": "object",
          "required": [
            "maximumItems",
            "maximumRetainedIdentities",
            "maximumSnapshotBytes"
          ],
          "properties": {
            "maximumItems": { "type": "integer", "minimum": 1 },
            "maximumRetainedIdentities": { "type": "integer", "minimum": 1 },
            "maximumSnapshotBytes": { "type": "integer", "minimum": 1 }
          },
          "additionalProperties": false
        },
        "retention": {
          "type": "object",
          "required": ["maximumInputs", "maximumTotalBytes", "lifetimeMs"],
          "properties": {
            "maximumInputs": { "type": "integer", "minimum": 1 },
            "maximumTotalBytes": { "type": "integer", "minimum": 1 },
            "lifetimeMs": { "type": "integer", "minimum": 1 }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "InputSubmission": {
      "type": "object",
      "required": [
        "schemaVersion",
        "experienceId",
        "sourceId",
        "inputId",
        "sourceSequence",
        "snapshot"
      ],
      "properties": {
        "schemaVersion": {
          "enum": [
            "property-input-submission-v1",
            "located-item-input-submission-v1"
          ]
        },
        "experienceId": { "type": "string" },
        "sourceId": { "type": "string" },
        "inputId": { "type": "string" },
        "sourceSequence": { "type": "integer", "minimum": 1 },
        "snapshot": { "type": "object" }
      },
      "additionalProperties": false
    },
    "InputReceipt": {
      "type": "object",
      "required": ["contractVersion", "experienceId", "inputRef", "expiresAt"],
      "properties": {
        "contractVersion": {
          "enum": ["property-input-receipt-v1", "located-item-input-receipt-v1"]
        },
        "experienceId": { "type": "string" },
        "inputRef": { "type": "string" },
        "expiresAt": { "type": "string", "format": "date-time" }
      },
      "additionalProperties": true
    }
  }
}
