phacility/phabricator · error · Exception
Parameter "%s" must contain a list of transaction descriptio
Error message
Parameter "%s" must contain a list of transaction descriptions, but item with key "%s" is missing a "value" field. Each transaction must have a value field.
What it means
The companion check to the 'type' requirement: every dictionary in the Conduit 'transactions' list must also contain a 'value' key holding the new value for that transaction type. getRawConduitTransactions() throws this when 'value' is absent.
Source
Thrown at src/applications/transactions/editengine/PhabricatorEditEngine.php:2217
pht(
'Parameter "%s" must contain a list of transaction descriptions, '.
'but item with key "%s" is not a dictionary.',
$transactions_key,
$key));
}
if (!array_key_exists('type', $xaction)) {
throw new Exception(
pht(
'Parameter "%s" must contain a list of transaction descriptions, '.
'but item with key "%s" is missing a "type" field. Each '.
'transaction must have a type field.',
$transactions_key,
$key));
}
if (!array_key_exists('value', $xaction)) {
throw new Exception(
pht(
'Parameter "%s" must contain a list of transaction descriptions, '.
'but item with key "%s" is missing a "value" field. Each '.
'transaction must have a value field.',
$transactions_key,
$key));
}
}
return $xactions;
}
/**
* Generate transactions which can be applied from edit actions in a Conduit
* request.
*
* @param ConduitAPIRequest The request.View on GitHub (pinned to 5720a38cfe)
Solutions
- Include an explicit 'value' in every transaction, even where the value is null or an empty list
- For types with no meaningful payload, pass "value": null rather than omitting the key
- Validate client-side that count of required keys ('type','value') is present before sending
Example fix
// before
'transactions' => array(array('type' => 'title')),
// Exception: ... item with key "0" is missing a "value" field.
// after
'transactions' => array(array('type' => 'title', 'value' => 'New title')), Defensive patterns
Strategy: validation
Validate before calling
foreach ($parameters['transactions'] as $i => $txn) {
if (!array_key_exists('value', $txn)) {
// add an explicit value (null / [] where meaningless) before sending
$parameters['transactions'][$i]['value'] = null;
}
} Type guard
function transactionValuePresent(array $txn) {
return array_key_exists('value', $txn);
} Try / catch
try {
$result = $client->callMethod('maniphest.edit', $parameters);
} catch (ConduitClientException $ex) {
if (strpos($ex->getMessage(), 'missing a "value" field') !== false) {
// supply the value; the failing index is in the message
} else {
throw $ex;
}
} Prevention
- Default missing 'value' keys to null in your wrapper rather than omitting them
- Watch for 'val'/'data' typos when hand-writing payloads
- Assert key sets in client tests so renames fail fast
When it happens
Trigger: Sending transactions => [{"type":"title"}] with no value; sending {"type":"comment"} intending a default; misspelling 'value' as 'data', 'val', or 'new'.
Common situations: Assuming optional values (comment text omitted by mistake); schema drift after renaming keys in a homegrown client wrapper; copy-paste from older API examples with different field names.
Related errors
- Parameter "%s" must contain a list of transaction descriptio
- Parameter "%s" is not a list of transactions.
- Parameter "%s" must contain a list of transaction descriptio
- Service "%s" is unrecognized, restricted, or you do not have
- Conduit API method "%s" does not exist.
AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21).
Data as JSON: /api/errors/5edbe92b29165559.
Report an issue: GitHub.