MCP-Server

shiply

now.shiply/shiply
Business & Betrieb Cloud & Infrastruktur Entwicklertools Öffentlich und erreichbar MCP 2025-11-25

Was dieses MCP kann

Publishes and manages web applications with SQL databases, serverless functions, domains, email tests, client intake, contracts, data collections, and deployment configuration.

add_custom_domain
Register a custom domain
Register a registrable domain (e.g. example.com) the user owns and detect its DNS provider. Returns the provider and whether one-click connect is available. Then attach sites with add_subdomain.
Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'description': 'registrable domain you own, e.g. example.com'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
add_domain
Connect a custom domain
Serve a site on a domain the user owns. Returns the CNAME to add (hostname → cname.shiply.now); the certificate issues automatically once DNS resolves. Poll with check_domain.
Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['hostname', 'slug'], 'properties': {'slug': {'type': 'string', 'description': 'owned site slug to serve there'}, 'hostname': {'type': 'string', 'description': 'full hostname to serve, e.g. www.example.com'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
add_sending_domain
Add a sending domain
Register a domain the user owns for outbound demand-test sends. Returns DNS records (SPF, DKIM, MX) to add at the DNS provider. After DNS propagates, call verify_sending_domain. Cannot be a shiply.now subdomain.
Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'description': 'e.g. mail.yourbrand.com'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
add_subdomain
Point a subdomain at a site
Serve an owned site at <subdomain>.<domain> (use subdomain "@" or "" for the apex — apex needs a provider with CNAME flattening/ALIAS, e.g. Cloudflare). Auto-registers the parent domain. Returns the CNAME record to add (host -> cname.shiply.now); the certificate issues automatically once DNS resolves. Poll with check_domain.
Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['domain', 'subdomain', 'slug'], 'properties': {'slug': {'type': 'string', 'description': 'owned site slug to serve there'}, 'domain': {'type': 'string', 'description': 'registrable parent domain, e.g. example.com'}, 'subdomain': {'type': 'string', 'description': 'subdomain label, or "@"/"" for the apex'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
add_suppression
Suppress an email or domain
Add an address (or whole domain) to the user's suppression list. Future confirmations and broadcasts will skip it across every test. Use kind='email' for a single address, kind='domain' for everyone @example.com.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['kind', 'value'], 'properties': {'kind': {'enum': ['email', 'domain'], 'type': 'string', 'description': "'email' for one address, 'domain' for everyone @example.com"}, 'notes': {'type': 'string', 'description': 'optional reason / note for the suppression'}, 'value': {'type': 'string', 'description': "e.g. 'spammy@example.com' or 'competitor.com'"}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
archive_project
Archive a project
Move a project to status='archived'. Hidden from the default dashboard list. Optional reason is shown on the project page. Restore later with restore_project.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'project id to archive'}, 'reason': {'type': 'string', 'maxLength': 500, 'description': 'optional reason shown on the project page'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
archive_thread
Archive a thread
Soft-archive the thread (sets archivedAt). Hidden from the default inbox view; surface again with list_inbox filter=archived. Reverse with unarchive_thread.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['threadId'], 'properties': {'threadId': {'type': 'string', 'description': 'thread id from list_inbox to archive'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
attach_database
Attach a database to a site
Bind an existing database to one owned site's Worker env (the binding name chosen at create_database time). Takes effect on the site's next function/publish deploy.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id', 'siteSlug'], 'properties': {'id': {'type': 'string', 'description': 'database id (from list_databases)'}, 'siteSlug': {'type': 'string', 'description': 'owned site slug'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
attach_variable
Attach a variable to a site
Expose one saved variable to ONE owned site's Worker env (plain_text binding). Opt-in per site — unattached variables are never injected, because the Worker runs the site's own code. Takes effect on the site's next function deploy.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string', 'description': 'variable name to attach, e.g. SUPABASE_URL'}, 'slug': {'type': 'string', 'description': 'owned site slug'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
check_custom_domain
Check a custom domain
Check whether a custom domain's subdomains are live: re-polls Cloudflare cert status + probes DNS/TLS/HTTPS on each subdomain. Poll this after connect_provider / add_subdomain to confirm the domain is serving. Returns per-subdomain status + tls + http + ready.
Nur Lesen Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'description': 'registered custom domain to check, e.g. example.com'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
check_domain
Check a custom domain
Refresh certificate status + live TLS/HTTPS probe for a connected domain (by id from list_domains).
Nur Lesen Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'connected domain id from list_domains'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
connect_provider
Connect the domain's DNS provider
Start one-click DNS connect for a registered custom domain. For Cloudflare-hosted domains this returns an authorize URL — SHOW THE USER the url as a clickable link; after they authorize, records are written automatically. For other providers, add the records manually.
Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'description': 'registered custom domain to connect, e.g. example.com'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
contract_amend
Create an amendment to a signed contract
Create an amendment to a SIGNED parent contract. Scope delta required; fee delta and target date optional. Returns the draft amendment for editing before send — call contract_send with the returned amendment id to fire it. Cannot amend an amendment (amend the parent instead).
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['parentContractId', 'scopeDelta'], 'properties': {'scopeDelta': {'type': 'string', 'maxLength': 20000, 'minLength': 1, 'description': "What's changing â\x80\x94 visible to customer."}, 'feeDeltaCents': {'type': 'integer', 'maximum': 1000000000, 'minimum': -1000000000, 'description': 'Optional fee adjustment in cents. Can be negative for descope.'}, 'parentContractId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'id of the SIGNED parent contract to amend'}, 'targetCompletionDate': {'type': 'string', 'description': 'Optional ISO date (YYYY-MM-DD) for revised completion.'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
contract_draft
Draft a contract from a brief_ready project
Draft a contract from a brief_ready project. Auto-fills 8 fields from the AI brief, Stripe Connect default currency, and dev profile. Returns the contract row with status='draft' so the dev can review fields before sending. After this, edit fields via PATCH /api/v1/contracts/{id} (no MCP edit tool yet), then call contract_send to fire it.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['projectId'], 'properties': {'projectId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Project to draft a contract for'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
contract_pdf
Get the signed contract PDF (base64)
Get the signed contract PDF as a base64-encoded download. PDF includes the contract, signature certificate, and any signed amendments. Returns { filename, contentType, base64 }. Errors with conflict:contract_not_signed if the parent contract has not been signed yet.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['contractId'], 'properties': {'contractId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'signed contract id (parent or amendment) to render as PDF'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
contract_send
Send a draft contract to the customer
Send a draft contract to the customer. Validates all 8 fields are non-empty, computes content_hash, flips project to contract_sent, fires the customer email. Same handler works for amendment drafts — sending an amendment does not move project state.
Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['contractId'], 'properties': {'contractId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'draft contract id to send (from contract_draft)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
contract_status
Read contract state + amendments
Read the current state of a contract: status, sent_at, viewed_at, signed_at, signer info, content_hash, plus any amendments. Use this to check whether a customer has signed yet. Returns { contract, amendments } — the contract row matches GET /api/v1/contracts/{id}.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['contractId'], 'properties': {'contractId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'contract id to read state for'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
create_database
Create a database
Provision a SQL database — D1 (default, free) or Neon Postgres (--postgres, developer plan). Optionally attach it to an owned site's Worker env in the same call (siteSlug); otherwise attach it later with attach_database.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'database name, a-z 0-9 -, 2-63 chars'}, 'binding': {'type': 'string', 'description': 'Worker binding name, UPPER_SNAKE (defaults to a name derived from `name`)'}, 'provider': {'enum': ['d1', 'neon'], 'type': 'string', 'description': 'defaults to d1'}, 'siteSlug': {'type': 'string', 'description': 'owned site slug to attach immediately'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
create_drive
Create a drive
Create a private cloud Drive (plan-limited). Pass client to file it under a client.
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'display name for the new drive'}, 'client': {'type': 'object', 'properties': {'clientId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'an existing client id (skips lookup)'}, 'clientName': {'type': 'string', 'description': "client's name (used when creating)"}, 'clientEmail': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'client email â\x80\x94 create-or-find by this'}, 'clientCompany': {'type': 'string', 'description': "client's company (used when creating)"}}, 'description': 'optional: file this under a client (the publish/site is grouped in their customer view)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
create_listing
List one of my sites for sale
Publish (or upsert) a marketplace listing for an owned site. Requires Stripe Connect set up (status='ready' — see get_connect_status). priceCents = whole-dollar between 100 and 999900. termsMode='standard' uses shiply's template; 'custom' requires termsCustom ≥50 chars. jurisdiction is required (e.g. 'California, USA').
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['siteSlug', 'priceCents', 'termsMode', 'jurisdiction'], 'properties': {'pitch': {'type': 'string', 'maxLength': 280, 'description': 'short sales pitch, â\x89¤280 chars'}, 'status': {'enum': ['draft', 'live'], 'type': 'string', 'description': 'publish state (default draft)'}, 'siteSlug': {'type': 'string', 'description': 'slug of the owned site to list'}, 'termsMode': {'enum': ['standard', 'custom'], 'type': 'string', 'description': "'standard' uses shiply's template; 'custom' requires termsCustom"}, 'priceCents': {'type': 'integer', 'maximum': 999900, 'minimum': 100, 'description': 'whole-dollar price in cents, 100â\x80\x93999900'}, 'termsCustom': {'type': 'string', 'maxLength': 20000, 'description': "custom terms text, â\x89¥50 chars, required when termsMode='custom'"}, 'jurisdiction': {'type': 'string', 'maxLength': 80, 'minLength': 2, 'description': "governing jurisdiction, e.g. 'California, USA'"}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
create_project
Create a client-intake project
Spin up a new customer-intake project on the dev's account. Returns the project row plus intakeUrl — the public link the customer fills out (10-step wizard). If customerEmail is provided, shiply also emails them the intake invite. Use originatedFromSiteId to link a project to an existing site (e.g. 'redesign this site').
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['label'], 'properties': {'label': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'project name shown in the dev dashboard'}, 'customerName': {'type': 'string', 'maxLength': 200, 'description': "the customer's name"}, 'customerEmail': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'maxLength': 320, 'description': 'customer email; if set, shiply emails them the intake invite'}, 'originatedFromSiteId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'link this project to an existing site (e.g. a redesign)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
create_test
Create an email demand test
Provision a demand test in one call: deploys a landing page with a native email-capture form and creates a confirmed-subscriber segment. Returns testId + live siteUrl. Share the siteUrl to collect signups; each signup gets a double-opt-in confirmation. Read progress with get_test_status.
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['idea', 'headline'], 'properties': {'cta': {'type': 'string', 'description': 'call-to-action button label'}, 'sub': {'type': 'string', 'description': 'subheadline / supporting line'}, 'idea': {'type': 'string', 'description': 'the product/idea name'}, 'price': {'type': 'string', 'description': 'price to display, e.g. "$29/mo"'}, 'headline': {'type': 'string', 'description': 'landing-page headline'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
data_export_collection
Export records (capped)
Return up to `limit` records (default 1000, max 5000) from a collection — for snapshotting into agent context. For larger sets use the CLI: `shiply data export <slug> <collection>`.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'collection'], 'properties': {'slug': {'type': 'string', 'description': 'owned site slug'}, 'limit': {'type': 'integer', 'maximum': 5000, 'minimum': 1, 'description': 'max records to return (default 1000, max 5000)'}, 'collection': {'type': 'string', 'description': 'collection name to export'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
data_insert
Insert a record into a collection
Insert one record into a collection. Goes through the same public visitor endpoint a browser would use — manifest access.insert decides whether it is allowed. Use to seed waitlist data, test forms end-to-end, etc.
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'collection', 'record'], 'properties': {'slug': {'type': 'string', 'description': 'owned site slug'}, 'record': {'type': 'object', 'description': 'the record fields to insert as key/value pairs', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'collection': {'type': 'string', 'description': 'collection name to insert into'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
data_list_collections
List Site Data collections
List collections declared in an owned site's .shiply/data.json with current record counts. Empty list means the site has no manifest yet — scaffold one with `shiply data init`.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'owned site slug'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
data_query
Query records from a collection
Page records from an owned site's collection, newest-first. limit ≤ 200 (default 50). cursor from a previous response's nextCursor.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'collection'], 'properties': {'slug': {'type': 'string', 'description': 'owned site slug'}, 'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'max records to return, â\x89¤200 (default 50)'}, 'cursor': {'type': 'string', 'description': "nextCursor from a previous response's page"}, 'collection': {'type': 'string', 'description': 'collection name from data_list_collections'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
delete_database
Delete a database
PERMANENTLY delete a database and all its data. Irreversible — confirm with the user first.
Destruktiv
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'database id (from list_databases)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
delete_listing
Unpublish a listing (set to draft)
Take a listing off the public marketplace by moving it to status='draft'. Marketplace v1 keeps the row so analytics + future re-listing work — there's no hard delete. Sold listings can't be modified. Use to stop accepting offers without losing pricing history.
Destruktiv
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['siteSlug'], 'properties': {'siteSlug': {'type': 'string', 'description': 'slug of the listed site to unpublish'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
delete_site
Delete a site
PERMANENTLY delete a site and all stored files. Irreversible — confirm with the user first.
Destruktiv
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'site slug to delete'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
delete_variable
Delete a variable
Remove one variable by name.
Destruktiv
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': 'variable name to delete'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
deploy_function
Deploy a Worker function to a site
Deploy a Worker function to a site. The function runs on every request to <slug>.shiply.now and can receive webhooks, run on cron triggers, and access bindings (D1, secrets, env vars). Requires Developer plan. Use when the user wants webhook receivers, cron jobs, or a backend for their site.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'source'], 'properties': {'lang': {'enum': ['js', 'ts'], 'type': 'string', 'description': 'source language (default js)'}, 'slug': {'type': 'string', 'description': 'site slug to deploy the function to'}, 'crons': {'type': 'array', 'items': {'type': 'object', 'required': ['path', 'schedule'], 'properties': {'path': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'URL path the cron handler fires on'}, 'schedule': {'type': 'string', 'maxLength': 60, 'minLength': 9, 'description': 'crontab schedule in UTC, e.g. "0 * * * *"'}}}, 'maxItems': 20, 'description': 'cron triggers to register, â\x89¤20'}, 'source': {'type': 'string', 'maxLength': 1500000, 'minLength': 1, 'description': 'the Worker source code'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
detach_variable
Detach a variable from a site
Stop exposing a variable to a site's Worker env. Takes effect on the site's next function deploy.
Destruktiv
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string', 'description': 'variable name to detach'}, 'slug': {'type': 'string', 'description': 'owned site slug'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
drive_delete_file
Delete a drive file
Delete a file from a Drive.
Destruktiv
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['driveId', 'path'], 'properties': {'path': {'type': 'string', 'description': 'path of the file to delete'}, 'driveId': {'type': 'string', 'description': 'drive id (drv_â\x80¦) or "default"'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
drive_list_files
List drive files
List files in a Drive (driveId = drv_…, or "default"). Optional prefix filter.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['driveId'], 'properties': {'prefix': {'type': 'string', 'description': 'only list files under this path prefix'}, 'driveId': {'type': 'string', 'description': 'drive id (drv_â\x80¦) or "default"'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
drive_put_file
Write a drive file
Write a file into a Drive (driveId = drv_… or "default"). content is utf8 or base64. Use for agent memory, notes, context, assets.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['driveId', 'path', 'content'], 'properties': {'path': {'type': 'string', 'description': 'destination path inside the drive, e.g. notes/context.md'}, 'content': {'type': 'string', 'description': 'file contents (utf8 text, or base64 when encoding=base64)'}, 'driveId': {'type': 'string', 'description': 'drive id (drv_â\x80¦) or "default"'}, 'encoding': {'enum': ['utf8', 'base64'], 'type': 'string', 'description': 'default utf8; base64 for binary'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
duplicate_site
Duplicate a site
Server-side copy of an owned site under a new slug — instantly live. Copies files + title; does NOT copy access settings, domains, or data. Great for iterating on variants.
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'site slug to copy'}, 'title': {'type': 'string', 'description': 'display title for the new copy (defaults to source title)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
export_account
Export account data
Return a JSON bundle of the user's profile, sites, Site Data, drives, and metadata (secrets excluded). Data portability.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
feature_site
Feature a site on Explore
Toggle whether an owned, public site appears in the public shiply Explore gallery (https://shiply.now/explore). Only public-access sites are eligible.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'show'], 'properties': {'show': {'type': 'boolean', 'description': 'true to feature on Explore, false to remove'}, 'slug': {'type': 'string', 'description': 'owned, public site slug'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
forward_thread
Forward an inbox message to a new recipient
Forward a message from a thread (default: the most recent message) to a NEW recipient with an optional intro note. Body is composed as note + standard '---------- Forwarded message ----------' quote of the original. Goes from the thread's existing shiply alias so replies still route through the inbox. Subject defaults to 'Fwd: <original>'.
Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['threadId', 'to'], 'properties': {'to': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'new recipient email address'}, 'note': {'type': 'string', 'maxLength': 5000, 'description': 'intro note prepended above the forwarded quote'}, 'subject': {'type': 'string', 'maxLength': 200, 'description': "subject; defaults to 'Fwd: <original>'"}, 'threadId': {'type': 'string', 'description': 'thread id from list_inbox to forward from'}, 'messageId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'specific message to forward (default: most recent)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
get_account_status
Account plan + capability matrix
Get the signed-in account's plan, capabilities, and upgrade URL. Call this FIRST when figuring out what features you have access to — it tells you exactly what's available and what's blocked. The upgrade_url is human-clickable; show it in chat when a feature requires a higher plan. Returns plan id + name + subscription status, hard limits (sites, databases, custom domains, drives), and a capability matrix listing every gated feature (workers_lite, databases_neon_postgres, custom_domains, etc.) with whether you have access and the minimum plan needed.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
get_analytics
Site analytics
Daily page views per site for the last 30 days.
Nur Lesen
Eingabeschema
{'type': 'object', 'properties': {}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
get_connect_status
Stripe Connect onboarding status
Return the seller's Stripe Connect state: not_started | in_progress | pending_verification | ready | disabled. When status != 'ready' the user can't list sites. Includes a one-shot onboardingUrl (if not_started or in_progress) and dashboardUrl (if ready). Refreshes from Stripe on every call.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
get_function
Get the deployed function for a site
Return the deployed function source + metadata for a site, or null if no function deployed.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'site slug whose function to fetch'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
get_function_logs
Read recent function logs
Read recent runtime logs for a site's per-site Worker (console output, request summaries, exceptions) from Cloudflare Workers Observability — 7-day retention, newest first. Use this to debug a deployed function: each event has timestamp, level, message, outcome, statusCode, requestId, and CPU/wall time. Also returns a CF dashboard deep-link.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'site slug whose function logs to read'}, 'limit': {'type': 'integer', 'maximum': 1000, 'minimum': 1, 'description': 'max events to return (default 50)'}, 'since': {'type': 'integer', 'maximum': 10080, 'minimum': 1, 'description': 'look back this many minutes (default 60, max 10080 = 7 days)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
get_project
Get one project (full row)
Read one of the dev's projects by id — includes label, status, customer details, intake responses, AI brief, drive folder. Use before update_brief / regenerate_brief.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'project id'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
get_site
Site detail
Site settings + version history for one of my sites.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'site slug, e.g. my-site'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
get_site_access
Read site access control
Read an owned site's current access policy (mode: public/password/restricted, allowedEmails, allowedDomains, hasPassword). Read-only counterpart to set_site_access — check before changing it.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'owned site slug'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
get_test_status
Demand test status (the verdict)
ONE consolidated object: page funnel (views, signups, confirmed, conversion) ⊕ email events (delivered/opened/clicked/bounced) ⊕ a computed verdict. The single place to check progress — never query email separately.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['testId'], 'properties': {'testId': {'type': 'string', 'description': 'demand test id from create_test / list_tests'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_complaints
List complaints + bounces
Return threads tagged as complaints (spam reports) OR bounces (recipient rejected). Read these before any further sending.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_crons
List cron triggers for a site
List cron triggers for a site's deployed function. Each cron is (path, schedule, lastRunAt).
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'site slug whose cron triggers to list'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_custom_domains
List custom domains
List registered custom domains grouped with their subdomains, each subdomain's site and status, and the detected provider.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_databases
List my databases
List the SQL databases (D1 or Neon Postgres) on my account, including which owned site (if any) each is attached to. Call this BEFORE db_query/db_schema-style work to discover a databaseId — those live on a per-database MCP server reached via GET /api/v1/databases/{id} (see llms.txt), which this id feeds.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_domains
List custom domains
List connected custom domains with status.
Nur Lesen
Eingabeschema
{'type': 'object', 'properties': {}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_drives
List drives
List the user's private cloud Drives (id, name). Optional clientId filters to one client.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'clientId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'only drives filed under this client'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_inbox
List inbox threads
List the user's email inbox threads (outbound demand-test sends + inbound replies / unsubscribes / complaints / bounces). Filter by tag.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'max threads to return, â\x89¤200'}, 'filter': {'enum': ['all', 'unread', 'replies', 'unsubscribes', 'complaints', 'bounces'], 'type': 'string', 'description': 'default all'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'number of threads to skip (pagination)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_listings
List my marketplace listings
Return every marketplace listing the seller owns (any status: draft, live, paused, sold). Includes site slug and current price. Use to see what's for sale across the account.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_mailbox_contacts
List a mailbox's contacts
List captured contacts for a (site, collection) mailbox, optionally filtered by status (signed_up/confirmed/unsubscribed). Returns email, status, confirmedAt, createdAt, and captured fields.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'collection'], 'properties': {'slug': {'type': 'string', 'description': 'site slug the mailbox belongs to'}, 'status': {'enum': ['signed_up', 'confirmed', 'unsubscribed'], 'type': 'string', 'description': 'filter contacts by status'}, 'collection': {'type': 'string', 'description': 'mailbox collection name'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_my_orders
List orders where I am the buyer
Return every marketplace order the user PURCHASED. Most recent first. Shows the acquired site, paid amount, and whether the order is still inside the 30-day refund window. Use to recap what the user owns by purchase.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'max orders to return (default 100, max 500)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_my_sales
List orders where I am the seller
Return every marketplace order for sites the user sold (incl. pending, paid, refunded, failed, disputed). Most recent first. Use to surface revenue + which orders are still inside the 30-day refund window (refundExpiresAt > now).
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 500, 'minimum': 1, 'description': 'max orders to return (default 100, max 500)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_project_files
List files uploaded to a project
Return the customer-uploaded files for one project (path, size, contentType, createdAt). Empty when no drive folder exists yet (no uploads). Use to inspect what intake assets the customer attached.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'project id whose uploaded files to list'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_projects
List my client-intake projects
List the dev's customer-intake projects (newest first). Optional filters: status (draft|intake_open|brief_ready|brief_failed|archived), q (case-insensitive match on label or customer email), limit (default 100). Use to triage what's in flight before opening a specific project.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'q': {'type': 'string', 'description': 'case-insensitive match on label or customer email'}, 'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'max projects to return (default 100)'}, 'status': {'enum': ['draft', 'intake_open', 'brief_ready', 'brief_failed', 'archived'], 'type': 'string', 'description': 'filter by project status'}, 'clientId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'only projects filed under this client'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_secrets
List secret names for a site
List secret names (values not returned) for a site's deployed function.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'site slug whose secret names to list'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_sending_domains
List my sending domains
Return every BYO sending domain the user has added (id, domain, fromAddress, status: pending|verified|failed, DNS records). Use to inspect verification state or find the id of a domain to verify/remove.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_site_inbox
List a site's email inbox threads
Read the email threads (received, sent, web captures) for the agent's sites. Optionally scoped to one site by slug.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'slug': {'type': 'string', 'description': 'limit to one site by slug; omit for all sites'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_sites
List my sites
List the sites owned by this API key. Optional clientId filters to one client.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'clientId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'only sites filed under this client'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_site_variables
List variables attached to a site
Names of the variables attached to an owned site's Worker env (values never shown here).
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'owned site slug'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_suppressions
List suppressed emails / domains
Return the user's suppression list — addresses (and full domains) that shiply skips when sending. Bounces, complaints, manual user adds, and AI-detected unsubscribes all land here.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_test_inbox_addresses
List per-test inbox addresses
Return every active demand test's reply / inbound address (<slug>@<sitesDomain>). Use this when you need to TELL someone where to email — e.g. drafting a reply or sharing a test's contact address. Mail sent to these aliases lands in /dashboard/inbox tied to the test.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_tests
List demand tests
List your demand tests with signups + confirmed counts.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_unsubscribes
List unsubscribes
Shortcut for list_inbox with filter=unsubscribes — shows every thread tagged as an opt-out request.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'max threads to return, â\x89¤200'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_variables
List variables
List the encrypted variables. Values are masked unless reveal=true.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'reveal': {'type': 'boolean', 'description': 'return plaintext values instead of masked'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
list_versions
List a site's deploys
List a site's finalized deploys newest-first (id, createdAt, isLive, fileCount, bytes), capped at 20. Pair with rollback_site: pick a version id from here and re-point the site to it.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'site slug to list deploys for'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
mark_thread_read
Mark a thread read
Zero the unread counter for a thread. Useful after the agent has read but not acted. read_thread already calls this implicitly; use this explicitly when you want to clear unread without re-fetching the thread body.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['threadId'], 'properties': {'threadId': {'type': 'string', 'description': 'thread id from list_inbox to mark read'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
promote_site
Promote a preview to a production site
Copy the EXACT live bytes of one owned site (srcSlug — your preview) into another owned site (destSlug — your production site / custom domain), no rebuild. Dest keeps its slug, domains, and access settings; only the served bytes change.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['srcSlug', 'destSlug'], 'properties': {'srcSlug': {'type': 'string'}, 'destSlug': {'type': 'string'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
publish_from_drive
Publish a drive as a site
Snapshot a Drive (or a prefix of it) into a new live site at <slug>.shiply.now. Files copied server-side.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['driveId'], 'properties': {'title': {'type': 'string', 'description': 'display title for the new site'}, 'prefix': {'type': 'string', 'description': 'only snapshot files under this path prefix'}, 'driveId': {'type': 'string', 'description': 'drive id (drv_â\x80¦) or "default"'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
publish_site
Publish a site
Publish files to the web → live URL at <slug>.shiply.now. UPDATING: never create a new site for changes — re-call with claimToken (anonymous sites) or slug (sites you own with a Bearer key) and the SAME URL gets the new version. Unchanged files are hash-skipped server-side, so re-publishing (including retrying a failed publish) is cheap — always update the same site rather than creating a new one. Works WITHOUT auth (anonymous: 24h lifetime, returns claimToken/claimUrl — SAVE THEM). With a Bearer shp_ key sites are permanent. ≤50 files / 2 MB inline; bigger: REST flow per https://shiply.now/llms.txt. index.html serves at /. spaMode for client-side routing.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['files'], 'properties': {'slug': {'type': 'string', 'description': 'UPDATE an existing site you own (requires Bearer key)'}, 'files': {'type': 'array', 'items': {'type': 'object', 'required': ['path', 'content'], 'properties': {'path': {'type': 'string', 'description': 'relative path, e.g. index.html'}, 'content': {'type': 'string', 'description': 'file contents (utf8 text, or base64 when encoding=base64)'}, 'encoding': {'enum': ['utf8', 'base64'], 'type': 'string', 'description': 'default utf8; base64 for binary'}}}, 'description': 'site files; index.html required for a homepage'}, 'title': {'type': 'string', 'description': 'display title for the site'}, 'client': {'type': 'object', 'properties': {'clientId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'an existing client id (skips lookup)'}, 'clientName': {'type': 'string', 'description': "client's name (used when creating)"}, 'clientEmail': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'client email â\x80\x94 create-or-find by this'}, 'clientCompany': {'type': 'string', 'description': "client's company (used when creating)"}}, 'description': 'optional: file this under a client (the publish/site is grouped in their customer view)'}, 'spaMode': {'type': 'boolean', 'description': 'serve index.html for unknown paths (client-side routing)'}, 'agentName': {'type': 'string', 'description': 'label shown during the automatic account re-auth flow'}, 'claimToken': {'type': 'string', 'description': 'UPDATE an existing anonymous site (from the original publish result)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
pull_site
Pull a site's current files
Download the current files of a site you own (or created via a platform connection) so you can edit and republish to the same slug with publish_site. Static sites return editable source; framework/SSR sites return the built bundle (`.shiply/bundle/*`), not original source.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'site slug to pull files for'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
read_thread
Read an inbox thread
Return the thread metadata + all messages in chronological order. Use list_inbox first to get a threadId.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['threadId'], 'properties': {'threadId': {'type': 'string', 'description': 'thread id from list_inbox'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
refund_order
Refund one of my sales
Issue a full refund on a paid order the user sold. Must be inside the 30-day refund window (server enforces). Triggers a Stripe refund; the webhook flips the order to 'refunded' and reverts site ownership to the seller. Idempotent on already-refunded orders.
Destruktiv Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['orderId'], 'properties': {'reason': {'type': 'string', 'maxLength': 500, 'description': 'optional refund reason'}, 'orderId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'id of the paid order to refund (from list_my_sales)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
regenerate_brief
Re-run AI brief generation
Re-run the MiniMax/Anthropic brief generator from the project's current intake_responses and persist the result. Flips status to brief_ready on success or brief_failed on error. Use after the customer edits answers post-submit, or when the first AI attempt failed.
Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'project id to re-run the brief for'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
remove_cron
Remove a cron trigger
Remove a cron trigger from a site's deployed function.
Destruktiv
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'path'], 'properties': {'path': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'URL path of the cron to remove'}, 'slug': {'type': 'string', 'description': 'site slug whose cron to remove'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
remove_custom_domain
Remove a custom domain
Remove a registered custom domain and all its subdomains; they stop serving immediately.
Destruktiv
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'description': 'registered custom domain to remove, e.g. example.com'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
remove_domain
Disconnect a custom domain
Remove a connected domain (by id). It stops serving immediately.
Destruktiv
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'connected domain id from list_domains'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
remove_function
Remove the deployed function from a site
Remove the deployed Worker function from a site (and all its routes, secrets, and cron triggers). Site falls back to static-only serving. Irreversible.
Destruktiv
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'description': 'site slug whose function to remove'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
remove_secret
Remove a secret from a site
Remove a secret from a site's deployed function. The binding disappears on next request.
Destruktiv
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'name'], 'properties': {'name': {'type': 'string', 'maxLength': 80, 'description': 'secret name to remove'}, 'slug': {'type': 'string', 'description': 'site slug whose function holds the secret'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
remove_sending_domain
Remove a sending domain
Delete a BYO sending domain. Any demand tests bound to it fall back to the managed shiply sender. Also GCs the underlying Resend domain. Irreversible — re-adding requires re-verifying DNS.
Destruktiv
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'sending domain id from list_sending_domains'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
remove_suppression
Remove from suppression list
Delete one suppression by id. Use list_suppressions first to find the id.
Destruktiv
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['suppressionId'], 'properties': {'suppressionId': {'type': 'string', 'description': 'suppression id from list_suppressions'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
reply_to_thread
Reply to an inbox thread
Send an email reply on an existing thread. Goes FROM the original recipient address (the <slug>@shiply.now alias the sender used) and TO the original sender. Threaded via RFC 5322 In-Reply-To so Gmail/Outlook group it with the original. Subject defaults to 'Re: <original>' when omitted. Cap at 20,000 chars. Use after read_thread to make sure you're replying to the right conversation.
Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['threadId', 'body'], 'properties': {'body': {'type': 'string', 'maxLength': 20000, 'minLength': 1, 'description': 'reply body, â\x89¤20,000 chars'}, 'subject': {'type': 'string', 'maxLength': 200, 'description': "subject; defaults to 'Re: <original>'"}, 'threadId': {'type': 'string', 'description': 'thread id from list_inbox to reply on'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
resend_confirmation
Resend a confirmation email
Re-send the double-opt-in confirmation to a signup that has not confirmed yet.
Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['testId', 'email'], 'properties': {'email': {'type': 'string', 'description': 'the unconfirmed signup email to re-send to'}, 'testId': {'type': 'string', 'description': 'demand test id the signup belongs to'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
resend_intake_invite
Re-send the customer intake invite email
Re-fire the 'your developer sent you a project intake' email to the project's customer. Throws invalid_request if the project has no customerEmail (the dev needs to set one via the dashboard first — customer email isn't agent-patchable). Use when the customer says they didn't receive the link.
Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'project id to re-send the intake invite for'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
restore_project
Restore an archived project
Move an archived project back to status='draft' so it reappears in the active list. Idempotent on non-archived projects? No — server rejects the transition unless the project is currently archived.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'archived project id to restore'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
rollback_site
Roll back a site
Re-point a site to any finalized version (rollback or roll-forward). Get version ids from get_site. Serving updates immediately.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'versionId'], 'properties': {'slug': {'type': 'string', 'description': 'site slug to re-point'}, 'versionId': {'type': 'string', 'description': 'finalized version id from get_site'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
send_broadcast
Broadcast to confirmed subscribers
Send a campaign to this test's confirmed (double-opt-in) subscribers — the "we're live" email. An unsubscribe link is added automatically. Fails if there are no confirmed subscribers yet.
Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['testId', 'subject', 'html'], 'properties': {'html': {'type': 'string', 'description': 'email HTML body (unsubscribe link added automatically)'}, 'text': {'type': 'string', 'description': 'plain-text fallback body'}, 'testId': {'type': 'string', 'description': 'demand test id whose confirmed subscribers to email'}, 'subject': {'type': 'string', 'description': 'email subject line'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
send_email
Send an email from a site
Send an email from <slug>.shiply.now's managed sender. The site can send transactional/notification email — no SMTP setup. Rate-limited and spam-checked; replies route back to the site inbox.
Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'to', 'subject', 'html'], 'properties': {'to': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'recipient email address'}, 'html': {'type': 'string', 'description': 'email HTML body'}, 'slug': {'type': 'string', 'description': 'site slug to send from (<slug>.shiply.now sender)'}, 'text': {'type': 'string', 'description': 'plain-text fallback body'}, 'subject': {'type': 'string', 'description': 'email subject line'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
send_mailbox_broadcast
Broadcast to a mailbox's confirmed audience
Send a one-shot broadcast to the confirmed (double-opt-in) subscribers of a (site, collection) mailbox. Spam-checked; unsubscribe footer auto-added. Fails if no confirmed subscribers exist yet.
Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'collection', 'subject', 'html'], 'properties': {'html': {'type': 'string', 'description': 'email HTML body (unsubscribe footer added automatically)'}, 'slug': {'type': 'string', 'description': 'site slug the mailbox belongs to'}, 'text': {'type': 'string', 'description': 'plain-text fallback body'}, 'subject': {'type': 'string', 'description': 'email subject line'}, 'collection': {'type': 'string', 'description': 'mailbox collection whose confirmed audience to email'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
set_cron
Set or update a cron trigger
Set or update a cron trigger on a site's deployed function. Schedule is crontab syntax (UTC). Path is the URL the cron handler should fire on (for the worker's scheduled() handler context).
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'path', 'schedule'], 'properties': {'path': {'type': 'string', 'maxLength': 300, 'minLength': 1, 'description': 'URL path the cron handler fires on'}, 'slug': {'type': 'string', 'description': 'site slug whose function gets the cron'}, 'schedule': {'type': 'string', 'maxLength': 60, 'minLength': 9, 'description': 'crontab schedule in UTC, e.g. "0 * * * *"'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
set_handle
Set a vanity handle
Give ONE site a vanity URL: rename it to <handle>.shiply.now (3-30 chars, a-z 0-9 -). The old address 301-redirects for 30 days. (For a portfolio page listing all your sites, use set_profile instead — that lives at shiply.now/@<handle>.)
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'handle'], 'properties': {'slug': {'type': 'string', 'description': 'current site slug'}, 'handle': {'type': 'string', 'description': 'new vanity handle, 3-30 chars a-z 0-9 -'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
set_link
Mount a site at a path
Path-mounting: serve an owned target site at a path on an owned host site (host/docs -> target). location is a path like "docs", or "__root__" for the host root. Both sites must be owned by you. Pass remove=true to unmount.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['hostSlug', 'location'], 'properties': {'remove': {'type': 'boolean', 'description': 'unmount instead of mounting'}, 'hostSlug': {'type': 'string', 'description': 'slug of the owned host site'}, 'location': {'type': 'string', 'description': 'path to mount at, e.g. "docs", or "__root__" for the host root'}, 'targetSlug': {'type': 'string', 'description': 'slug of the owned site to serve there (required unless remove=true)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
set_mailbox
Configure a site collection's email behavior
Turn a Site Data collection into a mailbox: double opt-in, owner notifications, sending domain, branding. Call once per (site, collection) to configure how captured leads are handled.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'collection'], 'properties': {'slug': {'type': 'string', 'description': 'site slug the collection belongs to'}, 'branding': {'type': 'object', 'properties': {'logoUrl': {'type': 'string', 'description': 'logo image URL shown in emails'}, 'brandName': {'type': 'string', 'description': 'brand name shown in emails'}, 'brandColor': {'type': 'string', 'description': 'accent color hex, e.g. #2563eb'}}, 'description': 'branding applied to mailbox emails'}, 'notifyTo': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'address to send owner notifications to'}, 'collection': {'type': 'string', 'description': 'Site Data collection to turn into a mailbox'}, 'doubleOptIn': {'type': 'boolean', 'description': 'require email confirmation before a contact is active'}, 'notifyOwner': {'type': 'boolean', 'description': 'email the owner on each new capture'}, 'sendingDomainId': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'BYO sending domain id to send from'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
set_primary_subdomain
Pick the canonical URL for a custom domain
Mark a hostname as the primary (canonical) URL for its site. Sibling hostnames (apex + www both pointed at the same site) start 301-redirecting to it, preserving path + query. The host-side fix for the duplicate-content SEO problem. The first subdomain you add for a site is primary by default; call this only when you need to switch.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['domain', 'hostname'], 'properties': {'domain': {'type': 'string', 'description': 'registered custom domain, e.g. example.com'}, 'hostname': {'type': 'string', 'description': 'full hostname to make primary, e.g. www.example.com'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
set_profile
Set up a public profile
Create or update the user's public PORTFOLIO page at shiply.now/@<handle> (handle 3-30 chars a-z0-9-) — a landing page listing the user's sites. This is NOT a site's address: to give one site a vanity URL like <handle>.shiply.now, use set_handle instead. enable shows the profile; autoAdd auto-lists new sites. Use after publishing to give the user a shareable portfolio.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'enable': {'type': 'boolean', 'description': 'show (true) or hide (false) the public profile'}, 'handle': {'type': 'string', 'description': 'public portfolio handle, 3-30 chars a-z 0-9 -; portfolio lives at shiply.now/@<handle> (a page listing your sites â\x80\x94 not a site URL; for a site vanity URL use set_handle)'}, 'autoAdd': {'type': 'boolean', 'description': 'auto-list newly published sites on the profile'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
set_secret
Set a Worker secret on a site
Set a CF Worker secret on a site's deployed function. Value is encrypted-at-rest and accessible as env.<NAME> inside the worker. Use for Stripe keys, Resend API keys, etc.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'name', 'value'], 'properties': {'name': {'type': 'string', 'pattern': '^[A-Z_][A-Z0-9_]*$', 'maxLength': 80, 'description': 'secret name, UPPER_SNAKE_CASE; available as env.<NAME>'}, 'slug': {'type': 'string', 'description': 'site slug whose function gets the secret'}, 'value': {'type': 'string', 'maxLength': 8192, 'minLength': 1, 'description': 'secret value (encrypted at rest), â\x89¤8 KiB'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
set_site_access
Set site access control
Protect an owned site (paid plans). mode 'public' (anyone), 'password' (supply password), or 'restricted' (supply allowedEmails and/or allowedDomains — only those can request a login code). Changing any setting signs out existing visitors.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug', 'mode'], 'properties': {'mode': {'enum': ['public', 'password', 'restricted'], 'type': 'string', 'description': 'public = anyone; password = supply password; restricted = supply allowedEmails/allowedDomains'}, 'slug': {'type': 'string', 'description': 'owned site slug to protect'}, 'password': {'type': 'string', 'description': "required when mode='password'"}, 'allowedEmails': {'type': 'array', 'items': {'type': 'string'}, 'description': "allowlisted emails when mode='restricted'"}, 'allowedDomains': {'type': 'array', 'items': {'type': 'string'}, 'description': "allowlisted email domains when mode='restricted'"}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
set_variable
Save an encrypted variable
Upsert a key/value in the user's encrypted variable store (UPPER_SNAKE name, ≤8 KiB value). Use for API keys the user's sites/agents need, e.g. SUPABASE_URL. NOTE: saving alone does NOT expose it to any site Worker's env — attach it to a specific site with attach_variable (takes effect on that site's next function deploy).
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name', 'value'], 'properties': {'name': {'type': 'string', 'description': 'variable name, UPPER_SNAKE_CASE, e.g. SUPABASE_URL'}, 'value': {'type': 'string', 'description': 'value to store (encrypted, â\x89¤8 KiB)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
site_status
SSL + readiness check
Check any shiply slug or custom hostname: TLS certificate (issuer, days left) + HTTPS probe. ready=true means live.
Nur Lesen Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['target'], 'properties': {'target': {'type': 'string', 'description': 'slug (my-site) or hostname (www.example.com)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
summarize_thread
AI-summarize an inbox thread
One-paragraph summary of the thread, oriented to the most actionable signal (interest, complaint, question, unsubscribe).
Nur Lesen Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['threadId'], 'properties': {'threadId': {'type': 'string', 'description': 'thread id from list_inbox'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
sync_dns
Sync DNS records
For a connected custom domain, (re)write the CNAME records for all its subdomains automatically and report what changed. For unconnected domains, returns the records to add manually.
Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['domain'], 'properties': {'domain': {'type': 'string', 'description': 'registered custom domain to sync, e.g. example.com'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
unarchive_thread
Unarchive a thread
Restore an archived thread (clears archivedAt). It reappears in the default inbox list. Pair with list_inbox filter=archived to find archived threadIds first.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['threadId'], 'properties': {'threadId': {'type': 'string', 'description': 'archived thread id to restore'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
update_brief
Patch the project brief
Overwrite the project's working brief (jsonb). Hard-capped at 500 KB. Use to revise the AI-generated brief by hand; the original AI output is preserved separately in briefAiOriginal so you can always compare. Does not change status.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id', 'brief'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'project id'}, 'brief': {'type': 'object', 'description': 'the full replacement brief object (jsonb, â\x89¤500 KB)', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
update_listing
Update one of my listings
Patch a listing by siteSlug — change price, pitch, terms, jurisdiction, or status (draft|live|paused). Sold listings cannot be edited. Status transitions enforced server-side. Use to pause sales or drop the price.
Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['siteSlug'], 'properties': {'pitch': {'anyOf': [{'type': 'string', 'maxLength': 280}, {'type': 'null'}], 'description': 'new sales pitch (null to clear)'}, 'status': {'enum': ['draft', 'live', 'paused'], 'type': 'string', 'description': 'new listing status'}, 'siteSlug': {'type': 'string', 'description': 'slug of the listed site to patch'}, 'termsMode': {'enum': ['standard', 'custom'], 'type': 'string', 'description': "'standard' template or 'custom' terms"}, 'priceCents': {'type': 'integer', 'maximum': 999900, 'minimum': 100, 'description': 'new whole-dollar price in cents, 100â\x80\x93999900'}, 'termsCustom': {'anyOf': [{'type': 'string', 'maxLength': 20000}, {'type': 'null'}], 'description': 'new custom terms text (null to clear)'}, 'jurisdiction': {'type': 'string', 'maxLength': 80, 'minLength': 2, 'description': "governing jurisdiction, e.g. 'California, USA'"}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
verify_claim
Verify a Shiply claim pairing code
Confirm a pairing code shown in the user's browser at https://shiply.now/claim/<slug>?pair=1. Use ONLY in the agent session that originally published the site — it reads the claimToken from .shiply.json in the current working directory and proves to Shiply that this agent session is authorised to claim the site. After verification the user is auto-redirected to /welcome and the site binds to their account.
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['code'], 'properties': {'code': {'type': 'string', 'pattern': '^SHIPLY-[A-Z2-7]{8}$', 'description': "the SHIPLY-XXXXXXXX code in the user's browser"}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
verify_sending_domain
Re-check DNS for a sending domain
Trigger Resend to re-check the domain's DNS records, persist the new status. Call after adding the DNS records returned by add_sending_domain. Status flips to 'verified' once SPF + DKIM + MX all check out.
Externer Zugriff Idempotent
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'sending domain id from list_sending_domains'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
verify_site
Verify a live deploy
Edge-check a shiply slug or custom hostname and return a structured readiness report: status (LIVE/PENDING), SSL details (valid, issuer, daysLeft), HTTP probe, and a presigned thumbnail URL when available. Use this after publishing to confirm the site is reachable.
Nur Lesen Externer Zugriff
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['target'], 'properties': {'target': {'type': 'string', 'description': 'slug (my-site) or hostname (www.example.com)'}}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
whoami
Account overview
Who am I? Returns the signed-in account: email, @handle, plan + limits, counts of sites/domains/drives, and connected DNS providers. Call this first to orient before managing sites or domains.
Nur Lesen
Eingabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Ausgabeschema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['result'], 'properties': {'result': {}}, 'additionalProperties': False}
Hinzugefügt
send_mailbox_broadcast
17. September 2026 12:54
Hinzugefügt
list_mailbox_contacts
17. September 2026 12:54
Hinzugefügt
set_mailbox
17. September 2026 12:54
Hinzugefügt
list_site_inbox
17. September 2026 12:54
Hinzugefügt
send_email
17. September 2026 12:54
Hinzugefügt
get_function_logs
17. September 2026 12:54
Hinzugefügt
remove_cron
17. September 2026 12:54
Hinzugefügt
set_cron
17. September 2026 12:54
Hinzugefügt
list_crons
17. September 2026 12:54
Hinzugefügt
remove_secret
17. September 2026 12:54
Hinzugefügt
list_secrets
17. September 2026 12:54
Hinzugefügt
set_secret
17. September 2026 12:54
Hinzugefügt
remove_function
17. September 2026 12:54
Hinzugefügt
get_function
17. September 2026 12:54
Hinzugefügt
deploy_function
17. September 2026 12:54
Hinzugefügt
contract_status
17. September 2026 12:54
Hinzugefügt
contract_pdf
17. September 2026 12:54
Hinzugefügt
contract_amend
17. September 2026 12:54
Hinzugefügt
contract_send
17. September 2026 12:54
Hinzugefügt
contract_draft
17. September 2026 12:54
Hinzugefügt
remove_sending_domain
17. September 2026 12:54
Hinzugefügt
verify_sending_domain
17. September 2026 12:54
Hinzugefügt
add_sending_domain
17. September 2026 12:54
Hinzugefügt
list_sending_domains
17. September 2026 12:54
Hinzugefügt
get_connect_status
17. September 2026 12:54
Hinzugefügt
refund_order
17. September 2026 12:54
Hinzugefügt
list_my_orders
17. September 2026 12:54
Hinzugefügt
list_my_sales
17. September 2026 12:54
Hinzugefügt
delete_listing
17. September 2026 12:54
Hinzugefügt
update_listing
17. September 2026 12:54