get
https://api.duodeal.app/api/quotations//block-submissions
Everything end clients have filled in on this quotation, decrypted, keyed by block id.
This is what the builder shows in a block's Client answers tab.
These answers deliberately never travel inside quotation.blocks — the builder
autosaves that array wholesale and would clobber them, cloneQuotation() copies it
verbatim into another deal, and the block API, MCP tools and AI chat all read it. They
have their own endpoint, and their own encrypted table.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Quotation id |
Response Fields
Keyed by block id:
| Field | Type | Description |
|---|---|---|
state | object | The client's answers, both halves merged, file descriptors refreshed with a valid signed url |
updatedAt | datetime | Last write |
updatedBy | string/null | Rep's email, or null when the client themself wrote |
scope | string/null | How the anonymous write arrived: share or deal |
size | integer | Plaintext bytes, against the 64 KB per-block budget |
files | array | Attachments on that block, each with id, name, size, mime, url, uploadedAt, uploadedBy |
A block with attachments but no answers yet still gets an entry.
Response
200 OK: the map above,{}when nothing has been filled in403 Forbidden: the quotation belongs to another company404 Not Found: unknown quotation
Recent Requests
Log in to see full request history
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Loading…
200Successful response
401Unauthorized
