Endpoints
/api/openapi.json
OpenAPI 3.1 spec — for Postman, Insomnia, SDK generation, AI agents
/api/website
Submit a website request — returns a request ID and optional upload URLs
/api/website
Submits a non-binding website request. The request is forwarded internally by email and the customer is notified, then the Pageship team follows up with a free preview. If attachments are provided, the response includes pre-signed upload URLs for bunny.net Storage.
POST https://pageship.de/api/website
Content-Type: application/jsonRequest body
contactRequiredContact details of the customer making the request.
firstNamestringFirst namelastNamestringLast nameemailstringEmail addressphonestringPhone numbercompanystringCompany name
billingOptionalBilling address, in case the customer wants to provide it upfront.
namestringBilling recipientcompanystringCompany (if different)streetstringStreet and house numberzipstringPostal codecitystringCitycountrystringCountry code ISO 3166-1 alpha-2, e.g. DEvatIdstringVAT ID (for B2B)emailstringBilling email (if different)
questionnaireRequired Website questionnaire — sub-objects basics, goals, pages, design, features and imprint.
basicsOptionalbrandNamestringBrand or company nameofferstringShort description of the offering, 1–2 sentenceslocationstringLocationserviceAreastringService area / catchment areacontactMethodsstring[]phone, email, contact_form, whatsapphasLogobooleanLogo available?brandColorsstring[]Hex color values, e.g. ["#2d6a4f"]
goalsOptionalprimaryGoalstringMain goal of the websiteprimaryCtastringFirst action visitors should taketargetAudiencestringDescription of the target audience
pagesOptionaltypestringone_pager or multi_pagepagesstring[]Desired subpages (multi_page)contentStatus.textsAvailablebooleanCustomer-provided texts available?contentStatus.imagesAvailablebooleanCustomer-provided images available?contentStatus.imageCountintegerNumber of available images
designOptionaltonestringDesired tone, e.g. "professional, modern, friendly"referenceUrlsstring[]Style reference URLsstyleNotesstringAdditional design notes
featuresOptionalcontactFormbooleanContact formnewsletterbooleanNewsletter integrationbookingbooleanBooking / appointment systemshopbooleanOnline shopblogbooleanBloggallerybooleanImage gallery / portfolio sectionlanguagesstring[]ISO 639-1 language codes, e.g. ["de"]hasPrivacyPolicybooleanPrivacy policy already available?hasTermsbooleanTerms and conditions already available?
imprintOptionallegalFormstringLegal form, e.g. Einzelunternehmen, GmbH, UGrepresentativestringAuthorised representative / managing directorregisterCourtstringRegister courtregisterNumberstringCommercial register number (HRB/HRA)
domainOptionalrequestedDesired domain, e.g. my-business.desuggestPageship should suggest suitable domainstldsPreferred TLDs, default: [".de"]
attachmentsOptional Files are not transmitted directly. The API returns pre-signed upload URLs; files are then uploaded via PUT directly to those URLs. Each entry contains filename and mimeType.
logoobjectmax 1 · png, jpeg, webp, svg+xml, gifphotosarraymax 20 · png, jpeg, webp, svg+xml, gifvideosarraymax 5 · mp4, webm, quicktimedocsarraymax 10 · application/pdf
notesoptional · max. 2000 characters — free text for special requests or notes. Sample request
{
"contact": {
"firstName": "Max",
"lastName": "Mustermann",
"email": "max@mustermann.de",
"phone": "+49 151 12345678",
"company": "Mustermann GmbH"
},
"billing": {
"name": "Max Mustermann",
"company": "Mustermann GmbH",
"street": "Musterstraße 42",
"zip": "10115",
"city": "Berlin",
"country": "DE",
"vatId": "DE123456789"
},
"questionnaire": {
"basics": {
"brandName": "Mustermann Garden Design",
"offer": "Professional garden design and maintenance for private customers in the Berlin area.",
"location": "Berlin",
"serviceArea": "Berlin & Brandenburg (up to 50 km)",
"contactMethods": ["phone", "email", "contact_form"],
"hasLogo": true,
"brandColors": ["#2d6a4f", "#ffffff"]
},
"goals": {
"primaryGoal": "Acquire new customers",
"primaryCta": "Request a free quote",
"targetAudience": "Private homeowners with a garden, age 35–65"
},
"pages": {
"type": "multi_page",
"pages": ["Home", "Services", "About", "Contact"],
"contentStatus": {
"textsAvailable": false,
"imagesAvailable": true,
"imageCount": 12
}
},
"design": {
"tone": "professional, trustworthy, natural",
"styleNotes": "Plenty of whitespace, clean structure, natural colors"
},
"features": {
"contactForm": true,
"newsletter": false,
"booking": false,
"shop": false,
"blog": false,
"gallery": true,
"languages": ["de"],
"hasPrivacyPolicy": false,
"hasTerms": false
}
},
"domain": {
"requested": "mustermann-garten.de",
"suggest": true,
"tlds": [".de", ".com"]
},
"attachments": {
"logo": { "filename": "logo.svg", "mimeType": "image/svg+xml" },
"photos": [
{ "filename": "garden-01.jpg", "mimeType": "image/jpeg" }
]
},
"notes": "Please test the logo on both white and dark green backgrounds."
}Responses
{
"id": "ws_01j9k2m3n4p5q6r7s8t9",
"status": "pending",
"createdAt": "2026-04-27T10:00:00Z",
"uploadUrls": {
"logo": {
"filename": "logo.svg",
"url": "https://storage.bunnycdn.com/pageship-uploads/ws_.../logo/logo.svg?token=...&expires=...",
"method": "PUT",
"expiresAt": "2026-04-28T10:00:00Z"
},
"photos": [
{
"filename": "garden-01.jpg",
"url": "https://storage.bunnycdn.com/pageship-uploads/ws_.../photos/garden-01.jpg?token=...",
"method": "PUT",
"expiresAt": "2026-04-28T10:00:00Z"
}
]
}
}uploadUrls is only present when attachments were provided in the request. Upload URLs are valid for 24 hours.
{
"error": "validation_failed",
"fields": {
"contact.email": "Required field missing",
"questionnaire.basics.brandName": "Required field missing"
}
}File upload
Files are not transmitted in the API request itself. Instead, after a successful request the API returns pre-signed PUT URLs. Files are uploaded directly via PUT to bunny.net Storage — no Authorization header needed, the URL is already signed.
Submit the request
POST https://pageship.de/api/website
Content-Type: application/json
{ ..., "attachments": { "logo": { "filename": "logo.png", "mimeType": "image/png" } } }Upload the file directly to bunny.net
PUT {uploadUrls.logo.url}
Content-Type: image/png
<binary file data>AI integration
The Pageship API is designed to work directly with AI agents and automation frameworks.
OpenAPI / Postman
Import via /api/openapi.json — compatible with Postman, Insomnia, Bruno, and API marketplaces.
ChatGPT / LangChain
Discovery via ai-plugin.json — standard manifest for ChatGPT Actions and agent frameworks.
LLM Context
Short: /llms.txt — Full: /llms-full.txt (incl. complete API docs, llmstxt.org standard).