Ads Lighthouse Team API
The Team API from Ads Lighthouse — 5 operation(s) for team.
The Team API from Ads Lighthouse — 5 operation(s) for team.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
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.curl "https://apis.io/api/v1/apis/adslighthouse:adslighthouse-team-api"
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.
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: 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.