---
updatedAt: 2026-04-23T05:40:30.000Z
---

# Updates a user

# OpenAPI definition

```json
{
  "openapi": "3.0.1",
  "info": {
    "title": "API V1",
    "version": "v1"
  },
  "paths": {
    "/users/{id}": {
      "put": {
        "summary": "Updates a user",
        "tags": [
          "Users"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "ID of the user to update",
            "schema": {
              "type": "integer"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "user updated"
          },
          "422": {
            "description": "conflicting or invalid contact parameters"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "phone_number": {
                    "type": "string",
                    "format": "phone",
                    "nullable": true
                  },
                  "clear_phone_number": {
                    "type": "boolean",
                    "nullable": true,
                    "description": "When true, clears the user's primary phone number (and removes it from other_phone_numbers). Blank phone_number values are always ignored, so this explicit flag is the only way to clear a phone number via the API. Cannot be combined with a non-blank phone_number in the same request (returns 422)."
                  },
                  "email": {
                    "type": "string",
                    "format": "email",
                    "nullable": true,
                    "description": "Must be a valid, deliverable address. A non-blank email that fails validation (subaddressing like user+tag@, disposable domains, domains without MX records) returns a 422. Blank values are ignored; to clear an email use clear_email."
                  },
                  "clear_email": {
                    "type": "boolean",
                    "nullable": true,
                    "description": "When true, clears the user's primary email address (and removes it from other_emails). Blank email values are always ignored, so this explicit flag is the only way to clear an email address via the API. Cannot be combined with a non-blank email in the same request (returns 422)."
                  },
                  "first_name": {
                    "type": "string",
                    "nullable": true
                  },
                  "last_name": {
                    "type": "string",
                    "nullable": true
                  },
                  "alternate_name": {
                    "type": "string",
                    "nullable": true,
                    "description": "Alternate name (nickname, community name, or alternate romanization). Searchable. Blank values are ignored; an existing alternate name cannot be cleared via the API."
                  },
                  "preferred_language": {
                    "type": "string",
                    "nullable": true
                  },
                  "chapter_id": {
                    "type": "integer",
                    "nullable": true,
                    "description": "Primary chapter ID (backwards compatible)"
                  },
                  "chapter_ids": {
                    "type": "array",
                    "items": {
                      "type": "integer"
                    },
                    "nullable": true,
                    "description": "Full array of chapter IDs (replaces all). Requires multi-chapter feature."
                  },
                  "add_chapter_ids": {
                    "type": "array",
                    "items": {
                      "type": "integer"
                    },
                    "nullable": true,
                    "description": "Array of chapter IDs to add. Requires multi-chapter feature."
                  },
                  "remove_chapter_ids": {
                    "type": "array",
                    "items": {
                      "type": "integer"
                    },
                    "nullable": true,
                    "description": "Array of chapter IDs to remove. Requires multi-chapter feature."
                  },
                  "set_exclusive_chapter": {
                    "type": "boolean",
                    "nullable": true,
                    "description": "When true with chapter_id, sets that chapter as the only chapter (removes all other chapter memberships)."
                  },
                  "second_language": {
                    "type": "string",
                    "nullable": true,
                    "description": "Older single value field. Use secondary_languages instead. Saved as a one item secondary_languages list. When sent together with secondary_languages, it is stored in the older second_language field as sent."
                  },
                  "secondary_languages": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    },
                    "nullable": true,
                    "description": "Language codes the person also speaks, for example [\"es\", \"fr\"]. Codes are saved in lowercase."
                  },
                  "referred_by_user_id": {
                    "type": "integer",
                    "nullable": true
                  },
                  "custom_user_properties": {
                    "type": "object",
                    "additionalProperties": {
                      "oneOf": [
                        {
                          "type": "string"
                        },
                        {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      ]
                    },
                    "nullable": true,
                    "description": "Custom property values keyed by internal_name. Use a string for single-value fields. Use an array of strings for Multiple Checkboxes fields. Comma-separated strings are also accepted for Multiple Checkboxes. For Multiple Checkboxes, see append_custom_user_properties to control whether values are merged with or replace existing values."
                  },
                  "append_custom_user_properties": {
                    "type": "boolean",
                    "nullable": true,
                    "description": "Controls how Multiple Checkboxes custom properties are written. Defaults to true (union new values with existing values, the long-standing API behavior). Set to false to overwrite existing values, mirroring bulk update REPLACE mode. Has no effect on non-array field types."
                  },
                  "address": {
                    "type": "object",
                    "description": "Optional address to update. We will attempt to geocode the address if latitude and longitude are not provided.",
                    "properties": {
                      "address1": {
                        "type": "string",
                        "nullable": true
                      },
                      "address2": {
                        "type": "string",
                        "nullable": true
                      },
                      "city": {
                        "type": "string",
                        "nullable": true
                      },
                      "state": {
                        "type": "string",
                        "nullable": true
                      },
                      "zip_code": {
                        "type": "string",
                        "nullable": true
                      },
                      "country": {
                        "type": "string",
                        "nullable": true
                      },
                      "latitude": {
                        "type": "number",
                        "format": "float",
                        "nullable": true
                      },
                      "longitude": {
                        "type": "number",
                        "format": "float",
                        "nullable": true
                      }
                    },
                    "nullable": true
                  },
                  "assessment": {
                    "type": "string",
                    "nullable": true,
                    "description": "Assessment status key to set on the user (maps to classification)"
                  },
                  "sms_permission": {
                    "type": "boolean",
                    "nullable": true
                  },
                  "call_permission": {
                    "type": "boolean",
                    "nullable": true
                  },
                  "email_permission": {
                    "type": "boolean",
                    "nullable": true
                  },
                  "timezone": {
                    "type": "string",
                    "nullable": true,
                    "description": "IANA timezone identifier (e.g., \"America/New_York\", \"Europe/London\")"
                  },
                  "donation_charge": {
                    "type": "object",
                    "nullable": true,
                    "description": "Optional external donation charge to create",
                    "properties": {
                      "amount": {
                        "type": "number",
                        "description": "Donation amount in dollars"
                      },
                      "processing_fee": {
                        "type": "number",
                        "description": "Processing fee in dollars"
                      },
                      "external_donation_id": {
                        "type": "string",
                        "description": "External platform donation ID"
                      },
                      "external_donation_source": {
                        "type": "string",
                        "description": "Source platform (e.g. WePay, ActBlue, etc.)"
                      },
                      "external_donation_date": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Date of the donation"
                      }
                    },
                    "required": [
                      "amount",
                      "external_donation_id",
                      "external_donation_source"
                    ]
                  }
                }
              }
            }
          },
          "required": true
        }
      }
    }
  },
  "servers": [
    {
      "url": "https://api.solidarity.tech/v1",
      "variables": {
        "defaultHost": {
          "default": "api.solidarity.tech/v1"
        }
      }
    }
  ],
  "security": [
    {
      "BearerAuth": []
    }
  ],
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer"
      }
    }
  }
}
```