Team

Invite a teammate

Invite a teammate with the same two scopes as the dashboard Team tab. scope=event grants pages on one event only (eventId plus accessAreas). scope=organization grants access to every current and future organization event (organizationId or an eventId in it, plus accessAreas or organizationAdmin) and requires organization admin authority. accessAreas use the dashboard's area keys, for example participants, volunteers, messaging, race-day, timing. sendEmail applies to event-only invites; organization invitations always send the invitation email. Delivery is queued durably and returns runId with status=queued; emailSent remains false until provider submission. Copy-only event access with sendEmail=false is created immediately. Send an Idempotency-Key header.

Method

POST

Path

/v1/team-invitations

Required scope

team:write

Request

curl -X POST "https://api.endurancehq.app/v1/team-invitations" \
  -H "Authorization: Bearer $EHQ_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

JSON body schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "scope": {
      "type": "string",
      "enum": [
        "event",
        "organization"
      ]
    },
    "eventId": {
      "type": "string",
      "minLength": 1
    },
    "organizationId": {
      "type": "string",
      "minLength": 1
    },
    "email": {
      "type": "string",
      "maxLength": 254,
      "format": "email",
      "pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "accessAreas": {
      "maxItems": 40,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 60
      }
    },
    "organizationAdmin": {
      "default": false,
      "type": "boolean"
    },
    "accessName": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "receiveInboxAlerts": {
      "type": "boolean"
    },
    "sendEmail": {
      "default": true,
      "type": "boolean"
    }
  },
  "required": [
    "scope",
    "email",
    "organizationAdmin",
    "sendEmail"
  ],
  "additionalProperties": false
}

Response

Success status: 202

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "data": {
      "type": "object",
      "properties": {
        "scope": {
          "type": "string",
          "enum": [
            "event",
            "organization"
          ]
        },
        "email": {
          "type": "string"
        },
        "eventId": {
          "type": [
            "string",
            "null"
          ]
        },
        "organizationId": {
          "type": [
            "string",
            "null"
          ]
        },
        "status": {
          "type": "string",
          "enum": [
            "added",
            "invited",
            "queued",
            "scheduled"
          ]
        },
        "runId": {
          "type": [
            "string",
            "null"
          ]
        },
        "emailSent": {
          "type": "boolean"
        },
        "collaboratorId": {
          "type": [
            "string",
            "null"
          ]
        },
        "accessAreas": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "accessSummary": {
          "type": "string"
        }
      },
      "required": [
        "scope",
        "email",
        "eventId",
        "organizationId",
        "status",
        "runId",
        "emailSent",
        "collaboratorId",
        "accessAreas",
        "accessSummary"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "data"
  ],
  "additionalProperties": false
}

Other surfaces

CLI: ehq team invite --scope event --event <event_id> --email <email> --areas participants,volunteers

MCP tool: ehq_team_invite