Server definition
- Hash
- sha256:47f07beb6de2ad481f338b6324ec4ba82bf66c1e74c3f52c69c257191ffc7f93
- What it is
- What a remote MCP server returned when asked what it offers: 15 tools
The blob, as servednamed by its sha256
{
"instructions": "ShipStatic deploys static websites instantly. Free, no account required.\n\nTo deploy: call deployments_upload with the files of your build output. The site is live immediately. To make the site private, pass `password`; visitors must unlock before viewing, including on any custom domains pointing at it. Tell the user any password you set, since one they never see locks them out.\n\nWithout a connected account, deployments are public and expire in 3 days. The response includes a claim URL — always show the deployment URL and the claim URL to the user so they can keep the site permanently.\n\nConnected to an account, deployments go to that account and never expire — pass `ttl` (seconds) to deployments_upload for one that expires on its own. Listing, managing, and domain operations need a connected account — call one and the client is told how to connect.\n\nConcepts:\n- Deployment: an immutable set of files with an instant URL (e.g. happy-cat-abc1234.shipstatic.com). No setup needed.\n- Domain: a custom domain (e.g. www.example.com) pointing to a deployment. Optional. Subdomains only — not apex domains.\n\nTo add a custom domain: domains_validate → domains_set → domains_records (show DNS records to user) → user configures DNS → domains_verify → domains_set with the deployment to serve. A domain serves nothing until a deployment is linked, so ask the user which one and link it. Read `status` to know where a domain stands: `unverified` means its DNS records are not configured yet, `unlinked` means DNS is right and nothing is published there, `live` means it serves, `paused` means the plan has no room for it.",
"tools": [
{
"description": "Permanently deletes a deployment and its files.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"deployment": {
"description": "Deployment hostname to delete (e.g. \"happy-cat-abc1234.shipstatic.com\")",
"type": "string"
}
},
"required": [
"deployment"
],
"type": "object"
},
"name": "deployments_delete",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"deployment": {
"description": "The deployment hostname that was marked for removal.",
"type": "string"
},
"status": {
"description": "The state the deployment is in while background cleanup runs. One of: pending, success, failed, deleting.",
"type": "string"
}
},
"required": [
"deployment",
"status"
],
"type": "object"
}
},
{
"description": "Get deployment details including URL, status, file count, size, labels, and password protection state.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"deployment": {
"description": "Deployment hostname (e.g. \"happy-cat-abc1234.shipstatic.com\"). Returned by deployments_upload or deployments_list.",
"type": "string"
}
},
"required": [
"deployment"
],
"type": "object"
},
"name": "deployments_get",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"config": {
"description": "True if the deployment includes a ship.json routing config.",
"type": "boolean"
},
"created": {
"description": "Unix timestamp (seconds) when the deployment was created.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"deployment": {
"description": "Deployment hostname, e.g. \"happy-cat-abc1234.shipstatic.com\".",
"type": "string"
},
"expires": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
],
"description": "Unix timestamp (seconds) when the deployment expires; null when permanent. Anonymous deployments expire 3 days after creation unless claimed; an authenticated deployment carries one only when it requested a ttl."
},
"files": {
"description": "Number of files in the deployment.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"labels": {
"description": "Labels attached to the deployment; empty when none.",
"items": {
"type": "string"
},
"type": "array"
},
"password": {
"description": "True if the deployment is password-protected.",
"type": "boolean"
},
"screenshot": {
"description": "Full URL to the deployment screenshot. Rendered on the first request for it, so the URL is returned immediately and the first request takes a few seconds; every request after that is served immediately.",
"format": "uri",
"type": "string"
},
"size": {
"description": "Total deployment size in bytes.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"status": {
"description": "Deployment lifecycle state; \"success\" means the site is live. One of: pending, success, failed, deleting.",
"type": "string"
},
"url": {
"description": "Full URL to the live deployment.",
"format": "uri",
"type": "string"
},
"via": {
"description": "How the deployment was created, as shown in deployment history (today one of: web, sdk, cli, mcp, git, n8n, gpt, vsc, cld, crs, gmn, api). Null on deployments older than the tag.",
"type": [
"string",
"null"
]
}
},
"required": [
"deployment",
"url",
"files",
"size",
"status",
"config",
"password",
"labels",
"via",
"created",
"expires",
"screenshot"
],
"type": "object"
}
},
{
"description": "List all deployments with their URLs, status, labels, and password protection state. The response's `cursor` is null on the last page; pass it back as `cursor` to fetch the next.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"cursor": {
"description": "Opaque position from the previous response's `cursor` field; omit for the first page.",
"type": "string"
},
"limit": {
"description": "Maximum number of items to return in one page. Omit for the server default.",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"name": "deployments_list",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque cursor for the next page; null on the last page. The whole has-more signal.",
"type": [
"string",
"null"
]
},
"deployments": {
"description": "The deployments on this page.",
"items": {
"additionalProperties": false,
"properties": {
"config": {
"description": "True if the deployment includes a ship.json routing config.",
"type": "boolean"
},
"created": {
"description": "Unix timestamp (seconds) when the deployment was created.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"deployment": {
"description": "Deployment hostname, e.g. \"happy-cat-abc1234.shipstatic.com\".",
"type": "string"
},
"expires": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
],
"description": "Unix timestamp (seconds) when the deployment expires; null when permanent. Anonymous deployments expire 3 days after creation unless claimed; an authenticated deployment carries one only when it requested a ttl."
},
"files": {
"description": "Number of files in the deployment.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"labels": {
"description": "Labels attached to the deployment; empty when none.",
"items": {
"type": "string"
},
"type": "array"
},
"password": {
"description": "True if the deployment is password-protected.",
"type": "boolean"
},
"screenshot": {
"description": "Full URL to the deployment screenshot. Rendered on the first request for it, so the URL is returned immediately and the first request takes a few seconds; every request after that is served immediately.",
"format": "uri",
"type": "string"
},
"size": {
"description": "Total deployment size in bytes.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"status": {
"description": "Deployment lifecycle state; \"success\" means the site is live. One of: pending, success, failed, deleting.",
"type": "string"
},
"url": {
"description": "Full URL to the live deployment.",
"format": "uri",
"type": "string"
},
"via": {
"description": "How the deployment was created, as shown in deployment history (today one of: web, sdk, cli, mcp, git, n8n, gpt, vsc, cld, crs, gmn, api). Null on deployments older than the tag.",
"type": [
"string",
"null"
]
}
},
"required": [
"deployment",
"url",
"files",
"size",
"status",
"config",
"password",
"labels",
"via",
"created",
"expires",
"screenshot"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"cursor",
"deployments"
],
"type": "object"
}
},
{
"description": "Update deployment labels. Replaces all existing labels.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"deployment": {
"description": "Deployment hostname (e.g. \"happy-cat-abc1234.shipstatic.com\"). Use deployments_list to find deployments.",
"type": "string"
},
"labels": {
"description": "Labels to set. Replaces all existing labels. Pass empty array to clear.",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"deployment",
"labels"
],
"type": "object"
},
"name": "deployments_set",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"config": {
"description": "True if the deployment includes a ship.json routing config.",
"type": "boolean"
},
"created": {
"description": "Unix timestamp (seconds) when the deployment was created.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"deployment": {
"description": "Deployment hostname, e.g. \"happy-cat-abc1234.shipstatic.com\".",
"type": "string"
},
"expires": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
],
"description": "Unix timestamp (seconds) when the deployment expires; null when permanent. Anonymous deployments expire 3 days after creation unless claimed; an authenticated deployment carries one only when it requested a ttl."
},
"files": {
"description": "Number of files in the deployment.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"labels": {
"description": "Labels attached to the deployment; empty when none.",
"items": {
"type": "string"
},
"type": "array"
},
"password": {
"description": "True if the deployment is password-protected.",
"type": "boolean"
},
"screenshot": {
"description": "Full URL to the deployment screenshot. Rendered on the first request for it, so the URL is returned immediately and the first request takes a few seconds; every request after that is served immediately.",
"format": "uri",
"type": "string"
},
"size": {
"description": "Total deployment size in bytes.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"status": {
"description": "Deployment lifecycle state; \"success\" means the site is live. One of: pending, success, failed, deleting.",
"type": "string"
},
"url": {
"description": "Full URL to the live deployment.",
"format": "uri",
"type": "string"
},
"via": {
"description": "How the deployment was created, as shown in deployment history (today one of: web, sdk, cli, mcp, git, n8n, gpt, vsc, cld, crs, gmn, api). Null on deployments older than the tag.",
"type": [
"string",
"null"
]
}
},
"required": [
"deployment",
"url",
"files",
"size",
"status",
"config",
"password",
"labels",
"via",
"created",
"expires",
"screenshot"
],
"type": "object"
}
},
{
"description": "Deploy a static site to a live URL: free, no account or API key required.\n\n**File content is plain text by default.** Pass HTML/CSS/JS/JSON/SVG/etc. directly in each file's `content` as a regular string. Only set `encoding: \"base64\"` per-file for binary content (images, fonts) — do not base64-encode text.\n\nReturns the live URL. Without a connected account, the response also includes a one-time claim URL, and the site expires in 3 days unless claimed. Pass `password` to make the site private.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"files": {
"description": "Files that make up the site. The site root is implied by these paths.",
"items": {
"properties": {
"content": {
"description": "File content as a plain text string. For HTML, CSS, JS, JSON, SVG, plain text — pass directly with no encoding step. For binary files (images, fonts) ONLY, set this entry's `encoding: \"base64\"` and pass base64-encoded bytes.",
"type": "string"
},
"encoding": {
"description": "Defaults to `\"utf-8\"` (raw text). Set to `\"base64\"` ONLY for binary files. Never base64-encode text content — pass it as a plain string.",
"enum": [
"utf-8",
"base64"
],
"type": "string"
},
"path": {
"description": "Relative path within the site (e.g. \"index.html\", \"assets/app.css\"). No leading slash; no parent-folder wrapping.",
"type": "string"
}
},
"required": [
"path",
"content"
],
"type": "object"
},
"type": "array"
},
"idempotencyKey": {
"description": "Makes this deploy replayable instead of repeatable. A deploy is not naturally idempotent: if a call times out you cannot tell \"it never landed\" from \"it landed and the response was lost\", and retrying creates a second deployment. Send the same key on the retry and the original deployment is replayed instead (within 24 hours). Key the ATTEMPT — a run id, a commit sha, a uuid minted before the first try — never one minted fresh on each retry, which would defeat the point. Only for a connected account: without one the key is ignored and a retry deploys again.",
"type": "string"
},
"labels": {
"description": "Labels for organizing deployments (e.g. [\"production\", \"v1.2\"]). Lowercase, 3-25 chars, allows . _ - separators. Up to 10.",
"items": {
"type": "string"
},
"type": "array"
},
"password": {
"description": "Optional password to gate the deployment behind an unlock prompt (6–128 characters; whitespace significant). Visitors must enter this password before viewing the site, including on any custom domains pointing at it.",
"type": "string"
},
"ttl": {
"description": "Seconds until this deployment expires and the platform reclaims it; omit for one that never does. Only for authenticated deploys — an anonymous deployment already expires on the platform's schedule, and a requested ttl on one is refused. A deployment carrying a ttl cannot be linked to a custom domain: deploy without one if the site needs a domain.",
"type": "number"
}
},
"required": [
"files"
],
"type": "object"
},
"name": "deployments_upload",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"claim": {
"description": "One-time URL that claims this anonymous deployment to a free account, making it permanent. Only present on anonymous deploys; absent when the deploy was made with a connected account.",
"format": "uri",
"type": "string"
},
"config": {
"description": "True if the deployment includes a ship.json routing config.",
"type": "boolean"
},
"created": {
"description": "Unix timestamp (seconds) when the deployment was created.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"deployment": {
"description": "Deployment hostname, e.g. \"happy-cat-abc1234.shipstatic.com\".",
"type": "string"
},
"expires": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
],
"description": "Unix timestamp (seconds) when the deployment expires; null when permanent. Anonymous deployments expire 3 days after creation unless claimed; an authenticated deployment carries one only when it requested a ttl."
},
"files": {
"description": "Number of files in the deployment.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"labels": {
"description": "Labels attached to the deployment; empty when none.",
"items": {
"type": "string"
},
"type": "array"
},
"password": {
"description": "True if the deployment is password-protected.",
"type": "boolean"
},
"screenshot": {
"description": "Full URL to the deployment screenshot. Rendered on the first request for it, so the URL is returned immediately and the first request takes a few seconds; every request after that is served immediately.",
"format": "uri",
"type": "string"
},
"size": {
"description": "Total deployment size in bytes.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"status": {
"description": "Deployment lifecycle state; \"success\" means the site is live. One of: pending, success, failed, deleting.",
"type": "string"
},
"url": {
"description": "Full URL to the live deployment.",
"format": "uri",
"type": "string"
},
"via": {
"description": "How the deployment was created, as shown in deployment history (today one of: web, sdk, cli, mcp, git, n8n, gpt, vsc, cld, crs, gmn, api). Null on deployments older than the tag.",
"type": [
"string",
"null"
]
}
},
"required": [
"deployment",
"url",
"files",
"size",
"status",
"config",
"password",
"labels",
"via",
"created",
"expires",
"screenshot"
],
"type": "object"
}
},
{
"description": "Permanently deletes a domain.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"description": "Domain name to delete (e.g. \"www.example.com\")",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "domains_delete",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"domain": {
"description": "The domain name that was removed, normalized.",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
}
},
{
"description": "Returns the DNS provider recorded for the domain, if known (e.g. Cloudflare, Namecheap): where its DNS records are configured. Custom domains only, and only while the domain is unverified; once its DNS is right there is nothing left to locate.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"description": "Domain name (e.g. \"www.example.com\"). Must be a domain previously created with domains_set.",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "domains_dns",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"dns": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"provider": {
"additionalProperties": false,
"description": "The provider serving this domain's DNS; absent when unidentified.",
"properties": {
"name": {
"description": "Provider name, e.g. \"Cloudflare\"; null if unknown.",
"type": [
"string",
"null"
]
},
"url": {
"anyOf": [
{
"format": "uri",
"type": "string"
},
{
"type": "null"
}
],
"description": "The provider's DNS dashboard, where the records get added; null or absent when unknown."
}
},
"required": [
"name"
],
"type": "object"
}
},
"type": "object"
},
{
"type": "null"
}
],
"description": "What the platform recorded about the domain's DNS provider when the domain was created; null if nothing was recorded."
},
"domain": {
"description": "The domain name.",
"type": "string"
}
},
"required": [
"domain",
"dns"
],
"type": "object"
}
},
{
"description": "Get domain details including URL, linked deployment, labels, and `status`: the one word saying what the domain needs from its owner (`unverified`, `unlinked`, `live`, `paused`).",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"description": "Domain name (e.g. \"www.example.com\"). Use domains_list to find names.",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "domains_get",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"created": {
"description": "Unix timestamp (seconds) when the domain was created.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"deployment": {
"description": "The deployment hostname this domain points to; null when reserved but not yet linked.",
"type": [
"string",
"null"
]
},
"domain": {
"description": "The domain name, e.g. \"www.example.com\".",
"type": "string"
},
"labels": {
"description": "Labels attached to the domain; empty when none.",
"items": {
"type": "string"
},
"type": "array"
},
"linked": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
],
"description": "Unix timestamp (seconds) when a deployment was last linked; null if never linked."
},
"links": {
"description": "How many times a deployment has been linked to this domain.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"paused": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
],
"description": "Unix timestamp (seconds) when plan enforcement paused serving; null while the plan has room for it."
},
"status": {
"description": "What this domain needs from its owner, derived: \"live\" serves the linked deployment and needs nothing; \"unlinked\" is verified with nothing published there, so link a deployment; \"unverified\" needs its DNS records configured; \"paused\" means the plan no longer has room for it. Read this word rather than recomputing it. One of: live, unlinked, unverified, paused.",
"type": "string"
},
"url": {
"description": "Full URL to the domain.",
"format": "uri",
"type": "string"
},
"verification": {
"description": "How far DNS verification has got: \"pending\" is the site's CNAME not pointing here, \"partial\" is a www domain's CNAME pointing here without its apex A record (the redirect), \"verified\" is every required record. The diagnostic under \"unverified\"; platform domains are born verified. One of: pending, partial, verified.",
"type": "string"
},
"verifications": {
"description": "How many DNS verification attempts this domain has had.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"verified": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
],
"description": "When DNS last became verified; null if it never has, and never cleared, so a domain whose records moved away keeps it. Read `verification` for whether DNS is right now."
}
},
"required": [
"domain",
"url",
"status",
"deployment",
"linked",
"links",
"verification",
"verified",
"verifications",
"paused",
"labels",
"created"
],
"type": "object"
}
},
{
"description": "List all domains with their URLs, linked deployment, and `status`. The response's `cursor` is null on the last page; pass it back as `cursor` to fetch the next.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"cursor": {
"description": "Opaque position from the previous response's `cursor` field; omit for the first page.",
"type": "string"
},
"limit": {
"description": "Maximum number of items to return in one page. Omit for the server default.",
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
}
},
"type": "object"
},
"name": "domains_list",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"cursor": {
"description": "Opaque cursor for the next page; null on the last page. The whole has-more signal.",
"type": [
"string",
"null"
]
},
"domains": {
"description": "The domains on this page.",
"items": {
"additionalProperties": false,
"properties": {
"created": {
"description": "Unix timestamp (seconds) when the domain was created.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"deployment": {
"description": "The deployment hostname this domain points to; null when reserved but not yet linked.",
"type": [
"string",
"null"
]
},
"domain": {
"description": "The domain name, e.g. \"www.example.com\".",
"type": "string"
},
"labels": {
"description": "Labels attached to the domain; empty when none.",
"items": {
"type": "string"
},
"type": "array"
},
"linked": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
],
"description": "Unix timestamp (seconds) when a deployment was last linked; null if never linked."
},
"links": {
"description": "How many times a deployment has been linked to this domain.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"paused": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
],
"description": "Unix timestamp (seconds) when plan enforcement paused serving; null while the plan has room for it."
},
"status": {
"description": "What this domain needs from its owner, derived: \"live\" serves the linked deployment and needs nothing; \"unlinked\" is verified with nothing published there, so link a deployment; \"unverified\" needs its DNS records configured; \"paused\" means the plan no longer has room for it. Read this word rather than recomputing it. One of: live, unlinked, unverified, paused.",
"type": "string"
},
"url": {
"description": "Full URL to the domain.",
"format": "uri",
"type": "string"
},
"verification": {
"description": "How far DNS verification has got: \"pending\" is the site's CNAME not pointing here, \"partial\" is a www domain's CNAME pointing here without its apex A record (the redirect), \"verified\" is every required record. The diagnostic under \"unverified\"; platform domains are born verified. One of: pending, partial, verified.",
"type": "string"
},
"verifications": {
"description": "How many DNS verification attempts this domain has had.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"verified": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
],
"description": "When DNS last became verified; null if it never has, and never cleared, so a domain whose records moved away keeps it. Read `verification` for whether DNS is right now."
}
},
"required": [
"domain",
"url",
"status",
"deployment",
"linked",
"links",
"verification",
"verified",
"verifications",
"paused",
"labels",
"created"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"cursor",
"domains"
],
"type": "object"
}
},
{
"description": "Returns the DNS records to configure at the domain's DNS provider. Call after domains_set. Custom domains only: a platform subdomain has no records to configure.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"description": "Domain name. Must be a domain previously created with domains_set.",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "domains_records",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"apex": {
"description": "The apex (registered) domain where DNS records are managed.",
"type": "string"
},
"domain": {
"description": "The domain the records are for.",
"type": "string"
},
"records": {
"description": "The records to configure at the DNS provider, in the order to add them.",
"items": {
"additionalProperties": false,
"properties": {
"name": {
"description": "The DNS name to configure.",
"type": "string"
},
"type": {
"description": "Record type: A for the apex redirect, CNAME for the hosted subdomain.",
"enum": [
"A",
"CNAME"
],
"type": "string"
},
"value": {
"description": "The value to set: an IP for A, a hostname for CNAME.",
"type": "string"
}
},
"required": [
"type",
"name",
"value"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"domain",
"apex",
"records"
],
"type": "object"
}
},
{
"description": "Create or update a custom domain. Can reserve a name (omit deployment), link it to a deployment, switch deployments, or update labels. domains_records then returns the DNS records to configure.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"deployment": {
"description": "Deployment to serve on this domain (e.g. \"happy-cat-abc1234.shipstatic.com\"). Omit to reserve the domain without linking.",
"type": "string"
},
"domain": {
"description": "Domain name (e.g. \"www.example.com\" or \"blog.example.com\")",
"type": "string"
},
"labels": {
"description": "Labels for organizing domains (e.g. [\"production\"]).",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "domains_set",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"created": {
"description": "Unix timestamp (seconds) when the domain was created.",
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
"deployment": {
"description": "The deployment hostname this domain points to; null when reserved but not yet linked.",
"type": [
"string",
"null"
]
},
"domain": {
"description": "The domain name, e.g. \"www.example.com\".",
"type": "string"
},
"isCreate": {
"description": "True when this call created the domain; false when it updated an existing one.",
"type": "boolean"
},
"labels": {
"description": "Labels attached to the domain; empty when none.",
"items": {
"type": "string"
},
"type": "array"
},
"linked": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
],
"description": "Unix timestamp (seconds) when a deployment was last linked; null if never linked."
},
"links": {
"description": "How many times a deployment has been linked to this domain.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"paused": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
],
"description": "Unix timestamp (seconds) when plan enforcement paused serving; null while the plan has room for it."
},
"status": {
"description": "What this domain needs from its owner, derived: \"live\" serves the linked deployment and needs nothing; \"unlinked\" is verified with nothing published there, so link a deployment; \"unverified\" needs its DNS records configured; \"paused\" means the plan no longer has room for it. Read this word rather than recomputing it. One of: live, unlinked, unverified, paused.",
"type": "string"
},
"url": {
"description": "Full URL to the domain.",
"format": "uri",
"type": "string"
},
"verification": {
"description": "How far DNS verification has got: \"pending\" is the site's CNAME not pointing here, \"partial\" is a www domain's CNAME pointing here without its apex A record (the redirect), \"verified\" is every required record. The diagnostic under \"unverified\"; platform domains are born verified. One of: pending, partial, verified.",
"type": "string"
},
"verifications": {
"description": "How many DNS verification attempts this domain has had.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"verified": {
"anyOf": [
{
"maximum": 9007199254740991,
"minimum": -9007199254740991,
"type": "integer"
},
{
"type": "null"
}
],
"description": "When DNS last became verified; null if it never has, and never cleared, so a domain whose records moved away keeps it. Read `verification` for whether DNS is right now."
}
},
"required": [
"domain",
"url",
"status",
"deployment",
"linked",
"links",
"verification",
"verified",
"verifications",
"paused",
"labels",
"created",
"isCreate"
],
"type": "object"
}
},
{
"description": "Returns a shareable DNS setup URL that needs no API key, for whoever manages the domain's DNS. Custom domains only, and only while the domain is unverified; a verified domain has no setup left to share.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"description": "Domain name to generate a share link for. Must be a domain previously created with domains_set.",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "domains_share",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"domain": {
"description": "The domain the setup link is for.",
"type": "string"
},
"url": {
"description": "The shareable DNS setup URL; whoever opens it sees the records to configure, with no API key.",
"format": "uri",
"type": "string"
}
},
"required": [
"domain",
"url"
],
"type": "object"
}
},
{
"description": "Check if a domain name is valid and available before creating it. Returns the normalized form and availability.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"description": "Domain name to check (e.g. \"www.example.com\"). Call before domains_set to check availability.",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "domains_validate",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"available": {
"description": "Whether nobody has registered the name yet; null when invalid. Creating it would be new; re-pointing your own domain is a write, not a create.",
"type": [
"boolean",
"null"
]
},
"normalized": {
"description": "The normalized domain name; null when invalid.",
"type": [
"string",
"null"
]
},
"reason": {
"description": "Why the name is unusable, for display; null when it is usable.",
"type": [
"string",
"null"
]
},
"valid": {
"description": "Whether the domain's shape is usable.",
"type": "boolean"
}
},
"required": [
"valid",
"normalized",
"available",
"reason"
],
"type": "object"
}
},
{
"description": "Trigger DNS verification for a custom domain. Call after the user has configured DNS records from domains_records. Custom domains only, and refused once the domain is verified: read domains_get instead. Verification is asynchronous: read the domain again with domains_get to learn the verdict, since its `status` has not moved yet when this returns. A verified domain serves nothing until a deployment is linked with domains_set.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"domain": {
"description": "Domain name to verify DNS for. Must be a domain previously created with domains_set.",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
},
"name": "domains_verify",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"domain": {
"description": "The domain whose DNS verification was queued, normalized. The check runs asynchronously; the domain's `verification` and `status` update once DNS propagates, so read the domain again rather than trusting this acknowledgement for a verdict.",
"type": "string"
}
},
"required": [
"domain"
],
"type": "object"
}
},
{
"description": "Returns your email and name, and the account's plan, usage and caps.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "whoami",
"outputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"caps": {
"additionalProperties": false,
"description": "What the account is allowed to hold: the same keys as usage, so the pair divides.",
"properties": {
"customDomains": {
"description": "Hostnames the customer owns, paused ones included.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"deployments": {
"description": "Deployments, every row whatever its status.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"members": {
"description": "Members of the account, the owner included; a pending invitation is not one.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"platformDomains": {
"description": "Names chosen under the platform's own suffix, e.g. \"my-app.shipstatic.com\".",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"deployments",
"platformDomains",
"customDomains",
"members"
],
"type": "object"
},
"email": {
"description": "The account email address.",
"type": "string"
},
"name": {
"description": "Display name; null if not set.",
"type": [
"string",
"null"
]
},
"plan": {
"description": "The plan the account is on. One of: free, pro, team, scale, sponsored.",
"type": "string"
},
"usage": {
"additionalProperties": false,
"description": "What the account currently holds.",
"properties": {
"customDomains": {
"description": "Hostnames the customer owns, paused ones included.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"deployments": {
"description": "Deployments, every row whatever its status.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"members": {
"description": "Members of the account, the owner included; a pending invitation is not one.",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
},
"platformDomains": {
"description": "Names chosen under the platform's own suffix, e.g. \"my-app.shipstatic.com\".",
"maximum": 9007199254740991,
"minimum": 0,
"type": "integer"
}
},
"required": [
"deployments",
"platformDomains",
"customDomains",
"members"
],
"type": "object"
}
},
"required": [
"email",
"name",
"plan",
"usage",
"caps"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:47f07beb6de2ad481f338b6324ec4ba82bf66c1e74c3f52c69c257191ffc7f93 | sha256sum