name: absuite-cli
description: >
General-purpose usage of the absuite CLI for interacting with the Alliance
Business Suite (ABS) API. Covers service discovery, command discovery, calling
API functions, passing parameters and JSON bodies, reading help and output
schemas, OData queries, tenant scoping, and interpreting responses. Use for
any ABS domain operation (tenants, invoices, contacts, catalog, CRM, etc.)
after authentication. Do NOT use for login/authentication — use the
absuite-login skill instead.
Alliance Business Suite — CLI Usage Skill
Purpose
Use this skill for any domain-specific ABS operation via the absuite CLI. This covers querying data, creating records, updating entities, and any other ABS API interaction.
For authentication (login, token management, identity verification), use the absuite-login-cli skill instead. For the same operations over raw HTTP instead of the CLI, see the absuite-rest skill. For tenant onboarding (joining a tenant, initializing a portal), see absuite-onboarding-cli.
Prerequisites
- CLI installed system-wide —
absuitemust be onPATH. Verify withabsuite --version. - Authenticated session — Run
absuite loginfirst (seeabsuite-login-cliskill). The CLI caches the token in~/.absuite/config.jsonand uses it automatically for all subsequent calls. - Tenant context — Most operations are tenant-scoped. Either set a default tenant (
absuite config set --tenant-id <guid>) or pass--TenantId <guid>on each call.
CLI Structure
absuite <service> <verb> <entity> [--param value ...]
absuite <service> <FunctionName> [--param value ...]
The CLI supports two addressing styles:
| Style | Example | Description |
|---|---|---|
| Alias (human-friendly) | absuite crm list contacts |
Verb + entity shorthand |
| Function name (canonical) | absuite crm Get-ContactsAsync |
Original PowerShell function name |
Both styles are interchangeable. Aliases are derived automatically from function names.
Service Discovery
List All Services
absuite services
Available Services
| Service | Domain |
|---|---|
accounting |
Chart of accounts, journal entries, ledgers, fiscal periods |
assets |
Digital and physical asset management |
cart |
Shopping cart operations |
catalog |
Products, categories, product families, item groups |
content |
CMS content, pages, blogs, media |
crm |
Contacts, organizations, opportunities, pipelines |
deals |
Deal flow, deal stages |
email |
Email templates |
forex |
Foreign exchange rates |
globe |
Countries, currencies, languages, time zones |
hrms |
Employees, departments, job titles |
identity |
OAuth, WhoAmI, identity verification |
inventory |
Inventory tracking |
invoicing |
Invoices, credit notes, debit notes |
learning |
Courses, lessons, enrollments, quizzes |
locations |
Physical locations, addresses |
logistics |
Shipping logistics |
marketing |
Campaigns, email lists, social posts |
marketplace |
Marketplace listings |
orders |
Purchase orders, sales orders |
payments |
Payment records, payment gateways |
pricing |
Price lists, discount rules |
projects |
Project management, tasks, milestones |
quotes |
Quotes, quote lines |
sales |
Sales pipelines |
security |
Roles, permissions, API keys, entitlements |
services |
Service tickets, SLAs |
shipments |
Shipment tracking |
social |
Social profiles, posts, notifications |
storage |
File storage, blobs |
subscriptions |
Subscription plans, billing cycles |
support |
Support tickets, knowledge base |
system |
System configuration, health checks |
tenants |
Tenant management, enrollments, settings |
timetracker |
Time entries, timesheets |
users |
User profiles, user settings |
wallets |
Wallets, balances, wallet payments |
Command Discovery
List All Commands for a Service
absuite <service> list-commands
Example:
absuite crm list-commands
Output shows each command with its alias and description:
list contacts List contacts for a tenant
count contacts Count contacts for a tenant
get contact Get a contact by ID
create contact Create a new contact
update contact Update an existing contact
delete contact Delete a contact
...
Get Detailed Help for a Command
absuite <service> <command> --help
Example:
absuite crm list contacts --help
The --help output includes:
- Usage — both alias and canonical function name
- Description — what the command does
- Parameters — all parameters with types and whether they are required
- Object schemas — for any parameter that accepts a complex DTO (shows all properties with types)
- Returns — the output envelope type and its properties, plus the inner DTO schema if applicable
- Common options —
--ReturnTypeand--WithHttpInfo
Calling API Functions
Basic Syntax
absuite <service> <verb> <entity> --ParamName value
Passing Simple Parameters
absuite crm get contact --TenantId my-tenant-guid --ContactId abc-123
Passing JSON Object Parameters
For parameters that accept a DTO (shown as <SomeCreateDto> in help), pass a JSON string:
absuite crm create contact --TenantId my-tenant-guid --ContactCreateDto '{"firstName":"John","lastName":"Doe","email":"john@example.com"}'
Using the Canonical Function Name
absuite crm Get-ContactsAsync --TenantId my-tenant-guid
Tenant Scoping
Most ABS operations are tenant-scoped. There are two ways to provide the tenant context:
Option 1: Default Tenant (Recommended for Agents)
Set once, used for all subsequent calls:
absuite config set --tenant-id <tenant-guid>
Then call without --TenantId:
absuite crm list contacts
Option 2: Per-Call Tenant
Pass explicitly on each call:
absuite crm list contacts --TenantId <tenant-guid>
Discovering Available Tenants
absuite tenants list tenants
Understanding Responses
Envelope Pattern
All ABS API responses follow the envelope pattern:
{
"isSuccess": true,
"errorMessage": null,
"correlationId": "<guid>",
"timestamp": "2026-04-18T12:00:00Z",
"activityId": "<guid>",
"result": <actual-data>
}
isSuccess— whether the operation succeedederrorMessage— error details ifisSuccessisfalseresult— the actual payload (a single object, an array, a count, or null)
List Responses
For list operations, result is an array:
{
"isSuccess": true,
"result": [
{ "id": "...", "firstName": "John", ... },
{ "id": "...", "firstName": "Jane", ... }
]
}
Count Responses
For count operations, result is an integer:
{
"isSuccess": true,
"result": 42
}
Error Responses
{
"isSuccess": false,
"errorMessage": "The requested resource was not found.",
"result": null
}
Common Verb Patterns
The CLI uses consistent verb patterns across all services:
| Alias Verb | HTTP Method | Meaning |
|---|---|---|
list |
GET | Retrieve a collection |
count |
GET | Get the count of a collection |
search |
GET | Filtered/typed search over a collection |
get |
GET | Retrieve a single entity by ID |
create |
POST | Create a new entity |
update |
PUT | Full update of an entity |
delete |
DELETE | Remove an entity |
No
patchverb. TheabsuiteCLI does not support PATCH (atomic JSON Patch) operations. For partial updates either fetch the entity, modify it, andupdate(full PUT), or use the REST API directly — see theabsuite-restskill (PATCH is REST-only).
Advanced Options
Return Type Override
Force a specific MIME type for the response:
absuite crm list contacts --TenantId <guid> --ReturnType application/xml
Full HTTP Response
Get the full response including status code and headers:
absuite crm list contacts --TenantId <guid> --WithHttpInfo
Workflow Example: Full CRUD Cycle
# 1. Discover commands
absuite crm list-commands
# 2. Check parameter schema
absuite crm create contact --help
# 3. Create a contact
absuite crm create contact --TenantId $TENANT_ID --ContactCreateDto '{"firstName":"Alice","lastName":"Smith","email":"alice@example.com"}'
# 4. List contacts to find the new one
absuite crm list contacts --TenantId $TENANT_ID
# 5. Get a specific contact
absuite crm get contact --TenantId $TENANT_ID --ContactId <contact-guid>
# 6. Update the contact
absuite crm update contact --TenantId $TENANT_ID --ContactId <contact-guid> --ContactUpdateDto '{"firstName":"Alice","lastName":"Johnson"}'
# 7. Delete the contact
absuite crm delete contact --TenantId $TENANT_ID --ContactId <contact-guid>
REST API Alternative
Everything the CLI does can also be accomplished via direct REST API calls. The CLI is a convenience wrapper around the same HTTP API. For a full REST reference (envelope, tenant scoping, OData, JSON Patch), see the absuite-rest skill; per-domain REST skills are absuite-<domain> (this CLI skill's per-domain counterparts are absuite-<domain>-cli).
Authentication
To call the API directly via REST instead of the CLI:
- Obtain a bearer token:
curl -X POST "$ABSUITE_HOST_URL/login" \
-H "Content-Type: application/json" \
-d '{"email": "'$ABSUITE_USER_EMAIL'", "password": "'$ABSUITE_USER_PASSWORD'"}'
Extract the accessToken from the JSON response.
- Use the token in all subsequent requests:
-H "Authorization: Bearer $ABSUITE_ACCESS_TOKEN"
URL Pattern
All REST endpoints follow the pattern:
$ABSUITE_HOST_URL/api/v2/{ServiceName}/{Resource}
For example:
- List contacts:
GET $ABSUITE_HOST_URL/api/v2/CrmService/Contacts - Create invoice:
POST $ABSUITE_HOST_URL/api/v2/InvoicingService/Invoices
Response Envelope
The response envelope pattern is identical for both CLI and REST:
{
"isSuccess": true,
"errorMessage": null,
"correlationId": "<guid>",
"timestamp": "2026-04-18T12:00:00Z",
"activityId": "<guid>",
"result": <actual-data>
}
CLI Verb → HTTP Method Mapping
| CLI Verb | HTTP Method | REST Example |
|---|---|---|
list |
GET | GET /api/v2/CrmService/Contacts |
count |
GET | GET /api/v2/CrmService/Contacts/Count |
get |
GET | GET /api/v2/CrmService/Contacts/:contactId |
create |
POST | POST /api/v2/CrmService/Contacts |
update |
PUT | PUT /api/v2/CrmService/Contacts/:contactId |
delete |
DELETE | DELETE /api/v2/CrmService/Contacts/:contactId |
CLI Service → REST Service Name Mapping
| CLI Service | REST Service Name |
|---|---|
accounting |
AccountingService |
assets |
AssetsService |
cart |
CartService |
catalog |
CatalogService |
content |
ContentService |
crm |
CrmService |
deals |
DealsService |
forex |
ForexService |
globe |
GlobeService |
hrms |
HrmsService |
identity |
OAuth |
inventory |
InventoryService |
invoicing |
InvoicingService |
learning |
LearningService |
locations |
LocationsService |
logistics |
LogisticsService |
marketing |
MarketingService |
orders |
OrdersService |
payments |
PaymentsService |
pricing |
PricingService |
projects |
ProjectsService |
quotes |
QuotesService |
sales |
SalesService |
security |
SecurityService |
services |
ServicesService |
shipments |
ShipmentsService |
social |
SocialService |
storage |
StorageService |
subscriptions |
SubscriptionsService |
support |
SupportService |
system |
SystemService |
tenants |
TenantsService |
timetracker |
TimeTrackerService |
users |
UsersService |
wallets |
WalletsService |
Example: CLI vs REST
CLI:
absuite crm create contact --TenantId $TENANT_ID --ContactCreateDto '{"firstName":"Alice","lastName":"Smith"}'
REST equivalent:
curl -X POST "$ABSUITE_HOST_URL/api/v2/CrmService/Contacts" \
-H "Authorization: Bearer $ABSUITE_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"firstName":"Alice","lastName":"Smith"}'
Both return the same envelope response. The CLI handles token management automatically; with REST you manage the bearer token yourself.
Critical Rules
- Always authenticate first. Use the
absuite-loginskill if no valid session exists. - Always check
--helpbefore calling unfamiliar commands. It shows exact parameter names, types, required fields, and the output schema. - Use
list-commandsfor discovery. Don't guess command names — discover them. - Respect tenant scoping. Most operations require
--TenantIdor a configured default tenant. - Parse the envelope. The actual data is inside the
resultfield. Always checkisSuccessbefore usingresult. - Parameter names are case-sensitive. Use the exact casing shown in
--help(e.g.,--TenantId, not--tenantid). - JSON string parameters must be valid JSON. For DTO parameters, ensure the JSON matches the schema shown in
--help. - The CLI handles authentication automatically. Tokens are cached — you do not need to pass bearer tokens or auth headers.