Skip to main content

Overview

Mailbox API operations are resource-bound. TenantCore does not accept an arbitrary Microsoft mailbox, domain, or tenant and then operate on it. The authorization chain is:
For new integrations, use the TenantCore UUIDs returned by the API:
  • tenant_resource_id — TenantCore tenant-row UUID
  • domain_id — TenantCore domain-row UUID
  • mailbox_id — TenantCore mailbox-row UUID
Mailbox passwords, TOTP seeds, and current MFA codes are not revealable through the public API. The mailbox detail endpoint exposes non-sensitive credential/MFA status only.
All mailbox/provider writes require Idempotency-Key. Microsoft/Exchange-heavy mailbox operations use the public API’s expensive-operation rate-limit bucket.

List tenant mailboxes

Returns every mailbox already registered to an owned TenantCore tenant.
Use the TenantCore tenant_resource_id where possible. The existing Microsoft tenant GUID remains accepted only because TenantCore resolves it against the authenticated account before returning data.
Example response:
The response is explicitly allow-listed. Database-only credential/vault fields are never returned.

List domain mailboxes

Returns mailboxes through an owned TenantCore domain UUID.
Example response:
A guessed domain UUID from another TenantCore account returns the same 404 domain_not_found shape as a nonexistent UUID.

Get one mailbox

Returns one mailbox strictly from its TenantCore mailbox UUID.
Example response:
The security object is status-only. It never contains a password, external vault secret ID, TOTP seed, or current MFA code. sending_connection is null when TenantCore has no persisted sending-tool connection for the mailbox. Raw provider errors are never exposed; use has_error plus the integration/retry workflow instead.

Create mailboxes

Creates one or more mailboxes through an existing TenantCore domain UUID.
The previous contract that accepted a free-form domain string is retired. TenantCore now resolves the domain resource first, proves that its parent tenant belongs to the authenticated account, and only then calls Microsoft.
Request body: The domain name is not supplied separately. The path domain_id is the authorization anchor. Example response:
Raw upstream provider payloads and exception text are sanitized from this public response.

Mailbox creation errors

Retired free-form provisioning contract

returns:
Use POST /v1/domains/{domain_id}/mailboxes instead.

Reset mailbox password

Resets the Microsoft password for a TenantCore-created mailbox.
The password is never echoed in the response. TenantCore resets it in Microsoft and synchronizes the new value into the configured credential vault.
The previous password stops working after Microsoft accepts the reset. Any external system still using the old credential must be updated.
Common errors: The older tenant-scoped reset route remains available for compatibility, but new integrations should use the mailbox UUID route above.

Get mailbox usage

Returns current stored daily usage and effective mailbox cap information.
Example:
This endpoint does not trigger a fresh Microsoft telemetry collection. It returns TenantCore’s current usage state; the reputation/Reports experience provides broader historical telemetry separately.

Delete mailbox

Permanently removes a TenantCore-created mailbox from Microsoft and TenantCore.
TenantCore verifies mailbox ownership before Microsoft is contacted and performs the required Microsoft-side and credential cleanup before removing the TenantCore mailbox resource. Example response:
Raw Microsoft error bodies are not returned through the public API. Use the response request_id when support needs to trace the underlying operation.

Direct mailbox update remains retired

returns:
Display-name editing is not exposed until TenantCore can update Microsoft and TenantCore atomically. Send-limit changes must use the Exchange-enforced policy endpoints below rather than changing a mailbox database field.

Send-limit enforcement

Sending limits are Exchange-enforced policies. Tenant-wide policy needs only an owned tenant. A domain override now requires a TenantCore domain_id, not a free-form domain name.

Set enforcement

Tenant-wide:
Domain-scoped:
Example response:
A supplied domain_id must belong to the same authenticated TenantCore tenant. A domain from another TenantCore account or another owned tenant cannot be used as the scope. The old domain_scope: "mail.acmecorp.com" request field returns 410 domain_name_scope_retired so an old request cannot silently become tenant-wide enforcement.

Get enforcement policy

Tenant-wide:
Domain-scoped:
The response contains both domain_id and readable domain_name. When no policy exists, daily_send_limit is null; that is a normal 200 response.

List enforcement scopes

Each domain-scoped row includes the TenantCore domain_id as well as the readable domain name.

List effective mailbox policies

Each mailbox policy row is augmented with its TenantCore mailbox_id, so subsequent API actions do not need to use an email address as the resource identifier.

Remove enforcement

Tenant-wide:
Domain-scoped:
Exchange cleanup runs before the policy is removed locally. If no policy exists, TenantCore returns a normal not_found result rather than treating that state as an API failure.

Public API security boundary

The mailbox API intentionally does not expose:
  • arbitrary Microsoft tenant or mailbox lookup
  • mailbox password reveal
  • external vault record IDs
  • TOTP seed reveal
  • current MFA-code generation
  • raw Microsoft/Exchange responses
  • generic Microsoft command passthrough
  • arbitrary provider calls
Those boundaries keep TenantCore as the source of truth and ensure API automation can only act on resources already associated with the authenticated TenantCore account.