changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "$defs": {
+ "IntegrationMarketSlug": {
+ "description": "Published English-name market slug returned by authorized discovery.",
+ "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
+ "type": "string"
+ },
+ "IntegrationNotice": {
+ "additionalProperties": false,
+ "properties": {
+ "id": {
+ "type": "string"
+ },
+ "kind": {
+ "enum": [
+ "approaching_limit",
+ "limit_reached"
+ ]
+ },
+ "limit": {
+ "minimum": 0,
+ "type": "integer"
+ },
+ "message": {
+ "type": "string"
+ },
+ "nextCapacityAt": {
+ "anyOf": [
+ {
+ "$ref": "#/$defs/IntegrationTimestamp"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "period": {
+ "enum": [
+ "day",
+ "week",
+ "month"
+ ]
+ },
+ "remaining": {
+ "minimum": 0,
+ "type": "integer"
+ },
+ "used": {
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "id",
+ "period",
+ "kind",
+ "message",
+ "used",
+ "limit",
+ "remaining",
+ "nextCapacityAt"
+ ],
+ "type": "object"
+ },
+ "IntegrationOutlookFieldGuide": {
+ "additionalProperties": false,
+ "properties": {
+ "counts": {
+ "type": "string"
+ },
+ "forecastAt": {
+ "type": "string"
+ },
+ "interpretation": {
+ "type": "string"
+ },
+ "label": {
+ "type": "string"
+ },
+ "more": {
+ "type": "string"
+ },
+ "movePercent": {
+ "type": "string"
+ },
+ "probabilityPercent": {
+ "type": "string"
+ },
+ "referencePrice": {
+ "type": "string"
+ },
+ "sourceAt": {
+ "type": "string"
+ },
+ "withoutForecasts": {
+ "minLength": 1,
+ "type": "string"
+ }
+ },
+ "required": [
+ "probabilityPercent",
+ "movePercent",
+ "referencePrice",
+ "sourceAt",
+ "forecastAt",
+ "label",
+ "counts",
+ "interpretation",
+ "more"
+ ],
+ "type": "object"
+ },
+ "IntegrationOutlookSelection": {
+ "additionalProperties": false,
+ "description": "The requested selection of one market's current forecasts. Historical performance and selected past results are read with their own operations.",
+ "properties": {
+ "availableDurations": {
+ "description": "Durations of this market that have forecasts now; a duration with none is left out.",
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 40,
+ "type": "array"
+ },
+ "counts": {
+ "additionalProperties": false,
+ "properties": {
+ "forecasts": {
+ "maximum": 72,
+ "minimum": 0,
+ "type": "integer"
+ },
+ "withoutProbability": {
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "forecasts",
+ "withoutProbability"
+ ],
+ "type": "object"
+ },
+ "forecasts": {
+ "items": {
+ "$ref": "#/$defs/IntegrationSelectedSource"
+ },
+ "type": "array"
+ },
+ "market": {
+ "$ref": "#/$defs/IntegrationMarketSlug"
+ },
+ "name": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "selection": {
+ "additionalProperties": false,
+ "properties": {
+ "direction": {
+ "enum": [
+ "up",
+ "down",
+ "both"
+ ]
+ },
+ "durations": {
+ "items": {
+ "type": "string"
+ },
+ "maxItems": 6,
+ "minItems": 1,
+ "type": "array"
+ },
+ "maxProbabilityPercent": {
+ "type": "number"
+ },
+ "maxTargetPercent": {
+ "type": [
+ "number",
+ "null"
+ ]
+ },
+ "minProbabilityPercent": {
+ "type": "number"
+ },
+ "minTargetPercent": {
+ "type": "number"
+ }
+ },
+ "required": [
+ "durations",
+ "direction",
+ "minProbabilityPercent",
+ "maxProbabilityPercent",
+ "minTargetPercent",
+ "maxTargetPercent"
+ ],
+ "type": "object"
+ },
+ "sourceAt": {
+ "$ref": "#/$defs/IntegrationTimestamp"
+ },
+ "url": {
+ "format": "uri",
+ "pattern": "^https://kunkafa\\.com/markets/[a-z0-9-]+/$",
+ "type": "string"
+ },
+ "withoutForecasts": {
+ "description": "Asked-for durations with no forecasts: none_now (none at the moment) or no_match (none match the filters). Left out when every duration has forecasts.",
+ "items": {
+ "additionalProperties": false,
+ "properties": {
+ "duration": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "reason": {
+ "enum": [
+ "none_now",
+ "no_match"
+ ]
+ }
+ },
+ "required": [
+ "duration",
+ "reason"
+ ],
+ "type": "object"
+ },
+ "maxItems": 40,
+ "minItems": 1,
+ "type": "array"
+ }
+ },
+ "required": [
+ "market",
+ "name",
+ "url",
+ "sourceAt",
+ "selection",
+ "availableDurations",
+ "forecasts",
+ "counts"
+ ],
+ "type": "object"
+ },
+ "IntegrationSelectedOutput": {
+ "additionalProperties": false,
+ "description": "One target-touch forecast. probabilityPercent is Kunkafa's confidence; outputs without one are counted in counts.withoutProbability, not listed.",
+ "properties": {
+ "direction": {
+ "enum": [
+ "up",
+ "down"
+ ]
+ },
+ "movePercent": {
+ "type": "number"
+ },
+ "probabilityPercent": {
+ "maximum": 100,
+ "minimum": 0,
+ "type": "number"
+ }
+ },
+ "required": [
+ "direction",
+ "movePercent",
+ "probabilityPercent"
+ ],
+ "type": "object"
+ },
+ "IntegrationSelectedSource": {
+ "additionalProperties": false,
+ "description": "A source group within the selection; several can share a duration. Only groups with forecasts are listed; forecastAt is left out when unknown.",
+ "properties": {
+ "duration": {
+ "minLength": 1,
+ "type": "string"
+ },
+ "forecastAt": {
+ "$ref": "#/$defs/IntegrationTimestamp"
+ },
+ "label": {
+ "description": "Names the source within its duration (A, B, C…): forecasts made together. Sources are read side by side, never merged.",
+ "pattern": "^[A-Z]$",
+ "type": "string"
+ },
+ "outputs": {
+ "items": {
+ "$ref": "#/$defs/IntegrationSelectedOutput"
+ },
+ "maxItems": 72,
+ "minItems": 1,
+ "type": "array"
+ },
+ "referencePrice": {
+ "exclusiveMinimum": 0,
+ "type": "number"
+ },
+ "sourceAt": {
+ "$ref": "#/$defs/IntegrationTimestamp"
+ }
+ },
+ "required": [
+ "duration",
+ "sourceAt",
+ "referencePrice",
+ "outputs",
+ "label"
+ ],
+ "type": "object"
+ },
+ "IntegrationTimestamp": {
+ "description": "ISO 8601 UTC timestamp supplied by Kunkafa.",
+ "format": "date-time",
+ "type": "string"
+ },
+ "IntegrationUsage": {
+ "additionalProperties": false,
+ "properties": {
+ "adjustment": {
+ "additionalProperties": false,
+ "description": "An owner-approved account allowance increase. A null expiration is permanent until changed. Usage is never reset; market access and credential eligibility still follow the current plan.",
+ "properties": {
+ "expiresAt": {
+ "format": "date-time",
+ "type": [
+ "string",
+ "null"
+ ]
+ }
+ },
+ "required": [
+ "expiresAt"
+ ],
+ "type": "object"
+ },
+ "calculatedAt": {
+ "$ref": "#/$defs/IntegrationTimestamp"
+ },
+ "concurrency": {
+ "additionalProperties": false,
+ "description": "Private requests that can run at the same time. Requests from one connection run side by side up to this limit (the plan burst); a request from another connection waits until they finish.",
+ "properties": {
+ "limit": {
+ "maximum": 100,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "nextRequestAt": {
+ "anyOf": [
+ {
+ "$ref": "#/$defs/IntegrationTimestamp"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "remaining": {
+ "maximum": 100,
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "limit",
+ "remaining",
+ "nextRequestAt"
+ ],
+ "type": "object"
+ },
+ "requests": {
+ "additionalProperties": false,
+ "description": "Steady request rate with bounded burst capacity; metadata and repeated summaries still count toward request protection.",
+ "properties": {
+ "burst": {
+ "minimum": 0,
+ "type": "integer"
+ },
+ "nextRequestAt": {
+ "anyOf": [
+ {
+ "$ref": "#/$defs/IntegrationTimestamp"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "perMinute": {
+ "minimum": 0,
+ "type": "integer"
+ },
+ "remaining": {
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "perMinute",
+ "burst",
+ "remaining",
+ "nextRequestAt"
+ ],
+ "type": "object"
+ },
+ "tier": {
+ "enum": [
+ "free",
+ "starter",
+ "core",
+ "pro",
+ "publisher"
+ ]
+ },
+ "windows": {
+ "items": {
+ "$ref": "#/$defs/IntegrationWindowUsage"
+ },
+ "maxItems": 3,
+ "minItems": 3,
+ "type": "array"
+ }
+ },
+ "required": [
+ "calculatedAt",
+ "tier",
+ "requests",
+ "concurrency",
+ "windows"
+ ],
+ "type": "object"
+ },
+ "IntegrationWindowUsage": {
+ "additionalProperties": false,
+ "description": "Rolling 24-hour, 7-day or 30-day allowance, not a midnight reset. Used can exceed the current limit after a downgrade; remaining is never negative.",
+ "properties": {
+ "limit": {
+ "minimum": 0,
+ "type": "integer"
+ },
+ "nextCapacityAt": {
+ "anyOf": [
+ {
+ "$ref": "#/$defs/IntegrationTimestamp"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "notice": {
+ "enum": [
+ "approaching_limit",
+ "limit_reached",
+ null
+ ]
+ },
+ "noticeId": {
+ "anyOf": [
+ {
+ "type": "string"
+ },
+ {
+ "type": "null"
+ }
+ ]
+ },
+ "period": {
+ "enum": [
+ "day",
+ "week",
+ "month"
+ ]
+ },
+ "remaining": {
+ "minimum": 0,
+ "type": "integer"
+ },
+ "used": {
+ "minimum": 0,
+ "type": "integer"
+ }
+ },
+ "required": [
+ "period",
+ "used",
+ "limit",
+ "remaining",
+ "nextCapacityAt",
+ "notice",
+ "noticeId"
+ ],
+ "type": "object"
+ }
+ },
+ "additionalProperties": false,
+ "description": "One market's selected forecasts. Each distinct selection is one disclosure against the allowance; repeating the same selection on unchanged data is not charged again.",
+ "properties": {
+ "data": {
+ "$ref": "#/$defs/IntegrationOutlookSelection"
+ },
+ "dataUse": {
+ "description": "Use restriction on every reply: data collection is prohibited; the data may not be collected, saved, stored, exported or compiled, or used to train, retrain, fine-tune or distil any model.",
+ "type": "string"
+ },
+ "fieldGuide": {
+ "$ref": "#/$defs/IntegrationOutlookFieldGuide"
+ },
+ "notices": {
+ "items": {
+ "$ref": "#/$defs/IntegrationNotice"
+ },
+ "maxItems": 3,
+ "type": "array"
+ },
+ "usage": {
+ "$ref": "#/$defs/IntegrationUsage"
+ }
+ },
+ "required": [
+ "data",
+ "fieldGuide",
+ "usage",
+ "notices",
+ "dataUse"
+ ],
+ "type": "object"
+}