{"openapi":"3.0.3","info":{"title":"FixedLink API","version":"1.0.0","description":"Create and manage short links programmatically.\n\nAuthenticate with a bearer token from Dashboard, Settings, API. API access requires a plan that includes it."},"servers":[{"url":"https://fixedlink.dev/api/v1"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Links","description":"Create, read, update and delete short links"},{"name":"Analytics","description":"Click statistics"},{"name":"Routing","description":"Conditional redirects — send different visitors elsewhere"},{"name":"Metadata","description":"The destination page's Open Graph tags, and the ones the short link unfurls with"},{"name":"Domains","description":"Custom domains"}],"paths":{"/links":{"get":{"tags":["Links"],"summary":"List links","operationId":"listLinks","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1}},{"name":"perPage","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},{"name":"search","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"string","enum":["active","paused","deleted"]}},{"name":"tag","in":"query","schema":{"type":"string"}},{"name":"domainId","in":"query","schema":{"type":"string"}},{"name":"sortBy","in":"query","schema":{"type":"string","enum":["createdAt","clicks","slug"]}},{"name":"sortOrder","in":"query","schema":{"type":"string","enum":["asc","desc"]}}],"responses":{"200":{"description":"A page of links","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkList"}}}},"402":{"description":"Plan does not include API access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Missing or invalid token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Links"],"summary":"Create a link","operationId":"createLink","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLinkRequest"}}}},"responses":{"201":{"description":"The created link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Link"}}}},"402":{"description":"Link quota reached, or plan lacks API access","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Slug already taken","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Invalid destination or slug","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/links/{id}":{"get":{"tags":["Links"],"summary":"Get a link","operationId":"getLink","parameters":[{"name":"id","in":"path","required":true,"description":"Link ID","schema":{"type":"string"}}],"responses":{"200":{"description":"The link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Link"}}}},"404":{"description":"No such link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Links"],"summary":"Update a link","operationId":"updateLink","parameters":[{"name":"id","in":"path","required":true,"description":"Link ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLinkRequest"}}}},"responses":{"200":{"description":"The updated link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Link"}}}},"404":{"description":"No such link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Slug already taken","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Links"],"summary":"Delete a link","description":"Soft delete - analytics history is retained.","operationId":"deleteLink","parameters":[{"name":"id","in":"path","required":true,"description":"Link ID","schema":{"type":"string"}}],"responses":{"204":{"description":"Deleted"},"404":{"description":"No such link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/links/{id}/analytics":{"get":{"tags":["Analytics"],"summary":"Get link analytics","description":"Ranges beyond the plan's retention window are clamped.","operationId":"getLinkAnalytics","parameters":[{"name":"id","in":"path","required":true,"description":"Link ID","schema":{"type":"string"}},{"name":"range","in":"query","schema":{"type":"string","enum":["7d","30d","90d","365d"],"default":"30d"}}],"responses":{"200":{"description":"Click statistics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkAnalytics"}}}},"404":{"description":"No such link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/links/{id}/metadata":{"get":{"tags":["Metadata"],"summary":"Get a link's metadata and preview","description":"Returns what we read from the destination page, your overrides, and the preview a crawler is served. The fetch runs in the background, so a link created moments ago may still be `pending`.","operationId":"getLinkMetadata","parameters":[{"name":"id","in":"path","required":true,"description":"Link ID","schema":{"type":"string"}}],"responses":{"200":{"description":"The link's metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkMetadata"}}}},"404":{"description":"No such link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Metadata"],"summary":"Set a link's preview","description":"Send null for a field to clear the override and fall back to the destination page's own tag.","operationId":"updateLinkPreview","parameters":[{"name":"id","in":"path","required":true,"description":"Link ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLinkPreviewRequest"}}}},"responses":{"200":{"description":"The updated metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkMetadata"}}}},"402":{"description":"Plan does not include custom link previews","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Invalid preview mode or image URL","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/links/{id}/metadata/refresh":{"post":{"tags":["Metadata"],"summary":"Re-read the destination page","description":"Queues a fetch and returns immediately. Poll GET /links/{id}/metadata for the result.","operationId":"refreshLinkMetadata","parameters":[{"name":"id","in":"path","required":true,"description":"Link ID","schema":{"type":"string"}}],"responses":{"202":{"description":"Fetch queued","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkMetadata"}}}},"404":{"description":"No such link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"A fetch for this link is already in flight","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/links/{id}/qr":{"get":{"tags":["Links"],"summary":"Download the link's QR code","description":"Encodes the short URL, not the destination — so printed artwork keeps working after the destination changes.","operationId":"getLinkQr","parameters":[{"name":"id","in":"path","required":true,"description":"Link ID","schema":{"type":"string"}},{"name":"format","in":"query","schema":{"type":"string","enum":["svg","png"]}},{"name":"size","in":"query","description":"PNG only, 64-2048","schema":{"type":"integer"}},{"name":"margin","in":"query","schema":{"type":"integer"}},{"name":"dark","in":"query","description":"Hex colour, e.g. %230f172a","schema":{"type":"string"}},{"name":"light","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"The QR code","content":{"image/svg+xml":{},"image/png":{}}},"404":{"description":"No such link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/links/{id}/rules":{"get":{"tags":["Routing"],"summary":"List routing rules","description":"Returned in evaluation order. The first rule whose conditions all match decides where the visitor goes; if none match, the link's own destination is used.","operationId":"listRoutingRules","parameters":[{"name":"id","in":"path","required":true,"description":"Link ID","schema":{"type":"string"}}],"responses":{"200":{"description":"The link's rules","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutingRuleList"}}}},"404":{"description":"No such link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Routing"],"summary":"Add a routing rule","description":"Appended to the end of the list, so it cannot outrank an existing rule.","operationId":"createRoutingRule","parameters":[{"name":"id","in":"path","required":true,"description":"Link ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRoutingRuleRequest"}}}},"responses":{"201":{"description":"The created rule","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutingRule"}}}},"402":{"description":"Plan does not include conditional routing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Rule limit reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Invalid condition or destination","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/links/{id}/rules/{ruleId}":{"patch":{"tags":["Routing"],"summary":"Update a routing rule","operationId":"updateRoutingRule","parameters":[{"name":"id","in":"path","required":true,"description":"Link ID","schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"description":"Routing rule ID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRoutingRuleRequest"}}}},"responses":{"200":{"description":"The updated rule","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutingRule"}}}},"402":{"description":"Plan does not include conditional routing","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such rule","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Routing"],"summary":"Delete a routing rule","operationId":"deleteRoutingRule","parameters":[{"name":"id","in":"path","required":true,"description":"Link ID","schema":{"type":"string"}},{"name":"ruleId","in":"path","required":true,"description":"Routing rule ID","schema":{"type":"string"}}],"responses":{"204":{"description":"Deleted"},"404":{"description":"No such rule","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/domains":{"get":{"tags":["Domains"],"summary":"List custom domains","operationId":"listDomains","responses":{"200":{"description":"Your custom domains","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainList"}}}},"402":{"description":"Plan does not include custom domains","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Your API token from Dashboard, Settings, API."}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","example":"NOT_FOUND"},"message":{"type":"string","example":"Link not found"}},"required":["code","message"]}},"required":["error"]},"Pagination":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"page":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"perPage":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"totalPages":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hasNext":{"type":"boolean"},"hasPrev":{"type":"boolean"}},"required":["total","page","perPage","totalPages","hasNext","hasPrev"]},"Link":{"type":"object","properties":{"id":{"type":"string","example":"clx1234567890"},"slug":{"type":"string","example":"spring-sale"},"destination":{"type":"string","format":"uri","example":"https://acme.com/promotions/spring"},"shortUrl":{"type":"string","format":"uri","example":"https://fixedlink.app/spring-sale"},"status":{"type":"string","enum":["active","paused","deleted"]},"state":{"type":"string","enum":["active","scheduled","expired","paused","deleted"]},"clicks":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"tags":{"type":"array","items":{"type":"string"}},"domain":{"nullable":true,"type":"object","properties":{"id":{"type":"string"},"hostname":{"type":"string"}},"required":["id","hostname"]},"createdAt":{"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))$"},"updatedAt":{"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))$"}},"required":["id","slug","destination","shortUrl","status","state","clicks","tags","domain","createdAt","updatedAt"]},"LinkList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/definitions/Link"}},"meta":{"$ref":"#/definitions/Pagination"}},"required":["data","meta"],"definitions":{"Link":{"type":"object","properties":{"id":{"type":"string","example":"clx1234567890"},"slug":{"type":"string","example":"spring-sale"},"destination":{"type":"string","format":"uri","example":"https://acme.com/promotions/spring"},"shortUrl":{"type":"string","format":"uri","example":"https://fixedlink.app/spring-sale"},"status":{"type":"string","enum":["active","paused","deleted"]},"state":{"type":"string","enum":["active","scheduled","expired","paused","deleted"]},"clicks":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"tags":{"type":"array","items":{"type":"string"}},"domain":{"nullable":true,"type":"object","properties":{"id":{"type":"string"},"hostname":{"type":"string"}},"required":["id","hostname"]},"createdAt":{"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))$"},"updatedAt":{"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))$"}},"required":["id","slug","destination","shortUrl","status","state","clicks","tags","domain","createdAt","updatedAt"]},"Pagination":{"type":"object","properties":{"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"page":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"perPage":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"totalPages":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"hasNext":{"type":"boolean"},"hasPrev":{"type":"boolean"}},"required":["total","page","perPage","totalPages","hasNext","hasPrev"]}}},"CreateLinkRequest":{"type":"object","properties":{"destination":{"type":"string","minLength":1,"description":"Target URL. https:// is added if omitted."},"slug":{"description":"Custom short path. Generated when omitted.","type":"string"},"domainId":{"description":"Custom domain to publish on. Requires a plan with custom domains.","nullable":true,"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"required":["destination"]},"UpdateLinkRequest":{"type":"object","properties":{"destination":{"type":"string","minLength":1},"slug":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"status":{"type":"string","enum":["active","paused"]}}},"LinkAnalytics":{"type":"object","properties":{"range":{"type":"string","enum":["7d","30d","90d","365d"]},"clicks":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"uniqueVisitors":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"timeSeries":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["date","count"]}},"breakdowns":{"type":"object","properties":{"countries":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["key","count"]}},"referrers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["key","count"]}},"devices":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["key","count"]}},"browsers":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["key","count"]}},"operatingSystems":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["key","count"]}}},"required":["countries","referrers","devices","browsers","operatingSystems"]}},"required":["range","clicks","uniqueVisitors","timeSeries","breakdowns"]},"LinkMetadata":{"type":"object","properties":{"status":{"type":"string","enum":["pending","fetching","ok","failed","skipped"],"description":"State of the background fetch of the destination page."},"fetched":{"type":"object","properties":{"title":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"imageUrl":{"nullable":true,"type":"string"},"iconUrl":{"nullable":true,"type":"string"},"siteName":{"nullable":true,"type":"string"},"author":{"nullable":true,"type":"string"},"type":{"nullable":true,"type":"string"},"locale":{"nullable":true,"type":"string"},"canonicalUrl":{"nullable":true,"type":"string"}},"required":["title","description","imageUrl","iconUrl","siteName","author","type","locale","canonicalUrl"]},"overrides":{"type":"object","properties":{"title":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"imageUrl":{"nullable":true,"type":"string"},"siteName":{"nullable":true,"type":"string"}},"required":["title","description","imageUrl","siteName"]},"previewMode":{"type":"string","enum":["auto","custom","off"]},"preview":{"nullable":true,"type":"object","properties":{"title":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"imageUrl":{"nullable":true,"type":"string"},"siteName":{"nullable":true,"type":"string"}},"required":["title","description","imageUrl","siteName"]},"resolvedUrl":{"nullable":true,"type":"string"},"httpStatus":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"error":{"nullable":true,"type":"string"},"fetchedAt":{"nullable":true,"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))$"}},"required":["status","fetched","overrides","previewMode","preview","resolvedUrl","httpStatus","error","fetchedAt"]},"RoutingRule":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Evaluation order; lower runs first."},"enabled":{"type":"boolean"},"destination":{"type":"string"},"conditions":{"type":"array","items":{"$ref":"#/definitions/RuleCondition"}},"description":{"type":"string"},"matchCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"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))$"}},"required":["id","name","position","enabled","destination","conditions","description","matchCount","createdAt"],"definitions":{"RuleCondition":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["country","device","os","browser","language","referrer"]},"op":{"type":"string","enum":["in","not_in"]},"values":{"minItems":1,"type":"array","items":{"type":"string"}}},"required":["type","op","values"]},{"type":"object","properties":{"type":{"type":"string","enum":["date"]},"op":{"type":"string","enum":["before","after","between"]},"from":{"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))$"},"to":{"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))$"}},"required":["type","op"]},{"type":"object","properties":{"type":{"type":"string","enum":["time"]},"op":{"type":"string","enum":["between"]},"from":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$"},"to":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$"},"timezone":{"type":"string","example":"America/New_York"}},"required":["type","op","from","to","timezone"]},{"type":"object","properties":{"type":{"type":"string","enum":["weekday"]},"op":{"type":"string","enum":["in","not_in"]},"values":{"minItems":1,"type":"array","items":{"type":"integer","minimum":0,"maximum":6}},"timezone":{"type":"string"}},"required":["type","op","values","timezone"]}],"description":"One test a visitor must pass. All of a rule's conditions must hold for it to match."}}},"RoutingRuleList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/definitions/RoutingRule"}}},"required":["data"],"definitions":{"RoutingRule":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"position":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Evaluation order; lower runs first."},"enabled":{"type":"boolean"},"destination":{"type":"string"},"conditions":{"type":"array","items":{"$ref":"#/definitions/RuleCondition"}},"description":{"type":"string"},"matchCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"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))$"}},"required":["id","name","position","enabled","destination","conditions","description","matchCount","createdAt"]},"RuleCondition":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["country","device","os","browser","language","referrer"]},"op":{"type":"string","enum":["in","not_in"]},"values":{"minItems":1,"type":"array","items":{"type":"string"}}},"required":["type","op","values"]},{"type":"object","properties":{"type":{"type":"string","enum":["date"]},"op":{"type":"string","enum":["before","after","between"]},"from":{"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))$"},"to":{"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))$"}},"required":["type","op"]},{"type":"object","properties":{"type":{"type":"string","enum":["time"]},"op":{"type":"string","enum":["between"]},"from":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$"},"to":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$"},"timezone":{"type":"string","example":"America/New_York"}},"required":["type","op","from","to","timezone"]},{"type":"object","properties":{"type":{"type":"string","enum":["weekday"]},"op":{"type":"string","enum":["in","not_in"]},"values":{"minItems":1,"type":"array","items":{"type":"integer","minimum":0,"maximum":6}},"timezone":{"type":"string"}},"required":["type","op","values","timezone"]}],"description":"One test a visitor must pass. All of a rule's conditions must hold for it to match."}}},"CreateRoutingRuleRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"destination":{"type":"string","minLength":1},"conditions":{"default":[],"type":"array","items":{"$ref":"#/definitions/RuleCondition"}},"enabled":{"type":"boolean"},"preview":{"allOf":[{"$ref":"#/definitions/RoutingRulePreview"}]}},"required":["name","destination"],"definitions":{"RuleCondition":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["country","device","os","browser","language","referrer"]},"op":{"type":"string","enum":["in","not_in"]},"values":{"minItems":1,"type":"array","items":{"type":"string"}}},"required":["type","op","values"]},{"type":"object","properties":{"type":{"type":"string","enum":["date"]},"op":{"type":"string","enum":["before","after","between"]},"from":{"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))$"},"to":{"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))$"}},"required":["type","op"]},{"type":"object","properties":{"type":{"type":"string","enum":["time"]},"op":{"type":"string","enum":["between"]},"from":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$"},"to":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$"},"timezone":{"type":"string","example":"America/New_York"}},"required":["type","op","from","to","timezone"]},{"type":"object","properties":{"type":{"type":"string","enum":["weekday"]},"op":{"type":"string","enum":["in","not_in"]},"values":{"minItems":1,"type":"array","items":{"type":"integer","minimum":0,"maximum":6}},"timezone":{"type":"string"}},"required":["type","op","values","timezone"]}],"description":"One test a visitor must pass. All of a rule's conditions must hold for it to match."},"RoutingRulePreview":{"type":"object","properties":{"title":{"nullable":true,"type":"string","maxLength":200},"description":{"nullable":true,"type":"string","maxLength":400},"imageKey":{"nullable":true,"type":"string"}}}}},"UpdateRoutingRuleRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80},"destination":{"type":"string","minLength":1},"conditions":{"type":"array","items":{"$ref":"#/definitions/RuleCondition"}},"enabled":{"type":"boolean"},"position":{"type":"integer","minimum":0,"maximum":9007199254740991},"preview":{"allOf":[{"$ref":"#/definitions/RoutingRulePreview"}]}},"definitions":{"RuleCondition":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","enum":["country","device","os","browser","language","referrer"]},"op":{"type":"string","enum":["in","not_in"]},"values":{"minItems":1,"type":"array","items":{"type":"string"}}},"required":["type","op","values"]},{"type":"object","properties":{"type":{"type":"string","enum":["date"]},"op":{"type":"string","enum":["before","after","between"]},"from":{"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))$"},"to":{"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))$"}},"required":["type","op"]},{"type":"object","properties":{"type":{"type":"string","enum":["time"]},"op":{"type":"string","enum":["between"]},"from":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$"},"to":{"type":"string","pattern":"^\\d{1,2}:\\d{2}$"},"timezone":{"type":"string","example":"America/New_York"}},"required":["type","op","from","to","timezone"]},{"type":"object","properties":{"type":{"type":"string","enum":["weekday"]},"op":{"type":"string","enum":["in","not_in"]},"values":{"minItems":1,"type":"array","items":{"type":"integer","minimum":0,"maximum":6}},"timezone":{"type":"string"}},"required":["type","op","values","timezone"]}],"description":"One test a visitor must pass. All of a rule's conditions must hold for it to match."},"RoutingRulePreview":{"type":"object","properties":{"title":{"nullable":true,"type":"string","maxLength":200},"description":{"nullable":true,"type":"string","maxLength":400},"imageKey":{"nullable":true,"type":"string"}}}}},"UpdateLinkPreviewRequest":{"type":"object","properties":{"previewMode":{"description":"\"auto\" unfurls with the destination's tags, \"custom\" with yours, \"off\" disables the preview page.","type":"string","enum":["auto","custom","off"]},"title":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"imageUrl":{"description":"Absolute http(s) URL.","nullable":true,"type":"string","format":"uri"},"siteName":{"nullable":true,"type":"string"}}},"Domain":{"type":"object","properties":{"id":{"type":"string"},"hostname":{"type":"string","example":"links.acme.com"},"status":{"type":"string","enum":["pending","verifying","active","failed"]},"linkCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"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))$"}},"required":["id","hostname","status","linkCount","createdAt"]},"DomainList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/definitions/Domain"}}},"required":["data"],"definitions":{"Domain":{"type":"object","properties":{"id":{"type":"string"},"hostname":{"type":"string","example":"links.acme.com"},"status":{"type":"string","enum":["pending","verifying","active","failed"]},"linkCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"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))$"}},"required":["id","hostname","status","linkCount","createdAt"]}}}}}}