name: absuite-system-cli
description: >
Manage Alliance Business Suite (ABS) system administration using the absuite CLI.
Covers cross-tenant admin (tenants, users), system/tenant/user/contact options,
licensing, system portals, overview, IP lookups, carts, business domains, modules,
system emails, migrations and antiforgery — via list/count/get/create/update/delete
commands and service actions. Requires an authenticated CLI session with admin
privileges (see absuite-login-cli). For atomic PATCH updates or raw HTTP, use the
absuite-system (REST) skill.
Alliance Business Suite — System Skill (CLI)
Manage platform administration through the absuite CLI's system service. These are
privileged, instance-wide operations: most require an admin-level account. The CLI does
not support PATCH (JSON Patch) — for partial atomic updates use the absuite-system
REST skill.
Prerequisites
- Authenticate first — run
absuite login(seeabsuite-login-cli). For general CLI usage and configuration, seeabsuite-cli. - Scoping is NOT uniform — unlike tenant-scoped services, most SystemService commands act
across the whole suite instance and take no tenant parameter. Pass a
--TenantId/--PortalId/ path-id parameter only where a command requires it (see each section). You may still set a default tenant for the licensing/modules commands that use one:
…and reference it asabsuite config set --tenant-id <tenant-guid>$TENANT_ID. - Discover commands:
absuite system list-commands absuite system create tenant --help
Command Structure
absuite system <verb> <entity> --Param value
- Verbs:
list,count,get,create,update,delete, plus service actions (verify,validate,redeem,upsert,migrate,send/previewfor emails). - Entities include:
tenant,extended-tenant,user,extended-account-holder,option(system),tenant-option,user-option,contact-option,license,portal,business-domain,ip-lookup,cart,module,overview,migration. - The canonical PowerShell function-name form also works as the command. The function names map
to PowerShell-approved verbs:
- create →
New-(e.g.New-Tenant,New-AccountHolderAsync,New-SystemOption,New-SystemPortal) - get/list/count →
Get-(e.g.Get-AllTenants,Get-UsersAsync,Get-SystemOptions,Get-SystemOverview) - update →
Update-(e.g.Update-Tenant,Update-AccountHolderAsync,Update-SystemOption) - delete →
Invoke-Delete...(e.g.Invoke-DeleteTenant,Invoke-DeleteAccountHolderAsync) - validate license →
Confirm-LicenseAsync; redeem →Invoke-RedeemLicenseAsync - upsert option →
Invoke-UpsertSystemOption; verify domain →Test-SystemBusinessDomain - migrate →
Move-; list migrations →Invoke-Migrations - antiforgery →
Get-AndStoreTokens/Invoke-IsRequestValidAsync
- create →
- JSON DTO params are passed as a single-quoted JSON string (
--<Dto> '{...}') using the same PascalCase field names as the REST API.
Key Concepts
- Option — a key-value setting with fields
Key,Valueand flagsFrozen,Autoload,Transient,Expiration(integer). Options exist at four scopes addressed by the command's id parameter: system (by--PortalId), tenant (--TenantId), user (--UserId), contact (--ContactId). All four share the--OptionCreateDto/--OptionUpdateDtobody. - Tenant (cross-tenant admin) — created with
--TenantCreateDto; required fieldsName,Email,CurrencyId,CountryId. - User (cross-tenant admin / account holder) — created with
--UserCreateDto.Gender∈Unknown|Male|Female|PreferNotToSay; on updateAvailability∈DND|Busy|Away|Offline|Available. - License — validated/redeemed by
LicenseKeyin a--LicenseValidationRequestbody. - System portal — created with
--WebPortalCreateDto(Title,Domain,Root,Disabled,Description,WebsiteThemeId,BusinessDomainId,BusinessPortalApplicationId). - Email dispatch — instance emails use
--ObjectEmailDispatchRequest; per-tenant/per-user emails use--EmailDispatchRequest. Required fields:Title,Message,Culture,UiCulture,Recipients.AlertType∈None|Info|Error|Warning|Success|Action|Alert.
Overview
absuite system get overview
Tenants (cross-tenant admin — no tenant scope param)
List / Count
absuite system list all-tenants
absuite system count tenants
absuite system list all-extended-tenants
absuite system count extended-tenants
Get by ID
absuite system get tenant --TenantId <tenant-guid>
Create
absuite system create tenant --TenantCreateDto '{
"Name": "<tenant-name>",
"Email": "<tenant-email>",
"CurrencyId": "<currency-id>",
"CountryId": "<country-id>",
"LegalName": "<legal-name>",
"Phone": "<phone>",
"WebUrl": "<web-url>",
"Handler": "<handler>",
"LanguageId": "<language-id>",
"TimezoneId": "<timezone-id>"
}'
TenantCreateDto required: Name, Email, CurrencyId, CountryId. Optional incl. LegalName,
Phone, WebUrl, Handler, About, Slogan, Duns, TaxId, AvatarUrl, StateId, CityId,
LanguageId, TimezoneId, BusinessTypeId, BusinessSegmentId, BusinessIndustryId, BusinessSizeId.
Update
absuite system update tenant --TenantId <tenant-guid> --TenantUpdateDto '{
"Name": "<tenant-name>",
"Email": "<tenant-email>",
"CurrencyId": "<currency-id>",
"CountryId": "<country-id>",
"SupportPhoneNumber": "<phone>"
}'
TenantUpdateDto required: Name, Email, CurrencyId, CountryId; adds social/contact fields
(TwitterUsername, FacebookUrl, TwitterUrl, GitHubUrl, LinkedInUrl, InstagramUrl,
YouTubeUrl, WhatsAppNumber, SupportPhoneNumber).
Delete (destructive)
absuite system delete tenant --TenantId <tenant-guid>
Tenant emails (tenant is the id parameter — no separate tenant scope)
absuite system preview tenant-email --TenantId <tenant-guid> --EmailDispatchRequest '{
"Title": "<subject>", "Message": "<body>", "Culture": "en-US", "UiCulture": "en-US", "Recipients": ["<recipient-email>"]
}'
absuite system send tenant-email --TenantId <tenant-guid> --EmailDispatchRequest '{
"Title": "<subject>", "Message": "<body>", "Culture": "en-US", "UiCulture": "en-US", "Recipients": ["<recipient-email>"], "AlertType": "Info"
}'
Users (cross-tenant admin — no tenant scope param)
List / Count
absuite system list users
absuite system count users
absuite system list extended-users
absuite system count extended-users
Get by ID
absuite system get user --UserId <user-guid>
absuite system get extended-account-holder --UserId <user-guid>
Create
absuite system create account-holder --UserCreateDto '{
"Email": "<user-email>",
"FirstName": "<first>",
"LastName": "<last>",
"Password": "<password>",
"Gender": "Unknown"
}'
UserCreateDto fields (all optional in schema): QualifiedName, Birthday, FirstName, LastName,
PublicName, IdProvider, Gender (Unknown|Male|Female|PreferNotToSay), Email, About, Status,
JobTitle, social URLs, TimezoneId, LanguageId, CurrencyId, CountryId, StateId, CityId,
Password.
Update
absuite system update account-holder --UserId <user-guid> --UserUpdateDto '{
"Email": "<user-email>",
"FirstName": "<first>",
"LastName": "<last>",
"Availability": "Available"
}'
UserUpdateDto adds Availability (DND|Busy|Away|Offline|Available) and WebUrl.
Delete (destructive)
absuite system delete account-holder --UserId <user-guid>
User emails (user is the id parameter)
absuite system preview user-email-template --UserId <user-guid> --EmailDispatchRequest '{
"Title": "<subject>", "Message": "<body>", "Culture": "en-US", "UiCulture": "en-US", "Recipients": ["<recipient-email>"]
}'
absuite system send user-email --UserId <user-guid> --EmailDispatchRequest '{
"Title": "<subject>", "Message": "<body>", "Culture": "en-US", "UiCulture": "en-US", "Recipients": ["<recipient-email>"]
}'
System Options (scoped by PortalId)
System options are segmented by portal. --PortalId is required on list / count / get-by-key,
and --Key is required on create and get-by-key.
# List / count (PortalId required)
absuite system list options --PortalId <portal-guid>
absuite system count options --PortalId <portal-guid>
# Get by ID
absuite system get option-by-id --OptionId <option-guid>
# Get by key (PortalId required)
absuite system get option-by-key --Key "<key>" --PortalId <portal-guid>
# Create (Key required; PortalId optional)
absuite system create option --Key "<key>" --PortalId <portal-guid> --OptionCreateDto '{
"Key": "<key>",
"Value": "<value>",
"PortalId": "<portal-guid>",
"Frozen": false,
"Autoload": false,
"Transient": false,
"Expiration": 0
}'
# Update (full replace)
absuite system update option --OptionId <option-guid> --OptionUpdateDto '{ "Key": "<key>", "Value": "<value>" }'
# Upsert by key (create or update; PortalId optional)
absuite system upsert option --Key "<key>" --PortalId <portal-guid> --OptionUpdateDto '{ "Key": "<key>", "Value": "<value>" }'
# Delete
absuite system delete option --OptionId <option-guid>
OptionCreateDto required: Key, Value. Optional: Id, Timestamp, PortalId, Frozen,
Autoload, Transient, Expiration. OptionUpdateDto omits Id/Timestamp.
Tenant Options (tenant is the id parameter)
absuite system list tenant-options --TenantId <tenant-guid>
absuite system count tenant-options --TenantId <tenant-guid>
absuite system get tenant-option-by-id --TenantId <tenant-guid> --OptionId <option-guid>
# Create (Key required; PortalId optional)
absuite system create tenant-option --TenantId <tenant-guid> --Key "<key>" --OptionCreateDto '{ "Key": "<key>", "Value": "<value>" }'
# Update
absuite system update tenant-option --TenantId <tenant-guid> --OptionId <option-guid> --OptionUpdateDto '{ "Key": "<key>", "Value": "<value>" }'
# Delete
absuite system delete tenant-option --TenantId <tenant-guid> --OptionId <option-guid>
User Options (user is the id parameter)
absuite system list user-options --UserId <user-guid>
absuite system count user-options --UserId <user-guid>
absuite system get user-option-by-id --UserId <user-guid> --OptionId <option-guid>
# Create (Key required; PortalId optional)
absuite system create user-option --UserId <user-guid> --Key "<key>" --OptionCreateDto '{ "Key": "<key>", "Value": "<value>" }'
# Update
absuite system update user-option --UserId <user-guid> --OptionId <option-guid> --OptionUpdateDto '{ "Key": "<key>", "Value": "<value>" }'
# Delete
absuite system delete user-option --UserId <user-guid> --OptionId <option-guid>
Contact Options (contact is the id parameter)
absuite system list contact-options --ContactId <contact-guid>
absuite system count contact-options --ContactId <contact-guid>
absuite system get contact-option-by-id --ContactId <contact-guid> --OptionId <option-guid>
# Create (Key required; PortalId optional)
absuite system create contact-option --ContactId <contact-guid> --Key "<key>" --OptionCreateDto '{ "Key": "<key>", "Value": "<value>" }'
# Update
absuite system update contact-option --ContactId <contact-guid> --OptionId <option-guid> --OptionUpdateDto '{ "Key": "<key>", "Value": "<value>" }'
# Delete
absuite system delete contact-option --ContactId <contact-guid> --OptionId <option-guid>
Licensing
# List licenses (TenantId optional — pass it to scope to a tenant)
absuite system list licenses --TenantId <tenant-guid>
# Get a license by ID (TenantId required)
absuite system get license-by-id --TenantId <tenant-guid> --LicenseId <license-guid>
# License sub-resources (TenantId required)
absuite system list license-assignments --TenantId <tenant-guid> --LicenseId <license-guid>
absuite system list license-attributes --TenantId <tenant-guid> --LicenseId <license-guid>
absuite system list license-features --TenantId <tenant-guid> --LicenseId <license-guid>
absuite system get license-records-quota --TenantId <tenant-guid> --LicenseId <license-guid>
# Validate a license (no TenantId)
absuite system validate license --LicenseValidationRequest '{ "LicenseKey": "<license-key>" }'
# Redeem a license (TenantId required)
absuite system redeem license --TenantId <tenant-guid> --LicenseValidationRequest '{ "LicenseKey": "<license-key>" }'
LicenseValidationRequest required field: LicenseKey.
System Portals
absuite system list portals
absuite system count portals
absuite system get portal --PortalId <portal-guid>
absuite system create portal --WebPortalCreateDto '{
"Title": "<portal-title>",
"Domain": "<portal-domain>",
"Root": false,
"Disabled": false,
"Description": "<description>",
"WebsiteThemeId": "<theme-guid>",
"BusinessDomainId": "<business-domain-guid>",
"BusinessPortalApplicationId": "<app-guid>"
}'
absuite system update portal --PortalId <portal-guid> --WebPortalUpdateDto '{
"Title": "<portal-title>",
"Domain": "<portal-domain>",
"Disabled": false
}'
absuite system delete portal --PortalId <portal-guid>
WebPortalCreateDto fields: Id, Timestamp, Root, Title, Domain, Disabled, Description,
WebsiteThemeId, BusinessDomainId, BusinessPortalApplicationId. WebPortalUpdateDto omits
Id/Timestamp.
Business Domains
absuite system list business-domains
absuite system count business-domains
absuite system get business-domain --BusinessDomainId <business-domain-guid>
# Verify a business domain (action)
absuite system verify business-domain --BusinessDomainId <business-domain-guid>
absuite system delete business-domain --BusinessDomainId <business-domain-guid>
IP Lookups
absuite system list ip-lookups
absuite system count ip-lookups
absuite system get ip-lookup --IpLookupId <ip-lookup-guid>
absuite system delete ip-lookup --IpLookupId <ip-lookup-guid>
Carts
absuite system list carts
absuite system count carts
absuite system get cart --CartId <cart-guid>
absuite system delete cart --CartId <cart-guid>
Modules
# All modules on this suite server instance (TenantId required)
absuite system get all-modules --TenantId <tenant-guid>
# Modules available to a tenant user (TenantId optional)
absuite system get available-modules --TenantId <tenant-guid>
System Emails (instance-level)
# Preview a rendered basic email template
absuite system preview basic-email-template --ObjectEmailDispatchRequest '{
"Title": "<subject>", "Message": "<body>", "Culture": "en-US", "UiCulture": "en-US", "Recipients": ["<recipient-email>"]
}'
# Send a basic transactional email
absuite system send basic-email --ObjectEmailDispatchRequest '{
"Title": "<subject>", "Message": "<body>", "Culture": "en-US", "UiCulture": "en-US", "Recipients": ["<recipient-email>"], "AlertType": "Info", "ButtonText": "<cta-label>", "ButtonLink": "<cta-url>"
}'
Email body required fields: Title, Message, Culture, UiCulture, Recipients. Optional:
ButtonLink, ButtonText, AlertMessage, AlertType (None|Info|Error|Warning|Success|Action|Alert),
ContactIds, TenantIds, UserIds, TemplateUrl, EmailTemplateId.
Migrations
# List migrations (add --Pending true to list only pending)
absuite system migrations --Pending true
# Apply pending migrations (destructive — use with caution in production)
absuite system migrate
Antiforgery
# Get and store antiforgery tokens
absuite system get and-store-tokens
# Validate the antiforgery request
absuite system is-request-valid
End-to-End Workflow: provision a tenant with a portal and a config option
# 1. Create a tenant (cross-tenant admin — no tenant scope param)
absuite system create tenant --TenantCreateDto '{
"Name": "<tenant-name>", "Email": "<tenant-email>", "CurrencyId": "<currency-id>", "CountryId": "<country-id>"
}'
# -> note the returned tenant id as <tenant-guid>
# 2. Create a system portal
absuite system create portal --WebPortalCreateDto '{
"Title": "<portal-title>", "Domain": "<portal-domain>", "Root": false, "Disabled": false
}'
# -> note the returned portal id as <portal-guid>
# 3. Upsert a system option scoped to that portal
absuite system upsert option --Key "app.maintenance-mode" --PortalId <portal-guid> --OptionUpdateDto '{ "Key": "app.maintenance-mode", "Value": "false" }'
# 4. Add a tenant-scoped option
absuite system create tenant-option --TenantId <tenant-guid> --Key "onboarding.completed" --OptionCreateDto '{ "Key": "onboarding.completed", "Value": "false" }'
# 5. Send the tenant a welcome email
absuite system send tenant-email --TenantId <tenant-guid> --EmailDispatchRequest '{
"Title": "Welcome", "Message": "Your workspace is ready.", "Culture": "en-US", "UiCulture": "en-US", "Recipients": ["<tenant-email>"], "AlertType": "Success"
}'
# 6. Verify the tenant
absuite system get tenant --TenantId <tenant-guid>
CLI Commands Quick Reference
| Action | CLI command |
|---|---|
| System overview | absuite system get overview |
| List tenants | absuite system list all-tenants |
| Count tenants | absuite system count tenants |
| List extended tenants | absuite system list all-extended-tenants |
| Count extended tenants | absuite system count extended-tenants |
| Get tenant | absuite system get tenant --TenantId <tenant-guid> |
| Create tenant | absuite system create tenant --TenantCreateDto '{...}' |
| Update tenant | absuite system update tenant --TenantId <tenant-guid> --TenantUpdateDto '{...}' |
| Delete tenant | absuite system delete tenant --TenantId <tenant-guid> |
| Preview tenant email | absuite system preview tenant-email --TenantId <tenant-guid> --EmailDispatchRequest '{...}' |
| Send tenant email | absuite system send tenant-email --TenantId <tenant-guid> --EmailDispatchRequest '{...}' |
| List users | absuite system list users |
| Count users | absuite system count users |
| List extended users | absuite system list extended-users |
| Count extended users | absuite system count extended-users |
| Get user | absuite system get user --UserId <user-guid> |
| Get extended user | absuite system get extended-account-holder --UserId <user-guid> |
| Create user | absuite system create account-holder --UserCreateDto '{...}' |
| Update user | absuite system update account-holder --UserId <user-guid> --UserUpdateDto '{...}' |
| Delete user | absuite system delete account-holder --UserId <user-guid> |
| Preview user email | absuite system preview user-email-template --UserId <user-guid> --EmailDispatchRequest '{...}' |
| Send user email | absuite system send user-email --UserId <user-guid> --EmailDispatchRequest '{...}' |
| List system options | absuite system list options --PortalId <portal-guid> |
| Count system options | absuite system count options --PortalId <portal-guid> |
| Get option by ID | absuite system get option-by-id --OptionId <option-guid> |
| Get option by key | absuite system get option-by-key --Key "<key>" --PortalId <portal-guid> |
| Create option | absuite system create option --Key "<key>" --OptionCreateDto '{...}' |
| Update option | absuite system update option --OptionId <option-guid> --OptionUpdateDto '{...}' |
| Upsert option | absuite system upsert option --Key "<key>" --OptionUpdateDto '{...}' |
| Delete option | absuite system delete option --OptionId <option-guid> |
| List tenant options | absuite system list tenant-options --TenantId <tenant-guid> |
| Count tenant options | absuite system count tenant-options --TenantId <tenant-guid> |
| Get tenant option | absuite system get tenant-option-by-id --TenantId <tenant-guid> --OptionId <option-guid> |
| Create tenant option | absuite system create tenant-option --TenantId <tenant-guid> --Key "<key>" --OptionCreateDto '{...}' |
| Update tenant option | absuite system update tenant-option --TenantId <tenant-guid> --OptionId <option-guid> --OptionUpdateDto '{...}' |
| Delete tenant option | absuite system delete tenant-option --TenantId <tenant-guid> --OptionId <option-guid> |
| List user options | absuite system list user-options --UserId <user-guid> |
| Count user options | absuite system count user-options --UserId <user-guid> |
| Get user option | absuite system get user-option-by-id --UserId <user-guid> --OptionId <option-guid> |
| Create user option | absuite system create user-option --UserId <user-guid> --Key "<key>" --OptionCreateDto '{...}' |
| Update user option | absuite system update user-option --UserId <user-guid> --OptionId <option-guid> --OptionUpdateDto '{...}' |
| Delete user option | absuite system delete user-option --UserId <user-guid> --OptionId <option-guid> |
| List contact options | absuite system list contact-options --ContactId <contact-guid> |
| Count contact options | absuite system count contact-options --ContactId <contact-guid> |
| Get contact option | absuite system get contact-option-by-id --ContactId <contact-guid> --OptionId <option-guid> |
| Create contact option | absuite system create contact-option --ContactId <contact-guid> --Key "<key>" --OptionCreateDto '{...}' |
| Update contact option | absuite system update contact-option --ContactId <contact-guid> --OptionId <option-guid> --OptionUpdateDto '{...}' |
| Delete contact option | absuite system delete contact-option --ContactId <contact-guid> --OptionId <option-guid> |
| List licenses | absuite system list licenses --TenantId <tenant-guid> |
| Get license | absuite system get license-by-id --TenantId <tenant-guid> --LicenseId <license-guid> |
| License assignments | absuite system list license-assignments --TenantId <tenant-guid> --LicenseId <license-guid> |
| License attributes | absuite system list license-attributes --TenantId <tenant-guid> --LicenseId <license-guid> |
| License features | absuite system list license-features --TenantId <tenant-guid> --LicenseId <license-guid> |
| License quota | absuite system get license-records-quota --TenantId <tenant-guid> --LicenseId <license-guid> |
| Validate license | absuite system validate license --LicenseValidationRequest '{...}' |
| Redeem license | absuite system redeem license --TenantId <tenant-guid> --LicenseValidationRequest '{...}' |
| List portals | absuite system list portals |
| Count portals | absuite system count portals |
| Get portal | absuite system get portal --PortalId <portal-guid> |
| Create portal | absuite system create portal --WebPortalCreateDto '{...}' |
| Update portal | absuite system update portal --PortalId <portal-guid> --WebPortalUpdateDto '{...}' |
| Delete portal | absuite system delete portal --PortalId <portal-guid> |
| List business domains | absuite system list business-domains |
| Count business domains | absuite system count business-domains |
| Get business domain | absuite system get business-domain --BusinessDomainId <business-domain-guid> |
| Verify business domain | absuite system verify business-domain --BusinessDomainId <business-domain-guid> |
| Delete business domain | absuite system delete business-domain --BusinessDomainId <business-domain-guid> |
| List IP lookups | absuite system list ip-lookups |
| Count IP lookups | absuite system count ip-lookups |
| Get IP lookup | absuite system get ip-lookup --IpLookupId <ip-lookup-guid> |
| Delete IP lookup | absuite system delete ip-lookup --IpLookupId <ip-lookup-guid> |
| List carts | absuite system list carts |
| Count carts | absuite system count carts |
| Get cart | absuite system get cart --CartId <cart-guid> |
| Delete cart | absuite system delete cart --CartId <cart-guid> |
| List all modules | absuite system get all-modules --TenantId <tenant-guid> |
| List available modules | absuite system get available-modules --TenantId <tenant-guid> |
| Preview basic email | absuite system preview basic-email-template --ObjectEmailDispatchRequest '{...}' |
| Send basic email | absuite system send basic-email --ObjectEmailDispatchRequest '{...}' |
| List migrations | absuite system migrations |
| Apply migrations | absuite system migrate |
| Get & store antiforgery tokens | absuite system get and-store-tokens |
| Validate antiforgery request | absuite system is-request-valid |
Critical Rules
- Admin access required for most system operations.
- Cross-tenant admin commands (tenants, users, and their emails) take NO tenant scope param —
they act across the whole suite instance. The
--TenantId/--UserIdon those commands is the record id of the tenant/user being managed, not a scoping filter. - Options scope by their id parameter — system options by
--PortalId, tenant/user/contact options by--TenantId/--UserId/--ContactId. - Tenant/user/option/portal deletion is destructive.
absuite system migratemutates the database — use with caution in production. - No PATCH in the CLI. For atomic partial updates (JSON Patch), use the
absuite-systemREST skill.