Skip to content

API Documentation

This document describes the HTTP APIs provided by api.kipfel.link.

  • Base paths: /v1, /v2
  • Request method: GET unless specified otherwise
  • Response format:
    • Parsing interfaces return 302 redirect to the actual media URL by default
    • Return JSON when json=1, json=true is provided or Accept: application/json header is used
  • Content type:
    • JSON interfaces: application/json
    • Image proxy: Pass through the original image type
    • Background image: Returns 302 to static resource URL

It is recommended to use JSON mode when integrating on the server side for more stable error handling and results.

Basic Information

Base URL

text
Main: https://api.kipfel.link/
V1 only: https://api.kipfel.vrchat.org.cn/

Domain Description

DomainDescription
https://api.kipfel.link/Main site, supports v1 and other public interfaces
https://api.kipfel.vrchat.org.cn/Only supports v1 API, no v2 or additional interfaces

Common Request Headers

http
Accept: application/json

Common Query Parameters

ParameterTypeRequiredDescription
urlstringRequired for most parsing interfacesOriginal URL to parse, supports mixed sharing text, server automatically extracts the real URL
jsonstringNoForce return JSON instead of 302 redirect when 1 or true is provided
real_ipstringNoClient real public IP for more accurate regional node selection
typestringNoSpecify parsing type, common values: video, music, live, playlist, collection
inumberNoIndex for music playlist or multi-resource scenarios, starting from 1 is safer

Response Convention

1. Success with JSON mode

json
{
  "success": true,
  "url": "https://cdn.example.com/media.mp4"
}

2. Success with default mode

Server returns:

http
302 Found
Location: https://cdn.example.com/media.mp4

3. Error

json
{
  "error": true,
  "status": 422,
  "code": "INVALID_URL",
  "message": "The provided parameters do not contain a valid URL"
}

Security & Limits

Rate Limiting

ScopeLimit
Whole siteMax 150 requests per 15 minutes per IP
/v1, /v2 APIsMax 50 requests per minute per IP

Typically returns 429 Too Many Requests when limit is triggered.

The following sources are directly blocked and return 451:

  • Tencent Video
  • iQIYI
  • Youku
  • Mango TV
  • Bilibili Bangumi
  • Xigua Video
  • Sohu Video

Supported Platforms

PlatformTypeDescription
Bilibilivideo / liveSupports regular videos, live streams, short links and some direct links
Douyinvideo / liveSupports short link expansion
Kuaishouvideo / liveSupports videos and live streams
AcFunvideoSupports video parsing
NetEase Cloud Musicmusic / playlistSupports singles and playlist details
Kugou MusicmusicSupports audio parsing
Migu MusicmusicSupports audio parsing
YouTubevideo / musicSupports YouTube and YouTube Music
X / TwittervideoSupports public video links
InstagramvideoSupports public video links

V1 Parsing Interfaces

GET /v1/vrc

Main video parsing interface. For short videos, regular videos and some live stream links.

Query Parameters

ParameterTypeRequiredDescription
urlstringYesVideo or live stream share link
jsonstringNoReturn JSON when 1 or true
typestringNoManually specify parsing type, auto-detection by default, fallback to video
real_ipstringNoClient real public IP

Request Example

bash
curl "https://api.kipfel.link/v1/vrc?url=https%3A%2F%2Fwww.bilibili.com%2Fvideo%2FBV1xx411c7mD&json=1"

Success Response

json
{
  "success": true,
  "url": "https://cdn.example.com/video.mp4"
}

Notes

  • Auto-expands short links like b23.tv, v.douyin.com, youtu.be
  • Auto-detects live stream links and switches to live parsing logic
  • Directly returns the original link if the target is already a supported platform media direct link

GET /v1/music

Main music parsing interface. For singles and tracks from some playlists.

Query Parameters

ParameterTypeRequiredDescription
urlstringYesMusic link
inumberNoPlaylist track index
jsonstringNoReturn JSON when 1 or true
typestringNoAuto-detection by default, fallback to music
real_ipstringNoClient real public IP

Request Example

bash
curl "https://api.kipfel.link/v1/music?url=https%3A%2F%2Fmusic.163.com%2Fsong%3Fid%3D19013859097&json=1"

Success Response

json
{
  "success": true,
  "url": "https://cdn.example.com/audio.mp3"
}

Notes

  • Auto-compatible with NetEase Cloud song, playlist link formats
  • Falls back to single parsing logic when playlist parsing fails
  • Prioritizes parsing the track at the specified index when i is provided

GET /v1/kfc

Backup video parsing interface. Does not depend on WebRTC geolocation logic, suitable as a compatibility fallback entry.

Query Parameters

ParameterTypeRequiredDescription
urlstringYesTarget link
jsonstringNoReturn JSON when 1 or true
typestringNoCan manually specify type
inumberNoSpecific resource index
real_ipstringNoClient real public IP

Response Notes

  • Returns playlist details JSON instead of direct link redirect when type=playlist
  • Otherwise generally consistent with /v1/vrc

GET /v1/musickfc

Backup music parsing interface, behavior similar to /v1/music.

Query Parameters

ParameterTypeRequiredDescription
urlstringYesMusic link
inumberNoTrack index
jsonstringNoReturn JSON when 1 or true
typestringNoAuto-detection by default, fallback to music
real_ipstringNoClient real public IP

GET /v1/collection

Parses video collections and returns list of child items.

Query Parameters

ParameterTypeRequiredDescription
urlstringYesCollection page link
formatstringNoReturns JavaScript array text when js, otherwise returns JSON
real_ipstringNoClient real public IP

JSON Response Example

json
{
  "title": "Collection title",
  "items": [
    {
      "title": "Episode 1",
      "url": "https://api.kipfel.link/v1/vrc?url=https%3A%2F%2Fexample.com%2Fitem-1"
    }
  ]
}

JavaScript Response Example

javascript
[
  {
    title: "Episode 1",
    url: "https://api.kipfel.link/v1/vrc?url=https%3A%2F%2Fexample.com%2Fitem-1"
  }
]

Notes

  • Currently only supports platform collections identifiable as video type
  • The returned items[].url are already converted to our /v1/vrc callable addresses

GET /v1/playlist-detail

Get NetEase Cloud playlist details.

Query Parameters

ParameterTypeRequiredDescription
urlstringYesNetEase Cloud playlist link
real_ipstringNoClient real public IP

Response Notes

This interface directly passes through the playlist details from the parsing node. Common structure resembles:

json
{
  "title": "Playlist title",
  "tracks": [
    {
      "index": 1,
      "title": "Song name",
      "artist": "Artist",
      "url": "https://cdn.example.com/audio.mp3"
    }
  ]
}

Limitations

  • Only supports NetEase Cloud playlists
  • Returns 422 for non-NetEase Cloud links

V2 Auxiliary Interfaces

Note: The following v2 interfaces can only be accessed via https://api.kipfel.link/, not supported by https://api.kipfel.vrchat.org.cn/.

GET /v2/background/:type/:timestamp?

Random background image redirect interface.

Path Parameters

ParameterTypeRequiredDescription
typestringYesmobile for portrait, others handled as landscape
timestampstringNoCan be used for frontend force refresh, not used in business logic

Response Notes

  • Returns 302 on success, redirects to /assets/background/... or /assets/pin/...
  • Returns 404 when no available image is found

Common Error Codes

HTTP StatusBusiness CodeDescription
403No fixed codeUnsupported platform links rejected for redirection
405METHOD_NOT_ALLOWEDMissing url parameter key
418IM_A_TEAPOTurl parameter is empty string
422INVALID_URLFailed to extract valid URL from input
422MISSING_PARAMETERMissing required parameter
422UNSUPPORTED_PLATFORMCurrent platform or link type not supported
451CONTENT_RESTRICTEDNot supported for copyright or compliance reasons
500PARSE_ERRORGeneric parsing failure
500COLLECTION_PARSE_ERRORCollection parsing failed
500PLAYLIST_ERRORFailed to get playlist details
503NO_NODES_AVAILABLENo parsing nodes available
504PARSE_ERRORUpstream parsing node timeout or connection refused
429API_LIMIT_EXCEEDEDToo many API requests

非 Kipfel 社区制作,仅为个人作品