AhaSend · OpenAPI Overlay 1.0.0

API Evangelist conversational phrasing for AhaSend API v2 Sub Accounts API

14 actions 14 updates phrasing extends openapi/ahasend-subaccounts-api-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for AhaSend's API. It is a proposal applied on top of the contract, not a document AhaSend publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-phrasing

Targets 14

$.info
$.paths['/v2/accounts/{account_id}/sub-accounts'].get
$.paths['/v2/accounts/{account_id}/sub-accounts'].post
$.paths['/v2/accounts/{account_id}/sub-accounts/usage'].get
$.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}'].get
$.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}'].put
$.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}'].delete
$.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}/suspend'].post
$.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}/unsuspend'].post
$.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}/api-keys'].get
$.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}/api-keys'].post
$.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}/api-keys/{key_id}'].get
$.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}/api-keys/{key_id}'].put
$.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}/api-keys/{key_id}'].delete

OpenAPI Overlay

Raw ↑
# Generated by API Evangelist (build-phrasing.py). Our phrasing, not observed demand.
overlay: 1.0.0
info:
  title: API Evangelist conversational phrasing for AhaSend API v2 Sub Accounts API
  version: 1.0.0
extends: openapi/ahasend-subaccounts-api-openapi.yml
actions:
- target: $.info
  update:
    x-apievangelist-phrasing:
      method: generated
      generated: '2026-10-01'
      generator: build-phrasing.py
      label: Generated by API Evangelist
      operations: 13
- target: $.paths['/v2/accounts/{account_id}/sub-accounts'].get
  update:
    x-apievangelist-phrasing:
      intent: List sub accounts
      effect: read
      questions:
      - Which sub accounts sit under my parent account?
      - Are deleted sub accounts included when I list them?
      instructions:
      - text: List the sub accounts under parent account {account_id}.
        slots:
          account_id: path.account_id
      - text: Show the first {limit} sub accounts of {account_id}.
        slots:
          limit: query.limit
          account_id: path.account_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v2/accounts/{account_id}/sub-accounts'].post
  update:
    x-apievangelist-phrasing:
      intent: Create a sub account
      effect: write
      questions:
      - How do I set up a separate sub account for one of my customers?
      - Can I put a monthly spending cap on a new sub account?
      instructions:
      - text: Create a sub account named {name} for website {website} under account {account_id}.
        slots:
          name: requestBody.name
          website: requestBody.website
          account_id: path.account_id
      - text: Add sub account {name} ({website}) to {account_id} with a monthly credit cap of {monthly_credit}.
        slots:
          name: requestBody.name
          website: requestBody.website
          account_id: path.account_id
          monthly_credit: requestBody.monthly_credit
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v2/accounts/{account_id}/sub-accounts/usage'].get
  update:
    x-apievangelist-phrasing:
      intent: See usage and cost per sub account
      effect: read
      questions:
      - How much has each sub account used this billing period?
      - What share of this period's cost is allocated to each of my sub accounts?
      instructions:
      - text: Show current billing-period usage for parent account {account_id} and its sub accounts.
        slots:
          account_id: path.account_id
      - text: Break down allocated cost by sub account for {account_id}.
        slots:
          account_id: path.account_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}'].get
  update:
    x-apievangelist-phrasing:
      intent: View one sub account
      effect: read
      questions:
      - What name, website and monthly cap does a particular sub account have?
      - Can I check whether one sub account is suspended?
      instructions:
      - text: Show sub account {sub_account_id} under {account_id}.
        slots:
          sub_account_id: path.sub_account_id
          account_id: path.account_id
      - text: Get the settings of sub account {sub_account_id} in parent account {account_id}.
        slots:
          sub_account_id: path.sub_account_id
          account_id: path.account_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}'].put
  update:
    x-apievangelist-phrasing:
      intent: Change a sub account's settings
      effect: write
      questions:
      - How do I raise the monthly cap on an existing sub account?
      - Can I rename a sub account after it's created?
      instructions:
      - text: Set the monthly credit of sub account {sub_account_id} to {monthly_credit} under {account_id}.
        slots:
          sub_account_id: path.sub_account_id
          monthly_credit: requestBody.monthly_credit
          account_id: path.account_id
      - text: Rename existing sub account {sub_account_id} in {account_id} to {name}.
        slots:
          sub_account_id: path.sub_account_id
          account_id: path.account_id
          name: requestBody.name
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete a sub account
      effect: destructive
      questions:
      - How do I shut down a sub account for a customer who left?
      - Is deleting a sub account permanent, or is it a soft delete?
      instructions:
      - text: Delete sub account {sub_account_id} from parent account {account_id}.
        slots:
          sub_account_id: path.sub_account_id
          account_id: path.account_id
      - text: Remove sub account {sub_account_id} under {account_id}.
        slots:
          sub_account_id: path.sub_account_id
          account_id: path.account_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}/suspend'].post
  update:
    x-apievangelist-phrasing:
      intent: Suspend a sub account
      effect: write
      questions:
      - How do I temporarily stop a sub account from sending?
      - Can I record why a sub account was suspended?
      instructions:
      - text: Suspend sub account {sub_account_id} under {account_id} because {reason}.
        slots:
          sub_account_id: path.sub_account_id
          account_id: path.account_id
          reason: requestBody.reason
      - text: Put sub account {sub_account_id} of {account_id} on hold with reason {reason}.
        slots:
          sub_account_id: path.sub_account_id
          account_id: path.account_id
          reason: requestBody.reason
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}/unsuspend'].post
  update:
    x-apievangelist-phrasing:
      intent: Reactivate a suspended sub account
      effect: write
      questions:
      - How do I restore a sub account that I suspended earlier?
      - Can a suspended sub account be allowed to send again?
      instructions:
      - text: Unsuspend sub account {sub_account_id} under {account_id}.
        slots:
          sub_account_id: path.sub_account_id
          account_id: path.account_id
      - text: Lift the suspension on sub account {sub_account_id} in parent {account_id}.
        slots:
          sub_account_id: path.sub_account_id
          account_id: path.account_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}/api-keys'].get
  update:
    x-apievangelist-phrasing:
      intent: List a sub account's API keys
      effect: read
      questions:
      - Which API keys belong to one of my sub accounts?
      - Does listing a sub account's keys show their secret values?
      instructions:
      - text: List API keys owned by sub account {sub_account_id} under {account_id}.
        slots:
          sub_account_id: path.sub_account_id
          account_id: path.account_id
      - text: Show the first {limit} keys for sub account {sub_account_id} of parent {account_id}.
        slots:
          limit: query.limit
          sub_account_id: path.sub_account_id
          account_id: path.account_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}/api-keys'].post
  update:
    x-apievangelist-phrasing:
      intent: Create an API key for a sub account
      effect: write
      questions:
      - How do I issue an API key that a sub account can use on its own?
      - Can the parent account create keys for its sub accounts with limited scopes?
      instructions:
      - text: Create an API key labeled {label} for sub account {sub_account_id} of {account_id} with scopes {scopes}.
        slots:
          label: requestBody.label
          sub_account_id: path.sub_account_id
          account_id: path.account_id
          scopes: requestBody.scopes
      - text: Issue sub account {sub_account_id} under {account_id} a key {label} with scopes {scopes}, allowed only from {ip_allow_list}.
        slots:
          sub_account_id: path.sub_account_id
          account_id: path.account_id
          label: requestBody.label
          scopes: requestBody.scopes
          ip_allow_list: requestBody.ip_allow_list
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}/api-keys/{key_id}'].get
  update:
    x-apievangelist-phrasing:
      intent: View one sub account API key
      effect: read
      questions:
      - What scopes does a given key owned by a sub account have?
      - Can I see the label on a sub account's specific API key?
      instructions:
      - text: Show key {key_id} owned by sub account {sub_account_id} under {account_id}.
        slots:
          key_id: path.key_id
          sub_account_id: path.sub_account_id
          account_id: path.account_id
      - text: Get the scopes of sub account {sub_account_id}'s key {key_id} in parent {account_id}.
        slots:
          sub_account_id: path.sub_account_id
          key_id: path.key_id
          account_id: path.account_id
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}/api-keys/{key_id}'].put
  update:
    x-apievangelist-phrasing:
      intent: Change a sub account API key's scopes
      effect: write
      questions:
      - How do I change the scopes on a key that belongs to a sub account?
      - Can I update the IP allow list on a sub account's existing key?
      instructions:
      - text: Set the scopes of sub account {sub_account_id}'s key {key_id} to {scopes} under {account_id}.
        slots:
          sub_account_id: path.sub_account_id
          key_id: path.key_id
          scopes: requestBody.scopes
          account_id: path.account_id
      - text: Relabel key {key_id} of sub account {sub_account_id} in {account_id} as {label}.
        slots:
          key_id: path.key_id
          sub_account_id: path.sub_account_id
          account_id: path.account_id
          label: requestBody.label
      method: generated
      generated: '2026-10-01'
- target: $.paths['/v2/accounts/{account_id}/sub-accounts/{sub_account_id}/api-keys/{key_id}'].delete
  update:
    x-apievangelist-phrasing:
      intent: Delete a sub account API key
      effect: destructive
      questions:
      - How do I revoke an API key that belongs to one of my sub accounts?
      - Can the parent account delete a sub account's key?
      instructions:
      - text: Delete key {key_id} owned by sub account {sub_account_id} under {account_id}.
        slots:
          key_id: path.key_id
          sub_account_id: path.sub_account_id
          account_id: path.account_id
      - text: Revoke sub account {sub_account_id}'s API key {key_id} in parent {account_id}.
        slots:
          sub_account_id: path.sub_account_id
          key_id: path.key_id
          account_id: path.account_id
      method: generated
      generated: '2026-10-01'