Skip to content

Depot portalapi

Is Mount under a name of its own, so tools/apispec can tell it from the console’s API.Mount.

This page is generated from the Depot route table. Every operation carries the permission it needs and the anchor an agent can link to.

GETNo permission neededportal facemspIdempotentToken in the path

Source: [object Object]

inviteRead shows the accept page what it needs.

NameInTypeRequiredDescription
tokenpathstringYes
StatusBodyDescription
200application/json, objectSuccess.
404application/problem+json, ProblemDetailsNo resource matches that id.
Terminal window
# This operation is public. It takes no credentials.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/portal/v1/auth/invites/<token>' \
-H 'Accept: application/json'

POST /api/portal/v1/auth/invites/{token}/accept

Section titled “POST /api/portal/v1/auth/invites/{token}/accept”

POSTNo permission neededportal facemspToken in the path

Source: [object Object]

inviteAccept accepts an invitation.

Someone already signed in with the invited address accepts as they are; an existing identity proves itself with its password; a new one sets a password here. The membership becomes active, and the person still owes (or, the first time, enrols) a second factor before the session is active.

NameInTypeRequiredDescription
tokenpathstringYes

Required, sent as application/json.

The body is any.

StatusBodyDescription
200application/json, MeSuccess.
400NoneThe request was refused.
404application/problem+json, ProblemDetailsNo resource matches that id.

200 response body

FieldTypeDescription
authMethodrequiredstring
currentOrgIdstring or null
displayNamerequiredstring
emailrequiredstring
identityIdrequiredstring
localerequiredstring
mfaEnrolledrequiredMfaEnrolment

MfaEnrolment is which second factors the identity holds.

mfaEnrolled.passkeysrequiredinteger
mfaEnrolled.recoveryCodesLeftrequiredinteger
mfaEnrolled.totprequiredboolean
mfaRequiredrequiredboolean
sensitiveFreshUntilstring (date-time) or null
sessionIdrequiredstring
staterequiredstring
timezonerequiredstring
Terminal window
# This operation is public. It takes no credentials.
curl -X POST 'https://depot.example.com/api/portal/v1/auth/invites/<token>/accept' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--data '"string"'

POSTNo permission neededportal facemsp

Source: [object Object]

login verifies an email address and password and starts a session that still owes its second factor (pending_mfa).

Every failure is the same 401 invalid_credentials, whether the address is unknown, the identity is locked or disabled, or the password is wrong, and the unknown-address path burns the same PBKDF2 work: telling them apart would make the sign-in form a membership oracle for the MSP’s customers.

Required, sent as application/json.

The body is any.

StatusBodyDescription
200application/json, MeSuccess.
400application/problem+json, ProblemDetailsThe request body is not acceptable.

200 response body

FieldTypeDescription
authMethodrequiredstring
currentOrgIdstring or null
displayNamerequiredstring
emailrequiredstring
identityIdrequiredstring
localerequiredstring
mfaEnrolledrequiredMfaEnrolment

MfaEnrolment is which second factors the identity holds.

mfaEnrolled.passkeysrequiredinteger
mfaEnrolled.recoveryCodesLeftrequiredinteger
mfaEnrolled.totprequiredboolean
mfaRequiredrequiredboolean
sensitiveFreshUntilstring (date-time) or null
sessionIdrequiredstring
staterequiredstring
timezonerequiredstring
Terminal window
# This operation is public. It takes no credentials.
curl -X POST 'https://depot.example.com/api/portal/v1/auth/login' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--data '"string"'

POSTNo permission neededportal facemsp

Source: [object Object]

logout revokes the current session.

Idempotent: always 204.

StatusBodyDescription
204NoneSuccess, with no body.
Terminal window
# This operation is public. It takes no credentials.
curl -X POST 'https://depot.example.com/api/portal/v1/auth/logout'

POSTportal facemsp

Source: [object Object]

mfaRecovery completes a pending sign-in with a recovery code.

Required, sent as application/json.

The body is any.

StatusBodyDescription
200application/json, MeSuccess.
400application/problem+json, ProblemDetailsThe request body is not acceptable.

200 response body

FieldTypeDescription
authMethodrequiredstring
currentOrgIdstring or null
displayNamerequiredstring
emailrequiredstring
identityIdrequiredstring
localerequiredstring
mfaEnrolledrequiredMfaEnrolment

MfaEnrolment is which second factors the identity holds.

mfaEnrolled.passkeysrequiredinteger
mfaEnrolled.recoveryCodesLeftrequiredinteger
mfaEnrolled.totprequiredboolean
mfaRequiredrequiredboolean
sensitiveFreshUntilstring (date-time) or null
sessionIdrequiredstring
staterequiredstring
timezonerequiredstring
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/portal/v1/auth/mfa/recovery' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b '__Host-portal_session=<portal-session>' \
--data '"string"'

POSTportal facemsp

Source: [object Object]

mfaTotp completes a pending sign-in with a TOTP code.

Required, sent as application/json.

The body is any.

StatusBodyDescription
200application/json, MeSuccess.
400application/problem+json, ProblemDetailsThe request body is not acceptable.

200 response body

FieldTypeDescription
authMethodrequiredstring
currentOrgIdstring or null
displayNamerequiredstring
emailrequiredstring
identityIdrequiredstring
localerequiredstring
mfaEnrolledrequiredMfaEnrolment

MfaEnrolment is which second factors the identity holds.

mfaEnrolled.passkeysrequiredinteger
mfaEnrolled.recoveryCodesLeftrequiredinteger
mfaEnrolled.totprequiredboolean
mfaRequiredrequiredboolean
sensitiveFreshUntilstring (date-time) or null
sessionIdrequiredstring
staterequiredstring
timezonerequiredstring
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/portal/v1/auth/mfa/totp' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b '__Host-portal_session=<portal-session>' \
--data '"string"'

POSTportal facemsp

Source: [object Object]

passkeyBegin starts a ceremony: “login” (a discoverable sign-in, both factors at once), “mfa” (the second factor of a pending sign-in), “register” (add a passkey) or “reauth” (re-authenticate for sensitive pages).

The browser gets flowId and the PublicKeyCredential options.

Required, sent as application/json.

The body is any.

StatusBodyDescription
200application/json, objectSuccess.
400NoneThe request was refused.
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/portal/v1/auth/passkey/begin' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b '__Host-portal_session=<portal-session>' \
--data '"string"'

POSTportal facemsp

Source: [object Object]

passkeyFinish completes a ceremony begun by passkeyBegin.

The flow is spent whatever the outcome, and must finish on the host and (except a login) the session that began it.

Required, sent as application/json.

The body is any.

StatusBodyDescription
200application/json, MeSuccess.
400NoneThe request was refused.

200 response body

FieldTypeDescription
authMethodrequiredstring
currentOrgIdstring or null
displayNamerequiredstring
emailrequiredstring
identityIdrequiredstring
localerequiredstring
mfaEnrolledrequiredMfaEnrolment

MfaEnrolment is which second factors the identity holds.

mfaEnrolled.passkeysrequiredinteger
mfaEnrolled.recoveryCodesLeftrequiredinteger
mfaEnrolled.totprequiredboolean
mfaRequiredrequiredboolean
sensitiveFreshUntilstring (date-time) or null
sessionIdrequiredstring
staterequiredstring
timezonerequiredstring
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/portal/v1/auth/passkey/finish' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b '__Host-portal_session=<portal-session>' \
--data '"string"'

POSTNo permission neededportal facemsp

Source: [object Object]

passwordForgot mails a reset link when the address has an active identity.

It answers 204 whatever happened, and sends after answering, so neither the status nor the timing says whether the address is known.

Required, sent as application/json.

The body is any.

StatusBodyDescription
204NoneSuccess, with no body.
400application/problem+json, ProblemDetailsThe request body is not acceptable.
Terminal window
# This operation is public. It takes no credentials.
curl -X POST 'https://depot.example.com/api/portal/v1/auth/password/forgot' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--data '"string"'

POSTNo permission neededportal facemsp

Source: [object Object]

passwordReset sets a new password from an emailed link.

The link is spent once; a password the policy refuses comes back with a retryToken (a fresh link with the time the old one had left) so the person can try another without asking for a new email. A reset signs every session out and clears the lockout; it does not sign in, because the second factor is still owed.

Required, sent as application/json.

The body is any.

StatusBodyDescription
204NoneSuccess, with no body.
400NoneThe request was refused.
Terminal window
# This operation is public. It takes no credentials.
curl -X POST 'https://depot.example.com/api/portal/v1/auth/password/reset' \
-H 'Content-Type: application/json' \
--data '"string"'

POSTportal facemsp

Source: [object Object]

reauth re-authenticates the signed-in session for sensitive pages: the password (when the identity has one) plus a TOTP or recovery code.

A passkey re-authenticates through /auth/passkey with purpose “reauth”, and a session whose MFA came from the IdP through /auth/sso/discover with reauth true.

Required, sent as application/json.

The body is any.

StatusBodyDescription
204NoneSuccess, with no body.
400application/problem+json, ProblemDetailsThe request body is not acceptable.
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/portal/v1/auth/reauth' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b '__Host-portal_session=<portal-session>' \
--data '"string"'

POSTNo permission neededportal facemspNot fully resolved

What this page does not know
  • response

These are parts of the route the extractor could not read from the source. Everything else on this page came straight from it.

Source: [object Object]

ssoBroker is the broker’s landing: Core form-posts the signed assertion from a cross-site page, which the SameSite=None flow cookie rides.

NameInTypeRequiredDescription
assertionquerystringNo
errorquerystringNo
flowquerystringNo
StatusBodyDescription
200NoneSuccess. The body shape was not resolved; see x-outpost-unresolved.
Terminal window
# This operation is public. It takes no credentials.
curl -X POST 'https://depot.example.com/api/portal/v1/auth/sso/broker?assertion=<assertion>&error=<error>&flow=<flow>'

GETNo permission neededportal facemspIdempotentNot fully resolved

What this page does not know
  • response

These are parts of the route the extractor could not read from the source. Everything else on this page came straight from it.

Source: [object Object]

ssoCallback is the BYO OIDC callback.

NameInTypeRequiredDescription
codequerystringNo
errorquerystringNo
statequerystringNo
StatusBodyDescription
200NoneSuccess. The body shape was not resolved; see x-outpost-unresolved.
Terminal window
# This operation is public. It takes no credentials.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/portal/v1/auth/sso/callback?code=<code>&error=<error>&state=<state>'

POSTportal facemsp

Source: [object Object]

ssoDiscover is home-realm discovery: where an address signs in, as a URL for the browser to go to.

404 no_sso means “use a password”.

Required, sent as application/json.

The body is any.

StatusBodyDescription
200application/json, objectSuccess.
400application/problem+json, ProblemDetailsThe request body is not acceptable.
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/portal/v1/auth/sso/discover' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b '__Host-portal_session=<portal-session>' \
--data '"string"'

POSTNo permission neededportal facemsp

Source: [object Object]

teamsLogin exchanges a Teams SSO token for a bearer session.

Required, sent as application/json.

The body is any.

StatusBodyDescription
200application/json, objectSuccess.
400application/problem+json, ProblemDetailsThe request body is not acceptable.
Terminal window
# This operation is public. It takes no credentials.
curl -X POST 'https://depot.example.com/api/portal/v1/auth/teams' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--data '"string"'

POSTportal facemsp

Source: [object Object]

teamsFlow is broker mode’s hand-off (ruling R3): the authenticate() popup, signed in normally with a cookie session, mints a single-use teams flow and ends at /portal/teams/auth-end?flow=&lt;id>; the tab, which has no cookies, exchanges that id at POST /auth/teams for its bearer.

Required, sent as application/json.

The body is any.

StatusBodyDescription
200application/json, objectSuccess.
400application/problem+json, ProblemDetailsThe request body is not acceptable.
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/portal/v1/auth/teams/flow' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b '__Host-portal_session=<portal-session>' \
--data '"string"'

GETportal facemspIdempotent

Source: [object Object]

me reports the signed-in identity.

A pending session gets it too, with mfaRequired true, so the sign-in page knows which factor to ask for.

StatusBodyDescription
200application/json, MeSuccess.

200 response body

FieldTypeDescription
authMethodrequiredstring
currentOrgIdstring or null
displayNamerequiredstring
emailrequiredstring
identityIdrequiredstring
localerequiredstring
mfaEnrolledrequiredMfaEnrolment

MfaEnrolment is which second factors the identity holds.

mfaEnrolled.passkeysrequiredinteger
mfaEnrolled.recoveryCodesLeftrequiredinteger
mfaEnrolled.totprequiredboolean
mfaRequiredrequiredboolean
sensitiveFreshUntilstring (date-time) or null
sessionIdrequiredstring
staterequiredstring
timezonerequiredstring
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/portal/v1/me' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-b '__Host-portal_session=<portal-session>'

PATCHportal facemsp

Source: [object Object]

updateMe changes the caller’s own name, locale or timezone.

Required, sent as application/json.

The body is any.

StatusBodyDescription
200application/json, MeSuccess.
400NoneThe request was refused.

200 response body

FieldTypeDescription
authMethodrequiredstring
currentOrgIdstring or null
displayNamerequiredstring
emailrequiredstring
identityIdrequiredstring
localerequiredstring
mfaEnrolledrequiredMfaEnrolment

MfaEnrolment is which second factors the identity holds.

mfaEnrolled.passkeysrequiredinteger
mfaEnrolled.recoveryCodesLeftrequiredinteger
mfaEnrolled.totprequiredboolean
mfaRequiredrequiredboolean
sensitiveFreshUntilstring (date-time) or null
sessionIdrequiredstring
staterequiredstring
timezonerequiredstring
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
curl -X PATCH 'https://depot.example.com/api/portal/v1/me' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b '__Host-portal_session=<portal-session>' \
--data '"string"'

GETportal facemspIdempotent

Source: [object Object]

myInvites lists the invitations addressed to the signed-in identity’s own address, with the organization, the roles it would hold and who invited.

StatusBodyDescription
200application/json, array of MyInviteSuccess.

200 response body

FieldTypeDescription
[].clientIdrequiredstring
[].expiresAtrequiredstring (date-time)
[].idrequiredstring
[].invitedByrequiredInviter

Inviter says who sent an invitation: a person at the organization (portal_user, with their name) or the MSP (msp_user, named by the portal).

[].invitedBy.kindrequiredstring
[].invitedBy.namerequiredstring
[].orgNamerequiredstring
[].rolesrequiredarray of string
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/portal/v1/me/invites' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-b '__Host-portal_session=<portal-session>'

POST /api/portal/v1/me/invites/{inviteID}/accept

Section titled “POST /api/portal/v1/me/invites/{inviteID}/accept”

POSTportal facemsp

Source: [object Object]

acceptMyInvite accepts an invitation to the signed-in identity’s own address: the identity proved itself at sign-in, so this links it to the organization with no token and no password (the safe path F1 points existing identities to).

Audited in the organization’s chain.

NameInTypeRequiredDescription
inviteIDpathstringYes
StatusBodyDescription
200application/json, OrgSummarySuccess.
404application/problem+json, ProblemDetailsNo resource matches that id.

200 response body

FieldTypeDescription
clientIdrequiredstring
memberIdrequiredstring
namerequiredstring
statusrequiredstring
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/portal/v1/me/invites/<inviteID>/accept' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-b '__Host-portal_session=<portal-session>'

POSTportal facemsp

Source: [object Object]

recoveryRegenerate replaces the recovery codes.

StatusBodyDescription
200application/json, objectSuccess.
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/portal/v1/me/mfa/recovery-codes' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-b '__Host-portal_session=<portal-session>'

GETportal facemspIdempotent

Source: [object Object]

totpEnrol starts TOTP enrolment: a new secret and its otpauth URL.

StatusBodyDescription
200application/json, objectSuccess.
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/portal/v1/me/mfa/totp' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-b '__Host-portal_session=<portal-session>'

POSTportal facemsp

Source: [object Object]

totpConfirm confirms enrolment with a first code and returns recovery codes.

On a pending session it also completes the sign-in.

Required, sent as application/json.

The body is any.

StatusBodyDescription
200application/json, objectSuccess.
400application/problem+json, ProblemDetailsThe request body is not acceptable.
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/portal/v1/me/mfa/totp' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b '__Host-portal_session=<portal-session>' \
--data '"string"'

DELETEportal facemspIdempotent

Source: [object Object]

totpRemove turns TOTP off and spends the recovery codes with it.

StatusBodyDescription
204NoneSuccess, with no body.
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X DELETE 'https://depot.example.com/api/portal/v1/me/mfa/totp' \
-H 'X-Csrf-Token: <portal-csrf>' \
-b '__Host-portal_session=<portal-session>'

GETportal facemspIdempotent

Source: [object Object]

passkeyList lists the caller’s passkeys on every address.

StatusBodyDescription
200application/json, array of PasskeySuccess.

200 response body

FieldTypeDescription
[].backupStaterequiredboolean
[].createdAtrequiredstring (date-time)
[].idrequiredstring
[].lastUsedAtstring (date-time) or null
[].nicknamestring or null
[].rpIdrequiredstring
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/portal/v1/me/passkeys' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-b '__Host-portal_session=<portal-session>'

DELETE /api/portal/v1/me/passkeys/{passkeyID}

Section titled “DELETE /api/portal/v1/me/passkeys/{passkeyID}”

DELETEportal facemspIdempotent

Source: [object Object]

passkeyRemove deletes one of the caller’s passkeys.

NameInTypeRequiredDescription
passkeyIDpathstringYes
StatusBodyDescription
204NoneSuccess, with no body.
404application/problem+json, ProblemDetailsNo resource matches that id.
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X DELETE 'https://depot.example.com/api/portal/v1/me/passkeys/<passkeyID>' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-b '__Host-portal_session=<portal-session>'

POSTportal facemsp

Source: [object Object]

passwordChange changes the caller’s password and signs their other sessions out.

Required, sent as application/json.

The body is any.

StatusBodyDescription
204NoneSuccess, with no body.
400NoneThe request was refused.
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/portal/v1/me/password' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Content-Type: application/json' \
-b '__Host-portal_session=<portal-session>' \
--data '"string"'

GETportal facemspIdempotent

Source: [object Object]

sessionList lists the caller’s open sessions.

StatusBodyDescription
200application/json, array of SessionSummarySuccess.

200 response body

FieldTypeDescription
[].aiAppSessionAIApp

SessionAIApp names the AI connection behind a session.

[].aiApp.appNamerequiredstring
[].aiApp.grantIdrequiredstring
[].aiApp.orgIdrequiredstring
[].authMethodrequiredstring
[].currentrequiredboolean
[].hostrequiredstring
[].idrequiredstring
[].ipstring or null
[].issuedAtrequiredstring (date-time)
[].lastSeenAtrequiredstring (date-time)
[].userAgentrequiredstring
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/portal/v1/me/sessions' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-b '__Host-portal_session=<portal-session>'

DELETE /api/portal/v1/me/sessions/{sessionID}

Section titled “DELETE /api/portal/v1/me/sessions/{sessionID}”

DELETEportal facemspIdempotent

Source: [object Object]

sessionRevoke signs one of the caller’s own sessions out.

NameInTypeRequiredDescription
sessionIDpathstringYes
StatusBodyDescription
204NoneSuccess, with no body.
404application/problem+json, ProblemDetailsNo resource matches that id.
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X DELETE 'https://depot.example.com/api/portal/v1/me/sessions/<sessionID>' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-b '__Host-portal_session=<portal-session>'

GETportal facemspIdempotent

Source: [object Object]

orgs lists the organizations the caller can switch to: the membership index (derived, may lag), each entry re-checked for an enabled portal.

The org middleware still re-reads the member row on every org request.

StatusBodyDescription
200application/json, array of OrgSummarySuccess.

200 response body

FieldTypeDescription
[].clientIdrequiredstring
[].memberIdrequiredstring
[].namerequiredstring
[].statusrequiredstring
Terminal window
# Sign in first. __Host-portal_session is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/portal/v1/orgs' \
-H 'X-Csrf-Token: <portal-csrf>' \
-H 'Accept: application/json' \
-b '__Host-portal_session=<portal-session>'

Content is licensed CC BY 4.0. Code samples are MIT. Outpost and the Outpost mark are trademarks of Outpost Business Solutions, PBC and are not covered by either license.