=== URL: https://useapi.net/docs/start-here/setup-tempolor ===
Document URL: https://useapi.net/docs/start-here/setup-tempolor
---
layout: default
title: Setup TemPolor
parent: Start Here
nav_order: 260
---
#
Setup TemPolor
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
Approximately 5 minutes to complete setup steps.
---
[TemPolor](https://www.tempolor.com), an AI-powered, royalty-free **music generation** service that creates high-quality soundtracks from text prompts, custom lyrics, MIDI, and supports voice cloning. TemPolor offers extensive customization for instrumental tracks, including chords and BPM. Supports export in mp3, wav, and stems, and it can generate stems from users' audio files. Up to 10 tracks can be generated concurrently, with **unlimited** generations available on the [Ultra](https://www.tempolor.com/pricing) plan.
## Create TemPolor account
Create a [TemPolor](https://www.tempolor.com) account if you don't have one already.
## Locate your TemPolor `requestParams`
Open a Chromium-compatible browser (e.g. [Google Chrome](https://www.google.com/chrome/), [Microsoft Edge](https://www.microsoft.com/en-us/edge), or [Opera](https://www.opera.com/)) and navigate to your TemPolor account profile page [https://www.tempolor.com/account/profile](https://www.tempolor.com/account/profile) `1`.

Refresh the page `2`.
Once the page is fully loaded, ensure that you're logged in and current page is [https://www.tempolor.com/account/profile](https://www.tempolor.com/account/profile).
Open [Developer Tools](https://developer.chrome.com/docs/devtools) by right-clicking on the page and selecting "Inspect Element" or via [keyboard shortcuts](https://developer.chrome.com/docs/devtools/shortcuts): Mac `Command+Option+I` or Windows `F12` or `Control+Shift+I`.
Select Developer Tools » Network `3`:
* Make sure that `All` or `Fetch/XHR` is selected `4`.
* Type `/getWebSelfUserInfo` in the filter box `5` and hit Enter.
* You should see a single HTTP call entry as shown below `6` and click on that entry.
* Select the "Payload" tab `7`.
* Locate and select the "Request Payload" header `8`.
* Right-click on the `requestParams` and copy its content `9`.
This is your `requestParams`.
As an example above, the requestParams (JSON)
```json
{
"requestParams": {
"sv": "alpha/beta/release",
"ver_code": 20000,
"lang": "french",
"la": "fr-FR",
"di": "e23c9f7db8ced478b8574923817c2b6a",
"pf": "100",
"mi": "Windows",
"biz": 378,
"utdid": "e23c9f7db8ced478b8574923817c2b6a",
"ts": 1849982225671,
"service_ticket": "hUUCp7MeIAXpXKo9AOP5zPlJLqVZh81C2MWlZdTuqoGbNqzlgQNjBwtxdYnJPRA52Wn=",
"ucid": "100349856",
"user_id": "100349856",
"member_level": 0,
"is_visitor": 0,
"vip_type": 20,
"app_id": "material",
"app": "web",
"ve": "2.0.0",
"entry": "web_main",
"fr": "web",
"ip": "88.222.199.44",
"business_type": "material",
"la_multi": "fr",
"b_ts": "1849512371543",
"userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.39 (KHTML, like Gecko) Chrome/122.1.0.0 Safari/537.39 OPR/123.0.0.0",
"web_terminal": "web_pc"
}
}
```
TemPolor API v1
May 15, 2025
This is an [experimental](../../docs/legal) API for [TemPolor](https://www.tempolor.com), an AI-powered, royalty-free **music generation** service that creates high-quality soundtracks from text prompts, custom lyrics, MIDI, and supports voice cloning. TemPolor offers extensive customization for instrumental tracks, including chords and BPM. Supports export in mp3, wav, and stems, and it can generate stems from users' audio files. Up to 10 tracks can be generated concurrently, with **unlimited** generations available on the [Ultra](https://www.tempolor.com/pricing) plan.
Using the [Ultra $30/m](https://www.tempolor.com/pricing) TemPolor web subscription used by this API, you can generate an **unlimited** number of songs. Compare this to the official API pricing, which starts at [$300/m](https://platform.tempolor.com/pricing) for 10,000 songs per month.
[Setup TemPolor](../../docs/start-here/setup-tempolor)
[Postman collection](https://www.postman.com/useapinet/useapi-net/collection) (January 20, 2026)
[LLM-friendly API spec](https://useapi.net/assets/aibot/api-tempolor-v1.txt) Feed this to your LLM to build integrations
Articles:
* [TemPolor API Samples](/blog/250515)
Developer Community:
* DELETE accounts/user_id
parent: TemPolor API v1
nav_order: 400
---
## Delete TemPolor API account
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint deletes a TemPolor API account configuration.
[Setup TemPolor](../../docs/start-here/setup-tempolor)
{: .delete }
> **https://api.useapi.net/v1/tempolor/accounts/`user_id`**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Responses
{% tabs del_tempolor_accounts_user_id_response %}
{% tab del_tempolor_accounts_user_id_response 204 %}
204 No Content
Account configuration was successfully deleted.
{% endtab %}
{% tab del_tempolor_accounts_user_id_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab del_tempolor_accounts_user_id_response 404 %}
404 Not Found
Account configuration not found.
{% endtab %}
{% endtabs %}
##### Examples
{% tabs del_tempolor_accounts_user_id_example %}
{% tab del_tempolor_accounts_user_id_example Curl %}
``` bash
curl -X DELETE https://api.useapi.net/v1/tempolor/accounts/DELETE scheduler/job_id
parent: TemPolor API v1
nav_order: 2100
---
## Cancel a running job
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint cancels a running API job from being tracked by the scheduler. The job will still be executed by TemPolor, but the API will no longer track its progress.
{: .delete }
> **https://api.useapi.net/v1/tempolor/scheduler/job_id**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Path Parameters
- `job_id` is **required**. The job to cancel, as returned from [POST music/song](../api-tempolor-v1/post-tempolor-music-song), [POST music/instrumental](../api-tempolor-v1/post-tempolor-music-instrumental), or [GET scheduler](../api-tempolor-v1/get-tempolor-scheduler).
##### Responses
{% tabs del_TemPolor_scheduler_job_id_response %}
{% tab del_TemPolor_scheduler_job_id_response 204 %}
204 No Content
Job was successfully cancelled.
{% endtab %}
{% tab del_TemPolor_scheduler_job_id_response 400 %}
400 Bad Request
The job_id format is invalid.
```json
{
"error": "job_id has incorrect format",
"code": 400
}
```
{% endtab %}
{% tab del_TemPolor_scheduler_job_id_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab del_TemPolor_scheduler_job_id_response 404 %}
404 Not Found
The specified job was not found or could not be cancelled.
```json
{
"error": "Unable to locate running job_id",
"code": 404
}
```
{% endtab %}
{% endtabs %}
##### Examples
{% tabs del_TemPolor_scheduler_job_id_example %}
{% tab del_TemPolor_scheduler_job_id_example Curl %}
``` bash
curl -X DELETE "https://api.useapi.net/v1/tempolor/scheduler/DELETE music/cloned-voices
parent: TemPolor API v1
nav_order: 1900
---
## Delete a cloned voice
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint deletes a previously created cloned voice.
{: .delete }
> **https://api.useapi.net/v1/tempolor/music/cloned-voices/`clonedVoiceItemId`**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Path Parameters
- `clonedVoiceItemId` is **required**. The cloned voice ID returned from a previous [POST music/cloned-voices](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-cloned-voices) request.
##### Responses
{% tabs delete_tempolor_music_cloned_voices_clonedVoiceItemId_response %}
{% tab delete_tempolor_music_cloned_voices_clonedVoiceItemId_response 200 %}
200 OK
```json
{
"result": true
}
```
{% endtab %}
{% tab delete_tempolor_music_cloned_voices_clonedVoiceItemId_response 400 %}
400 Bad Request
```json
{
"error": "clonedVoiceItemId has incorrect format",
"code": 400
}
```
{% endtab %}
{% tab delete_tempolor_music_cloned_voices_clonedVoiceItemId_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab delete_tempolor_music_cloned_voices_clonedVoiceItemId_response 404 %}
404 Not Found
```json
{
"error": "No record found for user:12345-tempolor:user_id-voice:abcdef123456789",
"code": 404
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
result: boolean
error: string
code: number
}
```
##### Examples
{% tabs delete_tempolor_music_cloned_voices_clonedVoiceItemId_example %}
{% tab delete_tempolor_music_cloned_voices_clonedVoiceItemId_example Curl %}
``` bash
curl -X DELETE -H "Authorization: Bearer …" \
https://api.useapi.net/v1/tempolor/music/cloned-voices/user:12345-tempolor:user_id-voice:abcdef123456789
```
{% endtab %}
{% tab delete_tempolor_music_cloned_voices_clonedVoiceItemId_example JavaScript %}
``` javascript
const clonedVoiceItemId = "user:12345-tempolor:user_id-voice:abcdef123456789";
const token = "API token";
const apiUrl = `https://api.useapi.net/v1/tempolor/music/cloned-voices/${clonedVoiceItemId}`;
const response = await fetch(apiUrl, {
method: "DELETE",
headers: {
"Authorization": `Bearer ${token}`
}
});
const result = await response.json();
console.log("Delete result:", result.result);
```
{% endtab %}
{% tab delete_tempolor_music_cloned_voices_clonedVoiceItemId_example Python %}
``` python
import requests
cloned_voice_item_id = "user:12345-tempolor:user_id-voice:abcdef123456789"
token = "API token"
apiUrl = f"https://api.useapi.net/v1/tempolor/music/cloned-voices/{cloned_voice_item_id}"
headers = {
"Authorization": f"Bearer {token}"
}
response = requests.delete(apiUrl, headers=headers)
result = response.json()
print(f"Delete result: {result.get('result')}")
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-tempolor-v1/delete-tempolor-music-job_id ===
Document URL: https://useapi.net/docs/api-tempolor-v1/delete-tempolor-music-job_id
---
layout: default
title: DELETE music/job_id
parent: TemPolor API v1
nav_order: 1100
---
## Delete a music generation
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint deletes a previously generated music item.
{: .delete }
> **https://api.useapi.net/v1/tempolor/music/`job_id`**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Path Parameters
- `job_id` is **required**. The job returned from a previous [POST music/song](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-song) or [POST music/instrumental](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-instrumental) request.
##### Responses
{% tabs delete_tempolor_music_job_id_response %}
{% tab delete_tempolor_music_job_id_response 200 %}
200 OK
```json
{
"result": true
}
```
{% endtab %}
{% tab delete_tempolor_music_job_id_response 400 %}
400 Bad Request
```json
{
"error": "job_id has incorrect format",
"code": 400
}
```
{% endtab %}
{% tab delete_tempolor_music_job_id_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab delete_tempolor_music_job_id_response 404 %}
404 Not Found
```json
{
"error": "No record found for user:12345-tempolor:user_id-job:abcdef123456789",
"code": 404
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
result: boolean
error: string
code: number
}
```
##### Examples
{% tabs delete_tempolor_music_job_id_example %}
{% tab delete_tempolor_music_job_id_example Curl %}
``` bash
curl -X DELETE -H "Authorization: Bearer …" \
https://api.useapi.net/v1/tempolor/music/user:12345-tempolor:user_id-job:abcdef123456789
```
{% endtab %}
{% tab delete_tempolor_music_job_id_example JavaScript %}
``` javascript
const job_id = "user:12345-tempolor:user_id-job:abcdef123456789";
const token = "API token";
const apiUrl = `https://api.useapi.net/v1/tempolor/music/${job_id}`;
const response = await fetch(apiUrl, {
method: "DELETE",
headers: {
"Authorization": `Bearer ${token}`
}
});
const result = await response.json();
console.log("Delete result:", result.result);
```
{% endtab %}
{% tab delete_tempolor_music_job_id_example Python %}
``` python
import requests
job_id = "user:12345-tempolor:user_id-job:abcdef123456789"
token = "API token"
apiUrl = f"https://api.useapi.net/v1/tempolor/music/{job_id}"
headers = {
"Authorization": f"Bearer {token}"
}
response = requests.delete(apiUrl, headers=headers)
result = response.json()
print(f"Delete result: {result.get('result')}")
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-tempolor-v1/delete-tempolor-music-midi-midiItemId ===
Document URL: https://useapi.net/docs/api-tempolor-v1/delete-tempolor-music-midi-midiItemId
---
layout: default
title: DELETE music/midi
parent: TemPolor API v1
nav_order: 1600
---
## Delete a MIDI file
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint deletes a previously uploaded MIDI file.
{: .delete }
> **https://api.useapi.net/v1/tempolor/music/midi/`midiItemId`**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Path Parameters
- `midiItemId` is **required**. The MIDI file ID returned from a previous [POST music/midi](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-midi) request.
##### Responses
{% tabs delete_tempolor_music_midi_midiItemId_response %}
{% tab delete_tempolor_music_midi_midiItemId_response 200 %}
200 OK
```json
{
"result": true
}
```
{% endtab %}
{% tab delete_tempolor_music_midi_midiItemId_response 400 %}
400 Bad Request
```json
{
"error": "midiItemId has incorrect format",
"code": 400
}
```
{% endtab %}
{% tab delete_tempolor_music_midi_midiItemId_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab delete_tempolor_music_midi_midiItemId_response 404 %}
404 Not Found
```json
{
"error": "No record found for user:12345-tempolor:user_id-midi:abcdef123456789",
"code": 404
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
result: boolean
error: string
code: number
}
```
##### Examples
{% tabs delete_tempolor_music_midi_midiItemId_example %}
{% tab delete_tempolor_music_midi_midiItemId_example Curl %}
``` bash
curl -X DELETE -H "Authorization: Bearer …" \
https://api.useapi.net/v1/tempolor/music/midi/user:12345-tempolor:user_id-midi:abcdef123456789
```
{% endtab %}
{% tab delete_tempolor_music_midi_midiItemId_example JavaScript %}
``` javascript
const midiItemId = "user:12345-tempolor:user_id-midi:abcdef123456789";
const token = "API token";
const apiUrl = `https://api.useapi.net/v1/tempolor/music/midi/${midiItemId}`;
const response = await fetch(apiUrl, {
method: "DELETE",
headers: {
"Authorization": `Bearer ${token}`
}
});
const result = await response.json();
console.log("Delete result:", result.result);
```
{% endtab %}
{% tab delete_tempolor_music_midi_midiItemId_example Python %}
``` python
import requests
midi_item_id = "user:12345-tempolor:user_id-midi:abcdef123456789"
token = "API token"
apiUrl = f"https://api.useapi.net/v1/tempolor/music/midi/{midi_item_id}"
headers = {
"Authorization": f"Bearer {token}"
}
response = requests.delete(apiUrl, headers=headers)
result = response.json()
print(f"Delete result: {result.get('result')}")
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-tempolor-v1/get-tempolor-accounts-user_id ===
Document URL: https://useapi.net/docs/api-tempolor-v1/get-tempolor-accounts-user_id
---
layout: default
title: GET accounts/user_id
parent: TemPolor API v1
nav_order: 300
---
## Retrieve TemPolor API account configuration for `user_id`
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint retrieves the details of a specific TemPolor account.
[Setup TemPolor](../../docs/start-here/setup-tempolor)
{: .get }
> **https://api.useapi.net/v1/tempolor/accounts/`user_id`**
The `user_id` value should correspond to an account configured previously via a [POST accounts](post-tempolor-accounts) request.
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Responses
{% tabs get_tempolor_accounts_user_id_response %}
{% tab get_tempolor_accounts_user_id_response 200 %}
200 OK
```json
{
"user_id": "user_id1",
"updated": 1715791234567,
"updatedUTC": "2025-05-15T14:30:34.567Z",
"maxJobs": 10,
"requestParams": {}
}
```
{% endtab %}
{% tab get_tempolor_accounts_user_id_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab get_tempolor_accounts_user_id_response 404 %}
404 Not Found
Configuration not found. To create configuration use [POST accounts](https://useapi.net/docs/api-tempolor-v1/post-tempolor-accounts).
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript
user_id: string
updated: number // timestamp in milliseconds
updatedUTC: string // ISO date string
maxJobs: number
requestParams: {}
}
```
##### Examples
{% tabs get_tempolor_accounts_user_id_example %}
{% tab get_tempolor_accounts_user_id_example Curl %}
``` bash
curl https://api.useapi.net/v1/tempolor/accounts/GET accounts
parent: TemPolor API v1
nav_order: 200
---
## Get List of Accounts
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint retrieves the complete list of configured API accounts for TemPolor.
[Setup TemPolor](../../docs/start-here/setup-tempolor)
{: .get }
> **https://api.useapi.net/v1/tempolor/accounts**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Responses
{% tabs get_tempolor_accounts_response %}
{% tab get_tempolor_accounts_response 200 %}
200 OK
```json
{
"user_id1": {
"user_id": "user_id1",
"updated": 1715791234567,
"updatedUTC": "2025-05-15T14:30:34.567Z",
"maxJobs": 10,
"requestParams": {}
},
"user_id2": {
"user_id": "user_id2",
"updated": 1715791234567,
"updatedUTC": "2025-05-15T14:30:34.567Z",
"maxJobs": 20,
"requestParams": {}
}
}
```
{% endtab %}
{% tab get_tempolor_accounts_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab get_tempolor_accounts_response 404 %}
404 Not Found
Returned when no accounts are configured.
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript
[user_id: string]: {
user_id: string
updated: number // timestamp in milliseconds
updatedUTC: string // ISO date string
maxJobs: number
requestParams: {}
}
}
```
##### Examples
{% tabs get_tempolor_accounts_example %}
{% tab get_tempolor_accounts_example Curl %}
``` bash
curl -H "Accept: application/json" \
-H "Authorization: Bearer …" \
-X GET https://api.useapi.net/v1/tempolor/accounts
```
{% endtab %}
{% tab get_tempolor_accounts_example JavaScript %}
``` javascript
const apiUrl = `https://api.useapi.net/v1/tempolor/accounts`;
const api_token = "API token";
const data = {
method: 'GET',
headers: {
'Authorization': `Bearer ${api_token}`,
'Content-Type': 'application/json' }
};
const response = await fetch(apiUrl, data);
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab get_tempolor_accounts_example Python %}
``` python
import requests
apiUrl = f"https://api.useapi.net/v1/tempolor/accounts"
api_token = "API token"
headers = {
"Content-Type": "application/json",
"Authorization" : f"Bearer {api_token}"
}
response = requests.get(apiUrl, headers=headers)
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-tempolor-v1/get-tempolor-music-artist-voices ===
Document URL: https://useapi.net/docs/api-tempolor-v1/get-tempolor-music-artist-voices
---
layout: default
title: GET music/artist-voices
parent: TemPolor API v1
nav_order: 1300
---
## List artist voices
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint retrieves a list of predefined artist voices that you can use for music generation without uploading your own voice samples. These artist voices can be used with [POST music/song](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-song) by providing the `artistVoiceItemId` parameter.
{: .get }
> **https://api.useapi.net/v1/tempolor/music/artist-voices/?...**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Query Parameters
- `user_id` is optional when only one [account](https://useapi.net/docs/api-tempolor-v1/get-tempolor-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**.
- `cursor` is optional. Pagination cursor for fetching additional pages of results.
##### Responses
{% tabs get_tempolor_music_artist_voices_response %}
{% tab get_tempolor_music_artist_voices_response 200 %}
200 OK
```json
{
"records": [
{
"ucid": "9999999",
"bizType": "ai_voice_cloned",
"itemId": "voice_12345",
"name": "Deep Male Voice",
"resourceUrl": "https://example.com/vocals/deep-male-sample.mp3",
"coverUrl": "https://example.com/voice-covers/deep-male.jpg",
"vocalUrl": "https://example.com/vocals/deep-male-sample.mp3",
"weight": 100,
"isAddRel": false,
"relSource": "",
"labels": ["male", "deep", "dramatic"]
},
{
"ucid": "9999999",
"bizType": "ai_voice_cloned",
"itemId": "voice_67890",
"name": "Soprano Female Voice",
"resourceUrl": "https://example.com/vocals/soprano-female-sample.mp3",
"coverUrl": "https://example.com/voice-covers/soprano-female.jpg",
"vocalUrl": "https://example.com/vocals/soprano-female-sample.mp3",
"weight": 90,
"isAddRel": false,
"relSource": "",
"labels": ["female", "soprano", "clear"]
}
],
"hasNext": false,
"cursor": "",
"sysTime": 1716565425000
}
```
{% endtab %}
{% tab get_tempolor_music_artist_voices_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
records: {
ucid: string
bizType: string
itemId: string
name: string
resourceUrl: string
coverUrl: string
vocalUrl: string
weight: number
isAddRel: boolean
relSource: string
labels: string[]
}[]
hasNext: boolean
cursor: string
sysTime: number
error: string
code: number
}
```
##### Examples
{% tabs get_tempolor_music_artist_voices_example %}
{% tab get_tempolor_music_artist_voices_example Curl %}
``` bash
# List all artist voices
curl -H "Authorization: Bearer …" \
https://api.useapi.net/v1/tempolor/music/artist-voices/?user_id=user_id
# Paginate through results using cursor
curl -H "Authorization: Bearer …" \
"https://api.useapi.net/v1/tempolor/music/artist-voices/?user_id=user_id&cursor=next_page_cursor_token"
```
{% endtab %}
{% tab get_tempolor_music_artist_voices_example JavaScript %}
``` javascript
const token = "API token";
const user_id = "user_id";
const cursor = ""; // for pagination
// Build the URL with query parameters
let apiUrl = `https://api.useapi.net/v1/tempolor/music/artist-voices/?user_id=${user_id}`;
if (cursor) apiUrl += `&cursor=${cursor}`;
const response = await fetch(apiUrl, {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
}
});
const result = await response.json();
console.log(`Found ${result.records?.length || 0} artist voices`);
// Example of fetching all pages
async function fetchAllArtistVoices(userId) {
let allRecords = [];
let nextCursor = "";
let hasMore = true;
while (hasMore) {
let url = `https://api.useapi.net/v1/tempolor/music/artist-voices/?user_id=${userId}`;
if (nextCursor) url += `&cursor=${nextCursor}`;
const response = await fetch(url, {
method: "GET",
headers: { "Authorization": `Bearer ${token}` }
});
const data = await response.json();
if (data.records && data.records.length > 0) {
allRecords = [...allRecords, ...data.records];
}
hasMore = data.hasNext;
nextCursor = data.cursor;
// Break if no more pages or no cursor
if (!hasMore || !nextCursor) break;
}
return allRecords;
}
```
{% endtab %}
{% tab get_tempolor_music_artist_voices_example Python %}
``` python
import requests
token = "API token"
user_id = "user_id"
cursor = "" # for pagination
# Build the URL with query parameters
apiUrl = f"https://api.useapi.net/v1/tempolor/music/artist-voices/?user_id={user_id}"
if cursor:
apiUrl += f"&cursor={cursor}"
headers = {
"Authorization": f"Bearer {token}"
}
response = requests.get(apiUrl, headers=headers)
result = response.json()
print(f"Found {len(result.get('records', []))} artist voices")
# Example of fetching all pages
def fetch_all_artist_voices(user_id):
all_records = []
next_cursor = ""
has_more = True
while has_more:
url = f"https://api.useapi.net/v1/tempolor/music/artist-voices/?user_id={user_id}"
if next_cursor:
url += f"&cursor={next_cursor}"
response = requests.get(url, headers=headers)
data = response.json()
if data.get('records'):
all_records.extend(data.get('records'))
has_more = data.get('hasNext', False)
next_cursor = data.get('cursor', "")
# Break if no more pages or no cursor
if not has_more or not next_cursor:
break
return all_records
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-tempolor-v1/get-tempolor-music-cloned-voices ===
Document URL: https://useapi.net/docs/api-tempolor-v1/get-tempolor-music-cloned-voices
---
layout: default
title: GET music/cloned-voices
parent: TemPolor API v1
nav_order: 1800
---
## List cloned voices
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint retrieves a list of cloned voices that you've previously created using [POST music/cloned-voices](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-cloned-voices). These cloned voices can be used in music generation with [POST music/song](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-song).
{: .get }
> **https://api.useapi.net/v1/tempolor/music/cloned-voices/?...**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Query Parameters
- `user_id` is optional when only one [account](https://useapi.net/docs/api-tempolor-v1/get-tempolor-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**.
- `cursor` is optional. Pagination cursor for fetching additional pages of results.
##### Responses
{% tabs get_tempolor_music_cloned_voices_response %}
{% tab get_tempolor_music_cloned_voices_response 200 %}
200 OK
```json
{
"records": [
{
"isAddRel": false,
"relSource": "",
"ucid": "user_id",
"bizType": "user",
"operatorType": "gen",
"itemId": "abcdef123456789",
"rootItemId": "abcdef123456789",
"parentItemId": "abcdef123456789",
"name": "My Custom Voice",
"resourceUrl": "voice_cloned/audio/abcdef123456789.mp3",
"coverUrl": "",
"readStatus": 0,
"status": 30,
"vocalUrl": "https://example.com/cloned-voice/abcdef123456789.mp3",
"createTime": 1716565425000,
"updateTime": 1716565700000,
"labels": [],
"clonedVoiceItemId": "user:12345-tempolor:user_id-voice:abcdef123456789"
},
{
"isAddRel": false,
"relSource": "",
"ucid": "user_id",
"bizType": "user",
"operatorType": "gen",
"itemId": "fedcba987654321",
"rootItemId": "fedcba987654321",
"parentItemId": "fedcba987654321",
"name": "Second Voice Sample",
"resourceUrl": "voice_cloned/audio/fedcba987654321.mp3",
"coverUrl": "",
"readStatus": 0,
"status": 30,
"vocalUrl": "https://example.com/cloned-voice/fedcba987654321.mp3",
"createTime": 1716475425000,
"updateTime": 1716475700000,
"labels": [],
"clonedVoiceItemId": "user:12345-tempolor:user_id-voice:fedcba987654321"
}
],
"hasNext": false,
"cursor": ""
}
```
{% endtab %}
{% tab get_tempolor_music_cloned_voices_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
records: {
isAddRel: boolean
relSource: string
ucid: string
bizType: string
operatorType: string
itemId: string
rootItemId: string
parentItemId: string
name: string
resourceUrl: string
coverUrl: string
readStatus: number
status: number
vocalUrl: string
createTime: number
updateTime: number
labels: string[]
clonedVoiceItemId: string
}[]
hasNext: boolean
cursor: string
error: string
code: number
}
```
##### Examples
{% tabs get_tempolor_music_cloned_voices_example %}
{% tab get_tempolor_music_cloned_voices_example Curl %}
``` bash
# List all cloned voices
curl -H "Authorization: Bearer …" \
https://api.useapi.net/v1/tempolor/music/cloned-voices?user_id=user_id
# Paginate through results using cursor
curl -H "Authorization: Bearer …" \
"https://api.useapi.net/v1/tempolor/music/cloned-voices?user_id=user_id&cursor=next_page_cursor_token"
```
{% endtab %}
{% tab get_tempolor_music_cloned_voices_example JavaScript %}
``` javascript
const token = "API token";
const user_id = "user_id";
const cursor = ""; // for pagination
// Build the URL with query parameters
let apiUrl = `https://api.useapi.net/v1/tempolor/music/cloned-voices?user_id=${user_id}`;
if (cursor) apiUrl += `&cursor=${cursor}`;
const response = await fetch(apiUrl, {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
}
});
const result = await response.json();
console.log(`Found ${result.records?.length || 0} cloned voices`);
// Example of fetching all pages
async function fetchAllClonedVoices(userId) {
let allRecords = [];
let nextCursor = "";
let hasMore = true;
while (hasMore) {
let url = `https://api.useapi.net/v1/tempolor/music/cloned-voices?user_id=${userId}`;
if (nextCursor) url += `&cursor=${nextCursor}`;
const response = await fetch(url, {
method: "GET",
headers: { "Authorization": `Bearer ${token}` }
});
const data = await response.json();
if (data.records && data.records.length > 0) {
allRecords = [...allRecords, ...data.records];
}
hasMore = data.hasNext;
nextCursor = data.cursor;
// Break if no more pages or no cursor
if (!hasMore || !nextCursor) break;
}
return allRecords;
}
```
{% endtab %}
{% tab get_tempolor_music_cloned_voices_example Python %}
``` python
import requests
token = "API token"
user_id = "user_id"
cursor = "" # for pagination
# Build the URL with query parameters
apiUrl = f"https://api.useapi.net/v1/tempolor/music/cloned-voices?user_id={user_id}"
if cursor:
apiUrl += f"&cursor={cursor}"
headers = {
"Authorization": f"Bearer {token}"
}
response = requests.get(apiUrl, headers=headers)
result = response.json()
print(f"Found {len(result.get('records', []))} cloned voices")
# Example of fetching all pages
def fetch_all_cloned_voices(user_id):
all_records = []
next_cursor = ""
has_more = True
while has_more:
url = f"https://api.useapi.net/v1/tempolor/music/cloned-voices?user_id={user_id}"
if next_cursor:
url += f"&cursor={next_cursor}"
response = requests.get(url, headers=headers)
data = response.json()
if data.get('records'):
all_records.extend(data.get('records'))
has_more = data.get('hasNext', False)
next_cursor = data.get('cursor', "")
# Break if no more pages or no cursor
if not has_more or not next_cursor:
break
return all_records
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-tempolor-v1/get-tempolor-music-download-job_id ===
Document URL: https://useapi.net/docs/api-tempolor-v1/get-tempolor-music-download-job_id
---
layout: default
title: GET music/download/job_id
parent: TemPolor API v1
nav_order: 1200
---
## Download generated music
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint retrieves a download URL for a completed music generation job. The `job_id` must be from a successfully completed generation job that can be verified with [GET music/`job_id`](https://useapi.net/docs/api-tempolor-v1/get-tempolor-music-job_id).
{: .get }
> **https://api.useapi.net/v1/tempolor/music/download/`job_id`**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Path Parameters
- `job_id` is **required**. The job returned from a previous [POST music/song](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-song) or [POST music/instrumental](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-instrumental) request.
##### Query Parameters
- `file_format` is optional. Specifies the format of the generated music to download.
Supported values:
* `mp3` - MP3 format (default)
* `wav` - WAV format (higher quality)
* `stems` - ZIP archive containing separated stems (vocals, instruments, etc.)
##### Responses
{% tabs get_tempolor_music_download_job_id_response %}
{% tab get_tempolor_music_download_job_id_response 200 %}
200 OK
```json
{
"url": "https://ugc-cdn.api.instabeat.ai/ai_material/ai_material/mp3/abcdef123456789.mp3?auth_key=1747536678-0-0-9c67b3d5f8a2c41e0d7f6eab3f82fb45",
"remainSeconds": 0
}
```
The download URL expires after `remainSeconds` seconds.
{% endtab %}
{% tab get_tempolor_music_download_job_id_response 400 %}
400 Bad Request
```json
{
"error": "Generation is not completed yet (0)",
"code": 400
}
```
{% endtab %}
{% tab get_tempolor_music_download_job_id_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab get_tempolor_music_download_job_id_response 404 %}
404 Not Found
```json
{
"error": "No record found for user:12345-tempolor:user_id-job:abcdef123456789",
"code": 404
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
url: string
remainSeconds: number
error: string
code: number
}
```
##### Examples
{% tabs get_tempolor_music_download_job_id_example %}
{% tab get_tempolor_music_download_job_id_example Curl %}
``` bash
# Download in MP3 format (default)
curl -H "Authorization: Bearer …" \
https://api.useapi.net/v1/tempolor/music/download/user:12345-tempolor:user_id-job:abcdef123456789
# Download in WAV format (higher quality)
curl -H "Authorization: Bearer …" \
"https://api.useapi.net/v1/tempolor/music/download/user:12345-tempolor:user_id-job:abcdef123456789?file_format=wav"
# Download stems (separated vocal, instruments, etc.)
curl -H "Authorization: Bearer …" \
"https://api.useapi.net/v1/tempolor/music/download/user:12345-tempolor:user_id-job:abcdef123456789?file_format=stems"
```
{% endtab %}
{% tab get_tempolor_music_download_job_id_example JavaScript %}
``` javascript
const job_id = "user:12345-tempolor:user_id-job:abcdef123456789";
const token = "API token";
const file_format = "mp3"; // or "wav" or "stems"
const apiUrl = `https://api.useapi.net/v1/tempolor/music/download/${job_id}?file_format=${file_format}`;
const response = await fetch(apiUrl, {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
}
});
const result = await response.json();
console.log("Download URL:", result.url);
// Example of downloading the file
async function downloadFile(downloadUrl, fileName) {
const fileResponse = await fetch(downloadUrl);
const blob = await fileResponse.blob();
// For browser environments
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = fileName;
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
// For Node.js environments
// const fs = require('fs');
// const buffer = Buffer.from(await blob.arrayBuffer());
// fs.writeFileSync(fileName, buffer);
}
// If the request was successful, download the file
if (result.url) {
const fileName = `tempolor-music-${Date.now()}.${file_format === 'stems' ? 'zip' : file_format}`;
await downloadFile(result.url, fileName);
}
```
{% endtab %}
{% tab get_tempolor_music_download_job_id_example Python %}
``` python
import requests
import os
job_id = "user:12345-tempolor:user_id-job:abcdef123456789"
token = "API token"
file_format = "mp3" # or "wav" or "stems"
apiUrl = f"https://api.useapi.net/v1/tempolor/music/download/{job_id}?file_format={file_format}"
headers = {
"Authorization": f"Bearer {token}"
}
response = requests.get(apiUrl, headers=headers)
result = response.json()
print("Download URL:", result.get("url"))
# Example of downloading the file
def download_file(download_url, file_name):
file_response = requests.get(download_url)
with open(file_name, 'wb') as f:
f.write(file_response.content)
print(f"File downloaded as {file_name}")
# If the request was successful, download the file
if result.get("url"):
if file_format == "stems":
file_name = f"tempolor-music-{job_id.split(':')[-1]}.zip"
else:
file_name = f"tempolor-music-{job_id.split(':')[-1]}.{file_format}"
download_file(result.get("url"), file_name)
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-tempolor-v1/get-tempolor-music-job_id ===
Document URL: https://useapi.net/docs/api-tempolor-v1/get-tempolor-music-job_id
---
layout: default
title: GET music/job_id
parent: TemPolor API v1
nav_order: 1000
---
## Check music generation status and results
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint checks the status of a previously submitted music generation job. The `job_id` is returned from [POST music/song](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-song) or [POST music/instrumental](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-instrumental).
{: .get }
> **https://api.useapi.net/v1/tempolor/music/`job_id`**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Path Parameters
- `job_id` is **required**. The job returned from a previous [POST music/song](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-song) or [POST music/instrumental](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-instrumental) request.
##### Status Values
The response includes a `status` field with the following possible values:
| status | status_name | status_final | Description |
|--------|-------------|--------------|------------------------------------------|
| 0 | GENERATING | False | The music is still being generated |
| 10 | FAILED | True | The music generation has failed |
| 30 | COMPLETED | True | The music has been successfully generated|
When the status is COMPLETED, you can download the music using the [GET music/download/`job_id`](https://useapi.net/docs/api-tempolor-v1/get-tempolor-music-download-job_id) endpoint.
##### Responses
{% tabs get_tempolor_music_job_id_response %}
{% tab get_tempolor_music_job_id_response 200 %}
200 OK
GET music/midi
parent: TemPolor API v1
nav_order: 1500
---
## List MIDI files
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint retrieves a list of MIDI files that you've previously uploaded using [POST music/midi](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-midi). These MIDI files can be used as templates for music generation with [POST music/song](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-song).
{: .get }
> **https://api.useapi.net/v1/tempolor/music/midi/?...**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Query Parameters
- `user_id` is optional when only one [account](https://useapi.net/docs/api-tempolor-v1/get-tempolor-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**.
- `cursor` is optional. Pagination cursor for fetching additional pages of results.
##### Responses
{% tabs get_tempolor_music_midi_response %}
{% tab get_tempolor_music_midi_response 200 %}
200 OK
```json
{
"records": [
{
"opType": "upload",
"ucid": "user_id",
"midiItemId": "user:12345-tempolor:user_id-midi:abcdef123456789",
"name": "Piano Composition",
"midiUrl": "https://ugc-cdn.api.instabeat.ai/midi/file/abcdef123456789.mid"
},
{
"opType": "upload",
"ucid": "user_id",
"midiItemId": "user:12345-tempolor:user_id-midi:fedcba987654321",
"name": "Guitar Progression",
"midiUrl": "https://ugc-cdn.api.instabeat.ai/midi/file/fedcba987654321.mid"
}
],
"hasNext": false,
"cursor": ""
}
```
{% endtab %}
{% tab get_tempolor_music_midi_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
records: {
opType: string
ucid: string
midiItemId: string
name: string
midiUrl: string
midiType?: string
midiValue?: string
}[]
hasNext: boolean
cursor: string
error: string
code: number
}
```
##### Examples
{% tabs get_tempolor_music_midi_example %}
{% tab get_tempolor_music_midi_example Curl %}
``` bash
# List all MIDI files
curl -H "Authorization: Bearer …" \
https://api.useapi.net/v1/tempolor/music/midi/?user_id=user_id
# Paginate through results using cursor
curl -H "Authorization: Bearer …" \
"https://api.useapi.net/v1/tempolor/music/midi/?user_id=user_id&cursor=next_page_cursor_token"
```
{% endtab %}
{% tab get_tempolor_music_midi_example JavaScript %}
``` javascript
const token = "API token";
const user_id = "user_id";
const cursor = ""; // for pagination
// Build the URL with query parameters
let apiUrl = `https://api.useapi.net/v1/tempolor/music/midi/?user_id=${user_id}`;
if (cursor) apiUrl += `&cursor=${cursor}`;
const response = await fetch(apiUrl, {
method: "GET",
headers: {
"Authorization": `Bearer ${token}`
}
});
const result = await response.json();
console.log(`Found ${result.records?.length || 0} MIDI files`);
// Example of fetching all pages
async function fetchAllMidiFiles(userId) {
let allRecords = [];
let nextCursor = "";
let hasMore = true;
while (hasMore) {
let url = `https://api.useapi.net/v1/tempolor/music/midi/?user_id=${userId}`;
if (nextCursor) url += `&cursor=${nextCursor}`;
const response = await fetch(url, {
method: "GET",
headers: { "Authorization": `Bearer ${token}` }
});
const data = await response.json();
if (data.records && data.records.length > 0) {
allRecords = [...allRecords, ...data.records];
}
hasMore = data.hasNext;
nextCursor = data.cursor;
// Break if no more pages or no cursor
if (!hasMore || !nextCursor) break;
}
return allRecords;
}
```
{% endtab %}
{% tab get_tempolor_music_midi_example Python %}
``` python
import requests
token = "API token"
user_id = "user_id"
cursor = "" # for pagination
# Build the URL with query parameters
apiUrl = f"https://api.useapi.net/v1/tempolor/music/midi/?user_id={user_id}"
if cursor:
apiUrl += f"&cursor={cursor}"
headers = {
"Authorization": f"Bearer {token}"
}
response = requests.get(apiUrl, headers=headers)
result = response.json()
print(f"Found {len(result.get('records', []))} MIDI files")
# Example of fetching all pages
def fetch_all_midi_files(user_id):
all_records = []
next_cursor = ""
has_more = True
while has_more:
url = f"https://api.useapi.net/v1/tempolor/music/midi/?user_id={user_id}"
if next_cursor:
url += f"&cursor={next_cursor}"
response = requests.get(url, headers=headers)
data = response.json()
if data.get('records'):
all_records.extend(data.get('records'))
has_more = data.get('hasNext', False)
next_cursor = data.get('cursor', "")
# Break if no more pages or no cursor
if not has_more or not next_cursor:
break
return all_records
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-tempolor-v1/get-tempolor-music ===
Document URL: https://useapi.net/docs/api-tempolor-v1/get-tempolor-music
---
layout: default
title: GET music
parent: TemPolor API v1
nav_order: 900
---
## List music generation jobs
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint retrieves a list of previously generated music items. You can filter the results by type and paginate through them using the cursor parameter.
{: .get }
> **https://api.useapi.net/v1/tempolor/music/?...**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Query Parameters
- `user_id` is optional when only one [account](https://useapi.net/docs/api-tempolor-v1/get-tempolor-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**.
- `type` is optional. Filter results by the type of music generation.
Supported values:
* `song` - Show music with vocals (default)
* `instrumental` - Show instrumental music only
- `cursor` is optional. Pagination cursor for fetching additional pages of results.
##### Responses
{% tabs get_tempolor_music_response %}
{% tab get_tempolor_music_response 200 %}
200 OK
GET scheduler/available
parent: TemPolor API v1
nav_order: 2000
---
## Get available capacity
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Get information about currently executing jobs and available capacity for all configured accounts.
{: .get }
> **https://api.useapi.net/v1/tempolor/scheduler/available**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Responses
{% tabs get_TemPolor_scheduler_available_response %}
{% tab get_TemPolor_scheduler_available_response 200 %}
200 OK
The response contains information about currently executing jobs and available capacity.
```json
{
"executing": [
{
"job_id": "user:12345-tempolor:12345-job:abcdef123456789",
"started": "2025-05-15T12:34:56.789Z",
"elapsed": "01:23",
"replyUrl": "https://example.com/callback",
"replyRef": "my-reference"
}
],
"available": [
{
"user_id": "12345",
"maxJobs": 10,
"executing": 1,
"available": 9
},
{
"user_id": "67890",
"maxJobs": 5,
"executing": 0,
"available": 5
}
]
}
```
{% endtab %}
{% tab get_TemPolor_scheduler_available_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{
executing: [ // Currently executing jobs
{
job_id: string
started: string // ISO timestamp when the job started
elapsed: string // Time elapsed since start in MM:SS format
replyUrl?: string // Optional callback URL if specified during job creation
replyRef?: string // Optional reference if specified during job creation
}
],
available: [ // Accounts with available capacity
{
user_id: string // Account identifier
maxJobs: number // Maximum concurrent jobs allowed for this account
executing: number // Number of currently executing jobs
available: number // Number of available job slots (maxJobs - executing)
}
]
}
```
##### Examples
{% tabs get_TemPolor_scheduler_available_example %}
{% tab get_TemPolor_scheduler_available_example Curl %}
``` bash
curl "https://api.useapi.net/v1/tempolor/scheduler/available" \
-H "Authorization: Bearer …"
```
{% endtab %}
{% tab get_TemPolor_scheduler_available_example JavaScript %}
``` javascript
const token = "API token";
const apiUrl = "https://api.useapi.net/v1/tempolor/scheduler/available";
const response = await fetch(apiUrl, {
headers: {
"Authorization": `Bearer ${token}`
}
});
const result = await response.json();
console.log("Scheduler info:", result);
// Find account with most available capacity
if (result.available && result.available.length > 0) {
const bestAccount = result.available[0]; // Sorted by availability
console.log(`Best account to use: ${bestAccount.user_id} (${bestAccount.available} slots available)`);
}
```
{% endtab %}
{% tab get_TemPolor_scheduler_available_example Python %}
``` python
import requests
token = "API token"
api_url = "https://api.useapi.net/v1/tempolor/scheduler/available"
headers = {
'Authorization': f'Bearer {token}'
}
response = requests.get(api_url, headers=headers)
result = response.json()
print("Scheduler info:", result)
# Find account with most available capacity
if result.get('available') and len(result['available']) > 0:
best_account = result['available'][0] # Sorted by availability
print(f"Best account to use: {best_account['user_id']} ({best_account['available']} slots available)")
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-tempolor-v1/get-tempolor-scheduler ===
Document URL: https://useapi.net/docs/api-tempolor-v1/get-tempolor-scheduler
---
layout: default
title: GET scheduler
parent: TemPolor API v1
nav_order: 1900
---
## List scheduled jobs
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Get a list of currently executing music generation jobs.
{: .get }
> **https://api.useapi.net/v1/tempolor/scheduler/**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Responses
{% tabs get_TemPolor_scheduler_response %}
{% tab get_TemPolor_scheduler_response 200 %}
200 OK
The response contains an array of currently executing music generation jobs.
```json
[
{
"job_id": "user:12345-tempolor:user_id-job:abcdef123456789",
"started": "2025-05-15T12:34:56.789Z",
"elapsed": "01:23",
"replyUrl": "https://example.com/callback",
"replyRef": "my-reference"
}
]
```
{% endtab %}
{% tab get_TemPolor_scheduler_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
[
{ // TypeScript representation of each job
job_id: string
started: string // ISO timestamp when the job started
elapsed: string // Time elapsed since start in MM:SS format
replyUrl?: string // Optional callback URL if specified during job creation
replyRef?: string // Optional reference if specified during job creation
}
]
```
##### Examples
{% tabs get_TemPolor_scheduler_example %}
{% tab get_TemPolor_scheduler_example Curl %}
``` bash
curl "https://api.useapi.net/v1/tempolor/scheduler/" \
-H "Authorization: Bearer …"
```
{% endtab %}
{% tab get_TemPolor_scheduler_example JavaScript %}
``` javascript
const token = "API token";
const apiUrl = "https://api.useapi.net/v1/tempolor/scheduler/";
const response = await fetch(apiUrl, {
headers: {
"Authorization": `Bearer ${token}`
}
});
const result = await response.json();
console.log("Current jobs:", result);
```
{% endtab %}
{% tab get_TemPolor_scheduler_example Python %}
``` python
import requests
token = "API token"
api_url = "https://api.useapi.net/v1/tempolor/scheduler/"
headers = {
'Authorization': f'Bearer {token}'
}
response = requests.get(api_url, headers=headers)
result = response.json()
print("Current jobs:", result)
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-tempolor-v1/post-tempolor-accounts ===
Document URL: https://useapi.net/docs/api-tempolor-v1/post-tempolor-accounts
---
layout: default
title: POST accounts
parent: TemPolor API v1
nav_order: 100
---
## Create or update TemPolor API account
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint configures a TemPolor API account with the provided credentials.
[Setup TemPolor](../../docs/start-here/setup-tempolor)
{: .post }
> **https://api.useapi.net/v1/tempolor/accounts**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Request Body
```json
{
"requestParams": {},
"maxJobs": 10
}
```
- `requestParams` is **required**, see [Setup TemPolor](../../docs/start-here/setup-tempolor) for details on how to obtain it.
- `maxJobs` is optional, the maximum number of concurrent jobs allowed for this account.
Default is 10.
##### Responses
{% tabs post_tempolor_accounts_response %}
{% tab post_tempolor_accounts_response 200 %}
200 OK
```json
{
"user_id": "123456789",
"updated": 1715791234567,
"updatedUTC": "2025-05-15T14:30:34.567Z",
"maxJobs": 10,
"requestParams": {}
}
```
{% endtab %}
{% tab post_tempolor_accounts_response 400 %}
400 Bad Request
```json
{
"error": "Parameter requestParams is required",
"code": 400
}
```
{% endtab %}
{% tab post_tempolor_accounts_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab post_tempolor_accounts_response 402 %}
402 Payment Required
```json
{
"error": "Subscription required",
"code": 402
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript
user_id: string
updated: number // timestamp in milliseconds
updatedUTC: string // ISO date string
maxJobs: number
requestParams: {}
}
```
##### Examples
{% tabs post_tempolor_accounts_example %}
{% tab post_tempolor_accounts_example Curl %}
``` bash
curl -X POST https://api.useapi.net/v1/tempolor/accounts \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer …" \
-d '{
"requestParams": {},
"maxJobs": 10
}'
```
{% endtab %}
{% tab post_tempolor_accounts_example JavaScript %}
``` javascript
const apiUrl = `https://api.useapi.net/v1/tempolor/accounts`;
const api_token = "API token";
const data = {
method: 'POST',
headers: {
'Authorization': `Bearer ${api_token}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
requestParams: {},
maxJobs: 10
})
};
const response = await fetch(apiUrl, data);
const result = await response.json();
console.log("response", {response, result});
```
{% endtab %}
{% tab post_tempolor_accounts_example Python %}
``` python
import requests
import json
apiUrl = "https://api.useapi.net/v1/tempolor/accounts"
api_token = "API token"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_token}"
}
payload = {
"requestParams": {},
"maxJobs": 10
}
response = requests.post(apiUrl, headers=headers, data=json.dumps(payload))
print(response, response.json())
```
{% endtab %}
{% endtabs %}
=== URL: https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-cloned-voices ===
Document URL: https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-cloned-voices
---
layout: default
title: POST music/cloned-voices
parent: TemPolor API v1
nav_order: 1700
---
## Upload voice sample for cloning
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint uploads an audio sample for voice cloning, which can then be used in the [POST music/song](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-song) endpoint to generate vocals with your cloned voice.
[POST raw content using Make.com and similar nocode tools.](../questions-and-answers.html#how-post-raw-content-to-runwaymlassets-and-minimaxfiles-using-makecom-and-similar-nocode-tools)
{: .post }
> **https://api.useapi.net/v1/tempolor/music/cloned-voices/?...**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: {audio content-type}
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
- `Content-Type` is **required**, select from the table below:
| Content-Type | File Extension |
| ------------ | -------------- |
| audio/mp4 | m4a |
| audio/x-m4a | m4a |
| audio/mpeg | mp3 |
| audio/wav | wav |
| audio/wave | wav |
| audio/flac | flac |
| audio/x-flac | flac |
##### Query Parameters
- `user_id` is optional when only one [account](https://useapi.net/docs/api-tempolor-v1/get-tempolor-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**.
- `name` is **required**. Specify a name for your cloned voice.
##### Responses
{% tabs post_tempolor_music_cloned_voices_response %}
{% tab post_tempolor_music_cloned_voices_response 200 %}
200 OK
The cloned voice is immediately available to use in [POST music/song](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-song) by providing the returned `clonedVoiceItemId`.
```json
{
"result": true,
"itemId": "abcdef123456789",
"clonedVoiceItemId": "user:12345-tempolor:user_id-voice:abcdef123456789"
}
```
{% endtab %}
{% tab post_tempolor_music_cloned_voices_response 202 %}
202 Accepted
The voice cloning process is still in progress. Check back later using [GET music/cloned-voices](https://useapi.net/docs/api-tempolor-v1/get-tempolor-music-cloned-voices) to see if the voice is ready.
```json
{
"itemId": "abcdef123456789",
"clonedVoiceItemId": "user:12345-tempolor:user_id-voice:abcdef123456789",
"message": "Voice cloning is still processing after 120 seconds. Please check back later."
}
```
{% endtab %}
{% tab post_tempolor_music_cloned_voices_response 400 %}
400 Bad Request
```json
{
"error": "Empty file received",
"code": 400
}
```
{% endtab %}
{% tab post_tempolor_music_cloned_voices_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
result: boolean
itemId: string
clonedVoiceItemId: string
message: string
error: string
code: number
}
```
##### Examples
{% tabs post_tempolor_music_cloned_voices_example %}
{% tab post_tempolor_music_cloned_voices_example Curl %}
``` bash
curl "https://api.useapi.net/v1/tempolor/music/cloned-voices/?name=my-custom-voice&user_id=POST music/instrumental
parent: TemPolor API v1
nav_order: 700
---
## Create instrumental music
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint generates instrumental music based on a text prompt and optional musical parameters.
{: .post }
> **https://api.useapi.net/v1/tempolor/music/instrumental**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Request Body
```json
{
"prompt": "A relaxing lo-fi beat with piano and soft drums",
"tonality": "C:major",
"bpm": 80,
"chords": "C F G Am"
}
```
- `user_id` is optional, if not specified, the API will use the account from your request.
- `prompt` is **required**, a text description of the desired instrumental music.
Maximum length 2000 characters.
- `model_instrumental` is optional, the model to use for generation.
Supported values:
* `i3` - Superior music structure, max 2 min
* `i3.5 beta` - Richer arrangements, max 4.5 mins (default)
- `tonality` is optional, the musical key for the composition.
Supported values: `A:major`, `A:minor`, `Ab:major`, `Ab:minor`, `B:major`, `B:minor`, `Bb:major`, `Bb:minor`, `C#:major`, `C#:minor`, `C:major`, `C:minor`, `D:major`, `D:minor`, `E:major`, `E:minor`, `Eb:major`, `Eb:minor`, `F#:major`, `F#:minor`, `F:major`, `F:minor`, `G:major`, `G:minor`
- `bpm` is optional, the tempo in beats per minute.
Valid range: 50…190.
- `chords` is optional, chord progression for the composition.
Maximum length 200 characters.
- `replyUrl` is optional, a callback URL that will be called with generation progress updates.
Maximum length 1024 characters.
We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality.
- `replyRef` is optional, a reference ID that will be included in the callback requests.
Maximum length 1024 characters.
- `maxJobs` is optional; it specifies the maximum number of concurrent jobs for this request. If not provided, the value will be taken from the account configuration set in [POST accounts](https://useapi.net/docs/api-tempolor-v1/post-tempolor-accounts).
##### Responses
{% tabs post_tempolor_music_instrumental_response %}
{% tab post_tempolor_music_instrumental_response 200 %}
200 OK
Use the returned `jobs` values to retrieve generation status and results using [GET music/`job_id`](https://useapi.net/docs/api-tempolor-v1/get-tempolor-music-job_id).
If you specify the optional parameter [`replyUrl`](#request-body), the API will call the provided `replyUrl` with generation progress updates until the generation is complete or fails.
```json
{
"result": true,
"itemIds": [
"abcdef123456789",
"fedcba987654321"
],
"jobs": [
"user:12345-tempolor:user_id-job:abcdef123456789",
"user:12345-tempolor:user_id-job:fedcba987654321",
],
"remainSeconds": 21533,
"maxGenCountAtOnce": 10,
"unlimited": false,
"remainNum": 1534,
"totalNum": 3000
}
```
{% endtab %}
{% tab post_tempolor_music_instrumental_response 400 %}
400 Bad Request
```json
{
"error": "Parameter prompt is required",
"code": 400
}
```
{% endtab %}
{% tab post_tempolor_music_instrumental_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab post_tempolor_music_instrumental_response 402 %}
402 Payment Required
```json
{
"error": "Subscription required",
"code": 402
}
```
{% endtab %}
{% tab post_tempolor_music_instrumental_response 429 %}
429 Too Many Requests
Wait in a loop for **at least** 30 seconds and retry again.
There are two possible cases for API response 429:
1. API query is full and cannot accept new instrumental music generation requests. Size of queue defined by the `maxJobs` value from either the request body or the default from the account configuration set in [POST accounts](https://useapi.net/docs/api-tempolor-v1/post-tempolor-accounts).
```json
{
"error": "Account POST music/midi
parent: TemPolor API v1
nav_order: 1400
---
## Upload MIDI file
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint uploads a MIDI file that can be used as a base for music generation in the [POST music/song](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-song) endpoint.
[POST raw content using Make.com and similar nocode tools.](../questions-and-answers.html#how-post-raw-content-to-runwaymlassets-and-minimaxfiles-using-makecom-and-similar-nocode-tools)
{: .post }
> **https://api.useapi.net/v1/tempolor/music/midi/?...**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: audio/midi or audio/x-midi
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
- `Content-Type` is **required**, must be `audio/midi` or `audio/x-midi`.
##### Query Parameters
- `user_id` is optional when only one [account](https://useapi.net/docs/api-tempolor-v1/get-tempolor-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**.
- `name` is **required**. Specify a name for your MIDI file.
##### Responses
{% tabs post_tempolor_music_midi_response %}
{% tab post_tempolor_music_midi_response 200 %}
200 OK
The MIDI file is immediately available to use in [POST music/song](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-song) by providing the returned `midiItemId`.
```json
{
"isFirst": false,
"midiRenderVO": {
"opType": "upload",
"ucid": "100198329",
"midiItemId": "user:12345-tempolor:user_id-midi:abcdef123456789",
"name": "my background music",
"midiUrl": "https://..."
}
}
```
{% endtab %}
{% tab post_tempolor_music_midi_response 400 %}
400 Bad Request
```json
{
"error": "Content-Type must be audio/midi or audio/x-midi",
"code": 400
}
```
{% endtab %}
{% tab post_tempolor_music_midi_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% endtabs %}
##### Model
```typescript
{ // TypeScript, all fields are optional
isFirst: boolean
midiRenderVO: {
opType: string
ucid: string
midiItemId: string
name: string
midiUrl: string
}
error: string
code: number
}
```
##### Examples
{% tabs post_tempolor_music_midi_example %}
{% tab post_tempolor_music_midi_example Curl %}
``` bash
curl "https://api.useapi.net/v1/tempolor/music/midi/?name=my-background-music&user_id=POST music/song
parent: TemPolor API v1
nav_order: 600
---
## Create music with vocals
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
This endpoint generates a complete song with vocals based on a text prompt and optional parameters.
{: .post }
> **https://api.useapi.net/v1/tempolor/music/song**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
##### Request Body
```json
{
"prompt": "A cinematic orchestral piece with dramatic string sections and a powerful crescendo",
"lyrics": "These are the lyrics for my song\nSecond line of the lyrics",
"clonedVoiceItemId": "user:12345-tempolor:user_id-voice:abcdef123456789",
"replyUrl": "https://your-callback-url.com",
"replyRef": "your-reference-id"
}
```
- `user_id` is optional, if not specified, the API will use the account from your request.
- `prompt` is **required**, a text description of the desired song.
Maximum length 2000 characters.
- `lyrics` is optional, custom lyrics for the song. If not provided, lyrics will be auto-generated based on the prompt.
Maximum length 3000 characters.
- `model_song` is optional, the model to use for generation.
Supported values:
* `v3` - Enhanced AI music generation supporting EN/CN/JP, max 2 min
* `v3.5` - Supporting EN/CN, max 4.5 min (default)
- `artistVoiceItemId` is optional, ID of a predefined artist voice to use for the vocals. Get available voices using [GET artist-voices](https://useapi.net/docs/api-tempolor-v1/get-tempolor-music-artist-voices).
- `clonedVoiceItemId` is optional, ID of a previously cloned voice to use for the vocals.
- To get existing cloned voices, use [GET cloned-voices](https://useapi.net/docs/api-tempolor-v1/get-tempolor-music-cloned-voices).
- To create a new cloned voice, upload an audio sample using [POST cloned-voices](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-cloned-voices).
- `midiItemId` is optional, ID of a previously uploaded MIDI file to base the composition on.
- To get existing MIDI files, use [GET midi](https://useapi.net/docs/api-tempolor-v1/get-tempolor-music-midi).
- To upload a new MIDI file, use [POST midi](https://useapi.net/docs/api-tempolor-v1/post-tempolor-music-midi).
- `replyUrl` is optional, a callback URL that will be called with generation progress updates.
Maximum length 1024 characters.
We recommend using sites like [webhook.site](https://webhook.site) to test callback URL functionality.
- `replyRef` is optional, a reference ID that will be included in the callback requests.
Maximum length 1024 characters.
- `maxJobs` is optional; it specifies the maximum number of concurrent jobs for this request. If not provided, the value will be taken from the account configuration set in [POST accounts](https://useapi.net/docs/api-tempolor-v1/post-tempolor-accounts).
**Important notes:**
- You can only use one of `artistVoiceItemId` or `clonedVoiceItemId`, not both.
- If you specify a `midiItemId`, you cannot use `artistVoiceItemId` or `clonedVoiceItemId`.
##### Responses
{% tabs post_tempolor_music_song_response %}
{% tab post_tempolor_music_song_response 200 %}
200 OK
Use the returned `jobs` values to retrieve generation status and results using [GET music/`job_id`](https://useapi.net/docs/api-tempolor-v1/get-tempolor-music-job_id).
If you specify the optional parameter [`replyUrl`](#request-body), the API will call the provided `replyUrl` with generation progress updates until the generation is complete or fails.
```json
{
"result": true,
"itemIds": [
"abcdef123456789",
"fedcba987654321"
],
"jobs": [
"user:12345-tempolor:user_id-job:abcdef123456789",
"user:12345-tempolor:user_id-job:fedcba987654321",
],
"remainSeconds": 21533,
"maxGenCountAtOnce": 10,
"unlimited": false,
"remainNum": 1534,
"totalNum": 3000
}
```
{% endtab %}
{% tab post_tempolor_music_song_response 400 %}
400 Bad Request
```json
{
"error": "Parameter prompt is required",
"code": 400
}
```
{% endtab %}
{% tab post_tempolor_music_song_response 401 %}
401 Unauthorized
```json
{
"error": "Unauthorized",
"code": 401
}
```
{% endtab %}
{% tab post_tempolor_music_song_response 402 %}
402 Payment Required
```json
{
"error": "Subscription required",
"code": 402
}
```
{% endtab %}
{% tab post_tempolor_music_song_response 404 %}
404 Not Found
```json
{
"error": "The source material does not exist.",
"code": 404
}
```
This error may occur if the specified `artistVoiceItemId`, `clonedVoiceItemId`, or `midiItemId` no longer exists.
{% endtab %}
{% tab post_tempolor_music_song_response 429 %}
429 Too Many Requests
Wait in a loop for **at least** 30 seconds and retry again.
There are two possible cases for API response 429:
1. API query is full and cannot accept new music generation requests. Size of queue defined by the `maxJobs` value from either the request body or the default from the account configuration set in [POST accounts](https://useapi.net/docs/api-tempolor-v1/post-tempolor-accounts).
```json
{
"error": "Account POST music/stems-splitter
parent: TemPolor API v1
nav_order: 800
---
## Split audio into stems
{: .no_toc }
May 15, 2025
## Table of contents
{: .no_toc .text-delta }
1. TOC
{:toc}
---
Upload an audio file (MP3, WAV, M4A, FLAC) and split it into separate instrument stems (vocals, drums, bass, etc).
[POST raw content using Make.com and similar nocode tools.](../questions-and-answers.html#how-post-raw-content-to-runwaymlassets-and-minimaxfiles-using-makecom-and-similar-nocode-tools)
{: .post }
> **https://api.useapi.net/v1/tempolor/music/stems-splitter/?…**
##### Request Headers
``` yaml
Authorization: Bearer {API token}
Content-Type: select from the table below
```
- `API token` is **required**, see [Setup useapi.net](../start-here/setup-useapi) for details.
- `Content-Type` is **required**, select from the table below:
| Content-Type | File Extension |
| ------------ | -------------- |
| audio/mpeg | mp3 |
| audio/wav | wav |
| audio/wave | wav |
| audio/mp4 | m4a |
| audio/x-m4a | m4a |
| audio/flac | flac |
| audio/x-flac | flac |
##### Query Parameters
- `user_id` is optional when only one [account](../api-tempolor-v1/get-tempolor-accounts) configured. However, if you have multiple accounts configured, this parameter becomes **required**.
##### Responses
{% tabs post_TemPolor_music_stems_splitter_response %}
{% tab post_TemPolor_music_stems_splitter_response 200 %}
200 OK
When the response includes `stemsZipUrl`, the processing is complete and you can download the ZIP file containing the separated stems.
```json
{
"state": 2,
"title": "audio_file.mp3",
"stemsZipUrl": "https://example.com/path/to/stems.zip"
}
```
{% endtab %}
{% tab post_TemPolor_music_stems_splitter_response 400 %}
400 Bad Request
The server encountered an error processing your request.
```json
{
"error": "