Skip to main content
Developer Reference

Gilded Art Works API

Build integrations with our REST API. Manage artworks, generate documents, configure webhooks, and automate your art documentation workflow.

Base URL: https://www.gildedartworks.com/apiAuth: Supabase session cookieFormat: JSON

Authentication

Authenticated endpoints read the Supabase session cookie set when you sign in, and return 401 Unauthorized when there is none. That is the only authentication path implemented.

Keys with a ga_live_ prefix can be minted from Dashboard Settings and are stored hashed, but no route checks one. An Authorization header is never read. A request carrying one is treated exactly as a request without it. Programmatic access from outside a browser session is not available yet.

# From a signed-in browser session (cookie sent automatically):
fetch('/api/artworks').then(r => r.json())

Endpoints

GET/api/artworksAuth

List all artworks in your library

Response: { artworks: Artwork[] }
POST/api/artworksAuth

Create a new artwork record

ParameterTypeRequiredNotes
titlestring✓
artist_namestring✓
mediumstringNo
yearnumberNo
dimensionsstringNo
Response: { artwork: Artwork }
POST/api/documents/pdfAuth

Generate a PDF document (certificate, brochure, customs form)

ParameterTypeRequiredNotes
typestring✓certificate | brochure | customs | bill-of-sale | condition-report | provenance
artwork_idstring✓
Response: PDF binary (application/pdf)
GET/api/searchAuth

Full-text search across artworks, documents and audit logs

ParameterTypeRequiredNotes
qstring✓Min 2 characters
scopestringNoall | artworks | documents | audit
limitnumberNoMax 50
Response: { artworks: [], documents: [], audit: [], total: number }
GET/api/exportAuth

Export data as CSV or JSON

ParameterTypeRequiredNotes
typestring✓artworks | documents | analytics | audit | webhooks
formatstringNocsv | json (default: csv)
Response: File download
POST/api/batchAuth

Execute bulk operations (max 50 per batch)

ParameterTypeRequiredNotes
operationsBatchOperation[]✓{ action, resource, id?, data? }
Response: { total, success, errors, results: BatchResult[] }
GET/api/verify/[artworkId]

Public verification endpoint for artwork authenticity

ParameterTypeRequiredNotes
artworkIdstring✓URL parameter
Response: { verified: boolean, artwork: { title, artist, year } }
GET/api/webhooks/manageAuth

List your webhook subscriptions

Response: { subscriptions: WebhookSub[], supported_events: string[] }
POST/api/webhooks/manageAuth

Create a webhook subscription

ParameterTypeRequiredNotes
urlstring✓
eventsstring[]✓
descriptionstringNo
Response: { subscription: WebhookSub, secret: string }
POST/api/webhooks/testAuth

Send a test event to a webhook subscription

ParameterTypeRequiredNotes
subscription_idstring✓
eventstring✓
Response: { delivery_id, status, response_code, duration_ms, payload_sent }
GET/api/keysAuth

List your API keys (masked)

Response: { keys: ApiKey[] }
POST/api/keysAuth

Generate a new API key (max 5 per account)

ParameterTypeRequiredNotes
namestring✓
scopesstring[]No
Response: { id, name, key, warning }
GET/api/activityAuth

Unified activity timeline (documents, artworks, shares, audit)

Response: { events: ActivityEvent[], total: number }
GET/api/health

Platform health check (database, auth, payments)

Response: { status, services: { db, auth, stripe }, latency_ms }

Webhook Events

Subscribe to platform events and receive HMAC-SHA256 signed payloads at your endpoint. Verify signatures using the X-Gilded-Signature header.

artwork.createdartwork.updatedartwork.deleteddocument.generateddocument.downloadedverification.checkedorder.createdorder.shippedpayment.receivedteam.member_added

Rate Limits

All API endpoints are rate-limited using a sliding-window algorithm. When rate-limited, you'll receive a 429 response withRetry-After and X-RateLimit-Reset headers.

EndpointLimitWindow
/api/shipping101 minute
/api/checkout51 minute
/api/documents/pdf151 minute
/api/artworks201 minute
/api/verify301 minute
/api/batch101 minute