# Launchpad API > Launchpad is a landing page builder. This API lets you create, manage, and publish landing pages programmatically. ## Authentication All endpoints require a Bearer token (API key) in the Authorization header. Format: Authorization: Bearer lp_live_... ## Base URL https://www.impakt.academy/api/v1 ## Rate Limits Default: 100 requests/minute. AI endpoints cost 5 units. ## Endpoints ### Pages - GET /api/v1/pages -- List pages (page, per_page, is_published, page_type) - POST /api/v1/pages -- Create a page (title, slug?, description?, page_type?, route_path?) - GET /api/v1/pages/{id} -- Get a page - PATCH /api/v1/pages/{id} -- Update a page (title?, slug?, description?, theme_config?, route_path?) - DELETE /api/v1/pages/{id} -- Delete a page ### Publishing - POST /api/v1/pages/{id}/publish -- Publish a page - DELETE /api/v1/pages/{id}/publish -- Unpublish a page ### Blocks - GET /api/v1/pages/{id}/blocks -- List blocks for a page - POST /api/v1/pages/{id}/blocks -- Add a block to a page (type, content?, sort_order?) - PATCH /api/v1/pages/{id}/blocks/{blockId} -- Update a block (content?, sort_order?, is_visible?) - DELETE /api/v1/pages/{id}/blocks/{blockId} -- Delete a block - PUT /api/v1/pages/{id}/blocks/reorder -- Reorder blocks on a page (block_ids) ### Blog - GET /api/v1/blog -- List blog posts - POST /api/v1/blog -- Create a blog post (title, slug, excerpt?, cover_image_url?, body?, category?, tags?) - GET /api/v1/blog/{postId} -- Get a blog post - PATCH /api/v1/blog/{postId} -- Update a blog post (title?, slug?, excerpt?, cover_image_url?, body?, category?, tags?) - DELETE /api/v1/blog/{postId} -- Delete a blog post - POST /api/v1/blog/{postId}/publish -- Publish a blog post - DELETE /api/v1/blog/{postId}/publish -- Unpublish a blog post ### Calendar - GET /api/v1/cal/event-types -- List calendar event types - POST /api/v1/cal/event-types -- Create a calendar event type (title, slug, lengthInMinutes, description?) - GET /api/v1/cal/slots -- Get available time slots (eventTypeId, startTime, endTime) - GET /api/v1/cal/bookings -- List calendar bookings - POST /api/v1/cal/bookings -- Create a calendar booking (eventTypeId, startTime, attendee) - GET /api/v1/cal/account -- Get calendar account info ### Block Types - GET /api/v1/block-types -- List available block types ### Templates - GET /api/v1/templates -- List page templates ### Submissions - GET /api/v1/pages/{id}/submissions -- List contact submissions (page, per_page) - GET /api/v1/submissions -- List all submissions across pages (page, per_page) - GET /api/v1/submissions/{id} -- Get a submission - DELETE /api/v1/submissions/{id} -- Delete a submission ### Upload - POST /api/v1/upload -- Upload a file (file?) ### API Keys - GET /api/v1/api-keys -- List API keys - POST /api/v1/api-keys -- Create an API key (name, permissions, expires_at?) - DELETE /api/v1/api-keys/{id} -- Delete an API key ### Webhooks - GET /api/v1/webhooks -- List webhooks - POST /api/v1/webhooks -- Create a webhook (url, events, description?) - GET /api/v1/webhooks/{id} -- Get a webhook - PATCH /api/v1/webhooks/{id} -- Update a webhook (url?, events?, is_active?, description?) - DELETE /api/v1/webhooks/{id} -- Delete a webhook - POST /api/webhooks/stripe -- Stripe webhook handler ### AI - POST /api/v1/ai/generate -- Generate a page with AI (prompt, template?) - POST /api/v1/ai/generate-block -- Generate a block with AI (page_id, block_type, prompt?, variant?) - POST /api/v1/ai/refine -- Refine block content with AI (block_id, instructions) - POST /api/v1/ai/suggest-content -- Get AI content suggestions for a block (block_id, prompt) ### Discovery - GET /api/v1/schema -- OpenAPI schema - GET /api/v1/llms.txt -- LLM-readable API documentation ### Contact - POST /api/contact/{pageId} -- Submit a contact form (name?, email, phone?, message?) ## Block Types Available types: hero, about, services, testimonials, cta, footer, pricing, faq, contact, features, logo-cloud, metrics, newsletter, blog-preview, booking Each block has a content schema. Use GET /api/v1/block-types for full schemas. - **hero**: A large banner section with headline, subheadline, and call-to-action. (variants: centered, split-image, with-mockup, minimal, split-form, with-video, simple-text, color-card, iphone-mockup, geometric) - **about**: Share your story, credentials, and specialties. (variants: side-by-side, card, centered) - **services**: Showcase the services you offer with descriptions and pricing. (variants: icon-grid, icon-cards, alternating) - **testimonials**: Display client reviews and ratings. (variants: centered-quote, card-grid, social-cards) - **cta**: Encourage visitors to take action with a prominent CTA section. (variants: simple-centered, card, branded) - **footer**: Page footer with contact info, social links, and copyright. (variants: standard, with-social, cta, minimal) - **pricing**: Display pricing tiers with features and CTAs. (variants: simple-cards, featured-cards, minimal) - **faq**: Answer common questions in accordion or grid layout. (variants: accordion, two-column, simple-grid) - **contact**: A contact form for visitors to reach out. (variants: simple-form, with-info, split-image) - **features**: Highlight key features and capabilities with icons. (variants: icon-grid, icon-cards, centered) - **logo-cloud**: Display logos of trusted partners and clients. (variants: simple, with-heading, card) - **metrics**: Showcase key numbers and statistics. (variants: centered, with-heading, card) - **newsletter**: Email signup form for newsletters. (variants: centered, card, left-aligned) - **blog-preview**: Show your latest blog posts on the page. (variants: left-aligned, centered, card-grid) - **booking**: Embed a Cal.com booking calendar for scheduling meetings. (variants: inline, popup-button, card) ## Webhook Events page.created, page.updated, page.published, page.unpublished, page.deleted, block.created, block.updated, block.deleted, contact.created Webhooks receive a POST with JSON body: { event, timestamp, data } Verify the X-Launchpad-Signature header using HMAC-SHA256 with your webhook secret. ## Public Content API (No Auth Required) These endpoints are publicly accessible and do not require authentication. - GET /api/v1/public/{slug} -- Get published root page content as structured JSON - GET /api/v1/public/{parent}/{child} -- Get published child page content as structured JSON Response: { title, description, slug, url, blocks: [{ type, content }] } Cached for 60 seconds. ## Response Format All responses use a JSON envelope: Success: { "data": ..., "meta": { "page", "per_page", "total" } } Error: { "error": { "code": "...", "message": "..." } } ## Status Codes - 200 OK - 201 Created - 400 Bad Request (validation error) - 401 Unauthorized (missing or invalid API key) - 403 Forbidden (insufficient permissions) - 404 Not Found - 409 Conflict (duplicate slug) - 429 Rate Limited - 500 Internal Error