ShipStatic
Deploy static websites from AI agents. Free at mcp.shipstatic.com — no install, no signup.
Sollte ich dies verwenden
Qualität und Sicherheit
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"mcp": {
"command": "npx",
"args": [
"@shipstatic/mcp"
]
}
}
}Ausführbare Pakete
2.3.1stdioRemote-Endpunkte
https://mcp.shipstatic.comstreamable-httpWas es kann
Tool-Inventar
Tools (15)
🟡deployments_upload(files, labels, password, idempotencyKey, ttl)
Deploy a static site to a live URL: free, no account or API key required. **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. Returns 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.
Eingabe-Schema
{
"type": "object",
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": {
"type": "string",
"description": "Relative path within the site (e.g. \"index.html\", \"assets/app.css\"). No leading slash; no parent-folder wrapping."
},
"content": {
"type": "string",
"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."
},
"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.",
"type": "string",
"enum": [
"utf-8",
"base64"
]
}
},
"required": [
"path",
"content"
]
},
"description": "Files that make up the site. The site root is implied by these paths."
},
"labels": {
"description": "Labels for organizing deployments (e.g. [\"production\", \"v1.2\"]). Lowercase, 3-25 chars, allows . _ - separators. Up to 10.",
"type": "array",
"items": {
"type": "string"
}
},
"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"
},
"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.",
"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"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"deployment": {
"type": "string",
"description": "Deployment hostname, e.g. \"happy-cat-abc1234.shipstatic.com\"."
},
"url": {
"type": "string",
"format": "uri",
"description": "Full URL to the live deployment."
},
"files": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Number of files in the deployment."
},
"size": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Total deployment size in bytes."
},
"status": {
"type": "string",
"description": "Deployment lifecycle state; \"success\" means the site is live. One of: pending, success, failed, deleting."
},
"config": {
"type": "boolean",
"description": "True if the deployment includes a ship.json routing config."
},
"password": {
"type": "boolean",
"description": "True if the deployment is password-protected."
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels attached to the deployment; empty when none."
},
"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"
]
},
"created": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Unix timestamp (seconds) when the deployment was created."
},
"expires": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"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."
},
"screenshot": {
"type": "string",
"format": "uri",
"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."
},
"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.",
"type": "string",
"format": "uri"
}
},
"required": [
"deployment",
"url",
"files",
"size",
"status",
"config",
"password",
"labels",
"via",
"created",
"expires",
"screenshot"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢deployments_list(limit, cursor)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Maximum number of items to return in one page. Omit for the server default.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"cursor": {
"description": "Opaque position from the previous response's `cursor` field; omit for the first page.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"cursor": {
"description": "Opaque cursor for the next page; null on the last page. The whole has-more signal.",
"type": [
"string",
"null"
]
},
"deployments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"deployment": {
"type": "string",
"description": "Deployment hostname, e.g. \"happy-cat-abc1234.shipstatic.com\"."
},
"url": {
"type": "string",
"format": "uri",
"description": "Full URL to the live deployment."
},
"files": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Number of files in the deployment."
},
"size": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Total deployment size in bytes."
},
"status": {
"type": "string",
"description": "Deployment lifecycle state; \"success\" means the site is live. One of: pending, success, failed, deleting."
},
"config": {
"type": "boolean",
"description": "True if the deployment includes a ship.json routing config."
},
"password": {
"type": "boolean",
"description": "True if the deployment is password-protected."
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels attached to the deployment; empty when none."
},
"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"
]
},
"created": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Unix timestamp (seconds) when the deployment was created."
},
"expires": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"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."
},
"screenshot": {
"type": "string",
"format": "uri",
"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."
}
},
"required": [
"deployment",
"url",
"files",
"size",
"status",
"config",
"password",
"labels",
"via",
"created",
"expires",
"screenshot"
],
"additionalProperties": false
},
"description": "The deployments on this page."
}
},
"required": [
"cursor",
"deployments"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢deployments_get(deployment)
Get deployment details including URL, status, file count, size, labels, and password protection state.
Eingabe-Schema
{
"type": "object",
"properties": {
"deployment": {
"type": "string",
"description": "Deployment hostname (e.g. \"happy-cat-abc1234.shipstatic.com\"). Returned by deployments_upload or deployments_list."
}
},
"required": [
"deployment"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"deployment": {
"type": "string",
"description": "Deployment hostname, e.g. \"happy-cat-abc1234.shipstatic.com\"."
},
"url": {
"type": "string",
"format": "uri",
"description": "Full URL to the live deployment."
},
"files": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Number of files in the deployment."
},
"size": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Total deployment size in bytes."
},
"status": {
"type": "string",
"description": "Deployment lifecycle state; \"success\" means the site is live. One of: pending, success, failed, deleting."
},
"config": {
"type": "boolean",
"description": "True if the deployment includes a ship.json routing config."
},
"password": {
"type": "boolean",
"description": "True if the deployment is password-protected."
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels attached to the deployment; empty when none."
},
"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"
]
},
"created": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Unix timestamp (seconds) when the deployment was created."
},
"expires": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"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."
},
"screenshot": {
"type": "string",
"format": "uri",
"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."
}
},
"required": [
"deployment",
"url",
"files",
"size",
"status",
"config",
"password",
"labels",
"via",
"created",
"expires",
"screenshot"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🔴deployments_set(deployment, labels)
Update deployment labels. Replaces all existing labels.
Eingabe-Schema
{
"type": "object",
"properties": {
"deployment": {
"type": "string",
"description": "Deployment hostname (e.g. \"happy-cat-abc1234.shipstatic.com\"). Use deployments_list to find deployments."
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels to set. Replaces all existing labels. Pass empty array to clear."
}
},
"required": [
"deployment",
"labels"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"deployment": {
"type": "string",
"description": "Deployment hostname, e.g. \"happy-cat-abc1234.shipstatic.com\"."
},
"url": {
"type": "string",
"format": "uri",
"description": "Full URL to the live deployment."
},
"files": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Number of files in the deployment."
},
"size": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Total deployment size in bytes."
},
"status": {
"type": "string",
"description": "Deployment lifecycle state; \"success\" means the site is live. One of: pending, success, failed, deleting."
},
"config": {
"type": "boolean",
"description": "True if the deployment includes a ship.json routing config."
},
"password": {
"type": "boolean",
"description": "True if the deployment is password-protected."
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels attached to the deployment; empty when none."
},
"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"
]
},
"created": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Unix timestamp (seconds) when the deployment was created."
},
"expires": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"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."
},
"screenshot": {
"type": "string",
"format": "uri",
"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."
}
},
"required": [
"deployment",
"url",
"files",
"size",
"status",
"config",
"password",
"labels",
"via",
"created",
"expires",
"screenshot"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🔴deployments_delete(deployment)
Permanently deletes a deployment and its files.
Eingabe-Schema
{
"type": "object",
"properties": {
"deployment": {
"type": "string",
"description": "Deployment hostname to delete (e.g. \"happy-cat-abc1234.shipstatic.com\")"
}
},
"required": [
"deployment"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"deployment": {
"type": "string",
"description": "The deployment hostname that was marked for removal."
},
"status": {
"type": "string",
"description": "The state the deployment is in while background cleanup runs. One of: pending, success, failed, deleting."
}
},
"required": [
"deployment",
"status"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🔴domains_set(domain, deployment, labels)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Domain name (e.g. \"www.example.com\" or \"blog.example.com\")"
},
"deployment": {
"description": "Deployment to serve on this domain (e.g. \"happy-cat-abc1234.shipstatic.com\"). Omit to reserve the domain without linking.",
"type": "string"
},
"labels": {
"description": "Labels for organizing domains (e.g. [\"production\"]).",
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"domain"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "The domain name, e.g. \"www.example.com\"."
},
"url": {
"type": "string",
"format": "uri",
"description": "Full URL to the domain."
},
"status": {
"type": "string",
"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."
},
"deployment": {
"description": "The deployment hostname this domain points to; null when reserved but not yet linked.",
"type": [
"string",
"null"
]
},
"linked": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
],
"description": "Unix timestamp (seconds) when a deployment was last linked; null if never linked."
},
"links": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "How many times a deployment has been linked to this domain."
},
"verification": {
"type": "string",
"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."
},
"verified": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"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."
},
"verifications": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "How many DNS verification attempts this domain has had."
},
"paused": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
],
"description": "Unix timestamp (seconds) when plan enforcement paused serving; null while the plan has room for it."
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels attached to the domain; empty when none."
},
"created": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Unix timestamp (seconds) when the domain was created."
},
"isCreate": {
"type": "boolean",
"description": "True when this call created the domain; false when it updated an existing one."
}
},
"required": [
"domain",
"url",
"status",
"deployment",
"linked",
"links",
"verification",
"verified",
"verifications",
"paused",
"labels",
"created",
"isCreate"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢domains_list(limit, cursor)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Maximum number of items to return in one page. Omit for the server default.",
"type": "integer",
"minimum": 1,
"maximum": 9007199254740991
},
"cursor": {
"description": "Opaque position from the previous response's `cursor` field; omit for the first page.",
"type": "string"
}
},
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"cursor": {
"description": "Opaque cursor for the next page; null on the last page. The whole has-more signal.",
"type": [
"string",
"null"
]
},
"domains": {
"type": "array",
"items": {
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "The domain name, e.g. \"www.example.com\"."
},
"url": {
"type": "string",
"format": "uri",
"description": "Full URL to the domain."
},
"status": {
"type": "string",
"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."
},
"deployment": {
"description": "The deployment hostname this domain points to; null when reserved but not yet linked.",
"type": [
"string",
"null"
]
},
"linked": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
],
"description": "Unix timestamp (seconds) when a deployment was last linked; null if never linked."
},
"links": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "How many times a deployment has been linked to this domain."
},
"verification": {
"type": "string",
"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."
},
"verified": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"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."
},
"verifications": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "How many DNS verification attempts this domain has had."
},
"paused": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
],
"description": "Unix timestamp (seconds) when plan enforcement paused serving; null while the plan has room for it."
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels attached to the domain; empty when none."
},
"created": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Unix timestamp (seconds) when the domain was created."
}
},
"required": [
"domain",
"url",
"status",
"deployment",
"linked",
"links",
"verification",
"verified",
"verifications",
"paused",
"labels",
"created"
],
"additionalProperties": false
},
"description": "The domains on this page."
}
},
"required": [
"cursor",
"domains"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢domains_get(domain)
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`).
Eingabe-Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Domain name (e.g. \"www.example.com\"). Use domains_list to find names."
}
},
"required": [
"domain"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "The domain name, e.g. \"www.example.com\"."
},
"url": {
"type": "string",
"format": "uri",
"description": "Full URL to the domain."
},
"status": {
"type": "string",
"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."
},
"deployment": {
"description": "The deployment hostname this domain points to; null when reserved but not yet linked.",
"type": [
"string",
"null"
]
},
"linked": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
],
"description": "Unix timestamp (seconds) when a deployment was last linked; null if never linked."
},
"links": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "How many times a deployment has been linked to this domain."
},
"verification": {
"type": "string",
"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."
},
"verified": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"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."
},
"verifications": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "How many DNS verification attempts this domain has had."
},
"paused": {
"anyOf": [
{
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
{
"type": "null"
}
],
"description": "Unix timestamp (seconds) when plan enforcement paused serving; null while the plan has room for it."
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Labels attached to the domain; empty when none."
},
"created": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Unix timestamp (seconds) when the domain was created."
}
},
"required": [
"domain",
"url",
"status",
"deployment",
"linked",
"links",
"verification",
"verified",
"verifications",
"paused",
"labels",
"created"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢domains_records(domain)
Returns the DNS records to configure at the domain's DNS provider. Call after domains_set.
Eingabe-Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Domain name. Must be a domain previously created with domains_set."
}
},
"required": [
"domain"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "The domain the records are for."
},
"apex": {
"type": "string",
"description": "The apex (registered) domain where DNS records are managed."
},
"records": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"A",
"CNAME"
],
"description": "Record type: A for the apex redirect, CNAME for the hosted subdomain."
},
"name": {
"type": "string",
"description": "The DNS name to configure."
},
"value": {
"type": "string",
"description": "The value to set: an IP for A, a hostname for CNAME."
}
},
"required": [
"type",
"name",
"value"
],
"additionalProperties": false
},
"description": "The records to configure at the DNS provider, in the order to add them."
}
},
"required": [
"domain",
"apex",
"records"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢domains_dns(domain)
Returns the DNS provider recorded for the domain, if known (e.g. Cloudflare, Namecheap): where its DNS records are configured.
Eingabe-Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Domain name (e.g. \"www.example.com\"). Must be a domain previously created with domains_set."
}
},
"required": [
"domain"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "The domain name."
},
"dns": {
"anyOf": [
{
"type": "object",
"properties": {
"provider": {
"description": "The provider serving this domain's DNS; absent when unidentified.",
"type": "object",
"properties": {
"name": {
"description": "Provider name, e.g. \"Cloudflare\"; null if unknown.",
"type": [
"string",
"null"
]
},
"url": {
"description": "The provider's DNS dashboard, where the records get added; null or absent when unknown.",
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
}
},
"required": [
"name"
],
"additionalProperties": false
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"description": "What the platform recorded about the domain's DNS provider when the domain was created; null if nothing was recorded."
}
},
"required": [
"domain",
"dns"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢domains_share(domain)
Returns a shareable DNS setup URL that needs no API key, for whoever manages the domain's DNS.
Eingabe-Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Domain name to generate a share link for. Must be a domain previously created with domains_set."
}
},
"required": [
"domain"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "The domain the setup link is for."
},
"url": {
"type": "string",
"format": "uri",
"description": "The shareable DNS setup URL; whoever opens it sees the records to configure, with no API key."
}
},
"required": [
"domain",
"url"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢domains_validate(domain)
Check if a domain name is valid and available before creating it. Returns the normalized form and availability.
Eingabe-Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Domain name to check (e.g. \"www.example.com\"). Call before domains_set to check availability."
}
},
"required": [
"domain"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"valid": {
"type": "boolean",
"description": "Whether the domain's shape is usable."
},
"normalized": {
"description": "The normalized domain name; null when invalid.",
"type": [
"string",
"null"
]
},
"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"
]
},
"reason": {
"description": "Why the name is unusable, for display; null when it is usable.",
"type": [
"string",
"null"
]
}
},
"required": [
"valid",
"normalized",
"available",
"reason"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢domains_verify(domain)
Trigger DNS verification for a custom domain. Call after the user has configured DNS records from domains_records. 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.
Eingabe-Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Domain name to verify DNS for. Must be a domain previously created with domains_set."
}
},
"required": [
"domain"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"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."
}
},
"required": [
"domain"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🔴domains_delete(domain)
Permanently deletes a domain.
Eingabe-Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "Domain name to delete (e.g. \"www.example.com\")"
}
},
"required": [
"domain"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Ausgabe-Schema
{
"type": "object",
"properties": {
"domain": {
"type": "string",
"description": "The domain name that was removed, normalized."
}
},
"required": [
"domain"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}🟢whoami
Returns the account's email, name, plan, current usage and plan caps.
Eingabe-Schema
{
"type": "object",
"properties": {}
}Ausgabe-Schema
{
"type": "object",
"properties": {
"email": {
"type": "string",
"description": "The account email address."
},
"name": {
"description": "Display name; null if not set.",
"type": [
"string",
"null"
]
},
"plan": {
"type": "string",
"description": "The plan the account is on. One of: free, pro, team, scale, sponsored."
},
"usage": {
"type": "object",
"properties": {
"deployments": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Deployments, every row whatever its status."
},
"platformDomains": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Names chosen under the platform's own suffix, e.g. \"my-app.shipstatic.com\"."
},
"customDomains": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Hostnames the customer owns, paused ones included."
},
"seats": {
"description": "People with a seat: the owner and every member. Absent on responses that predate seats, which then mean one seat.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"deployments",
"platformDomains",
"customDomains"
],
"additionalProperties": false,
"description": "What the account currently holds."
},
"caps": {
"type": "object",
"properties": {
"deployments": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Deployments, every row whatever its status."
},
"platformDomains": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Names chosen under the platform's own suffix, e.g. \"my-app.shipstatic.com\"."
},
"customDomains": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"description": "Hostnames the customer owns, paused ones included."
},
"seats": {
"description": "People with a seat: the owner and every member. Absent on responses that predate seats, which then mean one seat.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"deployments",
"platformDomains",
"customDomains"
],
"additionalProperties": false,
"description": "What the account is allowed to hold: the same keys as usage, so the pair divides."
}
},
"required": [
"email",
"name",
"plan",
"usage",
"caps"
],
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false
}Community
Nachweis