# **POST** /api/speak/prosody-meta/{ :id } > An API for extracting start/stop timestamps of each word from a synthesized speech which is generated by [POST /api/speak](reference/post_api_speak.md#request) , as well as other data of it. ```{caution} This API is not available to all customers. Please [contact our sales team](https://typecast.ai/contact) for eligibility details. ``` ## Request ### Headers * [Required headers](reference/request.md#headers) ### Parameters #### Path parameters * {:id}: ID of a speak that the word timestamps are extracted from. Refer to [response](reference/post_api_speak.md#response) of `POST /api/speak`. ### Body as JSON Object | Key | Type | Required | Description | |-----|------|----------|-------------| | **`language`** | string | Yes | The language of the give speak as the following format: (English: en-us , Korean: ko-kr). | | **`version`** | enum(string) | No | The default value is `v1`. The value should be either `v2` or `v1`. `v1` returns results based on normalized text, while `v2` returns results based on the user's original input. |
Example with cURL ```bash curl --request POST \ --url https://typecast.ai/api/speak/prosody-meta/{your_speak_id} \ --header "Content-Type: application/json" \ --header "Authorization: Bearer $API_TOKEN" \ --data '{"language": "ko-kr", "version": "v2"}' ```
## Response ### Status Code | Status Code | Description | |-------------|-------------| | 401 | [Authorization Error](reference/error.md#error-codes) | | 403 | [Forbidden Error](reference/error.md#error-codes) | | 200 | JSON object containing the `result`. | ### `result` consists of the following | Key | Description | |-----|-------------| | __`_id`__ | ID of the given speak. | | __`prosody_meta`__ | Prosody Metadata. Refer to the below for the detail with an example. | | __`actor_id`__ | ID of the requested actor. | | __`uid`__ | ID of user. | | __`query`__ | The body of the request to create the given speak. | | __`status`__ | The result status of the given speak. | | __`task_id`__ | The internal task ID. | | __`speak_url`__ | Deprecated. | | __`audio`__ | The metadata of the created speech audio file. | | __`audio_path`__ | The path of the audio file. | | __`quality`__ | Used internally. | | __`sentence_task_ids`__ | Used internally. | | __`callback`__ | Used internally. | | __`download`__ | Used internally. | | __`text_count`__ | length of the `text` that you requeste. | | __`duration`__ | how much time the speak took (sec). | | __`is_generated_by_api`__ | True for the api user. | | __`seed`__ | Used internally. | ### `prosody_meta` consists of the following | Key | Description | |-----|-------------| | __`phoneme_seq`__ | List of word in the text, which is used to synthesize the speak. | | __`phoneme_location`__ | List of start/stop time location of the words in __`phoneme_seq`__. | | __`phoneme_time`__ | List of start/stop time (second) of the words in __`phoneme_seq`__. | | __`features`__ | The intonation data. | | __`request_version`__ | The version value used in the version parameter of the request. Returns null if the value is `v1` |
Prosody-Meta Example ```json { "result": { ... "prosody_meta": { "phoneme_seq": [ "thank", "you" ], "phoneme_time": [ [ 0.2230625, 0.48675 ], [ 0.567875, 0.709875 ] ], } } } ```
## Example usage to extract timestamp of each word Here is a sample script to get the timestamp with the above Prosody-Meta Example response
Prosody-Meta Example ```json response = requests.post( f"{prosody_meta_base_url}/{speak_id}", headers=my_authorized_header, json={"language": "ko-KR", "version": "v2"} ) prosody_meta = response.json()['result']['prosody_meta'] prosody_seq = prosody_meta['phoneme_seq'] prosody_time = prosody_meta['phoneme_time'] for word, (start, end) in zip(prosody_seq, prosody_time): print(word, start, end) # > thank 0.2230625 0.48675 # > you 0.567875 0.709875 ```