Format transcript
Transform a raw transcript into a structured document format such as meeting minutes, sales summaries, action items, subtitles, and more.
This endpoint requires authentication. Include your API key in the Authorization header.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
model | valsea-format | Yes | Model name. Always valsea-format. |
transcript | string | Yes | The transcript to format. |
semantic_tags | array | No | Optional context — local expressions and meanings to guide formatting. Default: []. |
semantic_tags[].tag | string | No | Semantic tag category (e.g. price_objection). |
semantic_tags[].phrase | string | No | The local phrase the tag applies to. |
semantic_tags[].meaning | string | No | Plain-English meaning of the phrase, used as context. |
output_type | meeting_minutes | sales_summary | service_log | subtitles | Yes | The desired output document format. |
stream | boolean | No | Enable streaming response. |
Code Examples
curl -X POST https://api.valsea.ai/v1/formatting \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "valsea-format",
"transcript": "Your transcript text here...",
"output_type": "meeting_minutes"
}'
Response
The response shape depends on the requested output_type.
meeting_minutes
| Field | Type | Description |
|---|---|---|
type | string | Always meeting_minutes. |
summary | string | Brief 1-2 sentence overview of the meeting. |
agenda_items | array of strings | Agenda topics covered. |
action_items | array of { description, owner?, deadline? } | Action items, with optional owner and deadline. |
decisions | array of strings | Decisions made during the meeting. |
key_discussions | array of strings | Key discussion points. |
notes | string | Additional free-form notes. |
generated_at | string | ISO timestamp. |
sales_summary
| Field | Type | Description |
|---|---|---|
type | string | Always sales_summary. |
customer_sentiment | string | positive | mixed | negative |
sentiment_reasoning | string | Why that sentiment was assigned. |
objections | array of { phrase, interpretation, suggested_response } | Customer objections and how to respond. |
purchase_signals | array of { phrase, interpretation } | Detected buying signals. |
next_steps | array of strings | Recommended next steps. |
key_quotes | array of strings | Notable customer quotes. |
deal_stage | string | Discovery | Qualification | Proposal | Negotiation | Closing |
generated_at | string | ISO timestamp. |
service_log
| Field | Type | Description |
|---|---|---|
type | string | Always service_log. |
issue_category | string | Technical | Billing | Account | Product | Other |
issue_summary | string | Summary of the customer's issue. |
customer_frustration_level | string | low | medium | high |
resolution_status | string | Resolved | Pending | Escalated |
resolution_summary | string | How the issue was (or will be) resolved. |
root_cause | string | Identified root cause. |
follow_up_required | boolean | Whether follow-up is needed. |
follow_up_actions | array of strings | Recommended follow-up actions. |
semantic_flags | array of strings | Notable semantic flags from the conversation. |
generated_at | string | ISO timestamp. |
subtitles
| Field | Type | Description |
|---|---|---|
type | string | Always creator_subtitles. |
srt | string | SRT-formatted subtitle text. |
generated_at | string | ISO timestamp. |
Fallback: non-JSON AI output
If the AI's output isn't valid JSON, the endpoint still returns 200, with:
| Field | Type | Description |
|---|---|---|
type | string | Echoes the requested output_type. |
raw_content | string | The unparsed text returned by the AI. |
Errors
| Status | Description |
|---|---|
400 | Invalid request — missing transcript, invalid output_type, or unsupported model |
401 | Missing or invalid API key |
402 | Insufficient credits |
429 | Rate limit exceeded |
500 | Format service not configured, or empty AI response |
502 | Upstream AI service error |