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.
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
# 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'