esyURL · Schema

UpdateLink

CompanyShort LinksQR CodesAI AgentsMCP

Properties

Name Type Description
targetUrl stringnull Not on a link page unless page is null
page object Replaces the page; null (with a targetUrl) turns it back into a redirect
name string
tags object
metadata object
qrStyle object
status string
groupIds object The complete new set; replaces the current one
rules object The complete new list; replaces the current one ([] removes all)
View JSON Schema on GitHub

JSON Schema

esyurl-fyi-update-link-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/esyurl-fyi/json-schema/esyurl-fyi-update-link-schema.json",
  "title": "UpdateLink",
  "x-generated": "2026-11-07",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/esyurl-fyi-openapi.json#/components/schemas/UpdateLink",
  "type": "object",
  "minProperties": 1,
  "additionalProperties": false,
  "properties": {
    "targetUrl": {
      "type": [
        "string",
        "null"
      ],
      "format": "uri",
      "description": "Not on a link page unless page is null"
    },
    "page": {
      "oneOf": [
        {
          "$ref": "#/$defs/LinkPageInput"
        },
        {
          "type": "null"
        }
      ],
      "description": "Replaces the page; null (with a targetUrl) turns it back into a redirect"
    },
    "name": {
      "type": "string",
      "maxLength": 200
    },
    "tags": {
      "$ref": "#/$defs/Tags"
    },
    "metadata": {
      "$ref": "#/$defs/Metadata"
    },
    "qrStyle": {
      "$ref": "#/$defs/QrStyle"
    },
    "status": {
      "type": "string",
      "enum": [
        "active",
        "paused"
      ]
    },
    "groupIds": {
      "$ref": "#/$defs/GroupIds",
      "description": "The complete new set; replaces the current one"
    },
    "rules": {
      "$ref": "#/$defs/RedirectRules",
      "description": "The complete new list; replaces the current one ([] removes all)"
    }
  },
  "$defs": {
    "GroupIds": {
      "type": "array",
      "maxItems": 20,
      "uniqueItems": true,
      "items": {
        "$ref": "#/$defs/Id"
      },
      "description": "A set: returned sorted; duplicates are dropped"
    },
    "HexColour": {
      "type": "string",
      "pattern": "^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
    },
    "Id": {
      "type": "string",
      "pattern": "^[A-Za-z0-9]{1,64}$"
    },
    "LinkPageInput": {
      "type": "object",
      "required": [
        "title"
      ],
      "additionalProperties": false,
      "description": "A link page (link in bio). The whole page is replaced on update. See /llms.txt, \"Link pages\".",
      "properties": {
        "title": {
          "type": "string",
          "maxLength": 80
        },
        "bio": {
          "type": "string",
          "maxLength": 300
        },
        "avatar": {
          "$ref": "#/$defs/PageImageInput"
        },
        "items": {
          "type": "array",
          "maxItems": 50,
          "items": {
            "$ref": "#/$defs/PageItemInput"
          }
        },
        "socials": {
          "type": "array",
          "maxItems": 12,
          "items": {
            "type": "object",
            "required": [
              "platform",
              "url"
            ],
            "properties": {
              "platform": {
                "type": "string",
                "enum": [
                  "instagram",
                  "tiktok",
                  "youtube",
                  "x",
                  "facebook",
                  "linkedin",
                  "github",
                  "threads",
                  "bluesky",
                  "mastodon",
                  "whatsapp",
                  "telegram",
                  "spotify",
                  "twitch",
                  "discord",
                  "pinterest",
                  "snapchat",
                  "substack",
                  "email",
                  "website"
                ]
              },
              "url": {
                "type": "string",
                "description": "http(s); mailto: for email"
              }
            }
          }
        },
        "theme": {
          "$ref": "#/$defs/PageTheme"
        },
        "language": {
          "type": "string"
        },
        "noindex": {
          "type": "boolean"
        },
        "footer": {
          "type": "boolean",
          "description": "false removes the \"Made with esyURL\" footer: an x402 payment, once per page, for self-signed-up tenants"
        }
      }
    },
    "Metadata": {
      "type": "object",
      "maxProperties": 20,
      "additionalProperties": {
        "type": "string",
        "maxLength": 512
      }
    },
    "PageImageInput": {
      "description": "data uploads a new picture (cropped square, stored with the link); imageId keeps one the page already has",
      "oneOf": [
        {
          "type": "object",
          "required": [
            "data"
          ],
          "additionalProperties": false,
          "properties": {
            "data": {
              "type": "string",
              "description": "data:image/png;base64,... (png, jpeg, webp or gif, up to 2 MB)"
            }
          }
        },
        {
          "type": "object",
          "required": [
            "imageId"
          ],
          "additionalProperties": false,
          "properties": {
            "imageId": {
              "type": "string"
            }
          }
        }
      ]
    },
    "PageItemInput": {
      "type": "object",
      "required": [
        "type"
      ],
      "description": "type link: label plus exactly one of url (clicks counted, then a redirect) or linkId (opens that link). type header / text: text. `when` shows the item only to visits it matches (the rule grammar).",
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]{1,32}$",
          "description": "Generated if omitted; keep it when editing (clicks are counted by it)"
        },
        "type": {
          "type": "string",
          "enum": [
            "link",
            "header",
            "text"
          ]
        },
        "enabled": {
          "type": "boolean",
          "default": true
        },
        "when": {
          "$ref": "#/$defs/RuleCondition"
        },
        "label": {
          "type": "string",
          "maxLength": 100
        },
        "url": {
          "type": "string",
          "format": "uri"
        },
        "linkId": {
          "type": "string"
        },
        "highlight": {
          "type": "boolean"
        },
        "thumbnail": {
          "$ref": "#/$defs/PageImageInput"
        },
        "text": {
          "type": "string",
          "maxLength": 500
        }
      }
    },
    "PageTheme": {
      "type": "object",
      "additionalProperties": false,
      "description": "A preset, then overrides. Colours are hex.",
      "properties": {
        "preset": {
          "type": "string",
          "enum": [
            "light",
            "dark",
            "midnight",
            "sunset",
            "forest",
            "pastel",
            "mono"
          ],
          "default": "light"
        },
        "background": {
          "oneOf": [
            {
              "type": "object",
              "required": [
                "type",
                "color"
              ],
              "properties": {
                "type": {
                  "const": "solid"
                },
                "color": {
                  "$ref": "#/$defs/HexColour"
                }
              }
            },
            {
              "type": "object",
              "required": [
                "type",
                "from",
                "to"
              ],
              "properties": {
                "type": {
                  "const": "gradient"
                },
                "from": {
                  "$ref": "#/$defs/HexColour"
                },
                "to": {
                  "$ref": "#/$defs/HexColour"
                },
                "angle": {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 359
                }
              }
            },
            {
              "type": "object",
              "required": [
                "type",
                "image"
              ],
              "properties": {
                "type": {
                  "const": "image"
                },
                "image": {
                  "$ref": "#/$defs/PageImageInput"
                },
                "dim": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 0.8
                }
              }
            }
          ]
        },
        "text": {
          "$ref": "#/$defs/HexColour"
        },
        "font": {
          "type": "string",
          "enum": [
            "system",
            "rounded",
            "serif",
            "mono",
            "condensed"
          ]
        },
        "button": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "shape": {
              "type": "string",
              "enum": [
                "square",
                "rounded",
                "pill"
              ]
            },
            "fill": {
              "type": "string",
              "enum": [
                "solid",
                "outline",
                "soft",
                "shadow"
              ]
            },
            "color": {
              "$ref": "#/$defs/HexColour"
            },
            "text": {
              "$ref": "#/$defs/HexColour"
            }
          }
        },
        "avatarShape": {
          "type": "string",
          "enum": [
            "circle",
            "rounded",
            "square"
          ]
        },
        "align": {
          "type": "string",
          "enum": [
            "center",
            "left"
          ]
        }
      }
    },
    "QrStyle": {
      "type": "object",
      "additionalProperties": false,
      "description": "How the link's QR image looks (free). Styled codes (any of modules, eyeFrame, eyeBall, eyeColor, image) need dark on light at a contrast of at least 3:1. In requests, `image` carries a new picture as `data`, or keeps the current one by its `imageId`; responses carry `imageId`.",
      "properties": {
        "dark": {
          "$ref": "#/$defs/HexColour"
        },
        "light": {
          "$ref": "#/$defs/HexColour"
        },
        "errorCorrectionLevel": {
          "type": "string",
          "enum": [
            "L",
            "M",
            "Q",
            "H"
          ],
          "description": "Forced to H with a picture"
        },
        "margin": {
          "type": "integer",
          "minimum": 0,
          "maximum": 16
        },
        "modules": {
          "type": "string",
          "enum": [
            "square",
            "rounded",
            "dot",
            "row",
            "column"
          ],
          "description": "Shape of the data modules (default square)"
        },
        "eyeFrame": {
          "type": "string",
          "enum": [
            "square",
            "rounded",
            "circle"
          ],
          "description": "Outer ring of the three corner markers"
        },
        "eyeBall": {
          "type": "string",
          "enum": [
            "square",
            "rounded",
            "circle"
          ],
          "description": "Centre of the corner markers"
        },
        "eyeColor": {
          "$ref": "#/$defs/HexColour",
          "description": "Colour of the corner markers; defaults to dark"
        },
        "image": {
          "type": "object",
          "required": [
            "mode"
          ],
          "additionalProperties": false,
          "properties": {
            "mode": {
              "type": "string",
              "enum": [
                "logo",
                "halftone"
              ],
              "description": "logo: in the middle; halftone: a photo behind the code, drawn as dots"
            },
            "data": {
              "type": "string",
              "description": "data:image/png;base64,... (png, jpeg, webp or gif, up to 2 MB)"
            },
            "imageId": {
              "type": "string",
              "description": "The stored picture; send it back to keep it"
            },
            "size": {
              "type": "number",
              "minimum": 0.1,
              "maximum": 0.3,
              "description": "Logo side as a share of the code (default 0.22)"
            }
          }
        }
      }
    },
    "RedirectRule": {
      "type": "object",
      "required": [
        "when",
        "targetUrl"
      ],
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]{1,32}$",
          "description": "Generated if omitted; keep it when editing (visit stats are keyed by it)"
        },
        "name": {
          "type": "string",
          "maxLength": 100
        },
        "enabled": {
          "type": "boolean",
          "default": true
        },
        "when": {
          "$ref": "#/$defs/RuleCondition"
        },
        "targetUrl": {
          "type": "string",
          "format": "uri",
          "description": "http(s) only"
        }
      }
    },
    "RedirectRules": {
      "type": "array",
      "maxItems": 20,
      "items": {
        "$ref": "#/$defs/RedirectRule"
      },
      "description": "Ordered; the first enabled rule whose `when` matches picks the destination, otherwise the link's targetUrl."
    },
    "RuleCondition": {
      "description": "A test, or all/any/not of conditions (at most 4 deep, 20 tests per rule). See /llms.txt for the field/op table.",
      "oneOf": [
        {
          "type": "object",
          "required": [
            "field",
            "op"
          ],
          "additionalProperties": false,
          "properties": {
            "field": {
              "type": "string",
              "enum": [
                "os",
                "device",
                "browser",
                "language",
                "country",
                "referrer",
                "source",
                "query",
                "time",
                "weekday",
                "hour"
              ]
            },
            "op": {
              "type": "string",
              "enum": [
                "eq",
                "neq",
                "in",
                "not_in",
                "contains",
                "starts_with",
                "ends_with",
                "exists",
                "before",
                "after",
                "gte",
                "lte"
              ]
            },
            "value": {
              "oneOf": [
                {
                  "type": "string"
                },
                {
                  "type": "number"
                },
                {
                  "type": "array",
                  "items": {
                    "oneOf": [
                      {
                        "type": "string"
                      },
                      {
                        "type": "number"
                      }
                    ]
                  }
                }
              ],
              "description": "Array for in/not_in; omitted for exists"
            },
            "key": {
              "type": "string",
              "description": "Query parameter name; only for field \"query\""
            }
          }
        },
        {
          "type": "object",
          "required": [
            "all"
          ],
          "additionalProperties": false,
          "properties": {
            "all": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/RuleCondition"
              }
            }
          }
        },
        {
          "type": "object",
          "required": [
            "any"
          ],
          "additionalProperties": false,
          "properties": {
            "any": {
              "type": "array",
              "items": {
                "$ref": "#/$defs/RuleCondition"
              }
            }
          }
        },
        {
          "type": "object",
          "required": [
            "not"
          ],
          "additionalProperties": false,
          "properties": {
            "not": {
              "$ref": "#/$defs/RuleCondition"
            }
          }
        }
      ]
    },
    "Tags": {
      "type": "array",
      "maxItems": 20,
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 64
      }
    }
  }
}

Work with this as data

Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for schemas

4 MCP tools reach this
  • find_json_schemasBrowse and filter every JSON Schema in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/esyurl-fyi-update-link"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.