API
For teams building their own UI. You call the same REST endpoints the SDK uses under the hood.
When to use the API
For teams building their own UI: mobile apps, server-rendered sites, or anything that does not want our JS bundle. You call the same REST endpoints the SDK uses under the hood.
Prefer the storefront SDK when you want the fastest path in a browser.
Setup steps
Credentials & storefront URL
Credentials & storefront URL
Open Credentials in Settings. Copy your publishable key (
dress_pk_…) and secret key (dress_sk_…). Keep the secret key on your server only - never in client code.On the same page, enter and save your storefront URL - the public site or app origin where try-on runs (e.g.
https://your-store.com). DressApp uses this to allow your domain for API calls.Create shopper sessions (server only)
Create shopper sessions (server only)
POST /partner/v1/sessionsAuthorization: Bearer dress_sk_live_… { "external_user_ref": "customer-12345" } // Response: { "access_token": "…" } (JWT - safe for the client)Never send the secret key to the client; only pass the access token.
Sync catalog (server only)
Sync catalog (server only)
POST /partner/v1/productsAuthorization: Bearer dress_sk_live_… { "external_id": "SKU-001", "title": "Blue dress", "url": "https://yoursite.com/p/blue-dress", "image_urls": ["https://yoursite.com/img/1.jpg"], "gender": "women" } // Store the returned product_id for try-on callsCheck if the shopper has a model
Check if the shopper has a model
GET /user-model/currentAuthorization: Bearer <shopper access_token> // null or empty → they need onboarding firstModel creation
Model creation
Send the shopper to DressApp's model studio:
Embed model studioGET https://api.dressapp.me/embed/model-studio?access_token=<token>&partner_return=https://yoursite.com/returnOr build the URL from
GET /partner/v1/embed-config(publishable key) → usepublic_app_url+/onboarding?access_token=….Start a try-on
Start a try-on
POST /tryon/{product_id}?async=trueAuthorization: Bearer <shopper access_token> // Response (HTTP 202): { "job_id": "…" }Poll for the result
Poll for the result
GET /tryon/jobs/{job_id}Authorization: Bearer <shopper access_token> // When status is "completed", the response includes image URL(s)Alternative: register webhooks via
POST /partner/v1/webhooksfortryon.job.completed/tryon.job.failedand skip polling.Optional extras
Optional extras
- Try-on history:
GET /tryon/history- Usage / quota:
GET /partner/v1/merchants/me/usage- (secret key)
- Bill Gemini on your Google project:
PUT /partner/v1/integrations/google-api-key
Verify before launch
Verify before launch
HTTPS everywhere, secret key never in client code, one full test run end to end.