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
mediumstring
yearnumber
dimensionsstring
Response: { artwork: Artwork }
POST/api/documents/pdfAuth

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

ParameterTypeRequiredNotes
typestringcertificate | 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
qstringMin 2 characters
scopestringall | artworks | documents | audit
limitnumberMax 50
Response: { artworks: [], documents: [], audit: [], total: number }
GET/api/exportAuth

Export data as CSV or JSON

ParameterTypeRequiredNotes
typestringartworks | documents | analytics | audit | webhooks
formatstringcsv | 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
artworkIdstringURL 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[]
descriptionstring
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[]
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