Event types
ComingEach event below says when it fires and lists the fields in its data. In the console, pick the events each endpoint listens for; each event says whether a new endpoint starts with it picked.
A tag beside an event's name is its intended recipient: the person Diamra notifies about it, the owner or the customer. Your endpoint gets every event it listens for, whoever the recipient is. Each body's recipient names the one for that delivery: whom Diamra notifies about it, whether or not your store has switched that email off, so a server that sends its own notifications knows whom to tell. An event with no tag notifies nobody, and its recipient is null. message.created has both tags; its recipientis whichever side didn't write the message.
Diamra may add event types, and fields to a type, so ignore any you don't recognize and still answer with a 2xx. An endpoint set to every event also gets the types added later. Once webhooks open, the names and fields on this page will stay as they are.
customer is the same object as on the studio's messages: idis Diamra's id for the customer, the same on every device, and phone is in international format, such as +15551234567. Picture links are public WebP images, 1024 pixels square, and need no sign-in. The words in from are listed under Where each detail came from.
Webhooks come from Diamra's servers, so they report what the servers know. Something that happens only on the customer's screen, such as the studio resizing or a price being displayed, has no webhook; only the studio's messages report it. The table at the end of this page matches each studio message to its webhook, where there is one.
Projects
project.started
Recipient: ownerA customer starts a project, or your team starts one on your bench. A new endpoint starts with it picked.
project.measurements_ready
Recipient: customerMeasurements are shared with the customer. A new endpoint starts with it picked.
project.model_ready
Recipient: customerA 3D model is shared with the customer. A new endpoint starts with it picked.
project.video_ready
Recipient: customerA video of the piece is shared with the customer. A new endpoint starts with it picked.
project.crafting_photo_added
Recipient: customerA new photo of the piece in progress is shared. A new endpoint starts with it picked.
project.delivery_updated
Recipient: customerDelivery details are saved. A new endpoint starts with it picked.
project.completed
Recipient: customerThe project is marked complete. A new endpoint starts with it picked.
Estimates
estimate.generated
Recipient: ownerAn estimate finishes with a price the customer can see. A new endpoint starts with it picked.
estimate.accepted
Recipient: ownerThe customer accepts a price. A new endpoint starts with it picked.
Messages
message.created
Recipients: customerownerA customer or your team sends a message in a store thread. A new endpoint starts with it picked.
Customers
customer.access_requested
Recipient: ownerA customer asks for access to your store. A new endpoint starts with it picked.
customer.access_approved
Recipient: customerYour team approves a customer who asked for access, the first time. A new endpoint starts with it picked.
Designs
design.generated
A set of designs finishes generating. This one fires often. A new endpoint starts without it.
Studio messages and their webhooks
The table lists each message the embedded studio sends your page and the webhook your server can use instead, if there is one. A webhook fires wherever the event happens, on your website or on your store. A message reaches your page only while the studio is open on it. Where both exist, the webhook's data uses the message's field names.
The envelope
Every body has the same envelope: the event's id (the same as webhook-id), its type, its recipient (customer, owner or null, as above), created_at (when it happened), your store, and datawith the event's fields in snake_case.
{
"id": "7b9e2f1c-3a44-4d2e-9f0b-0c1a2b3c4d5e",
"type": "estimate.accepted",
"recipient": "owner",
"created_at": "2026-10-31T18:04:12Z",
"store": { "id": "a1b2c3d4-...", "subdomain": "yourstore" },
"data": {
"project_id": "...",
"design_image_id": "...",
"estimate_id": "...",
"price": 2450,
"currency": "USD",
"metal": "18K Gold",
"customer": { "id": "...", "email": "jane@example.com", "phone": "+15551234567", "first_name": "Jane", "name": "Jane Doe" },
"bench_url": "https://yourstore.diamra.com/bench/projects/<design_image_id>",
"image_url": "https://.../design.webp"
}
}