# updateDealCustomField

Edit an existing deal custom-field DEFINITION in place (by id from listDealCustomFields). THIS IS THE CORRECT WAY TO ADD A DROPDOWN OPTION or fix a wrong name or default: do not create a second field. Owner-only: the field's pipeline must be OWNED by your organization; a field on a pipeline merely shared with you cannot be edited. Omitted fields are untouched. The field's TYPE cannot be changed. `options` applies to DROPDOWN fields and REPLACES the whole option list rather than appending: send every option you want to keep, each existing one as { id, label } with its id from listDealCustomFields, and each new one as { label } with no id. To RENAME an option, send its existing id with the new label: every value already recorded on deals, the field's default, and the saved filters and queued bulk tasks naming the old label all move to the new one. Sending a new label WITHOUT the id instead removes the old option and creates a different one. Any existing option you leave out is REMOVED; if deals or filters still reference a removed option the call is rejected until you pass optionDependencyResolutions: from getDeletionImpact (DEAL_CUSTOM_FIELD_OPTION, the option id), the person picking each replacement. A default that is no longer one of the options is cleared. Names must be unique within the pipeline. Returns the updated field with its full option list.

- Call: `POST https://server.goliathdata.com/api/v1/call` with `{ "operationId": "updateDealCustomField", "variables": {...} }`
- Scope: `WRITE`
- Type: mutation
- Idempotency: honors `Idempotency-Key` (24 h)
- Rate-limited: no

## Variables

- `customFieldId`: `ID!` (required)
- `name`: `String`
- `options`: `[UpsertPipelineItemCustomFieldOptionInput!]`
  - `id`: `ID`
  - `label`: `String!` (required)
- `defaultValue`: `String`
- `optionDependencyResolutions`: `[DependencyResolutionInput!]`
  - `impactVersion`: `String!` (required)
  - `replacements`: `[DependencyReplacementSelectionInput!]!` (required)
    - `targetKind`: `DependencyTargetKind!` (required, one of `PIPELINE_ITEM`, `DEAL`, `PIPELINE_STAGE_PIPELINE_ITEMS`, `DEAL_STAGE_DEALS`, `PIPELINE_ITEM_CUSTOM_FIELD`, `DEAL_CUSTOM_FIELD`, `PIPELINE_ITEM_CUSTOM_FIELD_OPTION`, `DEAL_CUSTOM_FIELD_OPTION`, `PROPERTY_TAG`, `PROPERTY_LIST`, `CONTACT_TAG`, `CONTACT_LIST`, `CONTACT_CUSTOM_FIELD`, `CONTACT_CUSTOM_FIELD_OPTION`, `PIPELINE`, `DEAL_PIPELINE`, `PIPELINE_STAGE`, `DEAL_STAGE`, `TWILIO_PHONE_NUMBER`, `EMAIL_IDENTITY`, `LIBRARY_FOLDER`, `USER`, `USER_GROUP`, `WORKFLOW_GROUP`, `WORKFLOW_AUTOMATION`, `CONTENT_TEMPLATE`, `AGENT`, `MARKETING_CAMPAIGN`, `UPLOADED_FILE`, `WORKFLOW_WEBHOOK_CREDENTIAL`, `SCRAPER_PIPELINE`, `FILTER`, `EMBED_FORM`, `WORKFLOW_TABLE`, `WORKFLOW_TABLE_COLUMN`, `CONTACT`, `PROPERTY`, `ORGANIZATION`, `SLACK_CHANNEL`, `SLACK_USER`, `MACHINE_GROUP`, `MACHINE_HOST`)
    - `targetId`: `ID!` (required)
    - `replacementId`: `ID!` (required)

## Response (data, an example)

```json
{
  "dealCustomFieldMutation": {
    "updateCustomField": {
      "id": "<ID>",
      "name": "…",
      "type": "DROPDOWN",
      "options": [
        {
          "id": "<ID>",
          "label": "…"
        }
      ],
      "displayOrder": 0,
      "allowMultiple": true,
      "defaultValue": "…"
    }
  }
}
```

## Example

```bash
curl https://server.goliathdata.com/api/v1/call \
  -H "Authorization: Bearer $GOLIATH_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "operationId": "updateDealCustomField",
    "variables": {
      "customFieldId": "<customFieldId>"
    }
  }'
```
