14 skills · 80 min
Skills
Skill 12 of 14
Analyze text you already have with Deepgram’s Read API.
4 minutes · 804 words · 9 sections
Install
npx skills add deepgram/skills --skill text-intelligencenpx skills add deepgram/skills/plugin marketplace add deepgram/skillsThe first command installs just this skill, by the name in its SKILL.md; the second installs the whole repository.
POST https://api.deepgram.com/v1/read takes text and returns analysis. No audio, no transcript,
no streaming — one request, one response. Four features: summarize, sentiment, topics,
intents.
/v1/listen runs the same analysis
during transcription, in a single API call. Open the audio-intelligence skill./v1/read rejects
detect_entities outright. Only /v1/listen detects entities, so your input has to be audio./v1/read is POST-only — a GET returns 405, and so does a
WebSocket upgrade against the same path.Both language and at least one feature are required. Omitting either is a 400.
curl -s -X POST 'https://api.deepgram.com/v1/read?language=en&summarize=v2&sentiment=true&topics=true&intents=true' \
-H "Authorization: Token $DEEPGRAM_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"text":"Hi, this is Maria Gonzalez from Acme Corp in Denver. The invoice we received on March 3rd double-charged us on the annual plan. I would like a refund and I want to cancel the second subscription."}'Returns 200. Where each result lives:
| Result | Path |
|---|---|
| Summary | results.summary.text |
| Sentiment per segment | results.sentiments.segments[] — text, start_word, end_word, sentiment, sentiment_score |
| Sentiment overall | results.sentiments.average — sentiment, sentiment_score |
| Topics | results.topics.segments[].topics[] — topic, confidence_score |
| Intents | results.intents.segments[].intents[] — intent, confidence_score |
The parameter is sentiment; the result key is sentiments. metadata carries request_id,
created, language, and one summary_info / sentiment_info / topics_info / intents_info
block per enabled feature, each with model_uuid, input_tokens, and output_tokens — that token
count is what you reconcile usage against.
text or urlThree accepted shapes:
Content-Type: application/json with {"text": "..."}.Content-Type: application/json with {"url": "..."}, where the URL serves plain text.
Deepgram fetches it.Content-Type: text/plain with the raw text as the whole body, no JSON wrapper.Sending both text and url, or neither, returns 400 {"err_code":"PAYLOAD_ERROR","err_msg":"Failed to deserialize JSON payload. Please specify exactly one of \text` or `url` in the JSON body.”}`.
A 1 MB JSON body (210,000 input tokens, per metadata.summary_info.input_tokens) was accepted, so
there is no small size ceiling to design around. Treat very large documents as chunkable rather
than assuming any particular ceiling.
summarize accepts v2 and true; both return results.summary.text.custom_topic and custom_intent (repeatable) add your own labels. custom_topic_mode and
custom_intent_mode take extended (default: your labels plus the model’s own) or strict
(your labels only). strict returns "segments": [] when nothing matches, which reads as a
broken request but is not. Start with extended.callback (with optional callback_method, default POST) makes the request asynchronous. The
response body becomes just {"request_id":"..."} and the analysis is POSTed to your URL. [5]tag (repeatable) labels the request for usage reporting. [6]language. The generated API reference documents language as optional with
default en. It is not optional. The live API returns 400
{"err_code":"INVALID_QUERY_PARAMETER","err_msg":"Failed to deserialize query parameters: missing field \language`”}. Always send language=en`. This error fires before any other
validation, so it masks every other mistake in the request — fix it first.language=en alone returns 400 "Request did not enable any features. Please enable at least one feature. Available features: \summarize`, `topics`, `intents`,
`sentiment`.”` That error string is also the authoritative list of what the Read API does.language=es returns 400 "Request specified unsupported language: es. Only English is supported." Same for fr, and language=multi is rejected the
same way — there is no code-switching mode here, unlike /v1/listen. Regional English tags are
fine: en-US is accepted and reported back as "language": "en".detect_entities. 400 {"err_code":"INVALID_QUERY_PARAMETER","err_msg":"unknown query parameter: detect_entities"}. Entity detection exists only on /v1/listen.url at audio. {"url":"https://dpgr.am/spacewalk.wav"} returns 400
{"err_code":"REMOTE_CONTENT_ERROR","err_msg":"Failed to deserialize remote text data. Please provide \application/json` with a `text` field or `text/plain`.”}. urlmeans a text document. Audio goes to/v1/listen`.results.summary.short. That is /v1/listen‘s shape. Read returns
results.summary.text. Code that handles both endpoints has to branch./v1/listen and read the audio-intelligence skill.Authorization: Token <key>. Bearer is only for the
short-lived JWT from POST /v1/auth/grant. [7]Every feature you enable adds to what the request costs. Rates and the billing model change, so read https://deepgram.com/pricing (opens in a new tab) rather than any figure quoted in a skill.
audio-intelligence skill. It also covers entity detection.api skill, references/read.md — but see
mistake 1; that file’s language default is wrong.starters skill, feature text-intelligence, available for node,
bun, deno, fastapi, flask, django, go, java, csharp, rust, ruby, php, and cpp.recipes skill. The repo’s “Text Analysis v1“ section has
summarize, sentiment, topics, and intents in Python, JavaScript, Go, .NET, Java, Rust, and
the CLI. [8]deepgram-{js,python,java,go,rust,dotnet}-text-intelligence
from the matching SDK repository (npx skills add deepgram/deepgram-python-sdk, and so on).speech-to-text, text-to-speech,
or voice-agent skill.docs skill. You want the docs in your editor: setup-mcp skill.Analyze text you already have with Deepgram's Read API. Use when a task says "text intelligence", "read API", "/v1/read", "analyze text", "sentiment of this text", "summarize this transcript", "summarize a document", "topic detection on text", "intent recognition on text", "analyze a support ticket", or "analyze a chat log". One REST call, POST /v1/read, with four features: summarize, sentiment, topics, intents. Covers the two required query parameters people miss, the text-versus-url body, the English-only limit, and why entity detection is not here. Routes to audio-intelligence for audio input and to the api, docs, recipes, starters, and per-language SDK skills.
The verbatim description from this skill’s front matter — the string an agent matches on to decide whether to load it.
main, last pushed 20 September 2026.SKILL.md, not by matching a directory convention. One layout observed: skills/*/SKILL.md.h1 and no skipped levels:.claude-plugin/marketplace.json by Deepgram Developer Relations, declaring 7 plugins. It is read for editorial metadata only — never as the skill index, which is always the repository tree.v1“ section)/deepgram/skills.md.md