
Put what you make with AI online at a link anyone can open, and change it later from any chat.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Keep a temporary ATTIM site so it no longer expires. Pass the slug and claimToken returned by publish_site or clone_site. Without a connected account, also pass the email the user gave you: ATTIM emails them a link that keeps the site and creates their free ATTIM account. Without an email, the user is asked to connect their ATTIM account here instead. With a connected account, the site moves into it right away.
The user's own email address, when no ATTIM account is connected. ATTIM emails it a link that keeps the site.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http attim https://attim.link/mcp
Keep a temporary ATTIM site so it no longer expires. Pass the slug and claimToken returned by publish_site or clone_site. Without a connected account, also pass the email the user gave you: ATTIM emails them a link that keeps the site and creates their free ATTIM account. Without an email, the user is asked to connect their ATTIM account here instead. With a connected account, the site moves into it right away.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| string | The user's own email address, when no ATTIM account is connected. ATTIM emails it a link that keeps the site. | |
| claimToken* | string | |
| workspaceId | integer |
{
"type": "object",
"required": [
"slug",
"claimToken"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1
},
"email": {
"type": "string",
"maxLength": 320,
"minLength": 3,
"description": "The user's own email address, when no ATTIM account is connected. ATTIM emails it a link that keeps the site."
},
"claimToken": {
"type": "string",
"minLength": 8
},
"workspaceId": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
}Clone an anonymous live ATTIM site into a new anonymous site. Returns a new live URL and one-time claimToken.
| Argument | Type | Description |
|---|---|---|
| sourceSlug* | string | |
| ttlSeconds | integer |
{
"type": "object",
"required": [
"sourceSlug"
],
"properties": {
"sourceSlug": {
"type": "string",
"minLength": 1
},
"ttlSeconds": {
"type": "integer",
"minimum": 60
}
},
"additionalProperties": false
}Developer option: create a custom link page from the editable HTML template, themed with public variables. For a standard link in bio or Linktree-style page, use create_profile instead. Pinned links (at most 2) stay on top; the rest are Smart links whose click counts are tracked and, on paid plans, automatically reordered by performance.
| Argument | Type | Description |
|---|---|---|
| bio | string | |
| slug | string | |
| links | array | |
| theme | object | |
| title | string | |
| avatarUrl | string | |
| workspaceId | integer |
{
"type": "object",
"properties": {
"bio": {
"type": "string",
"maxLength": 500
},
"slug": {
"type": "string",
"maxLength": 63,
"minLength": 3
},
"links": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"url"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Existing link id from list_links; keeps click history."
},
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 1
},
"label": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"section": {
"enum": [
"pinned",
"smart"
],
"type": "string"
},
"disabled": {
"type": "boolean"
},
"trackingEnabled": {
"type": "boolean"
}
},
"additionalProperties": false
},
"maxItems": 50
},
"theme": {
"type": "object",
"properties": {
"font": {
"enum": [
"system",
"serif",
"rounded",
"geometric",
"mono"
],
"type": "string"
},
"text": {
"type": "string",
"maxLength": 64
},
"accent": {
"type": "string",
"maxLength": 64
},
"background": {
"type": "string",
"maxLength": 64
},
"buttonText": {
"type": "string",
"maxLength": 64
},
"buttonBackground": {
"type": "string",
"maxLength": 64
}
},
"additionalProperties": false
},
"title": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"avatarUrl": {
"type": "string",
"maxLength": 2048
},
"workspaceId": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
}Set up the user's ATTIM profile: their one public page at <handle>.attim.link, like a link in bio. Every profile has the same structure: name, bio, avatar, and optional social icons; up to 2 pinned links on top; the rest of the links; then a Projects section with the user's own ATTIM sites. Link and project clicks are counted. Ask for their display name, a short bio, an optional https avatar image URL, the links, and the handle they want (custom handles are free on every plan) before calling. The profile is public and can appear in search results unless searchIndexing is false. Customize the look with theme (a preset plus colors, font, and button style); the markup is fixed. Free profiles show a small "Made with ATTIM" badge. Each account has one profile: if get_public_profile returns one, use update_profile instead.
| Argument | Type | Description |
|---|---|---|
| bio | string | |
| name* | string | Display name shown at the top of the page. |
| links | array | |
| theme | object | A preset plus optional overrides. Uploaded background images are set from the dashboard. |
| handle | string | The address: <handle>.attim.link. Lowercase letters, digits, and hyphens. A random one is used if omitted. |
| locale | string | Language of the page text, for screen readers and search engines. |
| socials | array |
Delete an owned ATTIM site, or an anonymous site when claimToken is supplied.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| claimToken | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1
},
"claimToken": {
"type": "string",
"minLength": 8
}
},
"additionalProperties": false
}Get an authenticated MCP resource link to a retained project version ZIP. Read it with resources/read using the same account credentials.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| versionId* | any |
{
"type": "object",
"required": [
"slug",
"versionId"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1
},
"versionId": {
"anyOf": [
{
"type": "string",
"pattern": "^[1-9][0-9]*$"
},
{
"type": "integer",
"minimum": 1
}
]
}
},
"additionalProperties": false
}Change a live site at the same link with targeted edits instead of re-uploading. Call read_site first and pass its versionId as baseVersionId. Put every requested change in this one call: only the last 10 versions are kept. Each replacement swaps an exact oldText, copied from read_site and found once in the file unless replaceAll is true, for newText; writes add or overwrite whole files; deletes remove files. Everything applies together or not at all and goes live as a new version named versionName, which can be restored. Keep {{ vars.* }} and {{ attim.links.* }} placeholders as they are. A temporary site needs its claimToken. Use update_site only to replace the whole site.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The site slug, or its link. |
| writes | array | |
| deletes | array | |
| claimToken | string | |
| versionName | string | A short name for the new version, like "Added Q3 numbers". |
| replacements | array | |
| baseVersionId* | any | The versionId read_site returned. If the site changed since, the edit is refused. |
Promote a pending ATTIM site version to live. Anonymous sites require claimToken.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| versionId* | any | |
| claimToken | string |
{
"type": "object",
"required": [
"slug",
"versionId"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1
},
"versionId": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "integer",
"minimum": 1
}
]
},
"claimToken": {
"type": "string",
"minLength": 8
}
},
"additionalProperties": false
}Fork an anonymous live ATTIM site into the authenticated account as an owned site.
| Argument | Type | Description |
|---|---|---|
| slug | string | |
| sourceSlug* | string | |
| workspaceId | integer |
{
"type": "object",
"required": [
"sourceSlug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 63,
"minLength": 3
},
"sourceSlug": {
"type": "string",
"minLength": 1
},
"workspaceId": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
}How the account's sites are doing: page views and visitors from people, AI agents (by name) and other bots counted apart, and top sites, referrers, and countries. Hobby and Team plans.
| Argument | Type | Description |
|---|---|---|
| days | integer | |
| slug | string | One site: its slug or link. |
| workspaceId | integer |
{
"type": "object",
"properties": {
"days": {
"enum": [
7,
30,
90
],
"type": "integer",
"default": 30
},
"slug": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "One site: its slug or link."
},
"workspaceId": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
}Developer option: get the custom link page template (HTML), its theme variables, and the placeholder contract for designing your own link page markup: render links with {{ attim.links.pinned }} and {{ attim.links.smart }}, style them with .attim-link, then publish with publish_site and add links with set_links. For a standard link in bio, use create_profile instead.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Get link-page views, per-link clicks and click-through rate, and why each Smart link is in its current position. Free plans see 7 or 30 days; paid plans can use their analytics range.
| Argument | Type | Description |
|---|---|---|
| days | integer | |
| slug* | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"days": {
"type": "integer",
"maximum": 365,
"minimum": 1
},
"slug": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}Get the stable profile ID and email of the connected ATTIM account.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}Get the user's ATTIM profile page: its address, name, bio, avatar, social icons, theme, contrast warnings, links, projects (including which ones visitors cannot see and why), whether the ATTIM badge is shown, and its version. Returns profile: null when they have not set one up yet. For the account's id and email, use get_profile.
No arguments.
{
"type": "object",
"properties": {},
"additionalProperties": false
}List the links on an owned ATTIM link page: Pinned links first, then Smart links in the owner order, with each link id, destination, and the position visitors currently see. Team viewers can read.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}List ATTIM sites owned by the authenticated account.
| Argument | Type | Description |
|---|---|---|
| workspaceId | integer |
{
"type": "object",
"properties": {
"workspaceId": {
"type": "integer",
"minimum": 1
}
},
"additionalProperties": false
}List the latest 10 retained finalized versions of an owned ATTIM project, including names and the current version ID. Team viewers can read history.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1
}
},
"additionalProperties": false
}Create a private one-use preview link for a retained finalized project version. Open it within 60 seconds; the session lasts 15 minutes.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| versionId* | any |
{
"type": "object",
"required": [
"slug",
"versionId"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1
},
"versionId": {
"anyOf": [
{
"type": "string",
"pattern": "^[1-9][0-9]*$"
},
{
"type": "integer",
"minimum": 1
}
]
}
},
"additionalProperties": false
}Publish a new ATTIM static artifact from inline files. A connected account creates an owned permanent site; a credential-free session creates a temporary site with a claim token. ttlSeconds applies only to anonymous publishes. To keep a temporary site, ask for the user's email and call claim_site with its slug, claimToken, and email.
| Argument | Type | Description |
|---|---|---|
| slug | string | |
| files* | array | |
| finalize | boolean | |
| ttlSeconds | integer | |
| workspaceId | integer | |
| passwordProtection | object |
{
"type": "object",
"required": [
"files"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 63,
"minLength": 3
},
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"minLength": 1
},
"content": {
"type": "string"
},
"contentType": {
"type": "string",
"minLength": 1
},
"contentBase64": {
"type": "string"
}
},
"additionalProperties": false
},
"minItems": 1
},
"finalize": {
"type": "boolean",
"default": true
},
"ttlSeconds": {
"type": "integer",
"minimum": 60
},
"workspaceId": {
"type": "integer",
"minimum": 1
},
"passwordProtection": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"password": {
"type": "string",
"maxLength": 512,
"minLength": 1
},
"accessDurationSeconds": {
"type": "integer",
"maximum": 31536000,
"minimum": 60
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}Open a site published before, in this chat or another: its live versionId, file list, and the text of its HTML, CSS and JS files, in pages. Pass the slug or the site's link (list_sites lists the account's sites); a temporary site also needs its claimToken. search finds text in big files; path and offset read the next page of one file. Call this before edit_site.
| Argument | Type | Description |
|---|---|---|
| path | string | Read one file, such as index.html. |
| slug* | string | The site slug, or its link such as https://<slug>.attim.link/. |
| offset | integer | Character offset in path to start from, from a previous read_site. |
| search | string | Find this text (case-insensitive) instead of reading; returns each match with its offset and surrounding text. |
| maxChars | integer | |
| claimToken | string |
{
"type": "object",
"required": [
"slug"
],
"properties": {
"path": {
"type": "string",
"minLength": 1,
"description": "Read one file, such as index.html."
},
"slug": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "The site slug, or its link such as https://<slug>.attim.link/."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Character offset in path to start from, from a previous read_site."
},
"search": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Find this text (case-insensitive) instead of reading; returns each match with its offset and surrounding text."
},
"maxChars": {
"type": "integer",
"default": 50000,
"maximum": 100000,
"minimum": 1000
},
"claimToken": {
"type": "string",
"minLength": 8
}
},
"additionalProperties": false
}Rename an owned ATTIM site by changing its slug. Requires a paid (Hobby or Team) account; the previous slug redirects to the new one for a grace period.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| newSlug* | string |
{
"type": "object",
"required": [
"slug",
"newSlug"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1
},
"newSlug": {
"type": "string",
"maxLength": 63,
"minLength": 3
}
},
"additionalProperties": false
}Set or clear the name of a retained finalized project version. Pass null to clear. Requires project write access.
| Argument | Type | Description |
|---|---|---|
| name* | any | |
| slug* | string | |
| versionId* | any |
{
"type": "object",
"required": [
"slug",
"versionId",
"name"
],
"properties": {
"name": {
"anyOf": [
{
"type": "string",
"maxLength": 120,
"minLength": 1
},
{
"type": "null"
}
]
},
"slug": {
"type": "string",
"minLength": 1
},
"versionId": {
"anyOf": [
{
"type": "string",
"pattern": "^[1-9][0-9]*$"
},
{
"type": "integer",
"minimum": 1
}
]
}
},
"additionalProperties": false
}Copy a retained project version into a new live version. Requires write access and the current version ID from list_versions to prevent stale restores.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| versionId* | any | |
| expectedCurrentVersionId* | any |
{
"type": "object",
"required": [
"slug",
"versionId",
"expectedCurrentVersionId"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1
},
"versionId": {
"anyOf": [
{
"type": "string",
"pattern": "^[1-9][0-9]*$"
},
{
"type": "integer",
"minimum": 1
}
]
},
"expectedCurrentVersionId": {
"anyOf": [
{
"type": "string",
"pattern": "^[1-9][0-9]*$"
},
{
"type": "integer",
"minimum": 1
}
]
}
},
"additionalProperties": false
}Replace every link on an owned ATTIM link page. Call list_links first and pass existing ids back to keep their click history; links you omit are deleted. Array order is the owner order within each section; at most 2 links may be pinned and 50 in total. Links that share a group show together under its name, after links without one; null removes the group. Only public http(s) destinations are accepted. trackingEnabled:false links go straight to the destination, are not counted, and keep their position.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| links* | array | |
| expectedVersion | integer |
{
"type": "object",
"required": [
"slug",
"links"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1
},
"links": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"url"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Existing link id from list_links; keeps click history."
},
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 1
},
"group": {
"anyOf": [
{
"type": "string",
"maxLength": 60
},
{
"type": "null"
}
]
},
"label": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"section": {
"enum": [
"pinned",
"smart"
],
"type": "string"
},
"disabled": {
"type": "boolean"
},
"trackingEnabled": {
"type": "boolean"
}
},
"additionalProperties": false
},
"maxItems": 50
},
"expectedVersion": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
}Enable, update, or disable password protection for an owned site. A grandfathered anonymous protected site may be updated or disabled with its claimToken; new anonymous protection cannot be enabled.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| enabled* | boolean | |
| password | string | |
| claimToken | string | |
| accessDurationSeconds | integer |
{
"type": "object",
"required": [
"slug",
"enabled"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1
},
"enabled": {
"type": "boolean"
},
"password": {
"type": "string",
"maxLength": 512,
"minLength": 1
},
"claimToken": {
"type": "string",
"minLength": 8
},
"accessDurationSeconds": {
"type": "integer",
"maximum": 31536000,
"minimum": 60
}
},
"additionalProperties": false
}Set public variables for an owned ATTIM site. Array entries can include a friendly label without changing their technical placement key.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| variables* | any |
{
"type": "object",
"required": [
"slug",
"variables"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1
},
"variables": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"type": "string"
}
},
{
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"value"
],
"properties": {
"name": {
"type": "string",
"maxLength": 64,
"minLength": 1
},
"label": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"value": {
"type": "string",
"maxLength": 10000
}
},
"additionalProperties": false
}
}
]
}
},
"additionalProperties": false
}Update the user's ATTIM profile. Omitted fields stay unchanged. socials and theme replace the stored values; avatarUrl null removes the avatar. handle changes the address (on the Free plan, once a week; the old address redirects for 30 days). links replaces every link, so pass the ids from get_public_profile to keep click history; links you omit are deleted. projects replaces the list of the user's own sites shown on the profile, in order (see list_sites for their slugs). Pass expectedVersion from get_public_profile to avoid overwriting a concurrent edit.
| Argument | Type | Description |
|---|---|---|
| bio | string | |
| name | string | |
| links | array | |
| theme | object | Same fields as create_profile theme; replaces the stored theme. |
| handle | string | |
| locale | string | |
| socials | array | Same items as create_profile socials ({ network, url }); replaces the stored icons. |
| projects | array | The user's own ATTIM sites to show on the profile, in order. |
Upload a new version for an owned ATTIM site, or an anonymous site when claimToken is supplied, from inline file contents. This replaces every file; to change part of a live site, use read_site and edit_site instead.
| Argument | Type | Description |
|---|---|---|
| slug* | string | |
| files* | array | |
| finalize | boolean | |
| claimToken | string |
{
"type": "object",
"required": [
"slug",
"files"
],
"properties": {
"slug": {
"type": "string",
"minLength": 1
},
"files": {
"type": "array",
"items": {
"type": "object",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"minLength": 1
},
"content": {
"type": "string"
},
"contentType": {
"type": "string",
"minLength": 1
},
"contentBase64": {
"type": "string"
}
},
"additionalProperties": false
},
"minItems": 1
},
"finalize": {
"type": "boolean",
"default": true
},
"claimToken": {
"type": "string",
"minLength": 8
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 10, 2026.
Takes a password, API key or token as an argument, so the secret passes through the model's context and chat logs.
Fix: Read credentials from the server's own configuration (environment, OAuth) instead of a tool argument.
| Social icons under the bio. email takes an email address. |
| projects | array | The user's own ATTIM sites to show on the profile, in order. |
| avatarUrl | string | Public https image URL. Owners can upload an image from the dashboard instead. |
| searchIndexing | boolean | Let search engines list the profile. Defaults to true. |
{
"type": "object",
"required": [
"name"
],
"properties": {
"bio": {
"type": "string",
"maxLength": 500
},
"name": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Display name shown at the top of the page."
},
"links": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"url"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Existing link id from list_links; keeps click history."
},
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 1
},
"group": {
"anyOf": [
{
"type": "string",
"maxLength": 60
},
{
"type": "null"
}
]
},
"label": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"section": {
"enum": [
"pinned",
"smart"
],
"type": "string"
},
"disabled": {
"type": "boolean"
},
"trackingEnabled": {
"type": "boolean"
}
},
"additionalProperties": false
},
"maxItems": 50
},
"theme": {
"type": "object",
"properties": {
"font": {
"enum": [
"system",
"serif",
"rounded",
"geometric",
"mono"
],
"type": "string"
},
"button": {
"type": "object",
"properties": {
"fill": {
"enum": [
"solid",
"outline",
"soft"
],
"type": "string"
},
"shape": {
"enum": [
"square",
"rounded",
"pill"
],
"type": "string"
},
"shadow": {
"enum": [
"none",
"soft",
"hard"
],
"type": "string"
}
},
"additionalProperties": false
},
"colors": {
"type": "object",
"properties": {
"text": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"accent": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"background": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"buttonText": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"buttonBackground": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
}
},
"additionalProperties": false
},
"preset": {
"enum": [
"midnight",
"paper",
"bosphorus",
"tulip",
"olive",
"sunset"
],
"type": "string"
},
"background": {
"type": "object",
"properties": {
"type": {
"enum": [
"solid",
"gradient"
],
"type": "string"
},
"gradient": {
"type": "object",
"properties": {
"to": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"from": {
"type": "string",
"pattern": "^#[0-9a-fA-F]{6}$"
},
"angle": {
"enum": [
0,
15,
30,
45,
60,
75,
90,
105,
120,
135,
150,
165,
180,
195,
210,
225,
240,
255,
270,
285,
300,
315,
330,
345
],
"type": "integer"
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
},
"description": "A preset plus optional overrides. Uploaded background images are set from the dashboard.",
"additionalProperties": false
},
"handle": {
"type": "string",
"maxLength": 63,
"minLength": 3,
"description": "The address: <handle>.attim.link. Lowercase letters, digits, and hyphens. A random one is used if omitted."
},
"locale": {
"enum": [
"en",
"tr"
],
"type": "string",
"description": "Language of the page text, for screen readers and search engines."
},
"socials": {
"type": "array",
"items": {
"type": "object",
"required": [
"network",
"url"
],
"properties": {
"url": {
"type": "string",
"maxLength": 2048
},
"network": {
"enum": [
"instagram",
"tiktok",
"youtube",
"x",
"threads",
"bluesky",
"facebook",
"linkedin",
"github",
"twitch",
"spotify",
"discord",
"telegram",
"whatsapp",
"pinterest",
"snapchat",
"medium",
"patreon",
"website",
"email"
],
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 8,
"description": "Social icons under the bio. email takes an email address."
},
"projects": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 63,
"minLength": 1
},
"label": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
],
"description": "Shown instead of the site title."
}
},
"additionalProperties": false
},
"maxItems": 24,
"description": "The user's own ATTIM sites to show on the profile, in order."
},
"avatarUrl": {
"type": "string",
"maxLength": 2048,
"description": "Public https image URL. Owners can upload an image from the dashboard instead."
},
"searchIndexing": {
"type": "boolean",
"description": "Let search engines list the profile. Defaults to true."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"slug",
"baseVersionId"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "The site slug, or its link."
},
"writes": {
"type": "array",
"items": {
"type": "object",
"required": [
"path"
],
"properties": {
"path": {
"type": "string",
"minLength": 1
},
"content": {
"type": "string"
},
"contentType": {
"type": "string",
"minLength": 1
},
"contentBase64": {
"type": "string"
}
},
"additionalProperties": false
},
"maxItems": 20
},
"deletes": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"maxItems": 50
},
"claimToken": {
"type": "string",
"minLength": 8
},
"versionName": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "A short name for the new version, like \"Added Q3 numbers\"."
},
"replacements": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"oldText",
"newText"
],
"properties": {
"path": {
"type": "string",
"minLength": 1
},
"newText": {
"type": "string",
"description": "The text to put in its place; empty removes it."
},
"oldText": {
"type": "string",
"minLength": 1,
"description": "The exact current text, copied from read_site."
},
"replaceAll": {
"type": "boolean",
"default": false,
"description": "Change every occurrence instead of requiring exactly one."
}
},
"additionalProperties": false
},
"maxItems": 50
},
"baseVersionId": {
"anyOf": [
{
"type": "string",
"pattern": "^[1-9][0-9]*$"
},
{
"type": "integer",
"minimum": 1
}
],
"description": "The versionId read_site returned. If the site changed since, the edit is refused."
}
},
"additionalProperties": false
}| avatarUrl |
| any |
| expectedVersion | integer |
{
"type": "object",
"properties": {
"bio": {
"type": "string",
"maxLength": 500
},
"name": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"links": {
"type": "array",
"items": {
"type": "object",
"required": [
"label",
"url"
],
"properties": {
"id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "Existing link id from list_links; keeps click history."
},
"url": {
"type": "string",
"maxLength": 2048,
"minLength": 1
},
"group": {
"anyOf": [
{
"type": "string",
"maxLength": 60
},
{
"type": "null"
}
]
},
"label": {
"type": "string",
"maxLength": 120,
"minLength": 1
},
"section": {
"enum": [
"pinned",
"smart"
],
"type": "string"
},
"disabled": {
"type": "boolean"
},
"trackingEnabled": {
"type": "boolean"
}
},
"additionalProperties": false
},
"maxItems": 50
},
"theme": {
"type": "object",
"description": "Same fields as create_profile theme; replaces the stored theme."
},
"handle": {
"type": "string",
"maxLength": 63,
"minLength": 3
},
"locale": {
"enum": [
"en",
"tr"
],
"type": "string"
},
"socials": {
"type": "array",
"items": {
"type": "object"
},
"maxItems": 8,
"description": "Same items as create_profile socials ({ network, url }); replaces the stored icons."
},
"projects": {
"type": "array",
"items": {
"type": "object",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 63,
"minLength": 1
},
"label": {
"anyOf": [
{
"type": "string",
"maxLength": 120
},
{
"type": "null"
}
],
"description": "Shown instead of the site title."
}
},
"additionalProperties": false
},
"maxItems": 24,
"description": "The user's own ATTIM sites to show on the profile, in order."
},
"avatarUrl": {
"anyOf": [
{
"type": "string",
"maxLength": 2048
},
{
"type": "null"
}
]
},
"expectedVersion": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
}