Negotiate a quote
Negotiation strategy and bilingual message drafts.
All action kinds · Project workflow
- Kind:
quote_negotiation - Availability: available
- Registry cost category:
one_call - Lifecycle stage IDs:
quote_negotiation
The cost category describes model work in the registry; it is not a manufacturing price or a monetary quote. Read maglev actions kinds --json for current availability and schemas.
What this does
Section titled “What this does”Can create a negotiation message draft. It does not send that message or establish that a factory accepted its terms.
Send these fields inside the request’s input object. Use only facts you have, and keep unresolved requirements explicit. Optional fields with defaults can be omitted.
| Field | Type | Required | Details |
|---|---|---|---|
quote |
object | No | The normalised quote from quote_record |
quote.priceBreaks |
object[] | No | |
quote.priceBreaks[].quantity |
integer | If parent supplied | Maximum 9007199254740991. Greater than 0 |
quote.priceBreaks[].unitPrice |
number | If parent supplied | Minimum 0 |
quote.priceBreaks[].currency |
string | If parent supplied | The currency the factory wrote. unknown when the text names none.. One of: USD, CNY, unknown |
quote.toolingCost |
number or null | No | |
quote.toolingCurrency |
string or null | No | |
quote.toolingType |
string,null | No | What the factory called the tool, in its words: 718H rapid tool, aluminium bridge tool, steel production tool, stencil, fixture |
quote.moldOwnership |
string | No | One of: customer, factory, unknown |
quote.sampleCost |
number or null | No | |
quote.sampleLeadDays |
integer or null | No | |
quote.toolingLeadDays |
integer or null | No | |
quote.productionLeadDays |
integer or null | No | |
quote.moq |
integer or null | No | |
quote.paymentTerms |
string,null | No | |
quote.validUntil |
string,null | No | |
quote.incoterm |
string,null | No | |
quote.quoteUnit |
string | No | One of: piece, set, unknown |
quote.taxIncluded |
string | No | One of: included, excluded, unknown |
quote.exclusions |
string[] | No | What the factory said the price does not include |
quote.dfmNotes |
string,null | No | |
quote.regulatoryClaims |
string[] | No | Anything the factory said about certification, customs or law, recorded as its claim and not as fact |
quote.evidence |
object[] | No | Verbatim substrings of the quote text that support each recorded field |
quote.evidence[].field |
string | If parent supplied | |
quote.evidence[].quote |
string | If parent supplied | |
quoteText |
string | No | Or the factory’s reply as free text. Min length 1. Max length 12000 |
targets |
object | No | Default: {} |
targets.unitPriceUsd |
number | No | Greater than 0 |
targets.leadTimeDays |
integer | No | Maximum 9007199254740991. Greater than 0 |
targets.moq |
integer | No | Maximum 9007199254740991. Greater than 0 |
targets.toolingOwnership |
“customer” | No | |
totalPlannedUnitsAcrossBatches |
integer | No | Every batch the founder has told us about, added together. Maximum 9007199254740991. Greater than 0 |
leverage |
string[] | No | What we are authorised to offer: an early deposit, a follow on order, flexibility on a date. Max items 8 |
factoryId |
string | No | Min length 1. Max length 120 |
factoryName |
string | No | Min length 1. Max length 200 |
tone |
string | No | One of: warm, direct. Default: “warm” |
Input JSON schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "quote": { "description": "The normalised quote from quote_record", "type": "object", "properties": { "priceBreaks": { "type": "array", "items": { "type": "object", "properties": { "quantity": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "unitPrice": { "type": "number", "minimum": 0 }, "currency": { "type": "string", "enum": [ "USD", "CNY", "unknown" ], "description": "The currency the factory wrote. unknown when the text names none." } }, "required": [ "quantity", "unitPrice", "currency" ] } }, "toolingCost": { "anyOf": [ { "type": "number", "minimum": 0 }, { "type": "null" } ] }, "toolingCurrency": { "anyOf": [ { "type": "string", "enum": [ "USD", "CNY", "unknown" ] }, { "type": "null" } ] }, "toolingType": { "description": "What the factory called the tool, in its words: 718H rapid tool, aluminium bridge tool, steel production tool, stencil, fixture", "type": [ "string", "null" ] }, "moldOwnership": { "type": "string", "enum": [ "customer", "factory", "unknown" ] }, "sampleCost": { "anyOf": [ { "type": "number", "minimum": 0 }, { "type": "null" } ] }, "sampleLeadDays": { "anyOf": [ { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, { "type": "null" } ] }, "toolingLeadDays": { "anyOf": [ { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, { "type": "null" } ] }, "productionLeadDays": { "anyOf": [ { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, { "type": "null" } ] }, "moq": { "anyOf": [ { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, { "type": "null" } ] }, "paymentTerms": { "type": [ "string", "null" ] }, "validUntil": { "type": [ "string", "null" ] }, "incoterm": { "type": [ "string", "null" ] }, "quoteUnit": { "type": "string", "enum": [ "piece", "set", "unknown" ] }, "taxIncluded": { "type": "string", "enum": [ "included", "excluded", "unknown" ] }, "exclusions": { "type": "array", "items": { "type": "string" }, "description": "What the factory said the price does not include" }, "dfmNotes": { "type": [ "string", "null" ] }, "regulatoryClaims": { "type": "array", "items": { "type": "string" }, "description": "Anything the factory said about certification, customs or law, recorded as its claim and not as fact" }, "evidence": { "type": "array", "items": { "type": "object", "properties": { "field": { "type": "string" }, "quote": { "type": "string" } }, "required": [ "field", "quote" ] }, "description": "Verbatim substrings of the quote text that support each recorded field" } } }, "quoteText": { "description": "Or the factory's reply as free text", "type": "string", "minLength": 1, "maxLength": 12000 }, "targets": { "default": {}, "type": "object", "properties": { "unitPriceUsd": { "type": "number", "exclusiveMinimum": 0 }, "leadTimeDays": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "moq": { "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "toolingOwnership": { "type": "string", "const": "customer" } } }, "totalPlannedUnitsAcrossBatches": { "description": "Every batch the founder has told us about, added together", "type": "integer", "exclusiveMinimum": 0, "maximum": 9007199254740991 }, "leverage": { "description": "What we are authorised to offer: an early deposit, a follow on order, flexibility on a date", "maxItems": 8, "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 200 } }, "factoryId": { "type": "string", "minLength": 1, "maxLength": 120 }, "factoryName": { "type": "string", "minLength": 1, "maxLength": 200 }, "tone": { "default": "warm", "type": "string", "enum": [ "warm", "direct" ] } }, "anyOf": [ { "required": [ "quote" ] }, { "required": [ "quoteText" ] } ]}Request the action
Section titled “Request the action”Prepare action.json with kind: "quote_negotiation" and an input object matching the schema above.
Replace PROJECT_ID with your saved project ID. Use a new idempotency key for new work and retain it for an identical retry.
maglev actions request PROJECT_ID --input action.json \ --idempotency-key example-quote-negotiation-001 --jsonRead action.status, action.output, deliveries and any task in the response. Model actions can take several minutes. After a timeout, check saved actions before retrying. See request and recovery behavior.
Output
Section titled “Output”The schema below describes action.output.result. The saved action.output envelope also contains draft: true and a note. It can be null while an action is running or after a failure; check the status before reading the result. Null or missing facts are unknown; preserve source references and open questions.
| Field | Type | Required | Details |
|---|---|---|---|
strategy |
object[] | Yes | Min items 1 |
strategy[].point |
string | If parent supplied | |
strategy[].why |
string | If parent supplied | |
strategy[].ask |
string | If parent supplied | |
counterMessageZh |
string | Yes | |
counterMessageEn |
string | Yes | |
doNotSay |
string[] | Yes | |
expectedResponses |
object[] | Yes | |
expectedResponses[].ifTheySay |
string | If parent supplied | |
expectedResponses[].thenWe |
string | If parent supplied | |
factory |
object or null | Yes | |
factoryResolved |
boolean | Yes | |
arithmetic |
object or null | Yes | |
subjectZh |
string | Yes |
Output JSON schema
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "properties": { "strategy": { "minItems": 1, "type": "array", "items": { "type": "object", "properties": { "point": { "type": "string" }, "why": { "type": "string" }, "ask": { "type": "string" } }, "required": [ "point", "why", "ask" ], "additionalProperties": false } }, "counterMessageZh": { "type": "string" }, "counterMessageEn": { "type": "string" }, "doNotSay": { "type": "array", "items": { "type": "string" } }, "expectedResponses": { "type": "array", "items": { "type": "object", "properties": { "ifTheySay": { "type": "string" }, "thenWe": { "type": "string" } }, "required": [ "ifTheySay", "thenWe" ], "additionalProperties": false } }, "factory": { "anyOf": [ { "type": "object", "properties": { "factoryId": { "type": [ "string", "null" ] }, "directoryId": { "type": [ "string", "null" ] }, "nameEn": { "type": "string" }, "nameZh": { "type": [ "string", "null" ] } }, "required": [ "factoryId", "directoryId", "nameEn", "nameZh" ], "additionalProperties": false }, { "type": "null" } ] }, "factoryResolved": { "type": "boolean" }, "arithmetic": { "anyOf": [ { "type": "object", "properties": { "plannedTotal": { "type": "number" }, "moq": { "type": "number" }, "gap": { "type": "number", "description": "MOQ minus the planned total; zero or negative means the batches already clear the minimum" }, "ratio": { "type": "number", "description": "MOQ divided by the planned total" }, "reading": { "type": "string" } }, "required": [ "plannedTotal", "moq", "gap", "ratio", "reading" ], "additionalProperties": false }, { "type": "null" } ] }, "subjectZh": { "type": "string" } }, "required": [ "strategy", "counterMessageZh", "counterMessageEn", "doNotSay", "expectedResponses", "factory", "factoryResolved", "arithmetic", "subjectZh" ], "additionalProperties": false}