Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,552Letters: 14Defects: 1,323counted 1 min ago
teppi

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 yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:47f07beb6de2ad481f338b6324ec4ba82bf66c1e74c3f52c69c257191ffc7f93 | sha256sum