esyURL · Schema
LinkPageInput
A link page (link in bio). The whole page is replaced on update. See /llms.txt, "Link pages".
CompanyShort LinksQR CodesAI AgentsMCP
Properties
| Name | Type | Description |
|---|---|---|
| title | string | |
| bio | string | |
| avatar | object | |
| items | array | |
| socials | array | |
| theme | object | |
| language | string | |
| noindex | boolean | |
| footer | boolean | false removes the "Made with esyURL" footer: an x402 payment, once per page, for self-signed-up tenants |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://artifacts.apis.io/esyurl-fyi/json-schema/esyurl-fyi-link-page-input-schema.json",
"title": "LinkPageInput",
"description": "A link page (link in bio). The whole page is replaced on update. See /llms.txt, \"Link pages\".",
"x-generated": "2026-11-07",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/esyurl-fyi-openapi.json#/components/schemas/LinkPageInput",
"type": "object",
"required": [
"title"
],
"additionalProperties": false,
"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"
}
},
"$defs": {
"HexColour": {
"type": "string",
"pattern": "^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$"
},
"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"
]
}
}
},
"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"
}
}
}
]
}
}
}
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.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/esyurl-fyi-link-page-input"
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.