DoiT · OpenAPI Overlay 1.0.0
API Evangelist conversational phrasing for DoiT Insights API
10 actions
10 updates
phrasing
extends
openapi/doit-insights-api-openapi.yml
Generated by API Evangelist
Written by API Evangelist tooling for DoiT's API. It is a proposal applied on top of the contract, not a document DoiT publishes.
What the actions change
x-apievangelist-phrasing
Targets 10
$.info
$.paths['/insights/v1/results'].get
$.paths['/insights/v1/results'].post
$.paths['/insights/v1/results'].delete
$.paths['/insights/v1/results/source/{sourceID}/insight/{insightKey}'].get
$.paths['/insights/v1/results/source/{sourceID}/insight/{insightKey}'].post
$.paths['/insights/v1/results/source/{sourceID}/insight/{insightKey}'].delete
$.paths['/insights/v1/results/source/{sourceID}/insight/{insightKey}/status'].put
$.paths['/insights/v1/results/source/{sourceID}/insight/{insightKey}/resource-results'].get
$.paths['/insights/v1/results/source/{sourceID}/insight/{insightKey}/resource-results'].post
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 DoiT Insights API
version: 1.0.0
extends: openapi/doit-insights-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: 9
- target: $.paths['/insights/v1/results'].get
update:
x-apievangelist-phrasing:
intent: List optimization insights
effect: read
questions:
- What cost savings opportunities has DoiT found for us?
- Can I filter insights to only easy wins or by cloud provider?
- Can I search insights by category or priority?
instructions:
- text: List insights in category {category}.
slots:
category: query.category
- text: Show insights with priority {priority} for {cloudProvider}.
slots:
priority: query.priority
cloudProvider: query.cloudProvider
method: generated
generated: '2026-10-01'
- target: $.paths['/insights/v1/results'].post
update:
x-apievangelist-phrasing:
intent: Create or update insights in bulk
effect: write
questions:
- Can I push many custom insights in a single request?
- How do I upload my own optimization findings in batch?
instructions:
- text: Upload insights batch {results}.
slots:
results: requestBody.results
- text: 'Create or update these insights in bulk: {results}.'
slots:
results: requestBody.results
method: generated
generated: '2026-10-01'
- target: $.paths['/insights/v1/results'].delete
update:
x-apievangelist-phrasing:
intent: Delete insights by key in bulk
effect: destructive
questions:
- How do I remove every insight with a given key from my batch source?
- Does bulk deleting also remove resource results?
instructions:
- text: Delete all insights with key {insightKey}.
slots:
insightKey: query.insightKey
- text: Bulk remove insights keyed {insightKey} and their resource results.
slots:
insightKey: query.insightKey
method: generated
generated: '2026-10-01'
- target: $.paths['/insights/v1/results/source/{sourceID}/insight/{insightKey}'].get
update:
x-apievangelist-phrasing:
intent: Retrieve one insight summary
effect: read
questions:
- How do I see the savings summary for a single insight?
- Does fetching one insight include its resource-level results?
instructions:
- text: Get insight {insightKey} from source {sourceID}.
slots:
insightKey: path.insightKey
sourceID: path.sourceID
- text: Show the summary of insight {insightKey} in {sourceID}.
slots:
insightKey: path.insightKey
sourceID: path.sourceID
method: generated
generated: '2026-10-01'
- target: $.paths['/insights/v1/results/source/{sourceID}/insight/{insightKey}'].post
update:
x-apievangelist-phrasing:
intent: Create or update a single insight
effect: write
questions:
- How do I publish one custom insight for a source?
- What happens if an insight with the same key already exists?
instructions:
- text: 'Upsert insight {key} titled {title} in source {sourceID} under key {insightKey} for {cloudProvider}, categories {categories}: {shortDescription}.'
slots:
key: requestBody.key
title: requestBody.title
sourceID: path.sourceID
insightKey: path.insightKey
cloudProvider: requestBody.cloudProvider
categories: requestBody.categories
shortDescription: requestBody.shortDescription
- text: Save insight {insightKey} for source {sourceID} with title {title}.
slots:
insightKey: path.insightKey
sourceID: path.sourceID
title: requestBody.title
method: generated
generated: '2026-10-01'
- target: $.paths['/insights/v1/results/source/{sourceID}/insight/{insightKey}'].delete
update:
x-apievangelist-phrasing:
intent: Delete a single insight
effect: destructive
questions:
- How do I permanently delete one insight I created via the API?
- Can I delete insights that weren't created through the public API?
instructions:
- text: Delete insight {insightKey} from source {sourceID}.
slots:
insightKey: path.insightKey
sourceID: path.sourceID
- text: Permanently remove insight {insightKey} in {sourceID}.
slots:
insightKey: path.insightKey
sourceID: path.sourceID
method: generated
generated: '2026-10-01'
- target: $.paths['/insights/v1/results/source/{sourceID}/insight/{insightKey}/status'].put
update:
x-apievangelist-phrasing:
intent: Acknowledge or dismiss an insight
effect: write
questions:
- How do I mark an insight as acknowledged or dismissed?
- Can I record why I dismissed an insight?
instructions:
- text: Set insight {insightKey} in {sourceID} to {status}.
slots:
insightKey: path.insightKey
sourceID: path.sourceID
status: requestBody.status
- text: Dismiss insight {insightKey} from {sourceID} with status {status} and details {dismissalDetails}.
slots:
insightKey: path.insightKey
sourceID: path.sourceID
status: requestBody.status
dismissalDetails: requestBody.dismissalDetails
method: generated
generated: '2026-10-01'
- target: $.paths['/insights/v1/results/source/{sourceID}/insight/{insightKey}/resource-results'].get
update:
x-apievangelist-phrasing:
intent: List affected resources for an insight
effect: read
questions:
- Which individual cloud resources does an insight apply to?
- Can I page through an insight's resource-level results?
instructions:
- text: List resource results for insight {insightKey} in {sourceID}.
slots:
insightKey: path.insightKey
sourceID: path.sourceID
- text: Show the affected resources of insight {insightKey} from {sourceID}.
slots:
insightKey: path.insightKey
sourceID: path.sourceID
method: generated
generated: '2026-10-01'
- target: $.paths['/insights/v1/results/source/{sourceID}/insight/{insightKey}/resource-results'].post
update:
x-apievangelist-phrasing:
intent: Replace an insight's resource results
effect: write
questions:
- How do I overwrite the list of resources attached to an insight?
- What happens to existing resource results not in my new set?
instructions:
- text: Replace resource results of insight {insightKey} in {sourceID} with {resourceResults}.
slots:
insightKey: path.insightKey
sourceID: path.sourceID
resourceResults: requestBody.resourceResults
- text: 'Overwrite affected resources on {insightKey} for source {sourceID}: {resourceResults}.'
slots:
insightKey: path.insightKey
sourceID: path.sourceID
resourceResults: requestBody.resourceResults
method: generated
generated: '2026-10-01'