Skip to content
Akedly
Command reference

Utilities templates

Akedly CLI command reference: Utilities templates.

utilities templates library

find a Meta or Akedly-curated utility-template starting point before authoring.

When to use

  • find a Meta or Akedly-curated utility-template starting point before authoring.

How it works

  1. Search the live library with language/search/topic and page with Meta paging.after; curated seeds repeat on every page and ignore topic.

Prerequisites

  • Authenticated account with utilities:read permission.

Expected outcome

Returns library results and availability; if Meta is unavailable curated seeds remain available.

Next steps

  • Copy/adapt a result, remove its server metadata, then lint a local file.

Usage

sh
akedly utilities templates library

Inspect this command offline before preparing an operation:

sh
akedly describe "utilities templates library" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--searchtext—Command-specific option; see the full command details below. Query parameter: search.
--topictext—Command-specific option; see the full command details below. Query parameter: topic.
--languageenumen | arCommand-specific option; see the full command details below. Query parameter: language.
--aftertext—Command-specific option; see the full command details below. Query parameter: after.
--limitinteger1 to 100Command-specific option; see the full command details below. Query parameter: limit.
--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: utilities:read.

Server request: GET /utilities/templates/library.

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

Browse the live Meta Template Library and Akedly curated seeds. --language defaults to en; --limit defaults to 100 (maximum 100). Pass data.paging.after as --after for the next Meta page. Curated seeds are returned again on every --after page and ignore --topic. There is no numeric --page or --all. If the live library is unavailable, libraryAvailable:false and curated seeds remain a successful response. Copy and adapt an entry before creating a template. Read-only logins are supported.

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.

Synthetic CLI scenario

find a Meta or Akedly-curated utility-template starting point before authoring.

sh
akedly utilities templates library --language en --limit 10

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "libraryAvailable": true,
    "meta": [
      {
        "id": "meta-library-example-1",
        "name": "order_update",
        "language": "en_US",
        "category": "UTILITY",
        "body": "Your order {{1}} is ready.",
        "body_params": [
          "order id"
        ],
        "body_param_types": [
          "text"
        ],
        "buttons": []
      }
    ],
    "curated": [
      {
        "id": "seed-order-confirmed-en",
        "name": "Order confirmed",
        "language": "en",
        "category": "UTILITY",
        "body": "Hi {{name}}, your order {{order_id}} is confirmed.",
        "variables": [
          {
            "name": "name",
            "example": "Sam"
          },
          {
            "name": "order_id",
            "example": "ORD-17"
          }
        ]
      }
    ],
    "paging": {
      "after": "cursor-example",
      "hasMore": true
    }
  }
}

Resource identifiers and records are fictional prerequisites, not claims that these resources exist.

Additional command forms

sh
akedly utilities templates library

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

Browse the live Meta Template Library and Akedly curated seeds. --language defaults to en; --limit defaults to 100 (maximum 100). Pass data.paging.after as --after for the next Meta page. Curated seeds are returned again on every --after page and ignore --topic. There is no numeric --page or --all. If the live library is unavailable, libraryAvailable:false and curated seeds remain a successful response. Copy and adapt an entry before creating a template. Read-only logins are supported.

Response fields outside the modeled stable fields may be passed through from the server.

The API response envelope is preserved by the CLI; stable fields are modeled and other server fields remain extensible.

Own recovery guidance

CodeHint
INVALID_QUERYUse text values for --search, --topic and --after.
INVALID_LANGUAGEChoose --language en or ar.

Common error guidance.

utilities templates list

review owned utility-template statuses and locate a template before inspecting or changing it.

When to use

  • review owned utility-template statuses and locate a template before inspecting or changing it.

How it works

  1. Filter by Akedly status/name and page through owned templates; offset pages can shift while records change.

Prerequisites

  • Authenticated account with utilities:read permission.

Expected outcome

Returns a page or all requested pages, with server pagination metadata.

Next steps

  • Use the returned _id with templates get; lint a proposed edit before update.

Usage

sh
akedly utilities templates list

Inspect this command offline before preparing an operation:

sh
akedly describe "utilities templates list" --output json

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--statustext—Command-specific option; see the full command details below. Query parameter: status.
--searchtext—Command-specific option; see the full command details below. Query parameter: search.
--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.
--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: utilities:read.

Server request: GET /utilities/templates.

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 your utility templates. --status passes through as the Akedly status filter. Values are draft, pending_review, approved and rejected (akedlyStatus, not metaStatus); any other value returns no templates. --search matches the name (the server trims it and limits it to 100 characters). Page defaults to 1 and limit to 20; --all defaults omitted limit to 100 and uses the shared Pagination rules. Offset paging is not a snapshot and can skip rows during concurrent changes. Read-only logins are supported.

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 CLI scenario

review owned utility-template statuses and locate a template before inspecting or changing it.

sh
akedly utilities templates list --status draft --page 1

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "templates": [
      {
        "_id": "64b000000000000000000002",
        "name": "Order update",
        "language": "en",
        "body": "Your order {{1}} is ready.",
        "variables": [
          {
            "name": "1",
            "example": "ORD-17"
          }
        ],
        "usableOn": {
          "whatsapp": true,
          "sms": false
        },
        "parameterFormat": "POSITIONAL",
        "akedlyStatus": "draft",
        "metaStatus": null,
        "metaTemplateId": null,
        "metaCategory": null,
        "suggestedCategory": null,
        "whatsappSubmitError": null,
        "whatsappResubmittable": false,
        "rejectionReason": null,
        "sourceLibraryName": null,
        "createdAt": "2050-01-02T03:04:05.000Z",
        "updatedAt": "2050-01-02T03:04:05.000Z"
      }
    ],
    "pagination": {
      "currentPage": 1,
      "totalPages": 1,
      "totalCount": 1,
      "limit": 20
    }
  }
}

Resource identifiers and records are fictional prerequisites, not claims that these resources exist.

Additional command forms

sh
akedly utilities templates list

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

List your utility templates. --status passes through as the Akedly status filter. Values are draft, pending_review, approved and rejected (akedlyStatus, not metaStatus); any other value returns no templates. --search matches the name (the server trims it and limits it to 100 characters). Page defaults to 1 and limit to 20; --all defaults omitted limit to 100 and uses the shared Pagination rules. Offset paging is not a snapshot and can skip rows during concurrent changes. Read-only logins are supported.

Response fields outside the modeled stable fields may be passed through from the server.

The API response envelope is preserved by the CLI; stable fields are modeled and other server fields remain extensible.

Common error guidance.

utilities templates get

inspect one owned template, including Akedly review and Meta submission state, before acting.

When to use

  • inspect one owned template, including Akedly review and Meta submission state, before acting.

How it works

  1. Fetch the template by its 24-hex id from templates list.

Prerequisites

  • Authenticated account with utilities:read permission.
  • An owned template id from `utilities templates list`.

Expected outcome

Returns the owned template record.

Next steps

  • For a draft/rejected template, lint edits; inspect approval/submission errors before resubmission.

Usage

sh
akedly utilities templates get <id>

Inspect this command offline before preparing an operation:

sh
akedly describe "utilities templates get" --output json
PositionalGrammarUsage guidance
<id>^[a-fA-F0-9]{24}$Use the id from akedly utilities templates list.

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--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: utilities:read.

Server request: GET /utilities/templates/:id.

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 one owned utility template using its 24-hex id from akedly utilities templates list. Read-only logins are supported.

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.

Synthetic CLI scenario

inspect one owned template, including Akedly review and Meta submission state, before acting.

sh
akedly utilities templates get 64b000000000000000000001

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "_id": "64b000000000000000000002",
    "name": "Order update",
    "language": "en",
    "body": "Your order {{1}} is ready.",
    "header": {
      "text": "Order"
    },
    "buttons": [],
    "variables": [
      {
        "name": "1",
        "example": "ORD-17"
      }
    ],
    "usableOn": {
      "whatsapp": true,
      "sms": false
    },
    "parameterFormat": "POSITIONAL",
    "akedlyStatus": "draft",
    "metaStatus": null,
    "metaTemplateId": null,
    "metaCategory": null,
    "suggestedCategory": null,
    "whatsappSubmitError": null,
    "whatsappResubmittable": false,
    "rejectionReason": null,
    "sourceLibraryName": null,
    "createdAt": "2050-01-02T03:04:05.000Z",
    "updatedAt": "2050-01-02T03:04:05.000Z"
  }
}

Resource identifiers and records are fictional prerequisites, not claims that these resources exist.

Additional command forms

sh
akedly utilities templates get <id>

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

Read one owned utility template using its 24-hex id from akedly utilities templates list. Read-only logins are supported.

Response fields outside the modeled stable fields may be passed through from the server.

The API response envelope is preserved by the CLI; stable fields are modeled and other server fields remain extensible.

Own recovery guidance

CodeHint
NOT_FOUNDRun akedly utilities templates list and check the template id.

Common error guidance.

utilities templates lint

check proposed template structure and server-side content rules without saving, submitting, sending or charging.

When to use

  • check proposed template structure and server-side content rules without saving, submitting, sending or charging.

How it works

  1. Read a JSON object file, validate the local lint shape, then ask the server for lint rules and advisory prediction.

Prerequisites

  • Authenticated account with utilities:read permission.

Expected outcome

HTTP 200 may return passed:false; that is a lint finding, not command failure. predictedOutcome is Meta prediction, not Akedly approval.

Next steps

  • Fix issues, then lint again; inspect predictedOutcome for possible Marketing reclassification before submitting.

Usage

sh
akedly utilities templates lint

Inspect this command offline before preparing an operation:

sh
akedly describe "utilities templates lint" --output json

Flags

FlagTypeEnum / rangeRequiredDescription
--ksaboolean switch—noSelect the KSA deployment.
--filetext—yesCommand-specific option; see the full command details below. Manifest body field: body, buttons, footer, header, id, language, name, variables.
--dry-runboolean switch—noPreview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--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: login. Permission: utilities:read.

Server request: POST /utilities/templates/lint.

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

Lint a proposed template without saving, submitting, sending or charging. --file is required: a JSON object at most 64 KiB containing only id, name, language, body, variables, header, footer and buttons; extra top-level fields are refused. Optional id must be a 24-hex template id. Set id only to an existing Akedly template's _id (from akedly utilities templates get) so lint does not report it as its own duplicate; remove id, category and other extra fields from library or curated entries before linting. Shape checks run locally; template rules and advisory predictions come from the server, not the CLI. HTTP 200 with data.passed:false remains a successful lint and exits 0; inspect issues and predictedOutcome (Meta's predicted verdict, not Akedly approval). predictedOutcome approve_with_reclassification predicts likely Meta approval as Marketing, which costs more per message than Utility; reword the content first or submit knowingly. This is advisory, not Meta approval. Read-only logins are supported. --dry-run prints the validated request without contacting the server.

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.

Synthetic CLI scenario

check proposed template structure and server-side content rules without saving, submitting, sending or charging.

sh
akedly utilities templates lint --file template.json

Input file: template.json (json).

json
{
  "name": "Appointment reminder",
  "language": "en",
  "body": "Your appointment is tomorrow.",
  "variables": []
}

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "passed": true,
    "strict": false,
    "predictedOutcome": "approve_with_reclassification",
    "issues": [
      {
        "ruleId": "CATEGORY_UTILITY_RECLASSIFICATION",
        "severity": "warning",
        "channel": "category",
        "component": "body",
        "message": "This content may be classified as Marketing."
      }
    ]
  }
}

Resource identifiers and records are fictional prerequisites, not claims that these resources exist.

Additional command forms

sh
akedly utilities templates lint --file <path>

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

Lint a proposed template without saving, submitting, sending or charging. --file is required: a JSON object at most 64 KiB containing only id, name, language, body, variables, header, footer and buttons; extra top-level fields are refused. Optional id must be a 24-hex template id. Set id only to an existing Akedly template's _id (from akedly utilities templates get) so lint does not report it as its own duplicate; remove id, category and other extra fields from library or curated entries before linting. Shape checks run locally; template rules and advisory predictions come from the server, not the CLI. HTTP 200 with data.passed:false remains a successful lint and exits 0; inspect issues and predictedOutcome (Meta's predicted verdict, not Akedly approval). predictedOutcome approve_with_reclassification predicts likely Meta approval as Marketing, which costs more per message than Utility; reword the content first or submit knowingly. This is advisory, not Meta approval. Read-only logins are supported. --dry-run prints the validated request without contacting the server.

Response fields outside the modeled stable fields may be passed through from the server.

The API response envelope is preserved by the CLI; stable fields are modeled and other server fields remain extensible.

Own recovery guidance

CodeHint
INVALID_SHAPECheck the JSON field shapes in --file; see akedly utilities templates lint --help.
INPUT_TOO_LARGEReduce the template input; --file is limited to 64 KiB and the server also bounds individual fields.

Common error guidance.

utilities templates create

save an owned draft utility template after linting/adapting content; creation does not submit or notify.

When to use

  • save an owned draft utility template after linting/adapting content; creation does not submit or notify.

How it works

  1. Read validated authoring JSON and create a draft; omitted language defaults to en and usableOn has server defaults.

Prerequisites

  • Authenticated account with utilities:create permission.

Expected outcome

Returns the created template record.

Next steps

  • Read it with templates get, lint the final content, then submit only when ready.

Usage

sh
akedly utilities templates create

Inspect this command offline before preparing an operation:

sh
akedly describe "utilities templates create" --output json

Flags

FlagTypeEnum / rangeRequiredDescription
--ksaboolean switch—noSelect the KSA deployment.
--filetext—yesCommand-specific option; see the full command details below. Manifest body field: body, buttons, footer, header, language, name, sourceLibraryName, usableOn, variables.
--dry-runboolean switch—noPreview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--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: login. Permission: utilities:create.

Server request: POST /utilities/templates.

Shared server-guard guidance.

Consent

none. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: false.

Retry

write: Non-idempotent writes are not automatically retried. guarded-write: when an update carries the revision read from the server, its write is not automatically retried after network errors or HTTP 429/502/503/504. It may already be saved; inspect the resource before rerunning. A rerun reads current settings again. The explicit CLI_RATE_LIMITED refusal exception below still applies. recommendation-read: the recommendation request made while planning --recommended-limits is not automatically retried after network errors or HTTP 429/502/503/504. If planning fails, no update is sent; rerun the command to request a new recommendation. The explicit CLI_RATE_LIMITED refusal exception below still applies. This label does not change the retry policy of the standalone rate-recommendations command.

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

Create an owned draft utility template without submitting it or sending notifications. Required --file is a regular JSON object at most 64 KiB containing only name, language, body, variables, sourceLibraryName, usableOn, header, footer and buttons. sourceLibraryName records the library entry the template was copied or adapted from. name and body must be non-empty strings. Omitted language defaults to en; other language strings pass through to the server. usableOn accepts only whatsapp/sms JSON booleans (defaults whatsapp on, sms off); SMS requires eligible BYO-SMS. Variables are an array of objects with name, example, optional string fallback and integer maxLength >= 1; examples may be strings, numbers or booleans. Optional header is {text}, footer is text, and buttons is an array with type URL, PHONE_NUMBER or QUICK_REPLY plus text and type-specific url, phoneNumber, actionId or actionLabel. Server template rules remain authoritative. Do not copy id, category or other server metadata into the file. An ambiguous network or server failure is not retried; list templates before repeating. Read-only logins are refused. --dry-run validates and prints the request without contacting the server.

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.

Synthetic CLI scenario

save an owned draft utility template after linting/adapting content; creation does not submit or notify.

sh
akedly utilities templates create --file template.json

Input file: template.json (json).

json
{
  "name": "Appointment reminder",
  "language": "en",
  "body": "Your appointment is tomorrow.",
  "variables": [],
  "sourceLibraryName": "Appointment reminder",
  "usableOn": {
    "whatsapp": true,
    "sms": false
  }
}

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "_id": "64b000000000000000000002",
    "name": "Order update",
    "language": "en",
    "body": "Your order {{1}} is ready.",
    "header": {
      "text": "Order"
    },
    "buttons": [],
    "variables": [
      {
        "name": "1",
        "example": "ORD-17"
      }
    ],
    "usableOn": {
      "whatsapp": true,
      "sms": false
    },
    "parameterFormat": "POSITIONAL",
    "akedlyStatus": "draft",
    "metaStatus": null,
    "metaTemplateId": null,
    "metaCategory": null,
    "suggestedCategory": null,
    "whatsappSubmitError": null,
    "whatsappResubmittable": false,
    "rejectionReason": null,
    "sourceLibraryName": null,
    "createdAt": "2050-01-02T03:04:05.000Z",
    "updatedAt": "2050-01-02T03:04:05.000Z"
  }
}

Resource identifiers and records are fictional prerequisites, not claims that these resources exist.

Additional command forms

sh
akedly utilities templates create --file <path>

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

Create an owned draft utility template without submitting it or sending notifications. Required --file is a regular JSON object at most 64 KiB containing only name, language, body, variables, sourceLibraryName, usableOn, header, footer and buttons. sourceLibraryName records the library entry the template was copied or adapted from. name and body must be non-empty strings. Omitted language defaults to en; other language strings pass through to the server. usableOn accepts only whatsapp/sms JSON booleans (defaults whatsapp on, sms off); SMS requires eligible BYO-SMS. Variables are an array of objects with name, example, optional string fallback and integer maxLength >= 1; examples may be strings, numbers or booleans. Optional header is {text}, footer is text, and buttons is an array with type URL, PHONE_NUMBER or QUICK_REPLY plus text and type-specific url, phoneNumber, actionId or actionLabel. Server template rules remain authoritative. Do not copy id, category or other server metadata into the file. An ambiguous network or server failure is not retried; list templates before repeating. Read-only logins are refused. --dry-run validates and prints the request without contacting the server.

Response fields outside the modeled stable fields may be passed through from the server.

The API response envelope is preserved by the CLI; stable fields are modeled and other server fields remain extensible.

Own recovery guidance

CodeHint
DUPLICATE_NAMERun akedly utilities templates list and choose an unused name and language.
NO_TEMPLATE_CHANNELEnable at least one of usableOn.whatsapp or usableOn.sms in --file.
UTILITY_SMS_REQUIRES_BYOConnect, test and activate an eligible BYO-SMS integration before enabling usableOn.sms. Check akedly byo-sms list and akedly whoami for BYO-SMS entitlement and granular pricing.

Common error guidance.

utilities templates update

change authoring fields on an owned eligible template; editing resets Akedly approval/rejection and can notify staff.

When to use

  • change authoring fields on an owned eligible template; editing resets Akedly approval/rejection and can notify staff.

How it works

  1. Read partial authoring JSON; omitted fields remain, supplied arrays replace entirely, nullable fields can clear. Requires explicit confirmation.

Prerequisites

  • Authenticated account with utilities:update permission.
  • Writable owner account and explicit confirmation where required.
  • An owned template in draft, rejected, or eligible approved-but-never-submitted state; at least one supplied authoring field.

Expected outcome

Returns updated template state.

Next steps

  • Get the template and lint it. Submit again for Akedly review if appropriate; do not retry an ambiguous update before checking current state.

Usage

sh
akedly utilities templates update <id>

Inspect this command offline before preparing an operation:

sh
akedly describe "utilities templates update" --output json
PositionalGrammarUsage guidance
<id>^[a-fA-F0-9]{24}$Use the id from akedly utilities templates list.

Flags

FlagTypeEnum / rangeRequiredDescription
--ksaboolean switch—noSelect the KSA deployment.
--filetext—yesCommand-specific option; see the full command details below. Manifest body field: body, buttons, footer, header, language, name, usableOn, variables.
--yesboolean switch—noConfirm this action where consent is required.
--dry-runboolean switch—noPreview without sending the write or creating output files; planning reads may still occur. Bypass consent.
--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: login. Permission: utilities:update.

Server request: PUT /utilities/templates/:id.

Shared server-guard guidance.

Consent

--yes. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: true.

Retry

write: Non-idempotent writes are not automatically retried. guarded-write: when an update carries the revision read from the server, its write is not automatically retried after network errors or HTTP 429/502/503/504. It may already be saved; inspect the resource before rerunning. A rerun reads current settings again. The explicit CLI_RATE_LIMITED refusal exception below still applies. recommendation-read: the recommendation request made while planning --recommended-limits is not automatically retried after network errors or HTTP 429/502/503/504. If planning fails, no update is sent; rerun the command to request a new recommendation. The explicit CLI_RATE_LIMITED refusal exception below still applies. This label does not change the retry policy of the standalone rate-recommendations command.

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

Update only supplied authoring fields on an owned template with --yes. Required --file is a regular JSON object at most 64 KiB containing only name, language, body, variables, usableOn, header, footer and buttons; sourceLibraryName and server metadata are refused. Field shapes match akedly utilities templates create --help. usableOn replaces both channels; supply both. A supplied language must be a non-empty string. Omitted fields are preserved; variables/buttons replace whole arrays, null header/footer or an empty buttons array clear those components. variables:null or [] clears every example, fallback and maxLength; names are re-derived from body, header and URL-button placeholders. Only draft, rejected or approved WhatsApp-enabled templates with no Meta submission are editable. Editing resets Akedly approval to draft and clears prior rejection/Meta submission state, and may notify Akedly staff. An ambiguous network or server failure is not retried; state may already have changed, so get the template before repeating. Read-only logins are refused. --dry-run validates and prints the request without contacting the server.

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.

Synthetic CLI scenario

change authoring fields on an owned eligible template; editing resets Akedly approval/rejection and can notify staff.

sh
akedly utilities templates update 64b000000000000000000001 --file template.json --yes

Input file: template.json (json).

json
{
  "body": "Your appointment is tomorrow."
}

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "_id": "64b000000000000000000002",
    "name": "Order update",
    "language": "en",
    "body": "Your order {{1}} is ready.",
    "header": {
      "text": "Order"
    },
    "buttons": [],
    "variables": [
      {
        "name": "1",
        "example": "ORD-17"
      }
    ],
    "usableOn": {
      "whatsapp": true,
      "sms": false
    },
    "parameterFormat": "POSITIONAL",
    "akedlyStatus": "draft",
    "metaStatus": null,
    "metaTemplateId": null,
    "metaCategory": null,
    "suggestedCategory": null,
    "whatsappSubmitError": null,
    "whatsappResubmittable": false,
    "rejectionReason": null,
    "sourceLibraryName": null,
    "createdAt": "2050-01-02T03:04:05.000Z",
    "updatedAt": "2050-01-02T03:04:05.000Z"
  }
}

Synthetic example only; do not execute against a live account.

Additional command forms

sh
akedly utilities templates update <id> --file <path> --yes

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

Update only supplied authoring fields on an owned template with --yes. Required --file is a regular JSON object at most 64 KiB containing only name, language, body, variables, usableOn, header, footer and buttons; sourceLibraryName and server metadata are refused. Field shapes match akedly utilities templates create --help. usableOn replaces both channels; supply both. A supplied language must be a non-empty string. Omitted fields are preserved; variables/buttons replace whole arrays, null header/footer or an empty buttons array clear those components. variables:null or [] clears every example, fallback and maxLength; names are re-derived from body, header and URL-button placeholders. Only draft, rejected or approved WhatsApp-enabled templates with no Meta submission are editable. Editing resets Akedly approval to draft and clears prior rejection/Meta submission state, and may notify Akedly staff. An ambiguous network or server failure is not retried; state may already have changed, so get the template before repeating. Read-only logins are refused. --dry-run validates and prints the request without contacting the server.

Response fields outside the modeled stable fields may be passed through from the server.

The API response envelope is preserved by the CLI; stable fields are modeled and other server fields remain extensible.

Own recovery guidance

CodeHint
NOT_FOUNDRun akedly utilities templates list and check the template id.
NOT_EDITABLEOnly draft, rejected or approved WhatsApp-enabled templates with no Meta submission are editable. Check akedly utilities templates get <id> before changing the file.
SUBMISSION_IN_FLIGHTA Meta submission is in progress. Wait for details.retryAfterSeconds, then check akedly utilities templates get <id> before editing.
DUPLICATE_NAMERun akedly utilities templates list and choose an unused name and language.
NO_TEMPLATE_CHANNELEnable at least one of usableOn.whatsapp or usableOn.sms in --file.
UTILITY_SMS_REQUIRES_BYOConnect, test and activate an eligible BYO-SMS integration before enabling usableOn.sms. Check akedly byo-sms list and akedly whoami for BYO-SMS entitlement and granular pricing.

Common error guidance.

utilities templates submit

place a draft or rejected template into Akedly staff review; this does not submit it to Meta.

When to use

  • place a draft or rejected template into Akedly staff review; this does not submit it to Meta.

How it works

  1. Submit an existing owned template after reviewing lint blockers and Meta classification prediction. Requires confirmation.

Prerequisites

  • Authenticated account with utilities:update permission.
  • Writable owner account and explicit confirmation where required.
  • An owned draft or rejected template; lint findings reviewed, including possible Meta Marketing reclassification.

Expected outcome

Returns updated review status; may notify Akedly staff.

Next steps

  • Get template to confirm pending_review; wait for Akedly decision before Meta submission.

Usage

sh
akedly utilities templates submit <id>

Inspect this command offline before preparing an operation:

sh
akedly describe "utilities templates submit" --output json
PositionalGrammarUsage guidance
<id>^[a-fA-F0-9]{24}$Use the id from akedly utilities templates list.

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--yesboolean switch—Confirm this action where consent is required.
--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: utilities:update.

Server request: POST /utilities/templates/:id/submit.

Shared server-guard guidance.

Consent

--yes. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: true.

Retry

write: Non-idempotent writes are not automatically retried. guarded-write: when an update carries the revision read from the server, its write is not automatically retried after network errors or HTTP 429/502/503/504. It may already be saved; inspect the resource before rerunning. A rerun reads current settings again. The explicit CLI_RATE_LIMITED refusal exception below still applies. recommendation-read: the recommendation request made while planning --recommended-limits is not automatically retried after network errors or HTTP 429/502/503/504. If planning fails, no update is sent; rerun the command to request a new recommendation. The explicit CLI_RATE_LIMITED refusal exception below still applies. This label does not change the retry policy of the standalone rate-recommendations command.

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

Submit an owned draft or rejected template for Akedly staff review with --yes. Before submitting, run akedly utilities templates lint --file <path> on the lint-compatible copy described below and review predictedOutcome. This saves pending_review and may notify Akedly staff; it does not itself submit to Meta. Fix the blockers in details.issues, save with akedly utilities templates update <id> --file <path> --yes, then run akedly utilities templates submit <id> --yes. For akedly utilities templates lint --file <path>, use a copy containing only name, language, body, variables (string examples), header, footer and buttons. Lint predictedOutcome predicts Meta, not Akedly approval. An ambiguous network or server failure is not retried; state may already have changed, so get the template before repeating. Read-only logins are refused. --dry-run validates and prints the request without contacting the server. Meta may reclassify a template as Marketing, which costs more per message than Utility; inspect lint predictedOutcome before submitting knowingly.

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.

Synthetic CLI scenario

place a draft or rejected template into Akedly staff review; this does not submit it to Meta.

sh
akedly utilities templates submit 64b000000000000000000001 --yes

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "_id": "64b000000000000000000002",
    "name": "Order update",
    "language": "en",
    "body": "Your order {{1}} is ready.",
    "header": {
      "text": "Order"
    },
    "buttons": [],
    "variables": [
      {
        "name": "1",
        "example": "ORD-17"
      }
    ],
    "usableOn": {
      "whatsapp": true,
      "sms": false
    },
    "parameterFormat": "POSITIONAL",
    "akedlyStatus": "pending_review",
    "metaStatus": null,
    "metaTemplateId": null,
    "metaCategory": null,
    "suggestedCategory": null,
    "whatsappSubmitError": null,
    "whatsappResubmittable": false,
    "rejectionReason": null,
    "sourceLibraryName": null,
    "createdAt": "2050-01-02T03:04:05.000Z",
    "updatedAt": "2050-01-02T03:04:05.000Z"
  }
}

Synthetic example only; do not execute against a live account.

Additional command forms

sh
akedly utilities templates submit <id> --yes

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

Submit an owned draft or rejected template for Akedly staff review with --yes. Before submitting, run akedly utilities templates lint --file <path> on the lint-compatible copy described below and review predictedOutcome. This saves pending_review and may notify Akedly staff; it does not itself submit to Meta. Fix the blockers in details.issues, save with akedly utilities templates update <id> --file <path> --yes, then run akedly utilities templates submit <id> --yes. For akedly utilities templates lint --file <path>, use a copy containing only name, language, body, variables (string examples), header, footer and buttons. Lint predictedOutcome predicts Meta, not Akedly approval. An ambiguous network or server failure is not retried; state may already have changed, so get the template before repeating. Read-only logins are refused. --dry-run validates and prints the request without contacting the server. Meta may reclassify a template as Marketing, which costs more per message than Utility; inspect lint predictedOutcome before submitting knowingly.

Response fields outside the modeled stable fields may be passed through from the server.

The API response envelope is preserved by the CLI; stable fields are modeled and other server fields remain extensible.

Own recovery guidance

CodeHint
NOT_FOUNDRun akedly utilities templates list and check the template id.
NOT_SUBMITTABLEOnly draft or rejected templates can enter Akedly review. Check akedly utilities templates get <id>.
TEMPLATE_NOT_READYFix the blockers in details.issues, save with akedly utilities templates update <id> --file <path> --yes, then run akedly utilities templates submit <id> --yes. For akedly utilities templates lint --file <path>, use a copy containing only name, language, body, variables (string examples), header, footer and buttons.

Common error guidance.

utilities templates resubmit-meta

retry Meta submission for an Akedly-approved WhatsApp template whose previous submission failed or is absent.

When to use

  • retry Meta submission for an Akedly-approved WhatsApp template whose previous submission failed or is absent.

How it works

  1. Ask server to submit; Meta and staff notification may be involved, with server cooldown and potentially a successful HTTP result containing submitted:false.

Prerequisites

  • Authenticated account with utilities:update permission.
  • Writable owner account and explicit confirmation where required.
  • An owned Akedly-approved WhatsApp-enabled template without a Meta submission; no active 60-second resubmission cooldown.

Expected outcome

Returns Meta submission outcome and current template state; success does not guarantee Meta approval.

Next steps

  • Inspect whatsappSubmitError/metaStatus; no_active_waba means connect WABA, blocked_by_lint requires content changes, cooldown requires waiting.

Usage

sh
akedly utilities templates resubmit-meta <id>

Inspect this command offline before preparing an operation:

sh
akedly describe "utilities templates resubmit-meta" --output json
PositionalGrammarUsage guidance
<id>^[a-fA-F0-9]{24}$Use the id from akedly utilities templates list.

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--yesboolean switch—Confirm this action where consent is required.
--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: utilities:update.

Server request: POST /utilities/templates/:id/resubmit-meta.

Shared server-guard guidance.

Consent

--yes. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: true.

Retry

write: Non-idempotent writes are not automatically retried. guarded-write: when an update carries the revision read from the server, its write is not automatically retried after network errors or HTTP 429/502/503/504. It may already be saved; inspect the resource before rerunning. A rerun reads current settings again. The explicit CLI_RATE_LIMITED refusal exception below still applies. recommendation-read: the recommendation request made while planning --recommended-limits is not automatically retried after network errors or HTTP 429/502/503/504. If planning fails, no update is sent; rerun the command to request a new recommendation. The explicit CLI_RATE_LIMITED refusal exception below still applies. This label does not change the retry policy of the standalone rate-recommendations command.

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

Retry a real Meta submission for an Akedly-approved, WhatsApp-enabled template that has no Meta submission, with --yes. This contacts Meta and may notify Akedly staff. Akedly automatically attempts Meta submission for WhatsApp-enabled templates on approval; use resubmit-meta to retry when that submission failed. The server enforces a 60-second attempt cooldown: inspect details.retryAfterSeconds on RESUBMIT_COOLDOWN. HTTP 200 can contain submitted:false, data.whatsappSubmitError and retryAfterSeconds; that is not Meta submission or approval. Inspect those fields and data.metaStatus before deciding what to do. For these customer templates, data.whatsappSubmitError no_active_waba means connect a WhatsApp Business Account first: check akedly whatsapp status, then use akedly whatsapp connect for the dashboard sign-up link. blocked_by_lint: <ruleIds> cannot be fixed by retrying; change the content with akedly utilities templates update <id> --file <path> --yes, then run akedly utilities templates submit <id> --yes. Other values report the Meta submission failure reason. Uses a 90-second request timeout. An ambiguous network or server failure is not retried; state or Meta may already have changed, so get the template before repeating. Read-only logins are refused. --dry-run validates and prints the request without contacting the server.

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.

Synthetic CLI scenario

retry Meta submission for an Akedly-approved WhatsApp template whose previous submission failed or is absent.

sh
akedly utilities templates resubmit-meta 64b000000000000000000001 --yes

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "submitted": false,
  "retryAfterSeconds": 60,
  "data": {
    "_id": "64b000000000000000000002",
    "metaStatus": null,
    "whatsappSubmitError": "no_active_waba",
    "whatsappResubmittable": true
  }
}

Synthetic example only; do not execute against a live account.

Additional command forms

sh
akedly utilities templates resubmit-meta <id> --yes

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

Retry a real Meta submission for an Akedly-approved, WhatsApp-enabled template that has no Meta submission, with --yes. This contacts Meta and may notify Akedly staff. Akedly automatically attempts Meta submission for WhatsApp-enabled templates on approval; use resubmit-meta to retry when that submission failed. The server enforces a 60-second attempt cooldown: inspect details.retryAfterSeconds on RESUBMIT_COOLDOWN. HTTP 200 can contain submitted:false, data.whatsappSubmitError and retryAfterSeconds; that is not Meta submission or approval. Inspect those fields and data.metaStatus before deciding what to do. For these customer templates, data.whatsappSubmitError no_active_waba means connect a WhatsApp Business Account first: check akedly whatsapp status, then use akedly whatsapp connect for the dashboard sign-up link. blocked_by_lint: <ruleIds> cannot be fixed by retrying; change the content with akedly utilities templates update <id> --file <path> --yes, then run akedly utilities templates submit <id> --yes. Other values report the Meta submission failure reason. Uses a 90-second request timeout. An ambiguous network or server failure is not retried; state or Meta may already have changed, so get the template before repeating. Read-only logins are refused. --dry-run validates and prints the request without contacting the server.

Response fields outside the modeled stable fields may be passed through from the server.

The API response envelope is preserved by the CLI; stable fields are modeled and other server fields remain extensible.

Own recovery guidance

CodeHint
NOT_FOUNDRun akedly utilities templates list and check the template id.
NOT_RESUBMITTABLECheck akedly utilities templates get <id>; resubmission requires Akedly approval, WhatsApp enabled and no Meta submission.
RESUBMIT_COOLDOWNWait for details.retryAfterSeconds, then check akedly utilities templates get <id> before another Meta submission.

Common error guidance.

utilities templates dev-approve

bypass Akedly review for development by approving an owned non-approved template; server refuses production.

When to use

  • bypass Akedly review for development by approving an owned non-approved template; server refuses production.

How it works

  1. Approve with explicit confirmation; WhatsApp approval may trigger Meta submission and notification emails.

Prerequisites

  • Authenticated account with utilities:update permission.
  • Writable owner account and explicit confirmation where required.
  • An owned non-approved template and development server environment; the server refuses production.

Expected outcome

Returns approval and Meta submission state, which are distinct.

Next steps

  • Inspect Meta status/error; use only development context, and resubmit-meta only after understanding failure/cooldown.

Usage

sh
akedly utilities templates dev-approve <id>

Inspect this command offline before preparing an operation:

sh
akedly describe "utilities templates dev-approve" --output json
PositionalGrammarUsage guidance
<id>^[a-fA-F0-9]{24}$Use the id from akedly utilities templates list.

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--yesboolean switch—Confirm this action where consent is required.
--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: utilities:update.

Server request: POST /utilities/templates/:id/dev-approve.

Shared server-guard guidance.

Consent

--yes. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: false. Real send: true.

Retry

write: Non-idempotent writes are not automatically retried. guarded-write: when an update carries the revision read from the server, its write is not automatically retried after network errors or HTTP 429/502/503/504. It may already be saved; inspect the resource before rerunning. A rerun reads current settings again. The explicit CLI_RATE_LIMITED refusal exception below still applies. recommendation-read: the recommendation request made while planning --recommended-limits is not automatically retried after network errors or HTTP 429/502/503/504. If planning fails, no update is sent; rerun the command to request a new recommendation. The explicit CLI_RATE_LIMITED refusal exception below still applies. This label does not change the retry policy of the standalone rate-recommendations command.

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

Approve an owned non-approved template for development with --yes, bypassing the Akedly admin review queue. The server refuses production with DEV_ONLY; the CLI does not guess the server environment. This can make a real Meta submission for WhatsApp and schedules owner/consented-recipient notification emails. Akedly approval does not guarantee Meta submission or approval; inspect data.metaStatus and data.whatsappSubmitError. Akedly automatically attempts Meta submission for WhatsApp-enabled templates on approval; use resubmit-meta to retry when that submission failed. For these customer templates, data.whatsappSubmitError no_active_waba means connect a WhatsApp Business Account first: check akedly whatsapp status, then use akedly whatsapp connect for the dashboard sign-up link. blocked_by_lint: <ruleIds> cannot be fixed by retrying; change the content with akedly utilities templates update <id> --file <path> --yes, then run akedly utilities templates submit <id> --yes. Other values report the Meta submission failure reason. Uses a 90-second request timeout. An ambiguous network or server failure is not retried; state or Meta may already have changed, so get the template before repeating. Read-only logins are refused. --dry-run validates and prints the request without contacting the server.

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.

Synthetic CLI scenario

bypass Akedly review for development by approving an owned non-approved template; server refuses production.

sh
akedly utilities templates dev-approve 64b000000000000000000001 --yes

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "_id": "64b000000000000000000002",
    "name": "Order update",
    "language": "en",
    "body": "Your order {{1}} is ready.",
    "header": {
      "text": "Order"
    },
    "buttons": [],
    "variables": [
      {
        "name": "1",
        "example": "ORD-17"
      }
    ],
    "usableOn": {
      "whatsapp": true,
      "sms": false
    },
    "parameterFormat": "POSITIONAL",
    "akedlyStatus": "approved",
    "metaStatus": null,
    "metaTemplateId": null,
    "metaCategory": null,
    "suggestedCategory": null,
    "whatsappSubmitError": null,
    "whatsappResubmittable": false,
    "rejectionReason": null,
    "sourceLibraryName": null,
    "createdAt": "2050-01-02T03:04:05.000Z",
    "updatedAt": "2050-01-02T03:04:05.000Z"
  }
}

Synthetic example only; do not execute against a live account.

Additional command forms

sh
akedly utilities templates dev-approve <id> --yes

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

Approve an owned non-approved template for development with --yes, bypassing the Akedly admin review queue. The server refuses production with DEV_ONLY; the CLI does not guess the server environment. This can make a real Meta submission for WhatsApp and schedules owner/consented-recipient notification emails. Akedly approval does not guarantee Meta submission or approval; inspect data.metaStatus and data.whatsappSubmitError. Akedly automatically attempts Meta submission for WhatsApp-enabled templates on approval; use resubmit-meta to retry when that submission failed. For these customer templates, data.whatsappSubmitError no_active_waba means connect a WhatsApp Business Account first: check akedly whatsapp status, then use akedly whatsapp connect for the dashboard sign-up link. blocked_by_lint: <ruleIds> cannot be fixed by retrying; change the content with akedly utilities templates update <id> --file <path> --yes, then run akedly utilities templates submit <id> --yes. Other values report the Meta submission failure reason. Uses a 90-second request timeout. An ambiguous network or server failure is not retried; state or Meta may already have changed, so get the template before repeating. Read-only logins are refused. --dry-run validates and prints the request without contacting the server.

Response fields outside the modeled stable fields may be passed through from the server.

The API response envelope is preserved by the CLI; stable fields are modeled and other server fields remain extensible.

Own recovery guidance

CodeHint
ALREADY_APPROVEDCheck akedly utilities templates get <id> and inspect data.whatsappResubmittable; use resubmit-meta only when it is true.
DEV_ONLYThis server disables shortcut approval. Use akedly utilities templates submit <id> --yes for Akedly review.

Common error guidance.

utilities templates delete

remove an owned draft or rejected template from Akedly; this does not remove anything from Meta.

When to use

  • remove an owned draft or rejected template from Akedly; this does not remove anything from Meta.

How it works

  1. Delete one eligible owned template after checking its state; pending notification may block deletion. Requires confirmation.

Prerequisites

  • Authenticated account with utilities:delete permission.
  • Writable owner account and explicit confirmation where required.
  • An owned draft or rejected template with no pending status notification.

Expected outcome

Returns server deletion result.

Next steps

  • Verify with templates list; do not retry an ambiguous deletion before checking.

Usage

sh
akedly utilities templates delete <id>

Inspect this command offline before preparing an operation:

sh
akedly describe "utilities templates delete" --output json
PositionalGrammarUsage guidance
<id>^[a-fA-F0-9]{24}$Use the id from akedly utilities templates list.

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--yesboolean switch—Confirm this action where consent is required.
--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: utilities:delete.

Server request: DELETE /utilities/templates/:id.

Shared server-guard guidance.

Consent

--yes. --dry-run bypasses confirmation where supported. Destructive: true. Spends money: false. Real send: false.

Retry

write: Non-idempotent writes are not automatically retried. guarded-write: when an update carries the revision read from the server, its write is not automatically retried after network errors or HTTP 429/502/503/504. It may already be saved; inspect the resource before rerunning. A rerun reads current settings again. The explicit CLI_RATE_LIMITED refusal exception below still applies. recommendation-read: the recommendation request made while planning --recommended-limits is not automatically retried after network errors or HTTP 429/502/503/504. If planning fails, no update is sent; rerun the command to request a new recommendation. The explicit CLI_RATE_LIMITED refusal exception below still applies. This label does not change the retry policy of the standalone rate-recommendations command.

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

Delete an owned draft or rejected template from Akedly with --yes. A pending template-status notification can block deletion. This is local deletion, not deletion at Meta. An ambiguous network or server failure is not retried; get the template before repeating. Read-only logins are refused. --dry-run validates and prints the request without contacting the server.

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.

Synthetic CLI scenario

remove an owned draft or rejected template from Akedly; this does not remove anything from Meta.

sh
akedly utilities templates delete 64b000000000000000000001 --yes

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "data": {
    "deleted": true
  }
}

Resource identifiers and records are fictional prerequisites, not claims that these resources exist.

Additional command forms

sh
akedly utilities templates delete <id> --yes

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

Delete an owned draft or rejected template from Akedly with --yes. A pending template-status notification can block deletion. This is local deletion, not deletion at Meta. An ambiguous network or server failure is not retried; get the template before repeating. Read-only logins are refused. --dry-run validates and prints the request without contacting the server.

Response fields outside the modeled stable fields may be passed through from the server.

The API response envelope is preserved by the CLI; stable fields are modeled and other server fields remain extensible.

Own recovery guidance

CodeHint
NOT_FOUNDRun akedly utilities templates list and check the template id.
NOT_DELETABLEOnly draft or rejected templates without a pending status notification can be deleted. Check akedly utilities templates get <id>.

Common error guidance.

utilities templates test-send

send a real chargeable one-channel template test to validate template rendering/provider acceptance; it does not exercise the production WhatsApp-to-SMS fallback path.

When to use

  • After an eligible approved template and active pipeline are configured, when checking that one selected channel accepts a test message.
  • Do not use this test to prove the production WhatsApp fallback path; test-send transactions are excluded from that fallback service.

How it works

  1. The server chooses a usable account API key scoped to the target pipeline for admission/attribution; it refuses the send if no usable scoped key exists.
  2. The server renders and sends only the explicitly selected channel (SMS or WhatsApp); test-send does not fall back from WhatsApp to SMS.
  3. The real send may charge, obeys daily test-send, quota and spend-cap limits, and a provider acceptance is not proof of handset delivery.

Prerequisites

  • Authenticated account with utilities:send permission.
  • Writable owner account and explicit confirmation where required.
  • An owned approved/send-ready template; a valid destination; eligible WhatsApp or BYO-SMS setup; available quota/balance; --yes. Pipeline must be owned and active if specified.
  • The server must find a usable account API key scoped to the target pipeline for admission and attribution; if it cannot, the send is refused.

Expected outcome

A one-channel test-send transaction with provider acceptance state. It may charge and it does not prove handset delivery or exercise production WhatsApp-to-SMS fallback.

Next steps

  • On timeout retain same key and inputs; inspect messages list/get before recovery. Do not start a new operation.

Usage

sh
akedly utilities templates test-send <id>

Inspect this command offline before preparing an operation:

sh
akedly describe "utilities templates test-send" --output json
PositionalGrammarUsage guidance
<id>^[a-fA-F0-9]{24}$Use the id from akedly utilities templates list.

Flags

FlagTypeEnum / rangeDescription
--ksaboolean switch—Select the KSA deployment.
--phone-numbertext—Command-specific option; see the full command details below. Manifest body field: phone.
--pipeline-idid—Command-specific option; see the full command details below. Manifest body field: pipelineId.
--channelenumsms | whatsappCommand-specific option; see the full command details below. Manifest body field: channel.
--values-filetext—Command-specific option; see the full command details below. Manifest body field: variableValues.
--idempotency-keytext—Command-specific option; see the full command details below. Manifest body field: idempotencyKey.
--operation-fingerprinttext—Command-specific option; see the full command details below. Manifest body field: operationFingerprint.
--yesboolean switch—Confirm this action where consent is required.
--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: utilities:send.

Server request: POST /utilities/templates/:id/test-send.

Shared server-guard guidance.

Consent

--yes. --dry-run bypasses confirmation where supported. Destructive: false. Spends money: true. Real send: true.

Retry

write: Non-idempotent writes are not automatically retried. guarded-write: when an update carries the revision read from the server, its write is not automatically retried after network errors or HTTP 429/502/503/504. It may already be saved; inspect the resource before rerunning. A rerun reads current settings again. The explicit CLI_RATE_LIMITED refusal exception below still applies. recommendation-read: the recommendation request made while planning --recommended-limits is not automatically retried after network errors or HTTP 429/502/503/504. If planning fails, no update is sent; rerun the command to request a new recommendation. The explicit CLI_RATE_LIMITED refusal exception below still applies. This label does not change the retry policy of the standalone rate-recommendations command.

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

Send a real, chargeable utility-template test with --yes; use only your own recipient number. --channel is sms or whatsapp (server default sms). Optional --phone-number must be E.164; omission uses the account phone. Optional --pipeline-id is a 24-hex active non-sandbox utility pipeline id; when omitted, the server selects one. A usable account API key selected by the server is required for that pipeline. --values-file is a regular JSON object at most 64 KiB mapping variable names to strings, finite numbers or booleans; 0, false and empty strings are preserved, but an empty string uses the stored fallback or fails rendering. SMS requires eligible BYO-SMS; WhatsApp requires the channel enabled, Akedly approval and Meta readiness. Region, suppression, quota and spend-cap rules remain server-owned. The account-wide daily limit is 10 persisted test-send transactions from server-local midnight, including failed attempts. Provider acceptance is not handset delivery; SMS bills immediately and WhatsApp billing is deferred, with possible later configured fallback. Uses a 60-second request timeout and no automatic ambiguous retry. A key is generated once per plan and included in the request and recovery error details; pass --idempotency-key to retain it. Supplied keys and optional --operation-fingerprint are separate trimmed 1-255-character values; no fingerprint is generated. Keep the same key and original inputs for recovery, and inspect akedly utilities messages list and akedly utilities messages get <transactionID> before retrying. Replay is bounded, not an unlimited safe-resend guarantee; unresolved dispatches may require support. Do not start a fresh operation merely because the CLI timed out. Read-only logins are refused. --dry-run validates and prints the planned key/body without credentials, consent or any request. TEST_SEND_LIMIT reports that the daily limit was reached but supplies no reset time; do not infer a retry timestamp from it.

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.

Synthetic CLI scenario

exercise an approved utility template by sending a real message to a recipient; the operation may charge and fallback.

sh
akedly utilities templates test-send 64b000000000000000000001 --phone-number +201234567890 --channel whatsapp --yes --idempotency-key utility-test-example-0001 --values-file values.json

Input file: values.json (json).

json
{}

Illustrative response (sensitive values omitted):

json
{
  "status": "success",
  "message": "Test WhatsApp sent",
  "data": {
    "transactionID": "txn_example_20500102",
    "status": "Pending",
    "channel": "whatsapp",
    "provider": "meta-cloud",
    "recipient": "+201234567890",
    "customerUserId": null,
    "wamid": "wamid.example.20500102",
    "billed": false,
    "billing": {
      "status": "deferred"
    }
  }
}

Synthetic example only; do not execute against a live account.

Additional command forms

sh
akedly utilities templates test-send <id> --phone-number <number> --pipeline-id <id> --values-file <path> --yes

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

Send a real, chargeable utility-template test with --yes; use only your own recipient number. --channel is sms or whatsapp (server default sms). Optional --phone-number must be E.164; omission uses the account phone. Optional --pipeline-id is a 24-hex active non-sandbox utility pipeline id; when omitted, the server selects one. A usable account API key selected by the server is required for that pipeline. --values-file is a regular JSON object at most 64 KiB mapping variable names to strings, finite numbers or booleans; 0, false and empty strings are preserved, but an empty string uses the stored fallback or fails rendering. SMS requires eligible BYO-SMS; WhatsApp requires the channel enabled, Akedly approval and Meta readiness. Region, suppression, quota and spend-cap rules remain server-owned. The account-wide daily limit is 10 persisted test-send transactions from server-local midnight, including failed attempts. Provider acceptance is not handset delivery; SMS bills immediately and WhatsApp billing is deferred, with possible later configured fallback. Uses a 60-second request timeout and no automatic ambiguous retry. A key is generated once per plan and included in the request and recovery error details; pass --idempotency-key to retain it. Supplied keys and optional --operation-fingerprint are separate trimmed 1-255-character values; no fingerprint is generated. Keep the same key and original inputs for recovery, and inspect akedly utilities messages list and akedly utilities messages get <transactionID> before retrying. Replay is bounded, not an unlimited safe-resend guarantee; unresolved dispatches may require support. Do not start a fresh operation merely because the CLI timed out. Read-only logins are refused. --dry-run validates and prints the planned key/body without credentials, consent or any request. TEST_SEND_LIMIT reports that the daily limit was reached but supplies no reset time; do not infer a retry timestamp from it.

Response fields outside the modeled stable fields may be passed through from the server.

The API response envelope is preserved by the CLI; stable fields are modeled and other server fields remain extensible.

This command never verifies the production WhatsApp failure-to-SMS fallback: the fallback service skips utility.testSend transactions.

The successful API data carries string transactionID/status plus selected channel/provider and channel-specific acceptance/billing fields. It is not a production fallback test.

Own recovery guidance

CodeHint
TEMPLATE_NOT_FOUNDRun akedly utilities templates list and check the template id.
INVALID_PHONEPass --phone-number with your own valid E.164 number; omit it only when the account has a verified phone. If the saved phone is missing, complete your profile in the dashboard or ask Akedly support to correct it.
NO_UTILITY_PIPELINECreate a utility pipeline with akedly pipelines create --product utility --name <name>, activate it with akedly pipelines update <id> --status active --yes, then supply --pipeline-id.
TEMPLATE_NOT_APPROVEDCheck akedly utilities templates get <id>; submit the stored draft or rejected template for Akedly review before sending.
TEMPLATE_NOT_SMSCheck data.usableOn in akedly utilities templates get <id>; the template must allow SMS.
TEMPLATE_NOT_WHATSAPP_READYCheck akedly utilities templates get <id> for Akedly approval, WhatsApp usability and data.metaStatus. Use resubmit-meta only when data.whatsappResubmittable is true.
WHATSAPP_NOT_ENABLEDCheck the utility pipeline and enable WhatsApp with akedly utilities pipelines channels set <id> --file <path>.
TEMPLATE_MISSING_VARIABLESupply the missing values through --values-file; use akedly utilities templates get <id> to inspect variables and fallbacks.
RECIPIENT_SUPPRESSEDCheck akedly utilities suppressions list and respect the recipient opt-out; do not repeat the send to bypass suppression.
UTILITY_SMS_REQUIRES_BYOCheck akedly byo-sms list, active tested integration coverage and the pipeline byoSms setting; utility SMS requires eligible BYO-SMS.
UTILITY_SMS_COUNTRY_NOT_ROUTEDCheck the selected BYO-SMS integration coverage for this destination with akedly byo-sms get <id>.
UTILITY_SMS_PROVIDER_NOT_READYCheck akedly byo-sms get <id> and complete the selected provider setup before sending.
IDEMPOTENCY_KEY_REUSEKeep the original idempotency key with exactly the original template id and flags (--pipeline-id, --channel, --phone-number, --values-file and --operation-fingerprint, each supplied or omitted as before). Inspect akedly utilities messages list before deciding on a different operation.
IDEMPOTENCY_IN_PROGRESSThe existing operation is still processing. Keep its key and inputs; inspect akedly utilities messages list before retrying.
IDEMPOTENCY_OUTCOME_UNKNOWNKeep the key and inputs. Inspect akedly utilities messages list and get <transactionID>, then contact Akedly support before retrying; do not start a new operation.
TEMPLATE_VAR_MISSINGNo message was sent. Fill every required variable in --values-file; inspect variables and fallbacks with akedly utilities templates get <id>.
no_active_wabaNo message was sent. An active connected WhatsApp Business Account is required; use --channel sms if ready, or run akedly whatsapp connect for the dashboard connection link.

Common error guidance.