Skip to content

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.

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"
]
}
]
}

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.

Terminal window
maglev actions request PROJECT_ID --input action.json \
--idempotency-key example-quote-negotiation-001 --json

Read 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.

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
}