Skip to content
Akedly
Command reference

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

  1. API-key POST to status endpoint; accepts exactly one single ID or batch ID flags (1–50 total). --wait is 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

sh
akedly transactions status

Inspect this command offline before preparing an operation:

sh
akedly describe "transactions status" --output json

Flags

FlagTypeEnum / rangeRequiredDescription
--ksaboolean switch—noSelect the KSA deployment.
--transaction-idtext—noCommand-specific option; see the full command details below. Manifest body field: transactionID.
--attempt-idtext—noCommand-specific option; see the full command details below. Manifest body field: attemptId.
--transaction-idstext—noCommand-specific option; see the full command details below. Manifest body field: transactionIDs.
--attempt-idstext—noCommand-specific option; see the full command details below. Manifest body field: attemptIds.
--api-keytext—noSelect a saved API key by its eight-character prefix; never supply a full Secret.
--dry-runboolean switch—noPreview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--waitboolean switch—noCommand-specific option; see the full command details below.
--timeoutseconds—noCommand-specific option; see the full command details below.
--helpboolean switch—noShow offline command help.
--outputenumjson | humannoSelect JSON or human output.
--fieldsdot-paths—noSelect 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.

Shared server-guard guidance.

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.

sh
akedly transactions status --transaction-id 9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f9f

Illustrative response (sensitive values omitted):

json
{
  "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

sh
akedly transactions status --transaction-id <id>
sh
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.

Common error guidance.

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

  1. Login-authenticated GET uses the caller owner ID and server filters; --all fetches 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

sh
akedly transactions list

Inspect this command offline before preparing an operation:

sh
akedly describe "transactions list" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--pageinteger1 to unboundedCommand-specific option; see the full command details below. Query parameter: page.
--limitinteger1 to 100Command-specific option; see the full command details below. Query parameter: limit.
--allboolean switch—Command-specific option; see the full command details below.
--statusenumPending | Successful | FailedCommand-specific option; see the full command details below. Query parameter: status.
--phone-numbertext—Command-specific option; see the full command details below. Query parameter: phoneNumber.
--pipeline-idid—Command-specific option; see the full command details below. Query parameter: pipelineID.
--billing-modeenumPPM | PPSCommand-specific option; see the full command details below. Query parameter: billingMode.
--exclude-utilityboolean switch—Command-specific option; see the full command details below. Query parameter: excludeUtility.
--sort-byenumcreationDate | status | transactionIDCommand-specific option; see the full command details below. Query parameter: sortBy.
--sort-orderenumasc | descCommand-specific option; see the full command details below. Query parameter: sortOrder.
--start-datetext—Command-specific option; see the full command details below. Query parameter: sDate.
--end-datetext—Command-specific option; see the full command details below. Query parameter: eDate.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

Pagination rules.

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.

sh
akedly transactions list --status Successful --all

Illustrative response (sensitive values omitted):

json
{
  "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

sh
akedly transactions list --page 1 --limit 20
sh
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.

Common error guidance.

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

  1. The CLI calls the current-rate endpoint with the authenticated owner identity; this endpoint does not accept a date window or account/pipeline scope.
  2. 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.
  3. 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

sh
akedly analytics current-rate

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics current-rate" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics current-rate

Illustrative response (sensitive values omitted):

json
{
  "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

sh
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.

Common error guidance.

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

  1. 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.
  2. 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-id is the public widget_<32 hex> id, not the Mongo _id.
  3. 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.
  4. 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.
  5. 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-id is 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

sh
akedly analytics total-transactions

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics total-transactions" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--pipeline-idid—Command-specific option; see the full command details below. Manifest body field: pipelineID.
--widget-idtext—Command-specific option; see the full command details below. Manifest body field: widgetId.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics total-transactions --start-date 2026-10-01 --end-date 2026-10-07

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "transactionsNumber": 42,
    "totpExcluded": false,
    "v12Excluded": false
  },
  "message": "Data extracted successfully"
}

Additional command forms

sh
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.

Common error guidance.

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

  1. 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.
  2. 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-id is the public widget_<32 hex> id, not the Mongo _id.
  3. 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-id is 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

sh
akedly analytics total-requests

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics total-requests" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--pipeline-idid—Command-specific option; see the full command details below. Manifest body field: pipelineID.
--widget-idtext—Command-specific option; see the full command details below. Manifest body field: widgetId.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics total-requests --start-date 2026-10-01 --end-date 2026-10-07

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "transactionsNumber": 51
  },
  "message": "Data extracted successfully"
}

Additional command forms

sh
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.

Common error guidance.

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

  1. 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.
  2. 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-id is the public widget_<32 hex> id, not the Mongo _id.
  3. 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.
  4. 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.
  5. 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-id is 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

sh
akedly analytics successful

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics successful" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--pipeline-idid—Command-specific option; see the full command details below. Manifest body field: pipelineID.
--widget-idtext—Command-specific option; see the full command details below. Manifest body field: widgetId.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics successful --start-date 2026-10-01 --end-date 2026-10-07

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "transactionsNumber": 37,
    "totpExcluded": false,
    "v12Excluded": false
  },
  "message": "Data extracted successfully"
}

Additional command forms

sh
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.

Common error guidance.

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

  1. 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.
  2. 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-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.
  3. 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-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.

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

sh
akedly analytics failed

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics failed" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--pipeline-idid—Command-specific option; see the full command details below. Manifest body field: pipelineID.
--widget-idtext—Command-specific option; see the full command details below. Manifest body field: widgetId.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics failed --start-date 2026-10-01 --end-date 2026-10-07

Illustrative response (sensitive values omitted):

json
{
  "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

sh
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.

Common error guidance.

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

  1. 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.
  2. 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 --fields data.authenticationRatio.
  3. 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 --fields data.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

sh
akedly analytics auth-ratio

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics auth-ratio" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics auth-ratio --start-date 2026-10-01 --end-date 2026-10-07

Illustrative response (sensitive values omitted):

json
{
  "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

sh
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.

Common error guidance.

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

  1. 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.
  2. 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-id is the public widget_<32 hex> id, not the Mongo _id.
  3. 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-id is 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

sh
akedly analytics billing-consumption

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics billing-consumption" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--pipeline-idid—Command-specific option; see the full command details below. Manifest body field: pipelineID.
--widget-idtext—Command-specific option; see the full command details below. Manifest body field: widgetId.
--productenumall | otp | utilityCommand-specific option; see the full command details below. Manifest body field: product.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics billing-consumption --start-date 2026-10-01 --end-date 2026-10-07

Illustrative response (sensitive values omitted):

json
{
  "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

sh
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.

Common error guidance.

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

  1. 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.
  2. 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-id is the public widget_<32 hex> id, not the Mongo _id.
  3. 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.
  4. 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-id is 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

sh
akedly analytics savings

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics savings" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--pipeline-idid—Command-specific option; see the full command details below. Manifest body field: pipelineID.
--widget-idtext—Command-specific option; see the full command details below. Manifest body field: widgetId.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics savings --start-date 2026-10-01 --end-date 2026-10-07

Illustrative response (sensitive values omitted):

json
{
  "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

sh
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.

Common error guidance.

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

  1. 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.
  2. 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-id is the public widget_<32 hex> id, not the Mongo _id.
  3. 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.
  4. 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-id is 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

sh
akedly analytics savings-by-day

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics savings-by-day" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--pipeline-idid—Command-specific option; see the full command details below. Manifest body field: pipelineID.
--widget-idtext—Command-specific option; see the full command details below. Manifest body field: widgetId.
--intervalenumdaily | weekly | monthlyCommand-specific option; see the full command details below. Manifest body field: interval.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics savings-by-day --start-date 2026-10-01 --end-date 2026-10-07

Illustrative response (sensitive values omitted):

json
{
  "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

sh
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.

Common error guidance.

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

  1. 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.
  2. 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-id is the public widget_<32 hex> id, not the Mongo _id.
  3. 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.
  4. 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-id is 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

sh
akedly analytics transactions-graph

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics transactions-graph" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--pipeline-idid—Command-specific option; see the full command details below. Manifest body field: pipelineID.
--widget-idtext—Command-specific option; see the full command details below. Manifest body field: widgetId.
--intervalenumdaily | weekly | monthlyCommand-specific option; see the full command details below. Manifest body field: interval.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics transactions-graph --start-date 2026-10-01 --end-date 2026-10-07

Illustrative response (sensitive values omitted):

json
{
  "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

sh
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.

Common error guidance.

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

  1. 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.
  2. 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-id is the public widget_<32 hex> id, not the Mongo _id.
  3. 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-id is 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

sh
akedly analytics international-split

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics international-split" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--pipeline-idid—Command-specific option; see the full command details below. Manifest body field: pipelineID.
--widget-idtext—Command-specific option; see the full command details below. Manifest body field: widgetId.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics international-split --start-date 2026-10-01 --end-date 2026-10-07

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "national": {},
    "international": {},
    "totp": {}
  },
  "message": "Data extracted successfully"
}

Additional command forms

sh
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.

Common error guidance.

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

  1. 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.
  2. 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-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.
  3. 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-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.

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

sh
akedly analytics unique-users

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics unique-users" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--pipeline-idid—Command-specific option; see the full command details below. Manifest body field: pipelineID.
--widget-idtext—Command-specific option; see the full command details below. Manifest body field: widgetId.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics unique-users --start-date 2026-10-01 --end-date 2026-10-07

Illustrative response (sensitive values omitted):

json
{
  "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

sh
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.

Common error guidance.

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

  1. 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.
  2. 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.
  3. 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

sh
akedly analytics unique-users-graph

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics unique-users-graph" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--intervalenumdaily | weekly | monthlyCommand-specific option; see the full command details below. Manifest body field: interval.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics unique-users-graph --start-date 2026-10-01 --end-date 2026-10-07

Illustrative response (sensitive values omitted):

json
{
  "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

sh
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.

Common error guidance.

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

  1. 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.
  2. 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-id is the public widget_<32 hex> id, not the Mongo _id.
  3. 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-id is 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

sh
akedly analytics countries

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics countries" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--pipeline-idid—Command-specific option; see the full command details below. Manifest body field: pipelineID.
--widget-idtext—Command-specific option; see the full command details below. Manifest body field: widgetId.
--productenumall | otp | utilityCommand-specific option; see the full command details below. Manifest body field: product.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics countries --start-date 2026-10-01 --end-date 2026-10-07

Illustrative response (sensitive values omitted):

json
{
  "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

sh
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.

Common error guidance.

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

  1. 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.
  2. 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-id is the public widget_<32 hex> id, not the Mongo _id.
  3. 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.
  4. 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-id is 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

sh
akedly analytics passkeys

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics passkeys" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--pipeline-idid—Command-specific option; see the full command details below. Manifest body field: pipelineID.
--widget-idtext—Command-specific option; see the full command details below. Manifest body field: widgetId.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics passkeys --start-date 2026-10-01 --end-date 2026-10-07

Illustrative response (sensitive values omitted):

json
{
  "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

sh
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.

Common error guidance.

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

  1. 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.
  2. 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.
  3. 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

sh
akedly analytics scope-options

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics scope-options" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics scope-options

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "pipelines": [
      {
        "_id": "507f1f77bcf86cd799439011",
        "name": "Example OTP",
        "product": "otp"
      }
    ],
    "widgets": [
      {
        "widgetId": "widget_0123456789abcdef0123456789abcdef",
        "name": "Example widget",
        "pipelineId": null
      }
    ]
  }
}

Additional command forms

sh
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.

Common error guidance.

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

  1. 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.
  2. 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.
  3. 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

sh
akedly analytics utility

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics utility" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--pipeline-idid—Command-specific option; see the full command details below. Manifest body field: pipelineID.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics utility --start-date 2026-10-01 --end-date 2026-10-07

Illustrative response (sensitive values omitted):

json
{
  "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

sh
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.

Common error guidance.

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

  1. 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.
  2. 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 --product utility); an admin cannot grant this view.
  3. 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 --product utility); 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

sh
akedly analytics my-costs summary

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics my-costs summary" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--channeltext—Command-specific option; see the full command details below. Manifest body field: channel.
--providertext—Command-specific option; see the full command details below. Manifest body field: provider.
--productenumall | otp | utilityCommand-specific option; see the full command details below. Manifest body field: product.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics my-costs summary --start-date 2026-10-01 --end-date 2026-10-07 --product utility

Illustrative response (sensitive values omitted):

json
{
  "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

sh
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.

Common error guidance.

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

  1. 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.
  2. 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 --product utility); an admin cannot grant this view.
  3. 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 --product utility); 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

sh
akedly analytics my-costs by-provider

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics my-costs by-provider" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--channeltext—Command-specific option; see the full command details below. Manifest body field: channel.
--countrytext—Command-specific option; see the full command details below. Manifest body field: country.
--productenumall | otp | utilityCommand-specific option; see the full command details below. Manifest body field: product.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics my-costs by-provider --start-date 2026-10-01 --end-date 2026-10-07 --product utility

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "providers": [
      {
        "provider": "cequens",
        "count": 4,
        "totalCost": 12.5
      }
    ]
  },
  "message": "Data extracted successfully"
}

Additional command forms

sh
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.

Common error guidance.

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

  1. 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.
  2. 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 --product utility); an admin cannot grant this view.
  3. 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 --product utility); 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

sh
akedly analytics my-costs by-country

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics my-costs by-country" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--channeltext—Command-specific option; see the full command details below. Manifest body field: channel.
--providertext—Command-specific option; see the full command details below. Manifest body field: provider.
--productenumall | otp | utilityCommand-specific option; see the full command details below. Manifest body field: product.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics my-costs by-country --start-date 2026-10-01 --end-date 2026-10-07 --product utility

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "countries": [
      {
        "country": "EG",
        "count": 4,
        "totalCost": 12.5
      }
    ]
  },
  "message": "Data extracted successfully"
}

Additional command forms

sh
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.

Common error guidance.

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

  1. 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.
  2. 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 --product utility); an admin cannot grant this view.
  3. 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 --product utility); 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

sh
akedly analytics my-costs by-api-version

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics my-costs by-api-version" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--channeltext—Command-specific option; see the full command details below. Manifest body field: channel.
--providertext—Command-specific option; see the full command details below. Manifest body field: provider.
--countrytext—Command-specific option; see the full command details below. Manifest body field: country.
--productenumall | otp | utilityCommand-specific option; see the full command details below. Manifest body field: product.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics my-costs by-api-version --start-date 2026-10-01 --end-date 2026-10-07 --product utility

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "versions": [
      {
        "apiVersion": "v1.2",
        "count": 4,
        "totalCost": 12.5
      }
    ]
  },
  "message": "Data extracted successfully"
}

Additional command forms

sh
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.

Common error guidance.

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

  1. The CLI returns the backend response unchanged; this endpoint returns a root {data: ...} object without a status property.
  2. 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-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.
  3. 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-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.

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

sh
akedly analytics my-costs unified

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics my-costs unified" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--pipeline-idid—Command-specific option; see the full command details below. Manifest body field: pipelineID.
--widget-idtext—Command-specific option; see the full command details below. Manifest body field: widgetId.
--channeltext—Command-specific option; see the full command details below. Manifest body field: channel.
--providertext—Command-specific option; see the full command details below. Manifest body field: provider.
--productenumall | otp | utilityCommand-specific option; see the full command details below. Manifest body field: product.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics my-costs unified --start-date 2026-10-01 --end-date 2026-10-07 --product utility

Illustrative response (sensitive values omitted):

json
{
  "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

sh
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.

Common error guidance.

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

  1. The CLI returns the backend response unchanged; this endpoint returns a root {data: ...} object without a status property.
  2. 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-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.
  3. 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-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.

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

sh
akedly analytics my-costs total-spend

Inspect this command offline before preparing an operation:

sh
akedly describe "analytics my-costs total-spend" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--start-datetext—Command-specific option; see the full command details below. Manifest body field: sDate.
--end-datetext—Command-specific option; see the full command details below. Manifest body field: eDate.
--pipeline-idid—Command-specific option; see the full command details below. Manifest body field: pipelineID.
--widget-idtext—Command-specific option; see the full command details below. Manifest body field: widgetId.
--productenumall | otp | utilityCommand-specific option; see the full command details below. Manifest body field: product.
--dry-runboolean switch—Preview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--helpboolean switch—Show offline command help.
--outputenumjson | humanSelect JSON or human output.
--fieldsdot-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.

Shared server-guard guidance.

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.

Login 429 guidance.

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.

sh
akedly analytics my-costs total-spend --start-date 2026-10-01 --end-date 2026-10-07 --product utility

Illustrative response (sensitive values omitted):

json
{
  "data": {
    "totalCost": 12.5,
    "transactionCount": 4
  }
}

Additional command forms

sh
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.

Common error guidance.