API Reference
REST API for the Shipyard platform. Base URL: https://api.shipyard.wtf
Authentication
All authenticated endpoints require a Bearer token in theAuthorization header. Tokens are either Privy JWTs (from the dashboard) or API tokens (from shipyard login, prefixed with shp_).
Response format
All responses follow this envelope:
// Success
{ "ok": true, "data": { ... } }
// Error
{ "ok": false, "error": { "code": "NOT_FOUND", "message": "..." } }Health
/healthHealth check endpoint.
{ "ok": true, "version": "0.1.0" }Auth
/auth/loginAuth requiredLogin or register. Creates a user record if one doesn't exist for the authenticated identity.
{ "ok": true, "data": { "id": "did:privy:...", "email": "...", "plan": "free" } }/auth/tokensAuth requiredCreate an API token for CLI authentication.
{ "name": "my-laptop" }{ "ok": true, "data": { "id": "...", "name": "my-laptop", "token": "shp_..." } }/auth/tokensAuth requiredList API tokens (token values are not returned).
/auth/tokens/:idAuth requiredRevoke an API token.
Users
/users/meAuth requiredGet the current authenticated user's profile.
{ "ok": true, "data": { "id": "...", "email": "...", "plan": "free", "address": "0x..." } }/users/meAuth requiredUpdate the current user's profile.
{ "displayName": "Jeremy", "avatarUrl": "https://..." }Projects
/projectsAuth requiredList all projects for the authenticated user.
/projectsAuth requiredCreate a new project.
{ "name": "my-app", "framework": "astro", "region": "iad" }{ "ok": true, "data": { "id": "...", "name": "my-app", "framework": "astro", "status": "active" } }/projects/:idAuth requiredGet a project by ID.
/projects/:idAuth requiredUpdate a project.
{ "displayName": "My App", "framework": "next" }/projects/:idAuth requiredSoft-delete a project (sets status to 'deleted').
Deployments
/projects/:id/deploymentsAuth requiredList deployments for a project, ordered by creation date.
/projects/:id/deploymentsAuth requiredCreate a deployment. Triggers Fly.io machine provisioning.
{ "artifactKey": "users/.../artifact.tar.gz", "framework": "astro", "commitSha": "abc123" }/projects/:id/deployments/:deployId/promoteAuth requiredPromote a deployment to production.
Domains
/projects/:id/domainsAuth requiredList domains for a project.
/projects/:id/domainsAuth requiredAdd a custom domain. Returns a TXT record for verification.
{ "domain": "app.example.com" }/projects/:id/domains/:domainId/verifyAuth requiredVerify domain ownership via DNS TXT lookup.
/projects/:id/domains/:domainIdAuth requiredRemove a custom domain.
Storage
/storage/presignAuth requiredGet a presigned upload URL for S3.
{ "key": "users/.../artifact.tar.gz", "contentType": "application/gzip" }{ "ok": true, "data": { "url": "https://s3.../presigned", "key": "..." } }/storage/presign/:keyAuth requiredGet a presigned download URL.