> ## 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.

# Create or invite a user to a council

> Creates a new WordPress user and assigns them to the current
council, or invites an existing user to join the council.

New users receive a verification email with a 24-hour activation
link. Existing users receive a council invitation email.

**Permission hierarchy:**
- `council_power_user` can create `council_member` and `council_power_user`
- `council_admin` can create any council role
- Only `council_admin` / global admin can create `council_admin`




## OpenAPI

````yaml /openapi/private/specs/wp/wp-ajax-misc.yml post /wp-admin/admin-ajax.php?action=sagescreen_create_council_user
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_create_council_user:
    post:
      tags:
        - User – AJAX
      summary: Create or invite a user to a council
      description: >
        Creates a new WordPress user and assigns them to the current

        council, or invites an existing user to join the council.


        New users receive a verification email with a 24-hour activation

        link. Existing users receive a council invitation email.


        **Permission hierarchy:**

        - `council_power_user` can create `council_member` and
        `council_power_user`

        - `council_admin` can create any council role

        - Only `council_admin` / global admin can create `council_admin`
      operationId: ajaxCreateCouncilUser
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/CreateCouncilUserRequest'
      responses:
        '200':
          description: Creation / invitation result
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/CreateUserSuccess'
                  - $ref: '#/components/schemas/AjaxErrorResponse'
              examples:
                newUser:
                  summary: New user created
                  value:
                    success: true
                    message: >-
                      User created successfully. Verification email sent to
                      john@example.com
                    data:
                      user_id: 456
                      message: User created successfully. Verification email sent.
                existingInvited:
                  summary: Existing user invited
                  value:
                    success: true
                    message: >-
                      This user already has a SageScreen account. An invitation
                      to join this council has been sent to john@example.com
                    data:
                      user_id: 789
                      invited_existing: true
                      message: Invitation sent to existing user.
                missingFields:
                  summary: Required fields missing
                  value:
                    success: false
                    message: All fields are required
                invalidRole:
                  summary: Non-council role
                  value:
                    success: false
                    message: Invalid role. Only council roles can be created.
                noPermission:
                  summary: Cannot create admin
                  value:
                    success: false
                    message: >-
                      You do not have permission to create users with the
                      Council Admin role.
                alreadyMember:
                  summary: User already in council
                  value:
                    success: false
                    message: This user is already a member of this council.
                otherCouncil:
                  summary: User belongs to another council
                  value:
                    success: false
                    message: >-
                      This user is already assigned to another council and
                      cannot be reassigned.
      security:
        - wpAjaxNonce: []
components:
  schemas:
    CreateCouncilUserRequest:
      type: object
      required:
        - action
        - nonce
        - first_name
        - last_name
        - email
        - role
      properties:
        action:
          type: string
          const: sagescreen_create_council_user
        nonce:
          type: string
          description: WP nonce for `sagescreen_ajax_nonce` or `sagescreen_frontend_nonce`
        first_name:
          type: string
          examples:
            - John
        last_name:
          type: string
          examples:
            - Doe
        email:
          type: string
          format: email
          examples:
            - john@example.com
        phone:
          type: string
          description: Validated for uniqueness
          examples:
            - '+15551234567'
        linkedin:
          type: string
          format: uri
          examples:
            - https://linkedin.com/in/johndoe
        whatsapp:
          type: string
          examples:
            - '+15551234567'
        role:
          $ref: '#/components/schemas/CouncilRole'
    CreateUserSuccess:
      type: object
      properties:
        success:
          type: boolean
          const: true
        message:
          type: string
          examples:
            - >-
              User created successfully. Verification email sent to
              john@example.com
        data:
          type: object
          properties:
            user_id:
              type: integer
              examples:
                - 456
            message:
              type: string
              examples:
                - User created successfully. Verification email sent.
            invited_existing:
              type: boolean
              description: Present and true when an existing user was invited
              examples:
                - true
    AjaxErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          const: false
        message:
          type: string
          examples:
            - All fields are required
    CouncilRole:
      type: string
      enum:
        - council_admin
        - council_power_user
        - council_member
      description: Assignable council-level roles
  securitySchemes:
    wpAjaxNonce:
      type: apiKey
      in: query
      name: nonce
      description: WordPress AJAX nonce (passed as form field, verified per-action)

````