> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sagescreen.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Update own profile

> Self-service profile update. Users can only edit their own
profile (`user_id` must match current user).

**Email/password changes require verification** — a confirmation
email is sent, and changes are only applied after the user clicks
the verification link. No other fields are updated when an
email or password change is requested.

Supports avatar upload, tour/checklist reset, and all standard
profile fields.




## OpenAPI

````yaml /openapi/private/specs/wp/wp-ajax-misc.yml post /wp-admin/admin-ajax.php?action=sagescreen_update_profile
openapi: 3.1.0
info:
  title: SageScreen — Misc AJAX Modules (User · Council · Billing · Splash · Demo)
  version: 1.0.0
servers:
  - url: https://{domain}/wp-json/sagescreen/v1
    description: WordPress REST API
    variables:
      domain:
        default: api.sagescreen.app
security: []
tags:
  - name: User – REST
    description: Zapier-facing REST endpoints
  - name: User – AJAX
    description: Council user management AJAX endpoints
  - name: User – Profile
    description: Self-service profile updates
  - name: Council – REST
    description: Zapier-facing REST endpoints for council data sync
  - name: Council – AJAX
    description: Council user and sage management AJAX endpoints
  - name: Billing – Stripe
    description: Stripe webhook and subscription endpoints
  - name: Billing – Broadcast
    description: Postmark broadcast unsubscribe endpoint
  - name: Billing – Pipedrive
    description: Pipedrive CRM ID set-* webhook endpoints (called by Zapier)
  - name: Billing – AJAX
    description: Credit ledger, reactivation, and portal AJAX endpoints
  - name: Splash
    description: Splash banner AJAX endpoints
  - name: Demo
    description: Demo signup and management AJAX endpoints
  - name: CSV Upload
    description: Bulk candidate CSV upload
paths:
  /wp-admin/admin-ajax.php?action=sagescreen_update_profile:
    post:
      tags:
        - User – Profile
      summary: Update own profile
      description: |
        Self-service profile update. Users can only edit their own
        profile (`user_id` must match current user).

        **Email/password changes require verification** — a confirmation
        email is sent, and changes are only applied after the user clicks
        the verification link. No other fields are updated when an
        email or password change is requested.

        Supports avatar upload, tour/checklist reset, and all standard
        profile fields.
      operationId: ajaxUpdateProfile
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/UpdateProfileRequest'
      responses:
        '200':
          description: Profile update result
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/UpdateProfileSuccess'
                  - $ref: '#/components/schemas/UpdateProfileVerification'
                  - $ref: '#/components/schemas/AjaxErrorResponse'
              examples:
                updated:
                  summary: Profile updated
                  value:
                    success: true
                    message: Profile updated successfully
                    data:
                      first_name: John
                      last_name: Doe
                      display_name: John Doe
                      bio: Software engineer
                      candidate_message: Welcome!
                      avatar_type: default
                      avatar_url: ''
                emailVerification:
                  summary: Email change requires verification
                  value:
                    success: true
                    message: >-
                      Verification email sent. Please check your new email
                      address to complete the change.
                    requires_verification: true
                passwordVerification:
                  summary: Password change requires verification
                  value:
                    success: true
                    message: >-
                      Verification email sent. Please check your email to
                      complete the password change.
                    requires_verification: true
                notOwnProfile:
                  summary: Cannot edit another user
                  value:
                    success: false
                    message: You can only edit your own profile
      security:
        - wpAjaxNonce: []
components:
  schemas:
    UpdateProfileRequest:
      type: object
      required:
        - action
        - nonce
        - user_id
      properties:
        action:
          type: string
          const: sagescreen_update_profile
        nonce:
          type: string
          description: WP nonce for `sagescreen_update_profile`
        user_id:
          type: integer
          description: Must match current user ID
          examples:
            - 42
        first_name:
          type: string
          examples:
            - John
        last_name:
          type: string
          examples:
            - Doe
        display_name:
          type: string
          examples:
            - John Doe
        email:
          type: string
          format: email
          description: If changed, triggers verification flow
          examples:
            - newemail@example.com
        bio:
          type: string
          examples:
            - Software engineer
        phone:
          type: string
          examples:
            - '+15551234567'
        linkedin:
          type: string
          format: uri
          examples:
            - https://linkedin.com/in/johndoe
        whatsapp:
          type: string
          examples:
            - '+15551234567'
        candidate_message:
          type: string
          examples:
            - Welcome to the interview!
        password:
          type: string
          format: password
          minLength: 8
          description: If set, triggers verification flow
          examples:
            - NewPass123
        password_confirm:
          type: string
          format: password
          description: Must match `password`
          examples:
            - NewPass123
        avatar_type:
          type: string
          enum:
            - default
            - upload
          examples:
            - default
        avatar_upload:
          type: string
          format: binary
          description: Image file (only used if avatar_type=upload)
        reset_tour:
          type: string
          enum:
            - '0'
            - '1'
          description: '''1'' to reset tour state'
        reset_checklist:
          type: string
          enum:
            - '0'
            - '1'
          description: '''1'' to reset checklist progress'
        reset_sage_assist:
          type: string
          enum:
            - '0'
            - '1'
          description: '''1'' to reset Sage Assist dismissal'
    UpdateProfileSuccess:
      type: object
      properties:
        success:
          type: boolean
          const: true
        message:
          type: string
          examples:
            - Profile updated successfully
        data:
          type: object
          properties:
            first_name:
              type: string
              examples:
                - John
            last_name:
              type: string
              examples:
                - Doe
            display_name:
              type: string
              examples:
                - John Doe
            bio:
              type: string
              examples:
                - Software engineer
            candidate_message:
              type: string
              examples:
                - Welcome!
            avatar_type:
              type: string
              examples:
                - default
            avatar_url:
              type: string
              examples:
                - ''
    UpdateProfileVerification:
      type: object
      properties:
        success:
          type: boolean
          const: true
        message:
          type: string
          examples:
            - >-
              Verification email sent. Please check your new email address to
              complete the change.
        requires_verification:
          type: boolean
          const: true
    AjaxErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          const: false
        message:
          type: string
          examples:
            - All fields are required
  securitySchemes:
    wpAjaxNonce:
      type: apiKey
      in: query
      name: nonce
      description: WordPress AJAX nonce (passed as form field, verified per-action)

````