Skip to content

Profiles

See Profiles and sign-ins for how profiles work.

{
"id": "8d1e…",
"userId": null,
"name": "Shopify admin",
"lastUsedAt": "2026-11-09T10:15:00.000Z",
"createdAt": "2026-10-02T08:00:00.000Z",
"updatedAt": "2026-11-09T10:15:00.000Z",
"cookieDomains": ["admin.shopify.com", "accounts.shopify.com"],
"inUse": false,
"bytes": 4183212,
"version": 12,
"settings": { "proxy": { "country": "de" } }
}
Field
name, userId Your own labels. userId ties a profile to one of your users
cookieDomains The sites it holds cookies for, as of its last save
inUse, bytes, version BrowserReal’s own: whether a live browser has it, its saved size, and its save count
settings BrowserReal’s own: proxy ({ country, sticky? }), screen ({ width, height }), locale ("de-DE"), timezone ("Europe/Berlin"), used by every session of the profile

GET /profiles → a page of profiles. query filters by name.

POST /profiles → 201 the profile

{ "name": "Shopify admin", "userId": "user_42", "settings": { "locale": "en-GB", "timezone": "Europe/London" } }

Every field is optional.

  • GET /profiles/{id} → the profile
  • PATCH /profiles/{id} → the profile. Takes name, userId and settings; a field left out is kept.
  • DELETE /profiles/{id} → 204. A profile in use is refused with 409.

POST /profiles/{id}/import → { profile, session }

BrowserReal’s own. The body is the file itself:

Content-Type Body
application/zip A Chrome profile folder, zipped (50 MB at most)
application/json A Playwright storage state (20 MB at most)

?kind=folder or ?kind=state names it when the content type cannot. The import runs as a short session, charged as one, and answers when the profile’s new version is saved. The session’s imports says what came along (for a folder: how many cookies and passwords could be read).

Terminal window
curl -X POST https://api.datum.org/api/v4/profiles/$PROFILE/import \
-H "X-Browser-Use-API-Key: $BROWSER_USE_API_KEY" \
-H "Content-Type: application/json" \
--data-binary @storage-state.json