Music commercial licensing certificate API
Endpoint description
The music commercial licensing certificate endpoints let you list the songs the current API key's user can license, generate a PDF certificate, query certificate history and download issued files.
All endpoints use the New API Key uniformly:
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Base address:
https://www.suno-api.io
Prerequisites
- The API key must be valid and must belong to the user who needs the certificate.
- The user must first complete licensing identity binding (see "0. Licensing eligibility and identity" below); once confirmed, the identity is locked according to product rules.
- The user must meet the cumulative top-up requirement for an individual or a company.
- Ordinary endpoints return masked identity information only; they never return ID numbers, phone numbers or unified social credit codes in plaintext.
- Each song can be issued one successful certificate only; a certificate that fails to generate does not consume the song's eligibility.
- Currently supported are completed designated generation types that have audio and a real Suno Song ID. Whether a song is selectable is governed by
authorization.selectablein the song list.
0. Licensing eligibility and identity
Before issuing a certificate you need to check eligibility and bind the identity. Both endpoints are free.
0.1 Check licensing eligibility and identity status
Endpoint: GET /api/music/authorization/context
{
"code": 200,
"message": "success",
"data": {
"identity": {
"exists": false
},
"eligibility": {
"current_amount": 216.3,
"personal_required_amount": 200,
"company_required_amount": 500,
"personal_eligible": true,
"company_eligible": false
},
"stats": {
"authorized_song_count": 0,
"certificate_count": 0
}
}
}
| Field | Type | Notes |
|---|---|---|
| identity.exists | boolean | Whether the licensing identity is already bound; when true, masked identity information is returned |
| eligibility.current_amount | number | Current cumulative top-up amount (yuan) |
| eligibility.personal_required_amount | number | Cumulative top-up threshold required for individual licensing |
| eligibility.company_required_amount | number | Cumulative top-up threshold required for company licensing |
| eligibility.personal_eligible / company_eligible | boolean | Whether the corresponding eligibility is currently met |
| stats.authorized_song_count / certificate_count | number | Number of licensed songs and number of issued certificates |
0.2 Bind the licensing identity
Endpoint: POST /api/music/authorization/identity
{
"identity_type": "personal",
"legal_name": "John Smith",
"id_number": "110101199001010000",
"contact_name": "John Smith",
"phone": "13800000000",
"email": "user@example.com",
"address": "Chaoyang District, Beijing",
"confirm_locked": true
}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| identity_type | string | yes | personal or company |
| legal_name | string | yes | Individual name |
| id_number | string | yes | Individual ID number (stored encrypted on the server; ordinary endpoints return the masked result only) |
| company_name | string | required for companies | Company name |
| credit_code | string | required for companies | Unified social credit code |
| contact_name | string | yes | Contact person |
| phone | string | yes | Contact phone |
| string | yes | Contact email | |
| address | string | no | Contact address |
| confirm_locked | boolean | yes | Confirms that the identity information is locked; passing true means accepting that it cannot be changed by yourself after binding |
The response returns the masked identity information: {"identity": {...}}. After a successful binding, confirm with the context endpoint that identity.exists has become true, then call the song list and issuing endpoints. If the identity information needs to be changed, contact customer service.
1. List licensable songs
Endpoint: GET /api/music/authorization/songs
Query parameters
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
p |
number | no | 1 |
Page number |
page_size |
number | no | system default | Items per page, maximum 100 |
q |
string | no | - | Search by title, prompt or exact Suno Song ID |
status |
string | no | all |
all, selectable, authorized or unavailable |
Request example
curl "https://www.suno-api.io/api/music/authorization/songs?p=1&page_size=20&status=selectable" \
-H "Authorization: Bearer YOUR_API_KEY"
Response example
{
"success": true,
"message": "",
"data": {
"page": 1,
"page_size": 20,
"total": 1,
"items": [
{
"task_id": 10001,
"suno_song_id": "suno-song-id-1",
"title": "Example song",
"generation_type": "generate",
"completed_at": 1784000000,
"created_at": 1783999000,
"audio_url": "https://example.com/audio.mp3",
"model_name": "suno-v6",
"authorization": {
"selectable": true
}
}
]
}
}
When authorization.selectable=false, the response explains the reason through reason_code and reason. Songs that already have a certificate also return certificate_id and certificate_no.
2. Generate a certificate
Endpoint: POST /api/music/authorization/certificates
Body parameters
| Parameter | Type | Required | Notes |
|---|---|---|---|
song_ids |
string[] | yes | List of real Suno Song IDs to license |
confirm_risk_terms |
boolean | yes | Must be true, confirming the licensing scope and risk terms |
Request example
curl -X POST https://www.suno-api.io/api/music/authorization/certificates \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"song_ids": ["suno-song-id-1", "suno-song-id-2"],
"confirm_risk_terms": true
}'
Response example
{
"success": true,
"message": "",
"data": {
"certificate": {
"id": 101,
"certificate_no": "CERTIFICATE-NO",
"verification_code": "VERIFY-CODE",
"status": "issued",
"song_count": 2,
"identity_type_snapshot": "personal",
"licensee_name_masked": "J*",
"document_no_masked_snapshot": "11**************34",
"phone_masked_snapshot": "138****0000",
"pdf_sha256": "PDF_SHA256",
"issued_at": 1784000100,
"created_at": 1784000000,
"updated_at": 1784000100,
"download_url": "/api/music/authorization/certificates/101/download",
"songs": []
}
}
}
In a successful response status is issued. If PDF rendering fails, the certificate is marked failed and the related songs can still be submitted again once the problem is fixed.
3. Query certificate history
Endpoint: GET /api/music/authorization/certificates
Query parameters
| Parameter | Type | Required | Default | Notes |
|---|---|---|---|---|
p |
number | no | 1 |
Page number |
page_size |
number | no | system default | Items per page, maximum 100 |
q |
string | no | - | Search by certificate number or masked licensee name |
Request example
curl "https://www.suno-api.io/api/music/authorization/certificates?p=1&page_size=20" \
-H "Authorization: Bearer YOUR_API_KEY"
Response structure
The response data is a paginated object containing page, page_size, total and items. Each entry in items is a certificate summary and includes that certificate's song snapshot.
4. Get certificate details
Endpoint: GET /api/music/authorization/certificates/:id
The path parameter id is the certificate's numeric ID. The endpoint only allows access to certificates belonging to the current API key's user.
Request example
curl https://www.suno-api.io/api/music/authorization/certificates/101 \
-H "Authorization: Bearer YOUR_API_KEY"
Response structure
On success it returns data.certificate, whose fields include the certificate number, status, masked licensee information, issue time, PDF checksum, download address and the licensed song snapshot.
5. Download the certificate PDF
Endpoint: GET /api/music/authorization/certificates/:id/download
Only certificates whose status is issued can be downloaded. The download request still needs a valid API key, and you can only download your own certificates.
Request example
curl https://www.suno-api.io/api/music/authorization/certificates/101/download \
-H "Authorization: Bearer YOUR_API_KEY" \
--output authorization-certificate.pdf
A successful response is an application/pdf file stream; the file name follows the backend Content-Disposition.
Common failure reasons
| Scenario | Suggested handling |
|---|---|
| The API key is invalid or missing | Check the Authorization: Bearer YOUR_API_KEY header |
| The licensing identity is not bound yet | Complete identity binding on the certificate page in Create UI first |
| Cumulative top-up eligibility is not met | Retry once the individual or company requirement is reached |
| The risk terms were not confirmed | Set confirm_risk_terms to true |
| The song cannot be licensed | Look at reason_code and reason returned by the song list |
| The song already has a certificate | Use the returned certificate_id to query the existing certificate |
| The PDF cannot be generated for now | Retry later; a failed record does not consume the song's licensing eligibility |
Notes
- Use the
suno_song_idreturned by the song list; do not usepending:*placeholder IDs or task-table IDs. - The download address is not a public link; do not remove the API key authentication.
- Certificate records belong to the user the API key maps to and cannot be queried or downloaded across users.
- The licensing scope, restriction terms and final PDF content are governed by the certificate actually issued.
Get an API key
Create an API key in the console after signing up. ¥0.6 per run returns 2 tracks, downloads are unlimited, and no phone number is required.
Get API key Back to overview