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

# Invite a user

> Emails an invitation to anyone, with or without a Surnex account — one is made for somebody new, under the name given. The email's button signs them in and joins them to the organization; until then the invitation grants nothing. Inviting somebody still pending sends it again.



## OpenAPI

````yaml https://api.surnex.io/docs/openapi.json post /v1/organizations/{orgId}/members
openapi: 3.1.0
info:
  title: Surnex API
  version: 1.0.0
  description: >-
    The SEO platform's API.


    **The API is the product.** The dashboard is one client and the MCP server
    at `/mcp` is another. If a number needs deriving, a service derives it —
    never a React component, or the two clients drift.


    **Two kinds of auth.** The dashboard sends a Supabase access token as a
    Bearer JWT. MCP agents send `X-API-Key`, and the organization is resolved
    from the key.


    **Two data modes.** SERP results and Google Trends are fetched live on
    request. Everything else is written by the worker and read from Postgres, so
    a freshly-created project returns empty until its jobs complete.
servers:
  - url: https://api.surnex.io
    description: Surnex API
security: []
paths:
  /v1/organizations/{orgId}/members:
    post:
      tags:
        - organizations
      summary: Invite a user
      description: >-
        Emails an invitation to anyone, with or without a Surnex account — one
        is made for somebody new, under the name given. The email's button signs
        them in and joins them to the organization; until then the invitation
        grants nothing. Inviting somebody still pending sends it again.
      parameters:
        - schema:
            type: string
            format: uuid
          required: true
          name: orgId
          in: path
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                full_name:
                  type: string
                  minLength: 1
                  maxLength: 120
                email:
                  type: string
                  format: email
                role:
                  type: string
                  enum:
                    - admin
                    - member
                  default: member
              required:
                - full_name
                - email
      responses:
        '200':
          description: Members, including the invitation
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    enum:
                      - true
                  data:
                    type: array
                    nullable: true
                    items:
                      type: object
                      properties:
                        user_id:
                          type: string
                          format: uuid
                        email:
                          type: string
                          nullable: true
                          format: email
                        full_name:
                          type: string
                          nullable: true
                        role:
                          type: string
                          enum:
                            - owner
                            - admin
                            - member
                        invited_at:
                          type: string
                          format: date-time
                        accepted_at:
                          type: string
                          nullable: true
                          format: date-time
                      required:
                        - user_id
                        - email
                        - full_name
                        - role
                        - invited_at
                        - accepted_at
                required:
                  - success
                  - data
        '409':
          description: Already a member
          content:
            application/json:
              schema:
                type: object
                properties: {}
        '502':
          description: Saved, but the email could not be sent — invite again to resend
          content:
            application/json:
              schema:
                type: object
                properties: {}

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.