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

# Invite a member

> Invites an address into the organization and emails the invitation. The response carries the acceptance token and link as well, so a caller that would rather deliver it itself can, and `email_sent` reports whether the mail was queued. A live invitation for the same address is resent rather than duplicated: the token stays valid, the expiry moves out, and the reply is 200 instead of 201. Send `idempotency_key` to retry safely after an uncertain result. A replay answers 200 with the same invitation and `meta.idempotency_replayed`, mails nobody and leaves the expiry where it was; the same key with different arguments is 409. Omit it when you mean to resend. `role` is available on Enterprise; elsewhere the invitee joins with the plan's default member role. Treat `token` and `invite_url` as secrets: anyone holding one can join the organization. Requires the `members:write` scope.



## OpenAPI

````yaml post /management/v1/invites
openapi: 3.1.0
info:
  description: Schema-driven generative API that orchestrates LLM-powered workflows.
  title: Task API
  version: 3.0.0
servers:
  - description: Production
    url: https://api.opper.ai
  - description: Local development
    url: http://localhost:8080
security:
  - BearerAuth: []
tags:
  - description: Schema-driven function management and execution
    name: Functions
  - description: OpenAI-compatible chat completions
    name: Chat
  - description: OpenAI Responses API compatible endpoint
    name: Responses
  - description: Google-compatible interactions endpoint
    name: Interactions
  - description: Model registry and capabilities
    name: Models
  - description: Synchronous image generation
    name: Images
  - description: Text-to-speech and speech-to-text
    name: Audio
  - description: Asynchronous video generation
    name: Videos
  - description: Reusable file storage for media inputs and generated outputs
    name: Files
  - description: Async generation status and downloads
    name: Artifacts
  - description: OpenAI-compatible embeddings
    name: Embeddings
  - description: Recorded HTTP request/response generations
    name: Generations
  - description: System health and status
    name: System
  - description: Roundtable endpoint — fan out a query to multiple LLMs and combine results
    name: Roundtable
  - description: Web search, fetch, and other utility tools
    name: Tools
  - description: Caller identity, credits, and usage
    name: Account
  - description: >-
      Programmatic project and API-key management. Authenticates with an
      `op-mak-…` management token; available on the control_plane and enterprise
      plans.
    name: Management
paths:
  /management/v1/invites:
    post:
      tags:
        - Management
      summary: Invite a member
      description: >-
        Invites an address into the organization and emails the invitation. The
        response carries the acceptance token and link as well, so a caller that
        would rather deliver it itself can, and `email_sent` reports whether the
        mail was queued. A live invitation for the same address is resent rather
        than duplicated: the token stays valid, the expiry moves out, and the
        reply is 200 instead of 201. Send `idempotency_key` to retry safely
        after an uncertain result. A replay answers 200 with the same invitation
        and `meta.idempotency_replayed`, mails nobody and leaves the expiry
        where it was; the same key with different arguments is 409. Omit it when
        you mean to resend. `role` is available on Enterprise; elsewhere the
        invitee joins with the plan's default member role. Treat `token` and
        `invite_url` as secrets: anyone holding one can join the organization.
        Requires the `members:write` scope.
      operationId: createManagementInvite
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateManagementInviteRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: '#/components/schemas/CreateManagementInviteResponse'
                  meta:
                    description: >-
                      Empty for a single resource. Endpoint-specific context
                      appears here rather than as a sibling of `data`.
                    type: object
                type: object
          description: >-
            A live invitation for the address was resent (same token, expiry
            pushed out), or an idempotency_key replay returned the invitation
            unchanged.
        '201':
          content:
            application/json:
              schema:
                properties:
                  data:
                    $ref: '#/components/schemas/CreateManagementInviteResponse'
                  meta:
                    description: >-
                      Empty for a single resource. Endpoint-specific context
                      appears here rather than as a sibling of `data`.
                    type: object
                type: object
          description: Successful response
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Bad request
        '401':
          description: Unauthorized - missing or invalid API key
        '403':
          content:
            application/json:
              schema:
                properties:
                  error:
                    type: string
                  required_scope:
                    description: Present on the scope refusal.
                    type: string
                type: object
          description: >-
            The token lacks the scope this endpoint requires (`required_scope`
            is returned). Presenting a runtime `op-…` key instead of a
            management `op-mak-…` token also lands here.
        '404':
          content:
            application/json:
              schema:
                properties:
                  error:
                    type: string
                type: object
          description: >-
            No such resource in the calling organization. A resource belonging
            to another organization is indistinguishable from one that does not
            exist.
        '409':
          content:
            application/json:
              schema:
                properties:
                  error:
                    type: string
                type: object
          description: >-
            That address already belongs to a member of the organization, or the
            idempotency_key was used with different arguments or for an
            invitation that has since been revoked.
        '422':
          content:
            application/json:
              schema:
                properties:
                  error:
                    type: string
                type: object
          description: The requested role does not belong to this organization.
        '429':
          content:
            application/json:
              schema:
                properties:
                  error:
                    type: string
                type: object
          description: >-
            The organization has reached its durable idempotency-receipt limit.
            Existing operations can still be retried.
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Internal server error
      security:
        - ManagementBearer: []
components:
  schemas:
    CreateManagementInviteRequest:
      properties:
        email:
          description: The address to invite.
          type: string
        idempotency_key:
          description: >-
            Makes a retry safe: a repeat with the same key returns the first
            call's invitation without emailing again or moving the expiry. 1 to
            128 letters, digits, dots, underscores, colons or hyphens. Omit it
            when you mean to resend.
          type: string
        role:
          description: >-
            The role the invitee joins with: a built-in role or one of the
            organization's custom roles. Enterprise only; on other plans omit it
            and the plan's default member role applies.
          type: string
      required:
        - email
      type: object
    CreateManagementInviteResponse:
      properties:
        accepted:
          description: Whether the invitation has been accepted.
          type: boolean
        accepted_at:
          description: When the invitation was accepted. Absent until then.
          format: date-time
          type: string
        email:
          description: The invited address.
          type: string
        email_sent:
          description: >-
            Whether the invitation email was queued. When false the invitation
            still exists and you deliver invite_url yourself.
          type: boolean
        expires_at:
          description: 'When the link stops working: four weeks from this call.'
          format: date-time
          type: string
        id:
          description: Invitation id. Pass it to DELETE /management/v1/invites/{id}.
          type: integer
        invite_url:
          description: >-
            The platform link that accepts the invitation. Carries the token so
            treat it as a secret.
          type: string
        role:
          description: The role the invitee joins with.
          type: string
        token:
          description: >-
            The invitation's acceptance token. Treat it as a secret: anyone
            holding it can join the organization.
          type: string
      required:
        - id
        - email
        - role
        - accepted
        - token
        - invite_url
        - email_sent
      type: object
    ErrorResponse:
      properties:
        error:
          properties:
            code:
              type: string
            details:
              description: Any value
            message:
              type: string
          required:
            - code
            - message
          type: object
        meta:
          type: object
      required:
        - error
      type: object
  securitySchemes:
    BearerAuth:
      bearerFormat: API Key
      description: API key authentication. Pass your API key as a Bearer token.
      scheme: bearer
      type: http
    ManagementBearer:
      bearerFormat: Management API Key
      description: >-
        Management API authentication. Pass an `op-mak-…` management token as a
        Bearer token. Runtime `op-…` API keys are rejected with 403 — they
        belong on the data-plane endpoints. Mint a management key from the
        platform UI under Settings → API keys.
      scheme: bearer
      type: http

````