Ads Lighthouse Team API

The Team API from Ads Lighthouse — 5 operation(s) for team.

Operations 6

GET /team Members, roles and open invitations #
POST /team/invitations Email an invitation to join the account #
POST /team/invitations/{invitation_id}/resend Send an open invitation again with a new link #
DELETE /team/invitations/{invitation_id} Revoke an open invitation #
POST /team/members/{user_id} Make a member an admin or an admin a member #
DELETE /team/members/{user_id} Remove a person from the account #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/adslighthouse:adslighthouse-team-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

adslighthouse-team-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Ads Lighthouse Team API
  version: 1.0.0
  description: Read account-scoped monitoring data and reports, and update project, team, alert and review workflows through the same services and limits as the app.
  contact:
    name: Ads Lighthouse
    url: https://adslighthouse.com/api
    email: info@adslighthouse.com
servers:
- url: https://adslighthouse.com/api/v1
security:
- bearerAuth: []
tags:
- name: Team
paths:
  /team:
    get:
      operationId: list_team
      summary: Members, roles and open invitations
      description: 'Lists the account''s members with their roles (owner, admin, member) and the open invitations with their status and email delivery status. Everyone on the team sees this list in the app. Roles: the owner manages everything, including admins and the plan; an admin invites and manages ordinary members; a member uses the shared projects but manages nobody. All members share the account''s projects, history and plan.'
      tags:
      - Team
      parameters: []
      security:
      - bearerAuth: []
      x-required-scope: read
      x-mcp-tool: list_team
      responses:
        '200':
          description: Members, roles and open invitations
          content:
            application/json:
              schema:
                type: object
                properties:
                  your_role:
                    type: string
                    enum:
                    - owner
                    - admin
                    - member
                    description: Role of the person the credential acts for.
                  members:
                    type: array
                    items:
                      type: object
                      properties:
                        user_id:
                          type: string
                        email:
                          type: string
                        role:
                          type: string
                          enum:
                          - owner
                          - admin
                          - member
                        joined_at:
                          type: string
                        you:
                          type: boolean
                          description: True for the person the credential acts for.
                      additionalProperties: false
                      required:
                      - user_id
                      - email
                      - role
                      - joined_at
                      - you
                  invitations:
                    type: array
                    items:
                      type: object
                      properties:
                        id:
                          type: string
                        email:
                          type: string
                        role:
                          type: string
                          enum:
                          - admin
                          - member
                        status:
                          type: string
                          enum:
                          - pending
                          - expired
                          - accepted
                          - canceled
                          description: pending invitations can still be accepted until expires_at.
                        delivery_status:
                          type: string
                          enum:
                          - pending
                          - sent
                          - failed
                          description: Whether the invitation email was handed to the mail service.
                        invited_by_email:
                          anyOf:
                          - type: string
                          - type: 'null'
                        created_at:
                          type: string
                        expires_at:
                          type: string
                      additionalProperties: false
                      required:
                      - id
                      - email
                      - role
                      - status
                      - delivery_status
                      - invited_by_email
                      - created_at
                      - expires_at
                    description: Open invitations, newest first, including expired ones that were not replaced.
                  seat_limit:
                    type: integer
                    description: Members plus open, unexpired invitations may not exceed this.
                  request_id:
                    type: string
                additionalProperties: false
                required:
                - your_role
                - members
                - invitations
                - seat_limit
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '409':
          $ref: '#/components/responses/Error409'
        '429':
          $ref: '#/components/responses/Error429'
        '503':
          $ref: '#/components/responses/Error503'
  /team/invitations:
    post:
      operationId: invite_team_member
      summary: Email an invitation to join the account
      description: 'Invites a person by email with the role member (default) or admin, and sends the same invitation email as the app; the link expires in 7 days. Same rules as Settings > Team: owners and admins may invite, only the owner may invite an admin, the inviter must have confirmed their email address, the team (members plus open invitations) is limited to the seat limit, the same address can be invited again only after a minute and an account can send 20 invitations a day. Inviting an address with an open invitation replaces it. Requires the write scope and an idempotency key: a retry with the same key returns the first invitation without emailing again. Confirm the address with the user first.'
      tags:
      - Team
      parameters:
      - name: Idempotency-Key
        in: header
        required: true
        schema:
          type: string
          minLength: 8
          maxLength: 200
          pattern: ^[\x21-\x7e]+$
          description: A unique value you choose for this request, such as a UUID. Repeating the same key returns the first result instead of starting paid work again.
        description: A unique value you choose for this request, such as a UUID. Repeating the same key returns the first result instead of starting paid work again.
      security:
      - bearerAuth: []
      x-required-scope: write
      x-mcp-tool: invite_team_member
      responses:
        '201':
          description: Email an invitation to join the account
          content:
            application/json:
              schema:
                type: object
                properties:
                  created:
                    type: boolean
                  invitation:
                    type: object
                    properties:
                      id:
                        type: string
                      email:
                        type: string
                      role:
                        type: string
                        enum:
                        - admin
                        - member
                      status:
                        type: string
                        enum:
                        - pending
                        - expired
                        - accepted
                        - canceled
                        description: pending invitations can still be accepted until expires_at.
                      delivery_status:
                        type: string
                        enum:
                        - pending
                        - sent
                        - failed
                        description: Whether the invitation email was handed to the mail service.
                      invited_by_email:
                        anyOf:
                        - type: string
                        - type: 'null'
                      created_at:
                        type: string
                      expires_at:
                        type: string
                    additionalProperties: false
                    required:
                    - id
                    - email
                    - role
                    - status
                    - delivery_status
                    - invited_by_email
                    - created_at
                    - expires_at
                  request_id:
                    type: string
                additionalProperties: false
                required:
                - created
                - invitation
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '409':
          $ref: '#/components/responses/Error409'
        '429':
          $ref: '#/components/responses/Error429'
        '503':
          $ref: '#/components/responses/Error503'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                email:
                  type: string
                  minLength: 3
                  maxLength: 254
                  description: The address to invite.
                role:
                  type: string
                  enum:
                  - member
                  - admin
                  default: member
              additionalProperties: false
              required:
              - email
  /team/invitations/{invitation_id}/resend:
    post:
      operationId: resend_invitation
      summary: Send an open invitation again with a new link
      description: 'Sends an open invitation again with the same role. The earlier link stops working and the new one expires in 7 days. Same permissions and limits as invite_team_member, including the one-minute wait per address. Requires the write scope and an idempotency key: a retry with the same key does not email again.'
      tags:
      - Team
      parameters:
      - name: invitation_id
        in: path
        required: true
        schema:
          type: string
          minLength: 1
          maxLength: 200
          description: The invitation id from list_team.
        description: The invitation id from list_team.
      - name: Idempotency-Key
        in: header
        required: true
        schema:
          type: string
          minLength: 8
          maxLength: 200
          pattern: ^[\x21-\x7e]+$
          description: A unique value you choose for this request, such as a UUID. Repeating the same key returns the first result instead of starting paid work again.
        description: A unique value you choose for this request, such as a UUID. Repeating the same key returns the first result instead of starting paid work again.
      security:
      - bearerAuth: []
      x-required-scope: write
      x-mcp-tool: resend_invitation
      responses:
        '200':
          description: Send an open invitation again with a new link
          content:
            application/json:
              schema:
                type: object
                properties:
                  created:
                    type: boolean
                  invitation:
                    type: object
                    properties:
                      id:
                        type: string
                      email:
                        type: string
                      role:
                        type: string
                        enum:
                        - admin
                        - member
                      status:
                        type: string
                        enum:
                        - pending
                        - expired
                        - accepted
                        - canceled
                        description: pending invitations can still be accepted until expires_at.
                      delivery_status:
                        type: string
                        enum:
                        - pending
                        - sent
                        - failed
                        description: Whether the invitation email was handed to the mail service.
                      invited_by_email:
                        anyOf:
                        - type: string
                        - type: 'null'
                      created_at:
                        type: string
                      expires_at:
                        type: string
                    additionalProperties: false
                    required:
                    - id
                    - email
                    - role
                    - status
                    - delivery_status
                    - invited_by_email
                    - created_at
                    - expires_at
                  request_id:
                    type: string
                additionalProperties: false
                required:
                - created
                - invitation
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '409':
          $ref: '#/components/responses/Error409'
        '429':
          $ref: '#/components/responses/Error429'
        '503':
          $ref: '#/components/responses/Error503'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties: {}
              additionalProperties: false
  /team/invitations/{invitation_id}:
    delete:
      operationId: cancel_invitation
      summary: Revoke an open invitation
      description: Cancels an open invitation so its link can no longer be used. Owners may cancel any invitation; admins only invitations for the member role. Canceling one that was already accepted or canceled changes nothing. Requires the write scope; confirm with the user first.
      tags:
      - Team
      parameters:
      - name: invitation_id
        in: path
        required: true
        schema:
          type: string
          minLength: 1
          maxLength: 200
          description: The invitation id from list_team.
        description: The invitation id from list_team.
      security:
      - bearerAuth: []
      x-required-scope: write
      x-mcp-tool: cancel_invitation
      responses:
        '200':
          description: Revoke an open invitation
          content:
            application/json:
              schema:
                type: object
                properties:
                  invitation:
                    type: object
                    properties:
                      id:
                        type: string
                      email:
                        type: string
                      role:
                        type: string
                        enum:
                        - admin
                        - member
                      status:
                        type: string
                        enum:
                        - pending
                        - expired
                        - accepted
                        - canceled
                        description: pending invitations can still be accepted until expires_at.
                      delivery_status:
                        type: string
                        enum:
                        - pending
                        - sent
                        - failed
                        description: Whether the invitation email was handed to the mail service.
                      invited_by_email:
                        anyOf:
                        - type: string
                        - type: 'null'
                      created_at:
                        type: string
                      expires_at:
                        type: string
                    additionalProperties: false
                    required:
                    - id
                    - email
                    - role
                    - status
                    - delivery_status
                    - invited_by_email
                    - created_at
                    - expires_at
                  request_id:
                    type: string
                additionalProperties: false
                required:
                - invitation
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '409':
          $ref: '#/components/responses/Error409'
        '429':
          $ref: '#/components/responses/Error429'
        '503':
          $ref: '#/components/responses/Error503'
  /team/members/{user_id}:
    post:
      operationId: change_member_role
      summary: Make a member an admin or an admin a member
      description: Changes a team member's role between member and admin. Only the account owner can grant or remove the admin role, and must have confirmed their email address; the owner's own role never changes. Demoting an admin also cancels the invitations they sent. Requires the write scope; confirm with the user first.
      tags:
      - Team
      parameters:
      - name: user_id
        in: path
        required: true
        schema:
          type: string
          minLength: 1
          maxLength: 200
          description: The member's user_id from list_team.
        description: The member's user_id from list_team.
      security:
      - bearerAuth: []
      x-required-scope: write
      x-mcp-tool: change_member_role
      responses:
        '200':
          description: Make a member an admin or an admin a member
          content:
            application/json:
              schema:
                type: object
                properties:
                  member:
                    type: object
                    properties:
                      user_id:
                        type: string
                      email:
                        type: string
                      role:
                        type: string
                        enum:
                        - admin
                        - member
                    additionalProperties: false
                    required:
                    - user_id
                    - email
                    - role
                  request_id:
                    type: string
                additionalProperties: false
                required:
                - member
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '409':
          $ref: '#/components/responses/Error409'
        '429':
          $ref: '#/components/responses/Error429'
        '503':
          $ref: '#/components/responses/Error503'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                role:
                  type: string
                  enum:
                  - member
                  - admin
              additionalProperties: false
              required:
              - role
    delete:
      operationId: remove_team_member
      summary: Remove a person from the account
      description: 'Removes a person from the account: they lose access to its projects at once, and their API keys and connected apps for this account stop working. Shared projects and history stay. Owners may remove admins and members; admins may remove members only; nobody can remove the owner. Requires the write scope; confirm with the user first.'
      tags:
      - Team
      parameters:
      - name: user_id
        in: path
        required: true
        schema:
          type: string
          minLength: 1
          maxLength: 200
          description: The member's user_id from list_team.
        description: The member's user_id from list_team.
      security:
      - bearerAuth: []
      x-required-scope: write
      x-mcp-tool: remove_team_member
      responses:
        '200':
          description: Remove a person from the account
          content:
            application/json:
              schema:
                type: object
                properties:
                  removed:
                    type: object
                    properties:
                      user_id:
                        type: string
                      email:
                        type: string
                    additionalProperties: false
                    required:
                    - user_id
                    - email
                  request_id:
                    type: string
                additionalProperties: false
                required:
                - removed
        '400':
          $ref: '#/components/responses/Error400'
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '409':
          $ref: '#/components/responses/Error409'
        '429':
          $ref: '#/components/responses/Error429'
        '503':
          $ref: '#/components/responses/Error503'
components:
  responses:
    Error401:
      description: Missing, invalid, expired or revoked credential.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error429:
      description: Rate limit reached. Retry after the Retry-After seconds.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error409:
      description: The idempotency key was already used for a different request.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error503:
      description: The requested service or file is temporarily unavailable.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error403:
      description: The credential lacks the write scope, the plan does not include the API, or the allowance is used up.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error404:
      description: Unknown project, keyword or run in this account.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error400:
      description: Invalid parameters, cursor or body.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
              - invalid_request
              - idempotency_key_required
              - unauthorized
              - forbidden
              - insufficient_scope
              - plan_required
              - quota_exceeded
              - not_found
              - method_not_allowed
              - conflict
              - idempotency_key_reused
              - payload_too_large
              - unsupported_media_type
              - rate_limited
              - internal_error
              - unavailable
            message:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  field:
                    type: string
                  message:
                    type: string
                required:
                - field
                - message
          required:
          - code
          - message
        request_id:
          type: string
      required:
      - error
      - request_id
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: An API key from Settings > API and MCP (als_...), or an OAuth access token issued for this API.