Menu

API reference · Partners

Invitations

partners · invitations · 5 operations

GET/v1/partners/invitations

List the partner invitations sent by the workspace

partners.invitations.list

ReadIdempotentSince 2026-11-01

Lists the partner invitations this workspace sent, newest first, paginated by cursor (limit up to 200). A partner invitation asks the owner of ANOTHER organization (by email) to link it as an account of the workspace; that organization keeps paying its own subscription. Each invitation: recipient_email, status (pending, expired = pending but past expires_at, accepted, declined, cancelled), who sent it, created_at, expires_at (7 days after sending or the last resend), responded_at, cancelled_at and, once accepted, child_org_id and child_org_name (the new account, see platform.orgs.get). Filter with status (or all, the default); a filtered page is filled up to limit while reading (up to 500 invitations per page; then has_more says whether more follow). Only workspaces send invitations: called on an Account (org_id of an Account) it is 400, run it without org_id. Owners and admins only.

Scope
partners:read
Permission
View the module · Only owner, admin
MCP tool
partners_invitations_listOn the full surface; on the compact one, mb_execute_operation with id: "partners.invitations.list".

Declared cost: up to 502 reads and 0 writes per call (they count against the daily quota).

Parameters

limitintegerqueryoptional

How many items this page brings at most (see the maximum and the default in the schema).

Default: 50

cursorstringqueryoptional

The next_cursor of the previous page, exactly as it came (only for the same list and filters); without it, the first page.

statusenumqueryoptional

Only the invitations in this status (expired: pending past their 30 days), or all (the default).

Values: pending, expired, accepted, declined, cancelled, all

Response

dataarray<object>
has_moreboolean
next_cursorstring

Errors

Example

curl "https://api.mb-suite.com/v1/partners/invitations" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/partners/invitations" \
  -H "Authorization: Bearer $MB_TEST_KEY"
GET/v1/partners/invitations/{invitation_id}

Get one partner invitation

partners.invitations.get

ReadIdempotentSince 2026-11-01

Returns one partner invitation sent by this workspace, with the same fields as partners.invitations.list (status expired means pending but past expires_at: it can still be resent or cancelled, no longer accepted). An invitation sent by another organization is not found (partner_invitation_not_found). Owners and admins only.

Scope
partners:read
Permission
View the module · Only owner, admin
MCP tool
partners_invitations_getOn the full surface; on the compact one, mb_execute_operation with id: "partners.invitations.get".

Declared cost: up to 1 reads and 0 writes per call (they count against the daily quota).

Parameters

invitation_idstringpathrequired

The partner invitation id (partners.invitations.list).

Response

idstring
statusenum

Values: pending, expired, accepted, declined, cancelled

recipient_emailstring
parent_org_idstring
parent_org_namestring
invited_bystring
invited_by_namestring
invited_by_emailstring
created_atnumber
expires_atnumber
responded_atnumber | null
cancelled_atnumber | null
child_org_idstring | null
child_org_namestring | null

Errors

Example

curl "https://api.mb-suite.com/v1/partners/invitations/{invitation_id}" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl "https://api.mb-suite.com/v1/partners/invitations/{invitation_id}" \
  -H "Authorization: Bearer $MB_TEST_KEY"
POST/v1/partners/invitations

Invite another organization to become an account of the workspace

partners.invitations.send

WriteSince 2026-11-01

SENDS a partner invitation by email (Amazon SES, from MB Suite, in the inviter's language) to the owner of another organization (email; recipient_email, its name in the output, is accepted too): it can accept it from MB Suite (Settings → Partners) within 7 days, choosing one of the organizations it owns, which then becomes an account of this workspace while it keeps paying its own subscription (on an internal or paying workspace, its base price moves to the partner tier from its next invoice). Accepting and declining are done by the invited person in the app, never through the API (partners.invitation.accepted / partners.invitation.declined fire). Only a workspace can invite (partners_workspace_only), and it takes a direct owner or admin with edit access to Accounts (partners_accounts_access_required: only agency workspaces link accounts). Errors: partner_invitation_email_invalid, partner_invitation_exists (409, a pending invitation for that email already exists: resend or cancel it; details.invitation_id), partner_invitation_own_member (the email belongs to a member of the workspace). It reaches a real inbox: confirm the address with the person first. Returns the invitation.

Instructions for agents

Tell the person the invitation was emailed and that the other organization has 7 days to accept it from MB Suite (Settings → Partners).

Needs confirmation: first dry_run: true (preview and confirm_token, valid 10 minutes and for one run), then the same body with confirm_token. In a few operations only with certain data: the description says when. Why and how: Dry run and confirm_token.

Scope
partners:write
Permission
Edit in the module · Only owner, admin
MCP tool
partners_invitations_sendOn the full surface; on the compact one, mb_execute_operation with id: "partners.invitations.send".
Events it can emit
partners.invitation.sent

Declared cost: up to 2 reads and 1 writes per call (they count against the daily quota). Touches an external platform (ses): it counts against the external operations quota.

Parameters

emailstringbodyoptional

The email of the owner of the organization to link (recipient_email is accepted too).

recipient_emailstringbodyoptional

Same as email: the name the invitation shows it with in the output.

Response

invitation_idstring
invitationobject

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/partners/invitations" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "dry_run": true
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset. In the practice organization this operation is not simulated (it reaches another platform): it answers 409 sandbox_external_unavailable.

POST/v1/partners/invitations/{invitation_id}/resend

Resend a pending partner invitation

partners.invitations.resend

WriteSince 2026-11-01

Emails a pending partner invitation again (Amazon SES) and gives it 7 more days from now (expires_at moves); it also revives an expired one (status expired). Only pending invitations (partner_invitation_not_pending, 409, once accepted, declined or cancelled). Same permissions as partners.invitations.send: a direct owner or admin with edit access to Accounts. It reaches a real inbox again: run it only when the person asks. Returns the invitation.

Needs confirmation: first dry_run: true (preview and confirm_token, valid 10 minutes and for one run), then the same body with confirm_token. In a few operations only with certain data: the description says when. Why and how: Dry run and confirm_token.

Scope
partners:write
Permission
Edit in the module · Only owner, admin
MCP tool
partners_invitations_resendOn the full surface; on the compact one, mb_execute_operation with id: "partners.invitations.resend".
Events it can emit
partners.invitation.sent

Declared cost: up to 2 reads and 1 writes per call (they count against the daily quota). Touches an external platform (ses): it counts against the external operations quota.

Parameters

invitation_idstringpathrequired

The partner invitation id (partners.invitations.list).

Response

invitationobject

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/partners/invitations/{invitation_id}/resend" \
  -H "Authorization: Bearer $MB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "dry_run": true
}'

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset. In the practice organization this operation is not simulated (it reaches another platform): it answers 409 sandbox_external_unavailable.

POST/v1/partners/invitations/{invitation_id}/cancel

Cancel a pending partner invitation

partners.invitations.cancel

WriteIdempotentSince 2026-11-01

Cancels a pending (or expired) partner invitation: its link stops working and the invited organization can no longer accept it; nobody is emailed. The invitation stays in the list as cancelled (nothing is deleted). Idempotent: on an invitation already cancelled nothing changes (changed=false); an accepted or declined one is partner_invitation_not_pending (409). A direct owner or admin with edit access to Accounts. Returns the invitation.

Scope
partners:write
Permission
Edit in the module · Only owner, admin
MCP tool
partners_invitations_cancelOn the full surface; on the compact one, mb_execute_operation with id: "partners.invitations.cancel".

Declared cost: up to 2 reads and 1 writes per call (they count against the daily quota).

Parameters

invitation_idstringpathrequired

The partner invitation id (partners.invitations.list).

Response

invitationobject
changedboolean

Errors

Example

curl -X POST "https://api.mb-suite.com/v1/partners/invitations/{invitation_id}/cancel" \
  -H "Authorization: Bearer $MB_API_KEY"

Try it with your test API key

With a test API key the request always goes to your practice organization: example data you can reset.

curl -X POST "https://api.mb-suite.com/v1/partners/invitations/{invitation_id}/cancel" \
  -H "Authorization: Bearer $MB_TEST_KEY"