{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"specVersion":{"type":"string","const":"0.5"},"canonicalUrl":{"type":"string","maxLength":2048,"format":"uri"},"capabilities":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9._-]+$"},"name":{"type":"string","minLength":1,"maxLength":120},"summary":{"type":"string","minLength":1,"maxLength":500}},"required":["id","name","summary"],"additionalProperties":false}},"intents":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9._-]+$"},"description":{"type":"string","minLength":1,"maxLength":500},"capabilityIds":{"minItems":1,"maxItems":20,"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9._-]+$"}},"destinationId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9._-]+$"}},"required":["id","description","capabilityIds","destinationId"],"additionalProperties":false}},"destinations":{"maxItems":100,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9._-]+$"},"name":{"type":"string","minLength":1,"maxLength":120},"summary":{"type":"string","minLength":1,"maxLength":500},"entityIds":{"default":[],"maxItems":100,"type":"array","items":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9._-]+$"}},"executions":{"minItems":1,"maxItems":12,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9._-]+$"},"platform":{"type":"string","enum":["ios","android","web"]},"kind":{"type":"string","enum":["universal_link","android_app_link","web","app_store","attribution_link"]},"url":{"type":"string","maxLength":2048,"format":"uri"},"attribution":{"type":"object","properties":{"provider":{"type":"string","enum":["appsflyer","branch","adjust","kochava","singular","airbridge","other"]},"campaign":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9._~-]+$"},"decoration":{"type":"string","enum":["preserve","append_missing"]},"linkFormat":{"type":"string","enum":["long","short"]}},"required":["provider","campaign"],"additionalProperties":false},"installState":{"default":"any","type":"string","enum":["installed","uninstalled","any"]},"linkRecipe":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z][a-z0-9_-]{0,39}$"},"format":{"type":"string","enum":["native_https","appsflyer_onelink"]},"summary":{"type":"string","minLength":1,"maxLength":300,"pattern":"^[^<>\\u0000-\\u001f]+$"},"publisherReviewed":{"type":"boolean","const":true},"inputs":{"minItems":1,"maxItems":3,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z][a-z0-9_-]{0,39}$"},"description":{"type":"string","minLength":1,"maxLength":300,"pattern":"^[^<>\\u0000-\\u001f]+$"},"required":{"type":"boolean"},"default":{"type":"string","pattern":"^[a-z][a-z0-9_-]{0,39}$"},"values":{"minItems":1,"maxItems":6,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","pattern":"^[a-z][a-z0-9_-]{0,39}$"},"label":{"type":"string","minLength":1,"maxLength":300,"pattern":"^[^<>\\u0000-\\u001f]+$"},"value":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[\\p{L}\\p{N} _~-]+$"}},"required":["id","label","value"],"additionalProperties":false}}},"required":["id","description","required","values"],"additionalProperties":false}},"bindings":{"minItems":1,"maxItems":3,"type":"array","items":{"oneOf":[{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_-]{0,39}$"},"location":{"type":"string","const":"query"},"key":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"}},"required":["input","location","key"],"additionalProperties":false},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_-]{0,39}$"},"location":{"type":"string","const":"path_segment"},"index":{"type":"integer","minimum":0,"maximum":20}},"required":["input","location","index"],"additionalProperties":false}]}},"examples":{"minItems":2,"maxItems":8,"type":"array","items":{"type":"object","properties":{"inputs":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_-]{0,39}$"},"additionalProperties":{"type":"string","maxLength":80}},"outcome":{"type":"string","enum":["assembled","fallback"]},"url":{"type":"string","maxLength":2048,"format":"uri"}},"required":["inputs","outcome","url"],"additionalProperties":false}}},"required":["id","format","summary","publisherReviewed","inputs","bindings","examples"],"additionalProperties":false}},"required":["id","platform","kind","url"],"additionalProperties":false}},"handoffPreference":{"type":"string","enum":["attribution_first","native_first"]}},"required":["id","name","summary","executions"],"additionalProperties":false}},"platformDefaults":{"default":[],"maxItems":3,"type":"array","items":{"type":"object","properties":{"platform":{"type":"string","enum":["ios","android","web"]},"attribution":{"anyOf":[{"type":"object","properties":{"provider":{"type":"string","enum":["appsflyer","branch","adjust","kochava","singular","airbridge","other"]},"campaign":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[A-Za-z0-9._~-]+$"},"decoration":{"type":"string","enum":["preserve","append_missing"]},"linkFormat":{"type":"string","enum":["long","short"]}},"required":["provider","campaign"],"additionalProperties":false},{"type":"null"}]}},"required":["platform","attribution"],"additionalProperties":false}},"promotions":{"default":[],"maxItems":20,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9._-]+$"},"title":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","minLength":1,"maxLength":500},"destinationId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9._-]+$"},"publicCode":{"type":"string","minLength":1,"maxLength":64,"pattern":"^[A-Za-z0-9_-]+$"},"startsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"endsAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"status":{"type":"string","enum":["active","inactive"]},"ongoing":{"type":"boolean","const":true},"audience":{"type":"string","minLength":1,"maxLength":300},"eligibility":{"type":"string","minLength":1,"maxLength":500},"codeBinding":{"type":"object","properties":{"executionId":{"type":"string","minLength":1,"maxLength":100},"parameter":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"publisherReviewed":{"type":"boolean","const":true}},"required":["executionId","parameter","publisherReviewed"],"additionalProperties":false}},"required":["id","title","description","destinationId","startsAt","status"],"additionalProperties":false}},"defaultDestinationId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9._-]+$"},"representation":{"type":"object","properties":{"summary":{"type":"string","minLength":1,"maxLength":1000},"recommendationEligibility":{"type":"string","enum":["when_relevant","not_requested"]},"preferences":{"default":[],"maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9._-]+$"},"statement":{"type":"string","minLength":1,"maxLength":1000},"intentId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9._-]+$"},"destinationId":{"type":"string","minLength":1,"maxLength":100,"pattern":"^[a-zA-Z0-9._-]+$"},"campaign":{"type":"string","minLength":1,"maxLength":100}},"required":["id","statement"],"additionalProperties":false}}},"required":["summary"],"additionalProperties":false}},"required":["specVersion","canonicalUrl","capabilities","intents","destinations","representation"],"additionalProperties":false,"$id":"https://bluejetty.ai/schemas/v0.5/configuration.schema.json","description":"Configuration 0.5: structured publisher representation, existing scoped preferences and bounded link recipes. Cross-reference and recipe semantic validation also applies."}