Iridium Admin API
The admin API from Iridium — 9 operation(s) for admin.
The admin API from Iridium — 9 operation(s) for admin.
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/iridiumhqmcp-com:iridiumhqmcp-com-admin-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: Iridiumhqmcp Com Admin API
version: 0.1.0
description: 'Operations tagged admin across 2 of this provider''s published API definitions: openapi.json, iridiumhqmcp-com-openapi.json. Each path carries the servers of the definition it was published in.'
tags:
- name: Admin
paths:
/admin/users:
post:
tags:
- Admin
summary: Create User
operationId: create_user_admin_users_post
parameters:
- name: x-admin-key
in: header
required: true
schema:
type: string
title: X-Admin-Key
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateUserRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/admin/users/{user_id}/activate:
post:
tags:
- Admin
summary: Activate User
operationId: activate_user_admin_users__user_id__activate_post
parameters:
- name: user_id
in: path
required: true
schema:
type: string
format: uuid
title: User Id
- name: x-admin-key
in: header
required: true
schema:
type: string
title: X-Admin-Key
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/admin/users/{user_id}:
delete:
tags:
- Admin
summary: Hard Delete User
description: 'Permanently remove a user and everything that hangs off them. No grace period.
Deliberately NOT shared_account.delete_user: that soft-deletes into the 30-day reactivate
window, which is right for a person leaving and wrong for both callers here — the smoke
suite tearing down its own fixture, and pruning seeded or junk accounts off the roster.
A row-level DELETE lets the ondelete="CASCADE" foreign keys do the work, so this also
removes the user''s audit rows and consent record. That is the trade: PP §8 says audit logs
survive deletion and _PURGE_MODELS preserves them, so reach for this only when there is no
real user relationship to document — a test fixture, a duplicate, a fake address. Use
delete_user for an actual person.
One admin_hard_delete row with user_id=NULL survives as the record, since anything keyed to
the user cascades away with them.'
operationId: hard_delete_user_admin_users__user_id__delete
parameters:
- name: user_id
in: path
required: true
schema:
type: string
format: uuid
title: User Id
- name: force
in: query
required: false
schema:
type: boolean
description: Delete even if a Stripe subscription exists
default: false
title: Force
description: Delete even if a Stripe subscription exists
- name: x-admin-key
in: header
required: true
schema:
type: string
title: X-Admin-Key
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/admin/pipeline/run-all:
post:
tags:
- Admin
summary: Admin Run All Pipelines
description: 'DISABLED — fan-out discovery across every account is intentionally switched off.
Unattended people discovery must not run inside users'' accounts. Pipelines are now
user-initiated only: POST /pipeline/run (web) or the run_outreach_pipeline MCP tool.
The body is kept, commented, so the behaviour can be restored deliberately rather than
reconstructed. Re-enabling also requires restoring CRON_LINE in deploy/setup_hetzner.sh,
and now a fan-out would drive run_people_pipeline_fast — the background pipeline this
called is deleted.'
operationId: admin_run_all_pipelines_admin_pipeline_run_all_post
parameters:
- name: x-admin-key
in: header
required: true
schema:
type: string
title: X-Admin-Key
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/admin/test-email:
post:
tags:
- Admin
summary: Test Email
description: 'Send one message and report Resend''s verbatim answer. A probe, not a business action.
Exists because diagnosing mail used to mean reading container logs and guessing: the
transport reported a bare bool, and the reason Resend gave was discarded. Now any mail
problem is one call — is the key valid, is the domain verified, was the address refused.'
operationId: test_email_admin_test_email_post
parameters:
- name: to
in: query
required: true
schema:
type: string
description: Recipient for the probe
title: To
description: Recipient for the probe
- name: x-admin-key
in: header
required: true
schema:
type: string
title: X-Admin-Key
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/admin/tos-notice:
post:
tags:
- Admin
summary: Send Tos Notice
description: 'Email every active user that the Terms have changed. Run once per release.
This is the notice half of notice-based consent: when CURRENT_TOS_REQUIRES_REACCEPT is
False, nobody is blocked, so this email is the ONLY thing standing between a version bump
and terms a user never heard about. Send it on the day you deploy the new text.
Idempotent per version. "Have we already told this user about THIS version?" is answered
from action_audit rather than a new column — the same trick the idle-Unipile sweep uses for
its warning (services/heartbeat.py). Re-running only picks up whoever was missed.
Delivery is recorded per user: send_email returns False on anything but a 2xx from Resend,
and that lands as a failed audit row. When notice carries legal weight, "we sent it" has to
be answerable per recipient, not assumed.
Defaults to dry_run — the first call prints the roster so it can be eyeballed before any
mail goes out.'
operationId: send_tos_notice_admin_tos_notice_post
parameters:
- name: dry_run
in: query
required: false
schema:
type: boolean
description: List recipients without sending
default: true
title: Dry Run
description: List recipients without sending
- name: x-admin-key
in: header
required: true
schema:
type: string
title: X-Admin-Key
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/admin/overview:
get:
tags:
- Admin
summary: Overview
description: 'The single admin read: roster, today''s usage so far, and the trailing window.
Per-endpoint traffic is split real vs. `noise` (load-balancer scanners), the user rows
carry today''s counters and messaging health, and `frontend` holds the same day''s browser
numbers. The day is UTC — see the `timezone` and `date` fields.
Named /overview rather than bare /admin because the billing gate exempts the "/admin/"
prefix (main.py), which the bare path would not match.'
operationId: overview_admin_overview_get
parameters:
- name: window
in: query
required: false
schema:
type: integer
maximum: 365
minimum: 1
description: Trailing window in days
default: 7
title: Window
description: Trailing window in days
- name: user_id
in: query
required: false
schema:
anyOf:
- type: string
format: uuid
- type: 'null'
description: Add a drill-down for one user
title: User Id
description: Add a drill-down for one user
- name: posthog
in: query
required: false
schema:
type: boolean
description: Include frontend numbers from PostHog
default: true
title: Posthog
description: Include frontend numbers from PostHog
- name: x-admin-key
in: header
required: true
schema:
type: string
title: X-Admin-Key
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/admin/issue-reports:
get:
tags:
- Admin
summary: List Issue Reports
description: 'Anonymous break reports from agents, newest first. There is no user to filter on and
none to follow up with — read these in aggregate (see db/models.py IssueReport).'
operationId: list_issue_reports_admin_issue_reports_get
parameters:
- name: status
in: query
required: false
schema:
anyOf:
- type: string
- type: 'null'
description: Filter to new or solved
title: Status
description: Filter to new or solved
- name: limit
in: query
required: false
schema:
type: integer
maximum: 200
minimum: 1
default: 50
title: Limit
- name: x-admin-key
in: header
required: true
schema:
type: string
title: X-Admin-Key
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/admin/issue-reports/{report_id}/solve:
post:
tags:
- Admin
summary: Solve Issue Report
description: 'Publish a report to the agent-facing list_solved_issues feed.
The two fields you write here are the ONLY thing that feed ever returns — the submitted
text stays private because nobody vetted it. Write them for an agent to read.'
operationId: solve_issue_report_admin_issue_reports__report_id__solve_post
parameters:
- name: report_id
in: path
required: true
schema:
type: string
format: uuid
title: Report Id
- name: x-admin-key
in: header
required: true
schema:
type: string
title: X-Admin-Key
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SolveIssueRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
components:
schemas:
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
type: object
required:
- loc
- msg
- type
title: ValidationError
SolveIssueRequest:
properties:
public_title:
type: string
title: Public Title
resolution:
type: string
title: Resolution
type: object
required:
- public_title
- resolution
title: SolveIssueRequest
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
CreateUserRequest:
properties:
email:
type: string
title: Email
display_name:
type: string
title: Display Name
service_client_id:
anyOf:
- type: string
- type: 'null'
title: Service Client Id
allow_undeliverable:
type: boolean
title: Allow Undeliverable
default: false
type: object
required:
- email
- display_name
title: CreateUserRequest
securitySchemes:
HTTPBearer:
type: http
scheme: bearer
x-refined-from:
- openapi.json
- iridiumhqmcp-com-openapi.json
x-provenance:
method: harvested
publisher: Iridium
source: https://api.iridiumhqmcp.com/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)