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

  1. Include an explicit 'value' in every transaction, even where the value is null or an empty list
  2. For types with no meaningful payload, pass "value": null rather than omitting the key
  3. 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

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


AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21). Data as JSON: /api/errors/5edbe92b29165559. Report an issue: GitHub.