Analytics and transactions
Akedly CLI command reference: Analytics and transactions.
transactions status
Inspect one OTP transaction or V2 widget attempt, or resolve a small batch of identifiers.
When to use
- When a send result is uncertain, to inspect current lifecycle status, or to resume a single async verification wait.
How it works
- API-key POST to status endpoint; accepts exactly one single ID or batch ID flags (1–50 total).
--waitis single only and polls every three seconds, bounded by expiry/default 600 seconds.
Prerequisites
- A configured API key with access to status lookups; the transaction or attempt identifier must come from a prior send/attempt.
Expected outcome
Returns the backend transaction or widget-attempt status layout without normalization; waited successful responses add waited outcome/polls/elapsedSeconds. Payloads can include private OTP fields.
Next steps
- Use the returned state to decide whether to proceed; after timeout inspect again rather than initiating another billable send.
Usage
akedly transactions status
Inspect this command offline before preparing an operation:
akedly describe "transactions status" --output json
Flags
| Flag | Type | Enum / range | Required | Description |
|---|---|---|---|---|
--ksa | boolean switch | — | no | Select the KSA deployment. |
--transaction-id | text | — | no | Command-specific option; see the full command details below. Manifest body field: transactionID. |
--attempt-id | text | — | no | Command-specific option; see the full command details below. Manifest body field: attemptId. |
--transaction-ids | text | — | no | Command-specific option; see the full command details below. Manifest body field: transactionIDs. |
--attempt-ids | text | — | no | Command-specific option; see the full command details below. Manifest body field: attemptIds. |
--api-key | text | — | no | Select a saved API key by its eight-character prefix; never supply a full Secret. |
--dry-run | boolean switch | — | no | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--wait | boolean switch | — | no | Command-specific option; see the full command details below. |
--timeout | seconds | — | no | Command-specific option; see the full command details below. |
--help | boolean switch | — | no | Show offline command help. |
--output | enum | json | human | no | Select JSON or human output. |
--fields | dot-paths | — | no | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: api-key. Permission: none declared.
Server request: POST /transactions/status; /transactions/status/batch.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Sensitive output: live-otp. Responses may contain live OTP fields; keep them private.
Full command details
Use AKEDLY_API_KEY or a saved API key selected with --api-key <prefix>; CLI Logins are not used. Look up one --transaction-id or --attempt-id, or a batch with --transaction-ids and/or --attempt-ids (1–50 ids total). Single and batch flags cannot mix. Responses may include live OTP fields; keep output private. Limit: 300 ids per minute per account; retries count again. Dry runs send nothing. --wait supports single lookups only, polls every 3 seconds until verification or expiry, and shares the account budget with other waits. --timeout requires --wait and caps the wait; without an expiry the default is 600 seconds.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Synthetic offline fixture
Inspect one OTP transaction or V2 widget attempt, or resolve a small batch of identifiers.
akedly transactions status --transaction-id 9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"mainTransaction": {
"transactionID": "9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f",
"status": "Pending",
"verificationAddress": {
"phoneNumber": "+201234567890"
},
"expirationDate": "2026-10-29T12:05:00.000Z"
},
"transactionReq": {
"_id": "65a1b2c3d4e5f67890123456",
"status": "Pending",
"verified": false
}
}
}
All IDs, destination, company, dates, callback URL and payload values are synthetic fixtures; example.invalid is reserved for documentation. Do not paste a real OTP, phone, API key, widget Secret, token, or account identifier into an agent test or shared output.
This worked response is illustrative only and was not executed against an account.
Additional command forms
akedly transactions status --transaction-id <id>
akedly transactions status --transaction-ids <id1>,<id2>
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Successful response example is synthetic and demonstrates observed field names/types; server-supplied extension fields are preserved.
Responses can contain personal data and, on some transaction paths, live OTP-related values. Treat actual output as secret; examples contain only synthetic fixture values.
Status lookups are constrained by the API key’s pipeline scope. A single out-of-scope lookup returns API_KEY_SCOPE_DENIED; batch responses keep per-ID success/error outcomes in transactions and attempts arrays, so inspect each item. Batch itemCounts are server log details, not response fields.
For V1/V1.2 transaction lookups, transactionReq can be null before an activation request exists, and a V1.2 passkey replay synthesizes a request without Mongo _id. For attempt replay, widgetAttempt.status reflects persisted WidgetAttempt lifecycle states: pending, captcha_solved, otp_requested, verified, failed, or expired.
In-scope attempt data can include application-provided publicMetadata and privateMetadata. Treat both as private output; never copy real metadata or OTP values into shared examples.
The V1/V1.2 transactionReq union distinguishes an actual OTP request (with required Mongo _id and status), a synthesized V1.2 passkey request (verificationMethod=passkey and isTest, with no _id), or null before an activation request exists.
An actual OTP transaction request may contain inputOTP; treat returned request objects as sensitive even though examples use synthetic values.
transactions list
Review account transaction history for reconciliation, support investigation, or customer reporting.
When to use
- For a customer login account, filter by date/status/pipeline/phone and page through history. Do not run from an Akedly staff/admin account: server scope can return all accounts.
How it works
- Login-authenticated GET uses the caller owner ID and server filters;
--allfetches pages, deduplicates repeated _ids, and keeps first-page envelope with final pagination.
Prerequisites
- A stored CLI Login for this region with the command permission.
Expected outcome
Returns transaction rows with pagination and appliedFilters. Rows can contain phone numbers and live OTP fields; keep output private.
Next steps
- For current lifecycle state, use transactions status with a non-utility transactionID.
Usage
akedly transactions list
Inspect this command offline before preparing an operation:
akedly describe "transactions list" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--page | integer | 1 to unbounded | Command-specific option; see the full command details below. Query parameter: page. |
--limit | integer | 1 to 100 | Command-specific option; see the full command details below. Query parameter: limit. |
--all | boolean switch | — | Command-specific option; see the full command details below. |
--status | enum | Pending | Successful | Failed | Command-specific option; see the full command details below. Query parameter: status. |
--phone-number | text | — | Command-specific option; see the full command details below. Query parameter: phoneNumber. |
--pipeline-id | id | — | Command-specific option; see the full command details below. Query parameter: pipelineID. |
--billing-mode | enum | PPM | PPS | Command-specific option; see the full command details below. Query parameter: billingMode. |
--exclude-utility | boolean switch | — | Command-specific option; see the full command details below. Query parameter: excludeUtility. |
--sort-by | enum | creationDate | status | transactionID | Command-specific option; see the full command details below. Query parameter: sortBy. |
--sort-order | enum | asc | desc | Command-specific option; see the full command details below. Query parameter: sortOrder. |
--start-date | text | — | Command-specific option; see the full command details below. Query parameter: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Query parameter: eDate. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: verifications:read.
Server request: GET /transactions/user/:userID/paginated.
Owner parameters resolved from the CLI Login: userID.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Sensitive output: live-otp. Responses may contain live OTP fields; keep them private.
Full command details
List transaction history for the caller account with full returned rows, including personal data, phone numbers and live OTPs; handle output privately. Uses the login owner id; no targetUserID override. On an Akedly staff (admin) account the server ignores the owner scope and returns unsanitised history for every account; do not run it there. Utility transactions are included by default; --exclude-utility omits them. --page defaults to 1 and --limit to 20, with a maximum of 100. Under --all, an omitted --limit defaults to 100 on every page. --phone-number is a case-insensitive substring filter. --start-date and --end-date pass through as server-local inclusive day bounds, without a date-range cap; invalid dates can fail on the server. For --all paging, see the shared Pagination rules in akedly agent-guide. --fields does not project inside row arrays. To check one row's current status, pass its transactionID to transactions status --transaction-id <transactionID>; that command uses an API key, not the CLI Login, and does not cover utility rows. There is no authenticated single-history-get command. A sort with tied values (status, or equal creationDate values) can also skip or repeat rows between pages; --all removes repeats but cannot recover skipped rows. Prefer the default creationDate sort with --all; status and transactionID sorts can be slow on large histories.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Synthetic offline fixture
Review account transaction history for reconciliation, support investigation, or customer reporting.
akedly transactions list --status Successful --all
Illustrative response (sensitive values omitted):
{
"status": "success",
"message": "Transactions fetched successfully",
"data": {
"transactions": [
{
"_id": "65a1b2c3d4e5f67890123456",
"transactionID": "9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f",
"status": "Pending",
"verificationAddress": {
"phoneNumber": "+201234567890"
},
"expirationDate": "2026-10-29T12:05:00.000Z",
"creationDate": "2026-10-29T12:00:00.000Z",
"pipeline": {
"_id": "65a1b2c3d4e5f67890123457",
"name": "Example OTP pipeline",
"channel": "sms"
},
"channels": [
"sms"
]
}
],
"pagination": {
"currentPage": 1,
"totalPages": null,
"totalCount": null,
"limit": 20,
"hasNextPage": null,
"hasPreviousPage": false
},
"appliedFilters": {
"targetUserID": null,
"status": null,
"dateRange": null,
"phoneNumber": null,
"pipelineID": null,
"billingMode": null
}
}
}
All IDs, destination, company, dates, callback URL and payload values are synthetic fixtures; example.invalid is reserved for documentation. Do not paste a real OTP, phone, API key, widget Secret, token, or account identifier into an agent test or shared output.
This worked response is illustrative only and was not executed against an account.
Additional command forms
akedly transactions list --page 1 --limit 20
akedly transactions list --status Successful --all
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Successful response example is synthetic and demonstrates observed field names/types; server-supplied extension fields are preserved.
Responses can contain personal data and, on some transaction paths, live OTP-related values. Treat actual output as secret; examples contain only synthetic fixture values.
analytics current-rate
Read current national, international and TOTP rates using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need national international and totp current rates in egp and usd, plus legacy compatibility rates to monitor product usage, service outcomes or account spend.
How it works
- The CLI calls the current-rate endpoint with the authenticated owner identity; this endpoint does not accept a date window or account/pipeline scope.
- Rates include national, international and TOTP amounts; USD fields are strings calculated by the backend at the documented conversion constant, while EGP values are numbers.
- Exact endpoint behavior and scope caveats: Read national, international and TOTP rates for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing national international and totp current rates in egp and usd, plus legacy compatibility rates.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics current-rate
Inspect this command offline before preparing an operation:
akedly describe "analytics current-rate" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_perf_current_rates:read.
Server request: POST /analytics/getCurrentRate.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Read national, international and TOTP rates for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics current-rate
national international and TOTP current rates in EGP and USD, plus legacy compatibility rates for the login owner's account.
akedly analytics current-rate
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"rates": {
"national": {
"egp": 1,
"usd": "0.02"
},
"international": {
"egp": 10,
"usd": "0.20"
},
"totp": {
"egp": 0.25,
"usd": "0.01"
}
},
"rateInEGP": "1.00",
"rateInUSD": "0.02"
}
}
Additional command forms
akedly analytics current-rate --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved.
analytics total-transactions
Read OTP, passkey and TOTP verification totals using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need count of otp verification transactions (with excluded passkey/totp counters) to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/getTotalMainTransactions and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. - Unscoped totals include OTP plus verified passkey and TOTP. Under pipeline/widget scope TOTP cannot be attributed and is excluded (totpExcluded=true); a widget scope also excludes V1.2 passkeys (v12Excluded=true). False means the respective exclusion does not apply.
- Unscoped counts include OTP plus verified passkey and TOTP. Under pipeline/widget scope TOTP cannot be attributed and is excluded (totpExcluded=true); widget scope also excludes V1.2 passkeys (v12Excluded=true). The booleans are false when the respective exclusion does not apply.
- Exact endpoint behavior and scope caveats: Count verification transactions for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing count of otp verification transactions (with excluded passkey/totp counters).
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics total-transactions
Inspect this command offline before preparing an operation:
akedly describe "analytics total-transactions" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--pipeline-id | id | — | Command-specific option; see the full command details below. Manifest body field: pipelineID. |
--widget-id | text | — | Command-specific option; see the full command details below. Manifest body field: widgetId. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_perf_total_main_tx:read.
Server request: POST /analytics/getTotalMainTransactions.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Count verification transactions for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view. --widget-id is the public widget_<32 hex> id, not the Mongo _id.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics total-transactions
count of OTP verification transactions (with excluded passkey/TOTP counters) for the login owner's account.
akedly analytics total-transactions --start-date 2026-10-01 --end-date 2026-10-07
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"transactionsNumber": 42,
"totpExcluded": false,
"v12Excluded": false
},
"message": "Data extracted successfully"
}
Additional command forms
akedly analytics total-transactions --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved. Under no pipeline/widget filter, verified passkey and TOTP counts are included. If a selected scope cannot attribute one of those methods, the corresponding boolean is true.
analytics total-requests
Read verification request totals using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need count of verification requests to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/getTotalTransactionRequests and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. - Exact endpoint behavior and scope caveats: Count verification requests for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing count of verification requests.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics total-requests
Inspect this command offline before preparing an operation:
akedly describe "analytics total-requests" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--pipeline-id | id | — | Command-specific option; see the full command details below. Manifest body field: pipelineID. |
--widget-id | text | — | Command-specific option; see the full command details below. Manifest body field: widgetId. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_perf_total_tx_reqs:read.
Server request: POST /analytics/getTotalTransactionRequests.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Count verification requests for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view. --widget-id is the public widget_<32 hex> id, not the Mongo _id.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics total-requests
count of verification requests for the login owner's account.
akedly analytics total-requests --start-date 2026-10-01 --end-date 2026-10-07
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"transactionsNumber": 51
},
"message": "Data extracted successfully"
}
Additional command forms
akedly analytics total-requests --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved.
analytics successful
Read successful verification totals using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need count of successful otp, passkey and totp verifications to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/getTotalSuccessfulTransactions and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. - Unscoped counts include successful OTP, verified passkey and verified TOTP. Scope-exclusion booleans identify un-attributable TOTP or V1.2 passkeys; they are false when those omissions do not apply.
- Unscoped counts include OTP plus verified passkey and TOTP. Under pipeline/widget scope TOTP cannot be attributed and is excluded (totpExcluded=true); widget scope also excludes V1.2 passkeys (v12Excluded=true). The booleans are false when the respective exclusion does not apply.
- Exact endpoint behavior and scope caveats: Count successful verifications (OTP, passkey and TOTP) for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing count of successful otp, passkey and totp verifications.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics successful
Inspect this command offline before preparing an operation:
akedly describe "analytics successful" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--pipeline-id | id | — | Command-specific option; see the full command details below. Manifest body field: pipelineID. |
--widget-id | text | — | Command-specific option; see the full command details below. Manifest body field: widgetId. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_perf_successful:read.
Server request: POST /analytics/getTotalSuccessfulTransactions.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Count successful verifications (OTP, passkey and TOTP) for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view. --widget-id is the public widget_<32 hex> id, not the Mongo _id.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics successful
count of successful OTP, passkey and TOTP verifications for the login owner's account.
akedly analytics successful --start-date 2026-10-01 --end-date 2026-10-07
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"transactionsNumber": 37,
"totpExcluded": false,
"v12Excluded": false
},
"message": "Data extracted successfully"
}
Additional command forms
akedly analytics successful --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved. Unscoped totals include OTP, verified passkey and verified TOTP; exclusion booleans identify scope-driven omissions.
analytics failed
Read failed OTP counts and records using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need count and customer-sanitized failed otp transaction records to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/getTotalFailedTransactions and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. Returned transaction lists may contain personal data and live OTPs; keep output private. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. The list covers every match in the window; for just the count use--fieldsdata.transactionsNumber. - Exact endpoint behavior and scope caveats: Count and list failed OTP verifications for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. Returned transaction lists may contain personal data and live OTPs; keep output private. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. The list covers every match in the window; for just the count use--fieldsdata.transactionsNumber.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing count and customer-sanitized failed otp transaction records.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics failed
Inspect this command offline before preparing an operation:
akedly describe "analytics failed" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--pipeline-id | id | — | Command-specific option; see the full command details below. Manifest body field: pipelineID. |
--widget-id | text | — | Command-specific option; see the full command details below. Manifest body field: widgetId. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_perf_failed:read.
Server request: POST /analytics/getTotalFailedTransactions.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Sensitive output: live-otp. Responses may contain live OTP fields; keep them private.
Full command details
Count and list failed OTP verifications for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. Returned transaction lists may contain personal data and live OTPs; keep output private. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view. --widget-id is the public widget_<32 hex> id, not the Mongo _id. The list covers every match in the window; for just the count use --fields data.transactionsNumber.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics failed
count and customer-sanitized failed OTP transaction records for the login owner's account.
akedly analytics failed --start-date 2026-10-01 --end-date 2026-10-07
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"transactionsNumber": 1,
"transactions": [
{
"transactionID": "tx_synthetic_1",
"status": "Failed",
"verificationAddress": "+201234567890",
"resolvedChannel": "sms",
"isTest": true,
"creationDate": "2026-10-04T10:00:00Z"
}
]
},
"message": "Data extracted successfully"
}
Additional command forms
akedly analytics failed --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved.
analytics auth-ratio
Read authentication success ratio and transaction records using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need successful-versus-failed authentication ratio and sanitized transaction lists to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/getAuthenticationRatio and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. Returned transaction lists may contain personal data and live OTPs; keep output private. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view. For just the ratio use
--fieldsdata.authenticationRatio. - Exact endpoint behavior and scope caveats: Read the authentication ratio and successful/failed transaction lists for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. Returned transaction lists may contain personal data and live OTPs; keep output private. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view. For just the ratio use
--fieldsdata.authenticationRatio.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing successful-versus-failed authentication ratio and sanitized transaction lists.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics auth-ratio
Inspect this command offline before preparing an operation:
akedly describe "analytics auth-ratio" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_perf_auth_ratio:read.
Server request: POST /analytics/getAuthenticationRatio.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Sensitive output: live-otp. Responses may contain live OTP fields; keep them private.
Full command details
Read the authentication ratio and successful/failed transaction lists for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. Returned transaction lists may contain personal data and live OTPs; keep output private. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view. For just the ratio use --fields data.authenticationRatio.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics auth-ratio
successful-versus-failed authentication ratio and sanitized transaction lists for the login owner's account.
akedly analytics auth-ratio --start-date 2026-10-01 --end-date 2026-10-07
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"authenticationRatio": 94.87,
"successfulTransactions": [
{
"transactionID": "tx_synthetic_1",
"status": "Successful",
"verificationAddress": "+201234567890",
"resolvedChannel": "sms",
"isTest": true,
"creationDate": "2026-10-04T10:00:00Z"
}
],
"failedTransactions": []
},
"message": "Data extracted successfully"
}
Additional command forms
akedly analytics auth-ratio --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved.
analytics billing-consumption
Read usage bills and amount summaries using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need usage bills and billed amount breakdown to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/getBillingConsumption and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. This customer route keeps owner scope even for an admin account; it does not apply the my-costs granular-pricing gate.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. - Exact endpoint behavior and scope caveats: Read usage bills and their amount breakdown for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. This customer route keeps owner scope even for an admin account; it does not apply the my-costs granular-pricing gate.
--widget-idis the public widget_<32 hex> id, not the Mongo _id.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing usage bills and billed amount breakdown.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics billing-consumption
Inspect this command offline before preparing an operation:
akedly describe "analytics billing-consumption" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--pipeline-id | id | — | Command-specific option; see the full command details below. Manifest body field: pipelineID. |
--widget-id | text | — | Command-specific option; see the full command details below. Manifest body field: widgetId. |
--product | enum | all | otp | utility | Command-specific option; see the full command details below. Manifest body field: product. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: billing:read.
Server request: POST /analytics/getBillingConsumption.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Read usage bills and their amount breakdown for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. This customer route keeps owner scope even for an admin account; it does not apply the my-costs granular-pricing gate. --widget-id is the public widget_<32 hex> id, not the Mongo _id.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics billing-consumption
usage bills and billed amount breakdown for the login owner's account.
akedly analytics billing-consumption --start-date 2026-10-01 --end-date 2026-10-07
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"billsNumber": 1,
"bills": [
{
"_id": "bill_synthetic_1",
"amount": 1,
"transactionType": "National OTP",
"type": "Usage",
"creationDate": "2026-10-04T10:00:00Z"
}
],
"summary": {
"totalAmount": 1,
"averageAmount": 1,
"breakdown": {
"national": {
"count": 1,
"totalAmount": 1,
"averageAmount": 1
},
"international": {
"count": 0,
"totalAmount": 0,
"averageAmount": 0
},
"totp": {
"count": 0,
"totalAmount": 0,
"averageAmount": 0
},
"passkey": {
"count": 0,
"totalAmount": 0,
"averageAmount": 0
},
"optin": {
"count": 0,
"totalAmount": 0,
"averageAmount": 0
},
"default": {
"count": 0,
"totalAmount": 0,
"averageAmount": 0
},
"unknown": {
"count": 0,
"totalAmount": 0,
"averageAmount": 0
}
}
}
},
"message": "Data extracted successfully"
}
Additional command forms
akedly analytics billing-consumption --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved. Numeric monetary amounts and cost/rate totals in this endpoint are EGP. `analytics current-rate` separately returns USD compatibility figures as two-decimal strings. Each `bills[]` item is a customer-safe projection; it deliberately omits currency/provider pricing internals, while summary amounts are the analytics bill amounts.
analytics savings
Read verification-method savings and rate baselines using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need estimated savings and method breakdown to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/getSavings and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. - Unscoped metrics include available TOTP/passkey data. Under a selected scope the response flags or scoped source breakdown indicate methods that cannot be attributed rather than implying a zero count.
- Exact endpoint behavior and scope caveats: Read total savings and the verification-method breakdown for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing estimated savings and method breakdown.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics savings
Inspect this command offline before preparing an operation:
akedly describe "analytics savings" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--pipeline-id | id | — | Command-specific option; see the full command details below. Manifest body field: pipelineID. |
--widget-id | text | — | Command-specific option; see the full command details below. Manifest body field: widgetId. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_cost_savings:read.
Server request: POST /analytics/getSavings.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Read total savings and the verification-method breakdown for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view. --widget-id is the public widget_<32 hex> id, not the Mongo _id.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics savings
estimated savings and method breakdown for the login owner's account.
akedly analytics savings --start-date 2026-10-01 --end-date 2026-10-07
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"totalSavings": 3,
"totpExcluded": false,
"v12Excluded": false,
"breakdown": {
"successful": {
"nationalSavings": 1,
"internationalSavings": 1,
"totpSavings": 0,
"passkeySavings": 1,
"nationalCount": 1,
"internationalCount": 1,
"totpCount": 0,
"passkeyCount": 1
},
"failed": {
"nationalSavings": 0,
"internationalSavings": 0,
"totpSavings": 0,
"nationalCount": 0,
"internationalCount": 0,
"totpCount": 0
}
},
"currentRates": {
"national": 1,
"international": 10,
"totp": 0.25
},
"nationalSavings": 0,
"internationalSavings": 0,
"nationalCost": 1,
"internationalCost": 1
},
"message": "Data extracted successfully"
}
Additional command forms
akedly analytics savings --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved. Unscoped savings include TOTP/passkey contributions where available; true exclusion flags disclose when pipeline/widget scope prevents attribution. Numeric monetary amounts and cost/rate totals in this endpoint are EGP. `analytics current-rate` separately returns USD compatibility figures as two-decimal strings.
analytics savings-by-day
Read verification-method savings and rate baselines using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need savings in daily, weekly or monthly buckets and rate baselines to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/getSavingsByDay and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last 30 days through now plus four hours. Interval defaults to daily; weekly and monthly use 7-day and 30-day buckets. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. - Unscoped metrics include available TOTP/passkey data. Under a selected scope the response flags or scoped source breakdown indicate methods that cannot be attributed rather than implying a zero count.
- Exact endpoint behavior and scope caveats: Read savings by time bucket and rate baselines for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last 30 days through now plus four hours. Interval defaults to daily; weekly and monthly use 7-day and 30-day buckets. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing savings in daily, weekly or monthly buckets and rate baselines.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics savings-by-day
Inspect this command offline before preparing an operation:
akedly describe "analytics savings-by-day" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--pipeline-id | id | — | Command-specific option; see the full command details below. Manifest body field: pipelineID. |
--widget-id | text | — | Command-specific option; see the full command details below. Manifest body field: widgetId. |
--interval | enum | daily | weekly | monthly | Command-specific option; see the full command details below. Manifest body field: interval. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_cost_savings:read.
Server request: POST /analytics/getSavingsByDay.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Read savings by time bucket and rate baselines for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last 30 days through now plus four hours. Interval defaults to daily; weekly and monthly use 7-day and 30-day buckets. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view. --widget-id is the public widget_<32 hex> id, not the Mongo _id.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics savings-by-day
savings in daily, weekly or monthly buckets and rate baselines for the login owner's account.
akedly analytics savings-by-day --start-date 2026-10-01 --end-date 2026-10-07
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"savingsData": [
{
"date": "2026-10-04",
"totalSavings": 1,
"breakdown": {
"successful": {
"national": {
"count": 1,
"savings": 1,
"cost": 0,
"rate": 1
},
"international": {
"count": 0,
"savings": 0,
"cost": 0,
"rate": 10
},
"totp": {
"count": 0,
"savings": 0,
"cost": 0,
"rate": 0.25
},
"passkey": {
"count": 0,
"savings": 0,
"cost": 0
}
},
"failed": {
"national": {
"count": 0,
"savings": 0,
"baselineRate": 1
},
"international": {
"count": 0,
"savings": 0,
"baselineRate": 33
},
"totp": {
"count": 0,
"savings": 0,
"baselineRate": 1
}
}
},
"totalCost": 0,
"totalTransactions": 1
}
],
"currentRates": {
"national": 1,
"international": 10,
"totp": 0.25
},
"baselineRates": {
"national": 1,
"international": 33,
"totp": 1
},
"totpExcluded": false,
"v12Excluded": false
},
"message": "Data extracted successfully"
}
Additional command forms
akedly analytics savings-by-day --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved. Scoped savings rows can omit un-attributable TOTP or V1.2 methods; the booleans disclose these scoped exclusions. Numeric monetary amounts and cost/rate totals in this endpoint are EGP. `analytics current-rate` separately returns USD compatibility figures as two-decimal strings.
analytics transactions-graph
Read verification counts and outcomes over time using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need verification counts and outcomes by time bucket to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/graphTotalMainTransactions and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last 30 days through now plus four hours. Interval defaults to daily; weekly and monthly use 7-day and 30-day buckets. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. - Unscoped metrics include available TOTP/passkey data. Under a selected scope the response flags or scoped source breakdown indicate methods that cannot be attributed rather than implying a zero count.
- Exact endpoint behavior and scope caveats: Read verification counts and outcomes by time bucket for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last 30 days through now plus four hours. Interval defaults to daily; weekly and monthly use 7-day and 30-day buckets. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing verification counts and outcomes by time bucket.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics transactions-graph
Inspect this command offline before preparing an operation:
akedly describe "analytics transactions-graph" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--pipeline-id | id | — | Command-specific option; see the full command details below. Manifest body field: pipelineID. |
--widget-id | text | — | Command-specific option; see the full command details below. Manifest body field: widgetId. |
--interval | enum | daily | weekly | monthly | Command-specific option; see the full command details below. Manifest body field: interval. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_perf_tx_graph:read.
Server request: POST /analytics/graphTotalMainTransactions.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Read verification counts and outcomes by time bucket for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last 30 days through now plus four hours. Interval defaults to daily; weekly and monthly use 7-day and 30-day buckets. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view. --widget-id is the public widget_<32 hex> id, not the Mongo _id.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics transactions-graph
verification counts and outcomes by time bucket for the login owner's account.
akedly analytics transactions-graph --start-date 2026-10-01 --end-date 2026-10-07
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"graphData": [
{
"date": "2026-10-04",
"transactionsNumber": 5,
"successfulTransactions": 4,
"failedTransactions": 1,
"pendingTransactions": 0,
"passkeyCount": 1,
"passkeyShare": 20,
"passkeyEnrolledCount": 1,
"uniqueUsers": {
"total": 2,
"authenticated": 1,
"successRate": 50
}
}
],
"totpExcluded": false,
"v12Excluded": false
},
"message": "Data extracted successfully"
}
Additional command forms
akedly analytics transactions-graph --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved. Unscoped chart data includes verified passkey metrics; scope exclusion booleans disclose when TOTP or V1.2 passkeys cannot be attributed.
analytics international-split
Read national/international/TOTP counts and costs using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need national, international and totp counts/costs to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/pieChartInternationalAndNational and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. - Exact endpoint behavior and scope caveats: Read national, international and TOTP counts and costs for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing national, international and totp counts/costs.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics international-split
Inspect this command offline before preparing an operation:
akedly describe "analytics international-split" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--pipeline-id | id | — | Command-specific option; see the full command details below. Manifest body field: pipelineID. |
--widget-id | text | — | Command-specific option; see the full command details below. Manifest body field: widgetId. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_graphs_intl_national:read.
Server request: POST /analytics/pieChartInternationalAndNational.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Read national, international and TOTP counts and costs for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view. --widget-id is the public widget_<32 hex> id, not the Mongo _id.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics international-split
national, international and TOTP counts/costs for the login owner's account.
akedly analytics international-split --start-date 2026-10-01 --end-date 2026-10-07
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"national": {},
"international": {},
"totp": {}
},
"message": "Data extracted successfully"
}
Additional command forms
akedly analytics international-split --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved. Numeric monetary amounts and cost/rate totals in this endpoint are EGP. `analytics current-rate` separately returns USD compatibility figures as two-decimal strings.
analytics unique-users
Read unique end-user authentication counts using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need unique end-user counts/outcomes and full phone-number details to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/unique-users-authenticated and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. Returns userDetails with each end-user's full phone number; keep output private. For just the rates use--fieldsdata.comparison. - Exact endpoint behavior and scope caveats: Count unique end-users and read their authentication outcomes for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. Returns userDetails with each end-user's full phone number; keep output private. For just the rates use--fieldsdata.comparison.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing unique end-user counts/outcomes and full phone-number details.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics unique-users
Inspect this command offline before preparing an operation:
akedly describe "analytics unique-users" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--pipeline-id | id | — | Command-specific option; see the full command details below. Manifest body field: pipelineID. |
--widget-id | text | — | Command-specific option; see the full command details below. Manifest body field: widgetId. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_perf_unique_users:read.
Server request: POST /analytics/unique-users-authenticated.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Count unique end-users and read their authentication outcomes for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view. --widget-id is the public widget_<32 hex> id, not the Mongo _id. Returns userDetails with each end-user's full phone number; keep output private. For just the rates use --fields data.comparison.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics unique-users
unique end-user counts/outcomes and full phone-number details for the login owner's account.
akedly analytics unique-users --start-date 2026-10-01 --end-date 2026-10-07
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"totalUniqueUsers": 1,
"uniqueUsersAuthenticated": 1,
"uniqueUserSuccessRate": 100,
"comparison": {
"perUniqueUser": {
"successRate": 100,
"authenticated": 1,
"total": 1
},
"perTransaction": {
"successRate": 100,
"successful": 2,
"total": 2
}
},
"userDetails": [
{
"phoneNumber": "+201234567890",
"totalTransactions": 2,
"successfulTransactions": 2,
"failedTransactions": 0,
"authenticated": true
}
],
"totpExcluded": false,
"v12Excluded": false
},
"message": "Data extracted successfully"
}
Additional command forms
akedly analytics unique-users --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved.
analytics unique-users-graph
Read unique end-user authentication counts using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need unique-user authentication metrics by time bucket to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/unique-users-authenticated-graph and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last 30 days through now plus four hours. Interval defaults to daily; weekly and monthly use 7-day and 30-day buckets. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
- Exact endpoint behavior and scope caveats: Read unique-user authentication rates by time bucket for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last 30 days through now plus four hours. Interval defaults to daily; weekly and monthly use 7-day and 30-day buckets. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing unique-user authentication metrics by time bucket.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics unique-users-graph
Inspect this command offline before preparing an operation:
akedly describe "analytics unique-users-graph" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--interval | enum | daily | weekly | monthly | Command-specific option; see the full command details below. Manifest body field: interval. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_perf_unique_users:read.
Server request: POST /analytics/unique-users-authenticated-graph.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Read unique-user authentication rates by time bucket for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last 30 days through now plus four hours. Interval defaults to daily; weekly and monthly use 7-day and 30-day buckets. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics unique-users-graph
unique-user authentication metrics by time bucket for the login owner's account.
akedly analytics unique-users-graph --start-date 2026-10-01 --end-date 2026-10-07
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"graphData": [
{
"date": "2026-10-04",
"totalUniqueUsers": 1,
"uniqueUsersAuthenticated": 1,
"uniqueUserSuccessRate": 100,
"transactionSuccessRate": 100,
"totalTransactions": 2,
"successfulTransactions": 2
}
],
"summary": {
"totalIntervals": 1,
"avgUniqueUserSuccessRate": 100,
"avgTransactionSuccessRate": 100
}
},
"message": "Data extracted successfully"
}
Additional command forms
akedly analytics unique-users-graph --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved.
analytics countries
Read verification volume by country using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need verification totals grouped by country to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/getVerificationsByCountry and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last 30 days through now plus four hours. Product defaults to otp; all includes OTP and utility.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. - Exact endpoint behavior and scope caveats: Read verification counts by country for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last 30 days through now plus four hours. Product defaults to otp; all includes OTP and utility.
--widget-idis the public widget_<32 hex> id, not the Mongo _id.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing verification totals grouped by country.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics countries
Inspect this command offline before preparing an operation:
akedly describe "analytics countries" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--pipeline-id | id | — | Command-specific option; see the full command details below. Manifest body field: pipelineID. |
--widget-id | text | — | Command-specific option; see the full command details below. Manifest body field: widgetId. |
--product | enum | all | otp | utility | Command-specific option; see the full command details below. Manifest body field: product. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_countries_bar:read.
Server request: POST /analytics/getVerificationsByCountry.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Read verification counts by country for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last 30 days through now plus four hours. Product defaults to otp; all includes OTP and utility. --widget-id is the public widget_<32 hex> id, not the Mongo _id.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics countries
verification totals grouped by country for the login owner's account.
akedly analytics countries --start-date 2026-10-01 --end-date 2026-10-07
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": [
{
"countryId": "EG",
"name": "Egypt",
"isoCode": "EG",
"pending": 0,
"successful": 3,
"failed": 1,
"total": 4,
"channels": {
"whatsapp": 3,
"sms": 1,
"telegram": 0,
"email": 0
},
"channelStatus": {
"whatsapp": {
"successful": 2,
"failed": 1
},
"sms": {
"successful": 1,
"failed": 0
},
"telegram": {
"successful": 0,
"failed": 0
},
"email": {
"successful": 0,
"failed": 0
}
}
}
]
}
Additional command forms
akedly analytics countries --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved.
analytics passkeys
Read passkey adoption, methods and funnel using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need passkey adoption, method split, funnel and source split; bysource may be null if optional leg failed to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/passkey-analytics and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. - With a pipeline or widget scope, TOTP is omitted because it cannot be attributed; widget scope also omits V1.2 passkeys. This endpoint response does not include explicit exclusion booleans, so interpret scoped method totals as scoped OTP/passkey results rather than treating absent TOTP/V1.2 data as zero account-wide.
- Exact endpoint behavior and scope caveats: Read passkey adoption, method split, funnel, potential savings and source split for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing passkey adoption, method split, funnel and source split; bysource may be null if optional leg failed.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics passkeys
Inspect this command offline before preparing an operation:
akedly describe "analytics passkeys" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--pipeline-id | id | — | Command-specific option; see the full command details below. Manifest body field: pipelineID. |
--widget-id | text | — | Command-specific option; see the full command details below. Manifest body field: widgetId. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_perf_passkeys:read.
Server request: POST /analytics/passkey-analytics.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Read passkey adoption, method split, funnel, potential savings and source split for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate is UTC midnight, not the end of that day. Without dates the server defaults to the last week through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view. --widget-id is the public widget_<32 hex> id, not the Mongo _id.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics passkeys
passkey adoption, method split, funnel and source split; bySource may be null if optional leg failed for the login owner's account.
akedly analytics passkeys --start-date 2026-10-01 --end-date 2026-10-07
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"adoption": {
"enrolledUsers": 2,
"verifiedUsers": 4,
"passkeyVerifications": 3,
"totalVerifications": 10,
"adoptionRate": 50,
"usageShare": 30
},
"methods": {
"totalVerifications": 10,
"uniqueUsers": 4,
"byMethod": {
"otp": 5,
"totp": 2,
"passkey": 3
}
},
"funnel": {
"counts": {
"offered": 4,
"used": 3,
"fellBack": 1,
"enrollPromptShown": 2,
"enrolled": 1,
"enrollSkipped": 1,
"enrollTimeout": 0
},
"authConversion": 75,
"authConversionOfOffered": 75,
"fallbackRate": 25,
"enrollConversion": 50
},
"bySource": {
"enrollments": {
"v12": 1,
"widget": 1,
"total": 2
},
"verifications": {
"v12": 2,
"widget": 1,
"total": 3
}
}
}
}
Additional command forms
akedly analytics passkeys --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved.
analytics scope-options
Read selectable pipelines and widgets using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need owner-scoped names and ids for analytics filters; widgets may have null pipelineid to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/scope-options and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override.
- Exact endpoint behavior and scope caveats: List selectable pipelines and widgets for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing owner-scoped names and ids for analytics filters; widgets may have null pipelineid.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics scope-options
Inspect this command offline before preparing an operation:
akedly describe "analytics scope-options" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_perf_current_rates:read.
Server request: POST /analytics/scope-options.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
List selectable pipelines and widgets for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics scope-options
owner-scoped names and ids for analytics filters; widgets may have null pipelineId for the login owner's account.
akedly analytics scope-options
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"pipelines": [
{
"_id": "507f1f77bcf86cd799439011",
"name": "Example OTP",
"product": "otp"
}
],
"widgets": [
{
"widgetId": "widget_0123456789abcdef0123456789abcdef",
"name": "Example widget",
"pipelineId": null
}
]
}
}
Additional command forms
akedly analytics scope-options --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved.
analytics utility
Read utility-send delivery and cost aggregates using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need utility notification volume, delivery, spend, channel, timeline and template aggregates to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/utility-analytics and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. Utility analytics aligns the supplied dates to whole UTC days, including the eDate day. Without dates the server defaults from UTC midnight a week ago through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
- Exact endpoint behavior and scope caveats: Read utility-notification sends, delivery and spend for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. Utility analytics aligns the supplied dates to whole UTC days, including the eDate day. Without dates the server defaults from UTC midnight a week ago through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing utility notification volume, delivery, spend, channel, timeline and template aggregates.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics utility
Inspect this command offline before preparing an operation:
akedly describe "analytics utility" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--pipeline-id | id | — | Command-specific option; see the full command details below. Manifest body field: pipelineID. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_perf_utilities:read.
Server request: POST /analytics/utility-analytics.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Read utility-notification sends, delivery and spend for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. Utility analytics aligns the supplied dates to whole UTC days, including the eDate day. Without dates the server defaults from UTC midnight a week ago through now plus four hours. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics utility
utility notification volume, delivery, spend, channel, timeline and template aggregates for the login owner's account.
akedly analytics utility --start-date 2026-10-01 --end-date 2026-10-07
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"overview": {
"totalSends": 10,
"delivered": 8,
"pending": 1,
"failed": 1,
"skipped": 0,
"deliveryRate": 80,
"acknowledged": 8,
"ackRate": 80,
"totalSpend": 5,
"avgCostPerMessage": 0.5,
"billedMessages": 10,
"testSends": 1
},
"channels": {
"whatsapp": {
"totalSends": 9,
"totalSpend": 4.5
},
"sms": {
"totalSends": 1,
"totalSpend": 0.5
}
},
"timeline": [
{
"date": "2026-10-04",
"totalSends": 10
}
],
"templates": [
{
"templateName": "verify_code",
"count": 10
}
]
}
}
Additional command forms
akedly analytics utility --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved. Numeric monetary amounts and cost/rate totals in this endpoint are EGP. `analytics current-rate` separately returns USD compatibility figures as two-decimal strings.
analytics my-costs summary
Read billed cost amounts and breakdowns using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need granular-pricing cost summary with channel/provider breakdown to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/my-costs/summary and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass
--productutility); an admin cannot grant this view. - Exact endpoint behavior and scope caveats: Read total cost, transaction count and channel/provider breakdowns for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass
--productutility); an admin cannot grant this view.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing granular-pricing cost summary with channel/provider breakdown.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics my-costs summary
Inspect this command offline before preparing an operation:
akedly describe "analytics my-costs summary" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--channel | text | — | Command-specific option; see the full command details below. Manifest body field: channel. |
--provider | text | — | Command-specific option; see the full command details below. Manifest body field: provider. |
--product | enum | all | otp | utility | Command-specific option; see the full command details below. Manifest body field: product. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_cost_breakdown:read.
Server request: POST /analytics/my-costs/summary.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Read total cost, transaction count and channel/provider breakdowns for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass --product utility); an admin cannot grant this view.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics my-costs summary
granular-pricing cost summary with channel/provider breakdown for the login owner's account.
akedly analytics my-costs summary --start-date 2026-10-01 --end-date 2026-10-07 --product utility
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"totalCost": 12.5,
"transactionCount": 4,
"byChannel": [
{
"channel": "sms",
"count": 4,
"totalCost": 12.5
}
],
"byProvider": [
{
"provider": "cequens",
"count": 4,
"totalCost": 12.5
}
]
},
"message": "Data extracted successfully"
}
Additional command forms
akedly analytics my-costs summary --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved. Monetary values are costs in EGP, not a wallet balance. Cost values are monetary amounts in EGP, not a wallet balance. These monetary cost values are EGP amounts, not wallet balances.
analytics my-costs by-provider
Read billed cost amounts and breakdowns using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need granular-pricing cost grouped by provider to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/my-costs/by-provider and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass
--productutility); an admin cannot grant this view. - Exact endpoint behavior and scope caveats: Read costs by provider for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass
--productutility); an admin cannot grant this view.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing granular-pricing cost grouped by provider.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics my-costs by-provider
Inspect this command offline before preparing an operation:
akedly describe "analytics my-costs by-provider" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--channel | text | — | Command-specific option; see the full command details below. Manifest body field: channel. |
--country | text | — | Command-specific option; see the full command details below. Manifest body field: country. |
--product | enum | all | otp | utility | Command-specific option; see the full command details below. Manifest body field: product. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_cost_breakdown:read.
Server request: POST /analytics/my-costs/by-provider.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Read costs by provider for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass --product utility); an admin cannot grant this view.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics my-costs by-provider
granular-pricing cost grouped by provider for the login owner's account.
akedly analytics my-costs by-provider --start-date 2026-10-01 --end-date 2026-10-07 --product utility
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"providers": [
{
"provider": "cequens",
"count": 4,
"totalCost": 12.5
}
]
},
"message": "Data extracted successfully"
}
Additional command forms
akedly analytics my-costs by-provider --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved. Monetary values are costs in EGP, not a wallet balance. Cost values are monetary amounts in EGP, not a wallet balance. These monetary cost values are EGP amounts, not wallet balances.
analytics my-costs by-country
Read billed cost amounts and breakdowns using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need granular-pricing cost grouped by destination country to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/my-costs/by-country and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass
--productutility); an admin cannot grant this view. - Exact endpoint behavior and scope caveats: Read costs by country for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass
--productutility); an admin cannot grant this view.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing granular-pricing cost grouped by destination country.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics my-costs by-country
Inspect this command offline before preparing an operation:
akedly describe "analytics my-costs by-country" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--channel | text | — | Command-specific option; see the full command details below. Manifest body field: channel. |
--provider | text | — | Command-specific option; see the full command details below. Manifest body field: provider. |
--product | enum | all | otp | utility | Command-specific option; see the full command details below. Manifest body field: product. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_cost_breakdown:read.
Server request: POST /analytics/my-costs/by-country.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Read costs by country for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass --product utility); an admin cannot grant this view.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics my-costs by-country
granular-pricing cost grouped by destination country for the login owner's account.
akedly analytics my-costs by-country --start-date 2026-10-01 --end-date 2026-10-07 --product utility
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"countries": [
{
"country": "EG",
"count": 4,
"totalCost": 12.5
}
]
},
"message": "Data extracted successfully"
}
Additional command forms
akedly analytics my-costs by-country --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved. Monetary values are costs in EGP, not a wallet balance. Cost values are monetary amounts in EGP, not a wallet balance. These monetary cost values are EGP amounts, not wallet balances.
analytics my-costs by-api-version
Read billed cost amounts and breakdowns using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need granular-pricing cost grouped by api version to monitor product usage, service outcomes or account spend.
How it works
- The CLI sends the command's filters to /analytics/my-costs/by-api-version and injects the authenticated owner identity; it returns the controller's analytics payload without changing account data.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass
--productutility); an admin cannot grant this view. - Exact endpoint behavior and scope caveats: Read costs by API version for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass
--productutility); an admin cannot grant this view.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing granular-pricing cost grouped by api version.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics my-costs by-api-version
Inspect this command offline before preparing an operation:
akedly describe "analytics my-costs by-api-version" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--channel | text | — | Command-specific option; see the full command details below. Manifest body field: channel. |
--provider | text | — | Command-specific option; see the full command details below. Manifest body field: provider. |
--country | text | — | Command-specific option; see the full command details below. Manifest body field: country. |
--product | enum | all | otp | utility | Command-specific option; see the full command details below. Manifest body field: product. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_cost_breakdown:read.
Server request: POST /analytics/my-costs/by-api-version.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Read costs by API version for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass --product utility); an admin cannot grant this view.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics my-costs by-api-version
granular-pricing cost grouped by API version for the login owner's account.
akedly analytics my-costs by-api-version --start-date 2026-10-01 --end-date 2026-10-07 --product utility
Illustrative response (sensitive values omitted):
{
"status": "success",
"data": {
"versions": [
{
"apiVersion": "v1.2",
"count": 4,
"totalCost": 12.5
}
]
},
"message": "Data extracted successfully"
}
Additional command forms
akedly analytics my-costs by-api-version --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved. Monetary values are costs in EGP, not a wallet balance. Cost values are monetary amounts in EGP, not a wallet balance. These monetary cost values are EGP amounts, not wallet balances.
analytics my-costs unified
Read billed cost amounts and breakdowns using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need combined cost summary and breakdowns to monitor product usage, service outcomes or account spend.
How it works
- The CLI returns the backend response unchanged; this endpoint returns a root {data: ...} object without a status property.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On an Akedly staff (admin) account this view stays owner-scoped and skips the granular-pricing check.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass--productutility); an admin cannot grant this view. - Exact endpoint behavior and scope caveats: Read total cost and channel/provider/country/API-version breakdowns for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On an Akedly staff (admin) account this view stays owner-scoped and skips the granular-pricing check.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass--productutility); an admin cannot grant this view.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing combined cost summary and breakdowns.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics my-costs unified
Inspect this command offline before preparing an operation:
akedly describe "analytics my-costs unified" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--pipeline-id | id | — | Command-specific option; see the full command details below. Manifest body field: pipelineID. |
--widget-id | text | — | Command-specific option; see the full command details below. Manifest body field: widgetId. |
--channel | text | — | Command-specific option; see the full command details below. Manifest body field: channel. |
--provider | text | — | Command-specific option; see the full command details below. Manifest body field: provider. |
--product | enum | all | otp | utility | Command-specific option; see the full command details below. Manifest body field: product. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_cost_breakdown:read.
Server request: POST /analytics/my-costs/unified.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Read total cost and channel/provider/country/API-version breakdowns for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last week through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On an Akedly staff (admin) account this view stays owner-scoped and skips the granular-pricing check. --widget-id is the public widget_<32 hex> id, not the Mongo _id. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass --product utility); an admin cannot grant this view.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics my-costs unified
combined cost summary and breakdowns for the login owner's account.
akedly analytics my-costs unified --start-date 2026-10-01 --end-date 2026-10-07 --product utility
Illustrative response (sensitive values omitted):
{
"data": {
"totalCost": 12.5,
"transactionCount": 4,
"byChannel": [
{
"channel": "sms",
"count": 4,
"totalCost": 12.5
}
],
"byProvider": [
{
"provider": "cequens",
"count": 4,
"totalCost": 12.5
}
],
"byCountry": [
{
"country": "EG",
"count": 4,
"totalCost": 12.5
}
],
"byApiVersion": [
{
"apiVersion": "v1.2",
"count": 4,
"totalCost": 12.5
}
]
}
}
Additional command forms
akedly analytics my-costs unified --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved. The combined data includes billed/cost EGP amounts and breakdowns; field groups can be extended by the API. Monetary values are costs in EGP, not a wallet balance. Cost values are monetary amounts in EGP, not a wallet balance. The response is root {data} without status; the amount key is totalCost. These monetary cost values are EGP amounts, not wallet balances.
analytics my-costs total-spend
Read billed cost amounts and breakdowns using this endpoint's account scope. Customer sessions are limited to their own account; staff analytics scope varies by endpoint as its help text explains.
When to use
- Use this when you need total spend and transaction count to monitor product usage, service outcomes or account spend.
How it works
- The CLI returns the backend response unchanged; this endpoint returns a root {data: ...} object without a status property.
- Date semantics, default windows, product scope, pipeline/widget scope and pricing restrictions are: the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last 30 days through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass--productutility); an admin cannot grant this view. - Exact endpoint behavior and scope caveats: Read total spend and transaction count for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last 30 days through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view.
--widget-idis the public widget_<32 hex> id, not the Mongo _id. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass--productutility); an admin cannot grant this view.
Prerequisites
- An authenticated Akedly CLI session with the analytics permission for this command.
- For a narrowed result, use an owned pipeline id or public widget_<32 hex> id as the command help specifies.
Expected outcome
A success response containing total spend and transaction count.
Next steps
- Compare the result with the same product and time window before drawing trends.
- Keep transaction lists and full user phone numbers private when this command returns them.
Usage
akedly analytics my-costs total-spend
Inspect this command offline before preparing an operation:
akedly describe "analytics my-costs total-spend" --output json
Flags
| Flag | Type | Enum / range | Description |
|---|---|---|---|
--ksa | boolean switch | — | Select the KSA deployment. |
--start-date | text | — | Command-specific option; see the full command details below. Manifest body field: sDate. |
--end-date | text | — | Command-specific option; see the full command details below. Manifest body field: eDate. |
--pipeline-id | id | — | Command-specific option; see the full command details below. Manifest body field: pipelineID. |
--widget-id | text | — | Command-specific option; see the full command details below. Manifest body field: widgetId. |
--product | enum | all | otp | utility | Command-specific option; see the full command details below. Manifest body field: product. |
--dry-run | boolean switch | — | Preview without sending the write or creating output files; planning reads may still occur. Bypass consent. |
--help | boolean switch | — | Show offline command help. |
--output | enum | json | human | Select JSON or human output. |
--fields | dot-paths | — | Select comma-separated safe dot paths; apply to each element of a root array. |
Authentication, permission and guards
Auth: login. Permission: ana_cost_breakdown:read.
Server request: POST /analytics/my-costs/total-spend.
Consent
none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.
Retry
idempotent: Idempotent requests retry network errors and HTTP 429/502/503/504, at most 3 tries, waiting for cooldownSeconds, retryAfter or the Retry-After header (otherwise 1 second) between tries, up to 30 seconds; a longer requested wait is returned as the error.
Output
Output: data. API output is pass-through server data unless the command details describe a CLI shape. Local commands, composites and hand-offs use their documented CLI shapes.
Full command details
Read total spend and transaction count for the login owner; the CLI injects userID. Read-only logins are supported. No targetUserID or allTime override. Dates are ISO text validated by the server, capped at 30 whole UTC calendar days. A date-only eDate includes the whole UTC day. Without dates the server defaults to the last 30 days through now plus four hours. Product defaults to otp; all includes OTP and utility. Non-granular OTP/all cost requests can return HTTP 403: Cost breakdown is only available for granular pricing users; utility-only requests do not require granular pricing. On an Akedly staff (admin) account analytics can cover all accounts; do not use it for an owner-only view. --widget-id is the public widget_<32 hex> id, not the Mongo _id. On legacy pricing, read spend with akedly analytics billing-consumption instead (or pass --product utility); an admin cannot grant this view.
Worked examples
Examples are synthetic illustrations, never live account records. Replace resource IDs with your own authorized resources. Secret values are omitted here; redacted examples illustrate the shape and are not schema-validation fixtures.
Example analytics my-costs total-spend
total spend and transaction count for the login owner's account.
akedly analytics my-costs total-spend --start-date 2026-10-01 --end-date 2026-10-07 --product utility
Illustrative response (sensitive values omitted):
{
"data": {
"totalCost": 12.5,
"transactionCount": 4
}
}
Additional command forms
akedly analytics my-costs total-spend --dry-run
Input and file contracts
The contract below describes typed arguments, file formats, validation boundaries and API mappings. Boolean switches take no value; numeric and comma-separated values are each passed as one argument. Read prerequisites and full command details for state-dependent requirements.
Response contract
Analytics payload substructures are extensible; the schema enumerates stable endpoint-level keys observed in the backend, with unknown additive fields preserved. Monetary values are costs in EGP, not a wallet balance. Cost values are monetary amounts in EGP, not a wallet balance. The response is root {data} without status; the amount key is totalCost. These monetary cost values are EGP amounts, not wallet balances.
