Direct

Generated direct operations.

GET/v1/directRead the current direct account and its profilesread
Audience
Clients · Native API
Authorization
API key or personal access token with the read scope, or a signed-in session
OpenAPI operation ID
get_direct_account

Responses

200Successapplication/json

Example
{
  "account": {
    "allowedLibraries": [
      "string"
    ],
    "disabled": true,
    "disabledAt": "2026-10-18T19:30:00Z",
    "disabledReason": "string",
    "hostedAccountId": "id_8h2k4q",
    "id": "id_8h2k4q",
    "primaryProfileId": "id_8h2k4q",
    "revision": 0,
    "role": "string",
    "username": "Fargo"
  },
  "authority": "string",
  "canManage": true,
  "capabilities": {
    "manageAccount": true,
    "managePeople": true,
    "manageServer": true,
    "manageSignIn": true
  },
  "custodyPending": true,
  "managePinRequired": true,
  "profiles": [
    {
      "allowedLibraries": [
        "string"
      ],
      "art": "string",
      "id": "id_8h2k4q",
      "name": "Fargo",
      "pinRequired": true,
      "pinRevision": 0,
      "position": 0,
      "primary": true,
      "revision": 0
    }
  ],
  "rememberProfiles": true,
  "serverId": "id_8h2k4q",
  "twoStepSetupRequired": true
}
Schema
  • accountobjectrequired
    • allowedLibrariesarray of stringrequired
    • disabledbooleanrequired
    • disabledAtstring
    • disabledReasonstring
    • hostedAccountIdstring
    • idstringrequired
    • primaryProfileIdstringrequired
    • revisionintegerrequired
    • rolestringrequired
    • usernamestringrequired
  • authoritystringrequired
  • canManagebooleanrequired
  • capabilitiesobjectrequired
    • manageAccountbooleanrequired
    • managePeoplebooleanrequired
    • manageServerbooleanrequired
    • manageSignInbooleanrequired
  • custodyPendingboolean
  • managePinRequiredboolean
  • profilesarray of objectrequired
    • allowedLibrariesarray of stringrequired
    • artstringrequired
    • idstringrequired
    • namestringrequired
    • pinRequiredbooleanrequired
    • pinRevisionintegerrequired
    • positionintegerrequired
    • primarybooleanrequired
    • revisionintegerrequired
  • rememberProfilesbooleanrequired
  • serverIdstringrequired
  • twoStepSetupRequiredboolean

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesunauthorizedpassword_change_requiredinternaldatabase_busy

Example request

curl -X GET "http://127.0.0.1:32500/v1/direct" \
  -H "Authorization: Bearer $PORTICO_API_KEY"
GET/v1/direct/membersRead account membersadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
get_direct_members

Responses

200Successapplication/json

Example
{
  "items": [
    {
      "allowedLibraries": [
        "string"
      ],
      "disabled": true,
      "disabledAt": "2026-10-18T19:30:00Z",
      "disabledReason": "string",
      "hostedAccountId": "id_8h2k4q",
      "id": "id_8h2k4q",
      "primaryProfileId": "id_8h2k4q",
      "revision": 0,
      "role": "string",
      "username": "Fargo"
    }
  ]
}
Schema
  • itemsarray of objectrequired
    • allowedLibrariesarray of stringrequired
    • disabledbooleanrequired
    • disabledAtstring
    • disabledReasonstring
    • hostedAccountIdstring
    • idstringrequired
    • primaryProfileIdstringrequired
    • revisionintegerrequired
    • rolestringrequired
    • usernamestringrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busy

Example request

curl -X GET "http://127.0.0.1:32500/v1/direct/members" \
  -H "Authorization: Bearer $PORTICO_API_KEY"
POST/v1/direct/membersRun account membersadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
post_direct_members
Max body
64 KiB

Request body application/json · required

Example
{
  "allowedLibraries": [
    "string"
  ],
  "name": "Fargo",
  "password": "string",
  "username": "Fargo"
}
Schema
  • allowedLibrariesarray of stringrequired
  • namestringrequired
  • passwordstringrequired
  • usernamestringrequired

Responses

201Successapplication/json

Example
{
  "allowedLibraries": [
    "string"
  ],
  "disabled": true,
  "disabledAt": "2026-10-18T19:30:00Z",
  "disabledReason": "string",
  "hostedAccountId": "id_8h2k4q",
  "id": "id_8h2k4q",
  "primaryProfileId": "id_8h2k4q",
  "revision": 0,
  "role": "string",
  "username": "Fargo"
}
Schema
  • allowedLibrariesarray of stringrequired
  • disabledbooleanrequired
  • disabledAtstring
  • disabledReasonstring
  • hostedAccountIdstring
  • idstringrequired
  • primaryProfileIdstringrequired
  • revisionintegerrequired
  • rolestringrequired
  • usernamestringrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/members" \
  -H "Authorization: Bearer $PORTICO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"allowedLibraries":["string"],"name":"Fargo","password":"string","username":"Fargo"}'
DELETE/v1/direct/members/{id}Delete a member, their profiles, devices and saved dataadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
delete_direct_member
Max body
4 KiB

Parameters

NameInTypeDescription
idrequiredpathstring

Request body application/json · required

Example
{
  "expectedRevision": 0
}
Schema
  • expectedRevisionintegerrequired

Responses

204Success

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesunauthorizednot_permittedinvalid_requestnot_foundrevision_mismatchinternalrevision_requireddatabase_busywriter_capacity

Example request

curl -X DELETE "http://127.0.0.1:32500/v1/direct/members/{id}" \
  -H "Authorization: Bearer $PORTICO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"expectedRevision":0}'
PATCH/v1/direct/members/{id}Change account membersadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
patch_direct_members_id
Max body
64 KiB

Parameters

NameInTypeDescription
idrequiredpathstring

Request body application/json · required

Example
{
  "allowedLibraries": [
    "string"
  ],
  "disabled": true,
  "expectedRevision": 0,
  "name": "Fargo",
  "username": "Fargo"
}
Schema
  • allowedLibrariesarray of stringrequired
  • disabledbooleanrequired
  • expectedRevisionintegerrequired
  • namestringrequired
  • usernamestringrequired

Responses

204Success

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X PATCH "http://127.0.0.1:32500/v1/direct/members/{id}" \
  -H "Authorization: Bearer $PORTICO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"allowedLibraries":["string"],"disabled":true,"expectedRevision":0,"name":"Fargo","username":"Fargo"}'
GET/v1/direct/members/{id}/deletion-previewRead what deleting a member will removeadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
get_direct_member_deletion_preview

Parameters

NameInTypeDescription
idrequiredpathstring

Responses

200Successapplication/json

Example
{
  "accountId": "id_8h2k4q",
  "devices": 0,
  "notes": "string",
  "playlists": 0,
  "playsKept": 0,
  "porticoAccount": true,
  "profiles": 0,
  "revision": 0,
  "role": "string",
  "savedResources": 0,
  "username": "Fargo"
}
Schema
  • accountIdstringrequired
  • devicesintegerrequired
  • notesstring
  • playlistsintegerrequired
  • playsKeptintegerrequired
  • porticoAccountbooleanrequired
  • profilesintegerrequired
  • revisionintegerrequired
  • rolestringrequired
  • savedResourcesintegerrequired
  • usernamestringrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesunauthorizednot_permittedinvalid_requestnot_foundinternaldatabase_busy

Example request

curl -X GET "http://127.0.0.1:32500/v1/direct/members/{id}/deletion-preview" \
  -H "Authorization: Bearer $PORTICO_API_KEY"
POST/v1/direct/members/{id}/devices/{deviceId}/sign-outSign out one or all devices belonging to a personadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
post_direct_member_device_sign_out
Max body
4 KiB

Parameters

NameInTypeDescription
idrequiredpathstring
deviceIdrequiredpathstring

Request body application/json · required

Example
{}
Schema

object

Responses

204Success

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesunauthorizednot_permittedinvalid_requestnot_foundinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/members/{id}/devices/{deviceId}/sign-out" \
  -H "Authorization: Bearer $PORTICO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
POST/v1/direct/members/{id}/devices/sign-outSign out one or all devices belonging to a personadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
post_direct_member_devices_sign_out
Max body
4 KiB

Parameters

NameInTypeDescription
idrequiredpathstring

Request body application/json · required

Example
{}
Schema

object

Responses

204Success

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesunauthorizednot_permittedinvalid_requestnot_foundinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/members/{id}/devices/sign-out" \
  -H "Authorization: Bearer $PORTICO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
POST/v1/direct/members/{id}/reset-codeReset account accesssession
Audience
Clients · Native API
Authorization
Session only; API keys and personal access tokens are refused
OpenAPI operation ID
post_direct_members_id_reset_code
Max body
4 KiB

Parameters

NameInTypeDescription
idrequiredpathstring

Request body application/json · required

Example
{
  "expectedRevision": 0,
  "originalResetCode": "string",
  "turnOffTwoStep": true
}
Schema
  • expectedRevisionintegerrequired
  • originalResetCodestringlength 43–43pattern ^[A-Za-z0-9_-]{43}$
  • turnOffTwoStepboolean

Responses

200Successapplication/json

Example
{
  "code": "string",
  "expiresAt": "2026-10-18T19:30:00Z",
  "serverId": "id_8h2k4q"
}
Schema
  • codestringrequired
  • expiresAtstringrequired
  • serverIdstring

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternalrate_limitedprofile_changeddatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/members/{id}/reset-code" \
  -H "Authorization: Bearer $PORTICO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"expectedRevision":0,"originalResetCode":"string","turnOffTwoStep":true}'
POST/v1/direct/ownershipRun account ownershipsession
Audience
Clients · Native API
Authorization
Session only; API keys and personal access tokens are refused
OpenAPI operation ID
post_direct_ownership
Max body
64 KiB

Parameters

NameInTypeDescription
X-Portico-Installation-Idheaderstring

Request body application/json · required

Example
{
  "accountId": "id_8h2k4q",
  "currentPassword": "string",
  "expectedRevision": 0,
  "newAccount": {
    "name": "Fargo",
    "password": "string",
    "username": "Fargo"
  },
  "porticoIdentity": {
    "certificate": {
      "keyId": "id_8h2k4q",
      "notAfter": "2026-10-18T19:30:00Z",
      "notBefore": "2026-10-18T19:30:00Z",
      "publicKey": "string",
      "purpose": "string",
      "revision": 0,
      "revoked": [
        "string"
      ],
      "signature": "string"
    },
    "keyId": "id_8h2k4q",
    "payload": "string",
    "signature": "string"
  }
}
Schema
  • accountIdstringrequired
  • currentPasswordstringrequired
  • expectedRevisionintegerrequired
  • newAccountobject
    • namestringrequired
    • passwordstringrequired
    • usernamestringrequired
  • porticoIdentityobject
    • certificateobject
      • keyIdstringrequired
      • notAfterstring (date-time)required
      • notBeforestring (date-time)required
      • publicKeystringrequired
      • purposestringrequired
      • revisionintegerrequired
      • revokedarray of stringrequired
      • signaturestringrequired
    • keyIdstringrequired
    • payloadstringrequired
    • signaturestringrequired

Responses

204Success

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/ownership" \
  -H "Authorization: Bearer $PORTICO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "accountId": "id_8h2k4q",
  "currentPassword": "string",
  "expectedRevision": 0,
  "newAccount": {
    "name": "Fargo",
    "password": "string",
    "username": "Fargo"
  },
  "porticoIdentity": {
    "certificate": {
      "keyId": "id_8h2k4q",
      "notAfter": "2026-10-18T19:30:00Z",
      "notBefore": "2026-10-18T19:30:00Z",
      "publicKey": "string",
      "purpose": "string",
      "revision": 0,
      "revoked": [
        "string"
      ],
      "signature": "string"
    },
    "keyId": "id_8h2k4q",
    "payload": "string",
    "signature": "string"
  }
}'
POST/v1/direct/ownership/custodyRun account ownership custodysession
Audience
Clients · Native API
Authorization
Session only; API keys and personal access tokens are refused
OpenAPI operation ID
post_direct_ownership_custody
Max body
64 KiB

Parameters

NameInTypeDescription
X-Portico-Installation-Idheaderstring

Request body application/json · required

Example
{
  "porticoIdentity": {
    "certificate": {
      "keyId": "id_8h2k4q",
      "notAfter": "2026-10-18T19:30:00Z",
      "notBefore": "2026-10-18T19:30:00Z",
      "publicKey": "string",
      "purpose": "string",
      "revision": 0,
      "revoked": [
        "string"
      ],
      "signature": "string"
    },
    "keyId": "id_8h2k4q",
    "payload": "string",
    "signature": "string"
  }
}
Schema
  • porticoIdentityobject | any | nullrequired
    • certificateobject
      • keyIdstringrequired
      • notAfterstring (date-time)required
      • notBeforestring (date-time)required
      • publicKeystringrequired
      • purposestringrequired
      • revisionintegerrequired
      • revokedarray of stringrequired
      • signaturestringrequired
    • keyIdstringrequired
    • payloadstringrequired
    • signaturestringrequired

Responses

204Success

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/ownership/custody" \
  -H "Authorization: Bearer $PORTICO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "porticoIdentity": {
    "certificate": {
      "keyId": "id_8h2k4q",
      "notAfter": "2026-10-18T19:30:00Z",
      "notBefore": "2026-10-18T19:30:00Z",
      "publicKey": "string",
      "purpose": "string",
      "revision": 0,
      "revoked": [
        "string"
      ],
      "signature": "string"
    },
    "keyId": "id_8h2k4q",
    "payload": "string",
    "signature": "string"
  }
}'
POST/v1/direct/passwordRun account passwordsession
Audience
Clients · Native API
Authorization
Session only; API keys and personal access tokens are refused
OpenAPI operation ID
post_direct_password
Max body
64 KiB

Request body application/json · required

Example
{
  "code": "string",
  "currentPassword": "string",
  "newPassword": "string",
  "turnOffTwoStep": true
}
Schema
  • codestringrequired
  • currentPasswordstringrequired
  • newPasswordstringrequired
  • turnOffTwoStepboolean

Responses

204Success

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/password" \
  -H "Authorization: Bearer $PORTICO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"code":"string","currentPassword":"string","newPassword":"string","turnOffTwoStep":true}'
POST/v1/direct/password/resetReset account accesssession
Audience
Clients · Native API
Authorization
No credential needed
OpenAPI operation ID
post_direct_password_reset
Max body
4 KiB

Request body application/json · required

Example
{
  "code": "string",
  "username": "Fargo"
}
Schema
  • codestringrequired
  • usernamestringrequired

Responses

200Successapplication/json

Example
{
  "account": {
    "allowedLibraries": [
      "string"
    ],
    "disabled": true,
    "disabledAt": "2026-10-18T19:30:00Z",
    "disabledReason": "string",
    "hostedAccountId": "id_8h2k4q",
    "id": "id_8h2k4q",
    "primaryProfileId": "id_8h2k4q",
    "revision": 0,
    "role": "string",
    "username": "Fargo"
  },
  "authority": "string",
  "canManage": true,
  "capabilities": {
    "manageAccount": true,
    "managePeople": true,
    "manageServer": true,
    "manageSignIn": true
  },
  "custodyPending": true,
  "deviceId": "id_8h2k4q",
  "installationId": "id_8h2k4q",
  "managePinRequired": true,
  "passwordChangeRequired": true,
  "profiles": [
    {
      "allowedLibraries": [
        "string"
      ],
      "art": "string",
      "id": "id_8h2k4q",
      "name": "Fargo",
      "pinRequired": true,
      "pinRevision": 0,
      "position": 0,
      "primary": true,
      "revision": 0
    }
  ],
  "rememberProfiles": true,
  "resetFileOwnerSession": false,
  "serverId": "id_8h2k4q",
  "session": {
    "accessToken": "string",
    "authorizationHorizon": "string",
    "deviceId": "id_8h2k4q",
    "expiresAt": "2026-10-18T19:30:00Z",
    "installationId": "id_8h2k4q",
    "refreshToken": "string",
    "serverIdentity": {
      "fingerprint": "string",
      "publicKey": "string"
    },
    "sessionFamilyId": "id_8h2k4q",
    "tokenGeneration": "string",
    "viewer": {
      "accountId": "id_8h2k4q",
      "authority": "string",
      "profileId": "id_8h2k4q",
      "role": "account",
      "serverId": "id_8h2k4q"
    }
  },
  "twoStepSetupRequired": true
}
Schema
  • accountobjectrequired
    • allowedLibrariesarray of stringrequired
    • disabledbooleanrequired
    • disabledAtstring
    • disabledReasonstring
    • hostedAccountIdstring
    • idstringrequired
    • primaryProfileIdstringrequired
    • revisionintegerrequired
    • rolestringrequired
    • usernamestringrequired
  • authoritystringrequired
  • canManagebooleanrequired
  • capabilitiesobjectrequired
    • manageAccountbooleanrequired
    • managePeoplebooleanrequired
    • manageServerbooleanrequired
    • manageSignInbooleanrequired
  • custodyPendingboolean
  • deviceIdstring
  • installationIdstring
  • managePinRequiredboolean
  • passwordChangeRequiredtruerequired
  • profilesarray of objectrequired
    • allowedLibrariesarray of stringrequired
    • artstringrequired
    • idstringrequired
    • namestringrequired
    • pinRequiredbooleanrequired
    • pinRevisionintegerrequired
    • positionintegerrequired
    • primarybooleanrequired
    • revisionintegerrequired
  • rememberProfilesbooleanrequired
  • resetFileOwnerSessionfalse
  • serverIdstringrequired
  • sessionobjectrequired
    • accessTokenstringrequired
    • authorizationHorizonstringrequired
    • deviceIdstringrequired
    • expiresAtstringrequired
    • installationIdstringrequired
    • refreshTokenstringlength 0–0
    • serverIdentityobject
      • fingerprintstringrequired
      • publicKeystringrequired
    • sessionFamilyIdstringrequired
    • tokenGenerationstringrequired
    • viewerobjectrequired
      • accountIdstringrequired
      • authoritystringrequired
      • profileIdstringrequired
      • rolestringrequiredone of "account"
      • serverIdstringrequired
  • twoStepSetupRequiredboolean

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternalrate_limiteddatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/password/reset" \
  -H "Content-Type: application/json" \
  -d '{"code":"string","username":"Fargo"}'
GET/v1/direct/pin-recoveryRead available PIN reset confirmationssession
Audience
Clients · Native API
Authorization
Session only; API keys and personal access tokens are refused
OpenAPI operation ID
get_direct_pin_recovery

Responses

200Successapplication/json

Example
{
  "authenticator": true,
  "password": true,
  "recoveryCode": true
}
Schema
  • authenticatorbooleanrequired
  • passwordbooleanrequired
  • recoveryCodebooleanrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesunauthorizedpassword_change_requiredfactor_setup_requirednot_permittedinternaldatabase_busy

Example request

curl -X GET "http://127.0.0.1:32500/v1/direct/pin-recovery" \
  -H "Authorization: Bearer $PORTICO_ACCESS_TOKEN"
POST/v1/direct/portico-challengeRequest a signed account sign-in challengesession
Audience
Clients · Native API
Authorization
No credential needed
OpenAPI operation ID
post_direct_portico_challenge
Max body
64 KiB

Parameters

NameInTypeDescription
X-Portico-Installation-Idheaderstring

Request body application/json · required

Example
{
  "nonce": "string"
}
Schema
  • noncestringrequired

Responses

200Successapplication/json

Example
{
  "challenge": "string",
  "expiresAt": "2026-10-18T19:30:00Z",
  "proof": {
    "key": "string"
  }
}
Schema
  • challengestringrequired
  • expiresAtstringrequired
  • proofobjectrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/portico-challenge" \
  -H "Content-Type: application/json" \
  -d '{"nonce":"string"}'
POST/v1/direct/profile-switchRun account profile switchsession
Audience
Clients · Native API
Authorization
Session only; API keys and personal access tokens are refused
OpenAPI operation ID
post_direct_profile_switch
Max body
64 KiB

Request body application/json · required

Example
{
  "installationId": "id_8h2k4q",
  "outgoingProfileId": "id_8h2k4q"
}
Schema
  • installationIdstringrequired
  • outgoingProfileIdstringrequired

Responses

204Success

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/profile-switch" \
  -H "Authorization: Bearer $PORTICO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"installationId":"id_8h2k4q","outgoingProfileId":"id_8h2k4q"}'
POST/v1/direct/profilesRun account profileadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
post_direct_profiles
Max body
64 KiB

Request body application/json · required

Example
{
  "art": "string",
  "name": "Fargo"
}
Schema
  • artstringrequired
  • namestringrequired

Responses

201Successapplication/json

Example
{
  "account": {
    "allowedLibraries": [
      "string"
    ],
    "disabled": true,
    "disabledAt": "2026-10-18T19:30:00Z",
    "disabledReason": "string",
    "hostedAccountId": "id_8h2k4q",
    "id": "id_8h2k4q",
    "primaryProfileId": "id_8h2k4q",
    "revision": 0,
    "role": "string",
    "username": "Fargo"
  },
  "authority": "string",
  "canManage": true,
  "capabilities": {
    "manageAccount": true,
    "managePeople": true,
    "manageServer": true,
    "manageSignIn": true
  },
  "custodyPending": true,
  "managePinRequired": true,
  "profiles": [
    {
      "allowedLibraries": [
        "string"
      ],
      "art": "string",
      "id": "id_8h2k4q",
      "name": "Fargo",
      "pinRequired": true,
      "pinRevision": 0,
      "position": 0,
      "primary": true,
      "revision": 0
    }
  ],
  "rememberProfiles": true,
  "serverId": "id_8h2k4q",
  "twoStepSetupRequired": true
}
Schema
  • accountobjectrequired
    • allowedLibrariesarray of stringrequired
    • disabledbooleanrequired
    • disabledAtstring
    • disabledReasonstring
    • hostedAccountIdstring
    • idstringrequired
    • primaryProfileIdstringrequired
    • revisionintegerrequired
    • rolestringrequired
    • usernamestringrequired
  • authoritystringrequired
  • canManagebooleanrequired
  • capabilitiesobjectrequired
    • manageAccountbooleanrequired
    • managePeoplebooleanrequired
    • manageServerbooleanrequired
    • manageSignInbooleanrequired
  • custodyPendingboolean
  • managePinRequiredboolean
  • profilesarray of objectrequired
    • allowedLibrariesarray of stringrequired
    • artstringrequired
    • idstringrequired
    • namestringrequired
    • pinRequiredbooleanrequired
    • pinRevisionintegerrequired
    • positionintegerrequired
    • primarybooleanrequired
    • revisionintegerrequired
  • rememberProfilesbooleanrequired
  • serverIdstringrequired
  • twoStepSetupRequiredboolean

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/profiles" \
  -H "Authorization: Bearer $PORTICO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"art":"string","name":"Fargo"}'
DELETE/v1/direct/profiles/{id}Retire an account profile and begin private cleanupadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
delete_direct_profiles_id
Max body
1 KiB

Parameters

NameInTypeDescription
idrequiredpathstring

Request body application/json · required

Example
{
  "deleteSavedResources": true,
  "expectedRevision": 1,
  "lifetime": "2026-10-18T19:30:00Z"
}
Schema
  • deleteSavedResourcesbooleanrequiredone of true
  • expectedRevisionintegerrequired≥ 1
  • lifetimestringrequiredpattern ^[0-9a-f]{32}$

Responses

200Successapplication/json

Example
{
  "lifetime": "2026-10-18T19:30:00Z",
  "profileId": "id_8h2k4q",
  "state": "removing"
}
Schema
  • lifetimestringrequiredpattern ^[0-9a-f]{32}$
  • profileIdstringrequiredlength 1–128
  • statestringrequiredone of "removing", "removed", "blocked"

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X DELETE "http://127.0.0.1:32500/v1/direct/profiles/{id}" \
  -H "Authorization: Bearer $PORTICO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"deleteSavedResources":true,"expectedRevision":1,"lifetime":"2026-10-18T19:30:00Z"}'
PATCH/v1/direct/profiles/{id}Change account profileadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
patch_direct_profiles_id
Max body
64 KiB

Parameters

NameInTypeDescription
idrequiredpathstring

Request body application/json · required

Example
{
  "art": "string",
  "expectedRevision": 0,
  "name": "Fargo",
  "pin": "string",
  "policy": {
    "allowedLibraries": [
      "string"
    ]
  }
}
Schema
  • artstring
  • expectedRevisionintegerrequired
  • namestring
  • pinstring
  • policyobject
    • allowedLibrariesarray of stringrequired

Responses

200Successapplication/json

Example
{
  "account": {
    "allowedLibraries": [
      "string"
    ],
    "disabled": true,
    "disabledAt": "2026-10-18T19:30:00Z",
    "disabledReason": "string",
    "hostedAccountId": "id_8h2k4q",
    "id": "id_8h2k4q",
    "primaryProfileId": "id_8h2k4q",
    "revision": 0,
    "role": "string",
    "username": "Fargo"
  },
  "authority": "string",
  "canManage": true,
  "capabilities": {
    "manageAccount": true,
    "managePeople": true,
    "manageServer": true,
    "manageSignIn": true
  },
  "custodyPending": true,
  "managePinRequired": true,
  "profiles": [
    {
      "allowedLibraries": [
        "string"
      ],
      "art": "string",
      "id": "id_8h2k4q",
      "name": "Fargo",
      "pinRequired": true,
      "pinRevision": 0,
      "position": 0,
      "primary": true,
      "revision": 0
    }
  ],
  "rememberProfiles": true,
  "serverId": "id_8h2k4q",
  "twoStepSetupRequired": true
}
Schema
  • accountobjectrequired
    • allowedLibrariesarray of stringrequired
    • disabledbooleanrequired
    • disabledAtstring
    • disabledReasonstring
    • hostedAccountIdstring
    • idstringrequired
    • primaryProfileIdstringrequired
    • revisionintegerrequired
    • rolestringrequired
    • usernamestringrequired
  • authoritystringrequired
  • canManagebooleanrequired
  • capabilitiesobjectrequired
    • manageAccountbooleanrequired
    • managePeoplebooleanrequired
    • manageServerbooleanrequired
    • manageSignInbooleanrequired
  • custodyPendingboolean
  • managePinRequiredboolean
  • profilesarray of objectrequired
    • allowedLibrariesarray of stringrequired
    • artstringrequired
    • idstringrequired
    • namestringrequired
    • pinRequiredbooleanrequired
    • pinRevisionintegerrequired
    • positionintegerrequired
    • primarybooleanrequired
    • revisionintegerrequired
  • rememberProfilesbooleanrequired
  • serverIdstringrequired
  • twoStepSetupRequiredboolean

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X PATCH "http://127.0.0.1:32500/v1/direct/profiles/{id}" \
  -H "Authorization: Bearer $PORTICO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"art":"string","expectedRevision":0,"name":"Fargo","pin":"string","policy":{"allowedLibraries":["string"]}}'
DELETE/v1/direct/profiles/{id}/avatarRemove account profile avataradmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
delete_direct_profiles_id_avatar

Parameters

NameInTypeDescription
idrequiredpathstring

Responses

204Success

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X DELETE "http://127.0.0.1:32500/v1/direct/profiles/{id}/avatar" \
  -H "Authorization: Bearer $PORTICO_API_KEY"
POST/v1/direct/profiles/{id}/avatarRun account profile avataradmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
post_direct_profiles_id_avatar
Max body
5 MiB

Parameters

NameInTypeDescription
idrequiredpathstring

Request body application/octet-stream · required

Example
"string"
Schema

string (binary)

Responses

201Successapplication/json

Example
{
  "profileId": "id_8h2k4q",
  "sourceMime": "string",
  "updatedAt": "2026-10-18T19:30:00Z",
  "url": "https://example.com/…",
  "version": 0
}
Schema
  • profileIdstringrequired
  • sourceMimestringrequired
  • updatedAtstringrequired
  • urlstringrequired
  • versionintegerrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/profiles/{id}/avatar" \
  -H "Authorization: Bearer $PORTICO_API_KEY"
GET/v1/direct/profiles/{id}/deletion-previewRead account profile deletion previewadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
get_direct_profiles_id_deletion_preview

Parameters

NameInTypeDescription
idrequiredpathstring

Responses

200Successapplication/json

Example
{
  "lifetime": "2026-10-18T19:30:00Z",
  "name": "Fargo",
  "playlists": 0,
  "primary": true,
  "profileId": "id_8h2k4q",
  "revision": 0,
  "savedResources": 0
}
Schema
  • lifetimestringrequired
  • namestringrequired
  • playlistsintegerrequired
  • primarybooleanrequired
  • profileIdstringrequired
  • revisionintegerrequired
  • savedResourcesintegerrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busy

Example request

curl -X GET "http://127.0.0.1:32500/v1/direct/profiles/{id}/deletion-preview" \
  -H "Authorization: Bearer $PORTICO_API_KEY"
POST/v1/direct/profiles/{id}/pin-resetClear or replace a direct profile PINadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
post_direct_profile_pin_reset
Max body
4 KiB

Parameters

NameInTypeDescription
idrequiredpathstring

Request body application/json · required

Example
{
  "pin": "string"
}
Schema
  • pinstringrequired

Responses

200Successapplication/json

Example
{
  "account": {
    "allowedLibraries": [
      "string"
    ],
    "disabled": true,
    "disabledAt": "2026-10-18T19:30:00Z",
    "disabledReason": "string",
    "hostedAccountId": "id_8h2k4q",
    "id": "id_8h2k4q",
    "primaryProfileId": "id_8h2k4q",
    "revision": 0,
    "role": "string",
    "username": "Fargo"
  },
  "authority": "string",
  "canManage": true,
  "capabilities": {
    "manageAccount": true,
    "managePeople": true,
    "manageServer": true,
    "manageSignIn": true
  },
  "custodyPending": true,
  "managePinRequired": true,
  "profiles": [
    {
      "allowedLibraries": [
        "string"
      ],
      "art": "string",
      "id": "id_8h2k4q",
      "name": "Fargo",
      "pinRequired": true,
      "pinRevision": 0,
      "position": 0,
      "primary": true,
      "revision": 0
    }
  ],
  "rememberProfiles": true,
  "serverId": "id_8h2k4q",
  "twoStepSetupRequired": true
}
Schema
  • accountobjectrequired
    • allowedLibrariesarray of stringrequired
    • disabledbooleanrequired
    • disabledAtstring
    • disabledReasonstring
    • hostedAccountIdstring
    • idstringrequired
    • primaryProfileIdstringrequired
    • revisionintegerrequired
    • rolestringrequired
    • usernamestringrequired
  • authoritystringrequired
  • canManagebooleanrequired
  • capabilitiesobjectrequired
    • manageAccountbooleanrequired
    • managePeoplebooleanrequired
    • manageServerbooleanrequired
    • manageSignInbooleanrequired
  • custodyPendingboolean
  • managePinRequiredboolean
  • profilesarray of objectrequired
    • allowedLibrariesarray of stringrequired
    • artstringrequired
    • idstringrequired
    • namestringrequired
    • pinRequiredbooleanrequired
    • pinRevisionintegerrequired
    • positionintegerrequired
    • primarybooleanrequired
    • revisionintegerrequired
  • rememberProfilesbooleanrequired
  • serverIdstringrequired
  • twoStepSetupRequiredboolean

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesunauthorizedpassword_change_requiredfactor_setup_requirednot_permittedinvalid_requestrequest_in_progressinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/profiles/{id}/pin-reset" \
  -H "Authorization: Bearer $PORTICO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"pin":"string"}'
GET/v1/direct/profiles/{id}/restrictionsRead a direct profile's content and feature restrictionsread
Audience
Clients · Native API
Authorization
API key or personal access token with the read scope, or a signed-in session
OpenAPI operation ID
get_direct_profile_restrictions

Parameters

NameInTypeDescription
idrequiredpathstring

Responses

200Successapplication/json

Example
{
  "allowDownloads": true,
  "allowDvr": true,
  "allowLiveTv": true,
  "allowUnrated": true,
  "allowWatchTogether": true,
  "blockedLabels": [
    "string"
  ],
  "maximumAge": 0,
  "maximumAgeRating": "string",
  "profileId": "id_8h2k4q",
  "ratingSystem": "string",
  "revision": 0
}
Schema
  • allowDownloadsbooleanrequired
  • allowDvrbooleanrequired
  • allowLiveTvbooleanrequired
  • allowUnratedbooleanrequired
  • allowWatchTogetherbooleanrequired
  • blockedLabelsarray of stringrequired
  • maximumAgeintegerrequired
  • maximumAgeRatingstringrequired
  • profileIdstringrequired
  • ratingSystemstringrequired
  • revisionintegerrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesunauthorizedpassword_change_requiredinvalid_requestinternaldatabase_busy

Example request

curl -X GET "http://127.0.0.1:32500/v1/direct/profiles/{id}/restrictions" \
  -H "Authorization: Bearer $PORTICO_API_KEY"
PUT/v1/direct/profiles/{id}/restrictionsReplace a direct profile's restrictionsadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
put_direct_profile_restrictions
Max body
32 KiB

Parameters

NameInTypeDescription
idrequiredpathstring

Request body application/json · required

Example
{
  "allowDownloads": true,
  "allowDvr": true,
  "allowLiveTv": true,
  "allowUnrated": true,
  "allowWatchTogether": true,
  "blockedLabels": [
    "string"
  ],
  "expectedRevision": 0,
  "maximumAgeRating": "string",
  "ratingSystem": "string"
}
Schema
  • allowDownloadsbooleanrequired
  • allowDvrbooleanrequired
  • allowLiveTvbooleanrequired
  • allowUnratedbooleanrequired
  • allowWatchTogetherbooleanrequired
  • blockedLabelsarray of stringrequired
  • expectedRevisionintegerrequired
  • maximumAgeRatingstringrequired
  • ratingSystemstringrequired

Responses

200Successapplication/json

Example
{
  "allowDownloads": true,
  "allowDvr": true,
  "allowLiveTv": true,
  "allowUnrated": true,
  "allowWatchTogether": true,
  "blockedLabels": [
    "string"
  ],
  "maximumAge": 0,
  "maximumAgeRating": "string",
  "profileId": "id_8h2k4q",
  "ratingSystem": "string",
  "revision": 0
}
Schema
  • allowDownloadsbooleanrequired
  • allowDvrbooleanrequired
  • allowLiveTvbooleanrequired
  • allowUnratedbooleanrequired
  • allowWatchTogetherbooleanrequired
  • blockedLabelsarray of stringrequired
  • maximumAgeintegerrequired
  • maximumAgeRatingstringrequired
  • profileIdstringrequired
  • ratingSystemstringrequired
  • revisionintegerrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesunauthorizedpassword_change_requirednot_permittedinvalid_requestrevision_mismatchinternalrevision_requireddatabase_busywriter_capacity

Example request

curl -X PUT "http://127.0.0.1:32500/v1/direct/profiles/{id}/restrictions" \
  -H "Authorization: Bearer $PORTICO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "allowDownloads": true,
  "allowDvr": true,
  "allowLiveTv": true,
  "allowUnrated": true,
  "allowWatchTogether": true,
  "blockedLabels": [
    "string"
  ],
  "expectedRevision": 0,
  "maximumAgeRating": "string",
  "ratingSystem": "string"
}'
GET/v1/direct/profiles/{id}/retirementRead account profile cleanup stateadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
get_direct_profiles_id_retirement

Parameters

NameInTypeDescription
idrequiredpathstring
lifetimequerystring

Responses

200Successapplication/json

Example
{
  "lifetime": "2026-10-18T19:30:00Z",
  "profileId": "id_8h2k4q",
  "state": "removing"
}
Schema
  • lifetimestringrequiredpattern ^[0-9a-f]{32}$
  • profileIdstringrequiredlength 1–128
  • statestringrequiredone of "removing", "removed", "blocked"

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busy

Example request

curl -X GET "http://127.0.0.1:32500/v1/direct/profiles/{id}/retirement" \
  -H "Authorization: Bearer $PORTICO_API_KEY"
POST/v1/direct/profiles/{id}/selectRun account profile selectsession
Audience
Clients · Native API
Authorization
Session only; API keys and personal access tokens are refused
OpenAPI operation ID
post_direct_profiles_id_select
Max body
64 KiB

Parameters

NameInTypeDescription
idrequiredpathstring

Request body application/json · required

Example
{
  "installationId": "id_8h2k4q",
  "pin": "string",
  "remember": true
}
Schema
  • installationIdstringrequired
  • pinstringrequired
  • rememberbooleanrequired

Responses

200Successapplication/json

Example
{
  "remembered": {
    "expiresAt": "2026-10-18T19:30:00Z"
  },
  "session": {
    "accessToken": "string",
    "authorizationHorizon": "string",
    "deviceId": "id_8h2k4q",
    "expiresAt": "2026-10-18T19:30:00Z",
    "installationId": "id_8h2k4q",
    "refreshToken": "string",
    "serverIdentity": {
      "fingerprint": "string",
      "publicKey": "string"
    },
    "sessionFamilyId": "id_8h2k4q",
    "tokenGeneration": "string",
    "viewer": {
      "accountId": "id_8h2k4q",
      "authority": "string",
      "profileId": "id_8h2k4q",
      "role": "string",
      "serverId": "id_8h2k4q"
    }
  }
}
Schema
  • rememberedobject
    • expiresAtstringrequired
  • sessionobjectrequired
    • accessTokenstringrequired
    • authorizationHorizonstringrequired
    • deviceIdstringrequired
    • expiresAtstringrequired
    • installationIdstringrequired
    • refreshTokenstring
    • serverIdentityobject
      • fingerprintstringrequired
      • publicKeystringrequired
    • sessionFamilyIdstringrequired
    • tokenGenerationstringrequired
    • viewerobjectrequired
      • accountIdstringrequired
      • authoritystringrequired
      • profileIdstringrequired
      • rolestringrequired
      • serverIdstringrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/profiles/{id}/select" \
  -H "Authorization: Bearer $PORTICO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"installationId":"id_8h2k4q","pin":"string","remember":true}'
GET/v1/direct/profiles/avatarsList this direct account's profile picturesread
Audience
Clients · Native API
Authorization
API key or personal access token with the read scope, or a signed-in session
OpenAPI operation ID
get_direct_profile_avatars

Responses

200Successapplication/json

Example
{
  "items": [
    {
      "profileId": "id_8h2k4q",
      "sourceMime": "string",
      "updatedAt": "2026-10-18T19:30:00Z",
      "url": "https://example.com/…",
      "version": 0
    }
  ]
}
Schema
  • itemsarray of objectrequired
    • profileIdstringrequired
    • sourceMimestringrequired
    • updatedAtstringrequired
    • urlstringrequired
    • versionintegerrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesunauthorizedpassword_change_requiredinternaldatabase_busy

Example request

curl -X GET "http://127.0.0.1:32500/v1/direct/profiles/avatars" \
  -H "Authorization: Bearer $PORTICO_API_KEY"
PUT/v1/direct/profiles/orderSave account profile orderadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
put_direct_profiles_order
Max body
64 KiB

Request body application/json · required

Example
{
  "profiles": [
    {
      "id": "id_8h2k4q",
      "revision": 0
    }
  ]
}
Schema
  • profilesarray of objectrequired
    • idstringrequired
    • revisionintegerrequired

Responses

200Successapplication/json

Example
{
  "account": {
    "allowedLibraries": [
      "string"
    ],
    "disabled": true,
    "disabledAt": "2026-10-18T19:30:00Z",
    "disabledReason": "string",
    "hostedAccountId": "id_8h2k4q",
    "id": "id_8h2k4q",
    "primaryProfileId": "id_8h2k4q",
    "revision": 0,
    "role": "string",
    "username": "Fargo"
  },
  "authority": "string",
  "canManage": true,
  "capabilities": {
    "manageAccount": true,
    "managePeople": true,
    "manageServer": true,
    "manageSignIn": true
  },
  "custodyPending": true,
  "managePinRequired": true,
  "profiles": [
    {
      "allowedLibraries": [
        "string"
      ],
      "art": "string",
      "id": "id_8h2k4q",
      "name": "Fargo",
      "pinRequired": true,
      "pinRevision": 0,
      "position": 0,
      "primary": true,
      "revision": 0
    }
  ],
  "rememberProfiles": true,
  "serverId": "id_8h2k4q",
  "twoStepSetupRequired": true
}
Schema
  • accountobjectrequired
    • allowedLibrariesarray of stringrequired
    • disabledbooleanrequired
    • disabledAtstring
    • disabledReasonstring
    • hostedAccountIdstring
    • idstringrequired
    • primaryProfileIdstringrequired
    • revisionintegerrequired
    • rolestringrequired
    • usernamestringrequired
  • authoritystringrequired
  • canManagebooleanrequired
  • capabilitiesobjectrequired
    • manageAccountbooleanrequired
    • managePeoplebooleanrequired
    • manageServerbooleanrequired
    • manageSignInbooleanrequired
  • custodyPendingboolean
  • managePinRequiredboolean
  • profilesarray of objectrequired
    • allowedLibrariesarray of stringrequired
    • artstringrequired
    • idstringrequired
    • namestringrequired
    • pinRequiredbooleanrequired
    • pinRevisionintegerrequired
    • positionintegerrequired
    • primarybooleanrequired
    • revisionintegerrequired
  • rememberProfilesbooleanrequired
  • serverIdstringrequired
  • twoStepSetupRequiredboolean

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X PUT "http://127.0.0.1:32500/v1/direct/profiles/order" \
  -H "Authorization: Bearer $PORTICO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"profiles":[{"id":"id_8h2k4q","revision":0}]}'
GET/v1/direct/registration-policyRead owner sign-up and device-approval policyadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
get_direct_registration_policy

Responses

200Successapplication/json

Example
{
  "selfRegistration": "string"
}
Schema
  • selfRegistrationstringrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesunauthorizednot_permittedinternaldatabase_busy

Example request

curl -X GET "http://127.0.0.1:32500/v1/direct/registration-policy" \
  -H "Authorization: Bearer $PORTICO_API_KEY"
PUT/v1/direct/registration-policySave owner sign-up and device-approval policyadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
put_direct_registration_policy
Max body
4 KiB

Request body application/json · required

Example
{
  "selfRegistration": "string"
}
Schema
  • selfRegistrationstringrequired

Responses

200Successapplication/json

Example
{
  "selfRegistration": "string"
}
Schema
  • selfRegistrationstringrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesunauthorizednot_permittedinvalid_requestinternaldatabase_busywriter_capacity

Example request

curl -X PUT "http://127.0.0.1:32500/v1/direct/registration-policy" \
  -H "Authorization: Bearer $PORTICO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"selfRegistration":"string"}'
POST/v1/direct/remembered-accountsRun account remembered accountssession
Audience
Clients · Native API
Authorization
Session only; API keys and personal access tokens are refused
OpenAPI operation ID
post_direct_remembered_accounts
Max body
64 KiB

Request body application/json · required

Example
{
  "automaticSignIn": true,
  "installationId": "id_8h2k4q"
}
Schema
  • automaticSignInbooleanrequired
  • installationIdstringrequired

Responses

200Successapplication/json

Example
{
  "items": [
    {
      "accountId": "id_8h2k4q",
      "automaticSignIn": true,
      "avatarUrl": "https://example.com/…",
      "avatarVersion": 0,
      "displayName": "Fargo",
      "lastUsed": "string",
      "username": "Fargo"
    }
  ]
}
Schema
  • itemsarray of objectrequired
    • accountIdstringrequired
    • automaticSignInbooleanrequired
    • avatarUrlstring
    • avatarVersionintegerrequired
    • displayNamestringrequired
    • lastUsedstringrequired
    • usernamestringrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/remembered-accounts" \
  -H "Authorization: Bearer $PORTICO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"automaticSignIn":true,"installationId":"id_8h2k4q"}'
DELETE/v1/direct/remembered-accounts/{accountId}Forget one account remembered on this installationsession
Audience
Clients · Native API
Authorization
Session only; API keys and personal access tokens are refused
OpenAPI operation ID
delete_direct_remembered_account
Max body
4 KiB

Parameters

NameInTypeDescription
accountIdrequiredpathstring

Request body application/json · required

Example
{
  "installationId": "id_8h2k4q"
}
Schema
  • installationIdstringrequired

Responses

204Success

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesunauthorizednot_permittedinvalid_requestinternaldatabase_busywriter_capacity

Example request

curl -X DELETE "http://127.0.0.1:32500/v1/direct/remembered-accounts/{accountId}" \
  -H "Authorization: Bearer $PORTICO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"installationId":"id_8h2k4q"}'
GET/v1/direct/sessionsRead this direct account's active and recently signed-out sessionsadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
get_direct_sessions

Responses

200Successapplication/json

Example
{
  "items": [
    {
      "current": true,
      "expiresAt": "2026-10-18T19:30:00Z",
      "id": "id_8h2k4q",
      "profileId": "id_8h2k4q",
      "profileName": "Fargo",
      "revokedAt": "2026-10-18T19:30:00Z",
      "revokedReason": "string",
      "statusText": "string"
    }
  ]
}
Schema
  • itemsarray of objectrequired
    • currentbooleanrequired
    • expiresAtstringrequired
    • idstringrequired
    • profileIdstringrequired
    • profileNamestringrequired
    • revokedAtstring
    • revokedReasonstring
    • statusTextstring

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesunauthorizedpassword_change_requirednot_permittedinternaldatabase_busy

Example request

curl -X GET "http://127.0.0.1:32500/v1/direct/sessions" \
  -H "Authorization: Bearer $PORTICO_API_KEY"
DELETE/v1/direct/sessions/{id}Sign out one direct-account sessionadmin
Audience
Clients · Native API
Authorization
API key or personal access token with the admin scope, or a signed-in session
OpenAPI operation ID
delete_direct_session

Parameters

NameInTypeDescription
idrequiredpathstring

Responses

204Success

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesunauthorizedpassword_change_requirednot_permittedinvalid_requestinternaldatabase_busywriter_capacity

Example request

curl -X DELETE "http://127.0.0.1:32500/v1/direct/sessions/{id}" \
  -H "Authorization: Bearer $PORTICO_API_KEY"
POST/v1/direct/sessions/sign-out-everywhereSign this direct account out of every devicesession
Audience
Clients · Native API
Authorization
Session only; API keys and personal access tokens are refused
OpenAPI operation ID
post_direct_sign_out_everywhere

Responses

204Success

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesunauthorizedpassword_change_requirednot_permittedinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/sessions/sign-out-everywhere" \
  -H "Authorization: Bearer $PORTICO_ACCESS_TOKEN"
POST/v1/direct/sign-inSign in to this serversession
Audience
Clients · Native API
Authorization
No credential needed
OpenAPI operation ID
post_direct_sign_in
Max body
64 KiB

Parameters

NameInTypeDescription
X-Portico-Installation-Idheaderstring

Request body application/json · required

Example
{
  "password": "string",
  "porticoIdentity": {
    "certificate": {
      "keyId": "id_8h2k4q",
      "notAfter": "2026-10-18T19:30:00Z",
      "notBefore": "2026-10-18T19:30:00Z",
      "publicKey": "string",
      "purpose": "string",
      "revision": 0,
      "revoked": [
        "string"
      ],
      "signature": "string"
    },
    "keyId": "id_8h2k4q",
    "payload": "string",
    "signature": "string"
  },
  "username": "Fargo"
}
Schema
  • passwordstringrequired
  • porticoIdentityobject
    • certificateobject
      • keyIdstringrequired
      • notAfterstring (date-time)required
      • notBeforestring (date-time)required
      • publicKeystringrequired
      • purposestringrequired
      • revisionintegerrequired
      • revokedarray of stringrequired
      • signaturestringrequired
    • keyIdstringrequired
    • payloadstringrequired
    • signaturestringrequired
  • usernamestringrequired

Responses

200Successapplication/json

Example
{
  "account": {
    "allowedLibraries": [
      "string"
    ],
    "disabled": true,
    "disabledAt": "2026-10-18T19:30:00Z",
    "disabledReason": "string",
    "hostedAccountId": "id_8h2k4q",
    "id": "id_8h2k4q",
    "primaryProfileId": "id_8h2k4q",
    "revision": 0,
    "role": "string",
    "username": "Fargo"
  },
  "authority": "string",
  "canManage": true,
  "capabilities": {
    "manageAccount": true,
    "managePeople": true,
    "manageServer": true,
    "manageSignIn": true
  },
  "challenge": {
    "expiresAt": "2026-10-18T19:30:00Z",
    "token": "string"
  },
  "custodyPending": true,
  "deviceId": "id_8h2k4q",
  "installationId": "id_8h2k4q",
  "managePinRequired": true,
  "passwordChangeRequired": true,
  "profiles": [
    {
      "allowedLibraries": [
        "string"
      ],
      "art": "string",
      "id": "id_8h2k4q",
      "name": "Fargo",
      "pinRequired": true,
      "pinRevision": 0,
      "position": 0,
      "primary": true,
      "revision": 0
    }
  ],
  "rememberProfiles": true,
  "resetFileOwnerSession": true,
  "serverId": "id_8h2k4q",
  "session": {
    "accessToken": "string",
    "authorizationHorizon": "string",
    "deviceId": "id_8h2k4q",
    "expiresAt": "2026-10-18T19:30:00Z",
    "installationId": "id_8h2k4q",
    "refreshToken": "string",
    "serverIdentity": {
      "fingerprint": "string",
      "publicKey": "string"
    },
    "sessionFamilyId": "id_8h2k4q",
    "tokenGeneration": "string",
    "viewer": {
      "accountId": "id_8h2k4q",
      "authority": "string",
      "profileId": "id_8h2k4q",
      "role": "string",
      "serverId": "id_8h2k4q"
    }
  },
  "twoStepSetupRequired": true
}
Schema
  • accountobjectrequired
    • allowedLibrariesarray of stringrequired
    • disabledbooleanrequired
    • disabledAtstring
    • disabledReasonstring
    • hostedAccountIdstring
    • idstringrequired
    • primaryProfileIdstringrequired
    • revisionintegerrequired
    • rolestringrequired
    • usernamestringrequired
  • authoritystringrequired
  • canManagebooleanrequired
  • capabilitiesobjectrequired
    • manageAccountbooleanrequired
    • managePeoplebooleanrequired
    • manageServerbooleanrequired
    • manageSignInbooleanrequired
  • challengeobject
    • expiresAtstringrequired
    • tokenstringrequired
  • custodyPendingboolean
  • deviceIdstring
  • installationIdstring
  • managePinRequiredboolean
  • passwordChangeRequiredboolean
  • profilesarray of objectrequired
    • allowedLibrariesarray of stringrequired
    • artstringrequired
    • idstringrequired
    • namestringrequired
    • pinRequiredbooleanrequired
    • pinRevisionintegerrequired
    • positionintegerrequired
    • primarybooleanrequired
    • revisionintegerrequired
  • rememberProfilesbooleanrequired
  • resetFileOwnerSessionboolean
  • serverIdstringrequired
  • sessionobject
    • accessTokenstringrequired
    • authorizationHorizonstringrequired
    • deviceIdstringrequired
    • expiresAtstringrequired
    • installationIdstringrequired
    • refreshTokenstring
    • serverIdentityobject
      • fingerprintstringrequired
      • publicKeystringrequired
    • sessionFamilyIdstringrequired
    • tokenGenerationstringrequired
    • viewerobjectrequired
      • accountIdstringrequired
      • authoritystringrequired
      • profileIdstringrequired
      • rolestringrequired
      • serverIdstringrequired
  • twoStepSetupRequiredboolean

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/sign-in" \
  -H "Content-Type: application/json" \
  -d '{
  "password": "string",
  "porticoIdentity": {
    "certificate": {
      "keyId": "id_8h2k4q",
      "notAfter": "2026-10-18T19:30:00Z",
      "notBefore": "2026-10-18T19:30:00Z",
      "publicKey": "string",
      "purpose": "string",
      "revision": 0,
      "revoked": [
        "string"
      ],
      "signature": "string"
    },
    "keyId": "id_8h2k4q",
    "payload": "string",
    "signature": "string"
  },
  "username": "Fargo"
}'
DELETE/v1/direct/trustRemove account trustsession
Audience
Clients · Native API
Authorization
Session only; API keys and personal access tokens are refused
OpenAPI operation ID
delete_direct_trust
Max body
64 KiB

Request body application/json · required

Example
{
  "installationId": "id_8h2k4q",
  "profileId": "id_8h2k4q"
}
Schema
  • installationIdstringrequired
  • profileIdstringrequired

Responses

204Success

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X DELETE "http://127.0.0.1:32500/v1/direct/trust" \
  -H "Authorization: Bearer $PORTICO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"installationId":"id_8h2k4q","profileId":"id_8h2k4q"}'
DELETE/v1/direct/two-factorRemove account two-factor verificationsession
Audience
Clients · Native API
Authorization
Session only; API keys and personal access tokens are refused
OpenAPI operation ID
delete_direct_two_factor
Max body
64 KiB

Request body application/json · required

Example
{
  "code": "string",
  "password": "string"
}
Schema
  • codestringrequired
  • passwordstringrequired

Responses

204Success

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X DELETE "http://127.0.0.1:32500/v1/direct/two-factor" \
  -H "Authorization: Bearer $PORTICO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"code":"string","password":"string"}'
GET/v1/direct/two-factorRead account two-factor verificationsession
Audience
Clients · Native API
Authorization
Session only; API keys and personal access tokens are refused
OpenAPI operation ID
get_direct_two_factor

Responses

200Successapplication/json

Example
{
  "enabled": true,
  "pendingEnrolment": true,
  "recoveryCodesRemaining": 0
}
Schema
  • enabledbooleanrequired
  • pendingEnrolmentbooleanrequired
  • recoveryCodesRemainingintegerrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busy

Example request

curl -X GET "http://127.0.0.1:32500/v1/direct/two-factor" \
  -H "Authorization: Bearer $PORTICO_ACCESS_TOKEN"
POST/v1/direct/two-factor/enrolRun account two-factor verification enrolsession
Audience
Clients · Native API
Authorization
Session only; API keys and personal access tokens are refused
OpenAPI operation ID
post_direct_two_factor_enrol
Max body
64 KiB

Request body application/json · required

Example
{
  "password": "string"
}
Schema
  • passwordstringrequired

Responses

201Successapplication/json

Example
{
  "recoveryCodes": [
    "string"
  ],
  "secret": "string",
  "uri": "string"
}
Schema
  • recoveryCodesarray of stringrequired
  • secretstringrequired
  • uristringrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/two-factor/enrol" \
  -H "Authorization: Bearer $PORTICO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"password":"string"}'
POST/v1/direct/two-factor/recovery-codesReplace account recovery codessession
Audience
Clients · Native API
Authorization
Session only; API keys and personal access tokens are refused
OpenAPI operation ID
post_direct_two_factor_recovery_codes
Max body
64 KiB

Request body application/json · required

Example
{
  "code": "string",
  "password": "string"
}
Schema
  • codestringrequired
  • passwordstringrequired

Responses

200Successapplication/json

Example
{
  "codes": [
    "string"
  ]
}
Schema
  • codesarray of stringrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundcurrent_password_incorrectaccount_lockedtwo_factor_missingtwo_factor_requiredtwo_factor_invalidsign_in_kind_porticopassword_change_requiredfactor_setup_requiredauthentication_busyinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/two-factor/recovery-codes" \
  -H "Authorization: Bearer $PORTICO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"code":"string","password":"string"}'
POST/v1/direct/two-factor/verifyRun account two-factor verification verifysession
Audience
Clients · Native API
Authorization
Session only; API keys and personal access tokens are refused
OpenAPI operation ID
post_direct_two_factor_verify
Max body
64 KiB

Request body application/json · required

Example
{
  "code": "string",
  "password": "string"
}
Schema
  • codestringrequired
  • passwordstringrequired

Responses

200Successapplication/json

Example
{
  "enabled": true,
  "pendingEnrolment": true,
  "recoveryCodesRemaining": 0
}
Schema
  • enabledbooleanrequired
  • pendingEnrolmentbooleanrequired
  • recoveryCodesRemainingintegerrequired

defaultRequest refused or unavailableapplication/json

Example
{
  "error": {
    "code": "string",
    "message": "string"
  }
}
Schema
  • errorobjectrequired
    • codestringrequired
    • messagestringrequired

Error codesinvalid_requestunauthorizednot_permittednot_foundinternaldatabase_busywriter_capacity

Example request

curl -X POST "http://127.0.0.1:32500/v1/direct/two-factor/verify" \
  -H "Authorization: Bearer $PORTICO_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"code":"string","password":"string"}'