NAV Navbar
Logo
php python javascript

Introduction

Welcome to the Avgle API! You can use our API to access information like videos and categories in our database.

We have language bindings in Javascript, PHP, and Python! You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs in the top right.

Authentication

Avgle API v1 is public and free to use. Neither authentication nor API keys is needed.

Video categories

Get all video categories

$AVGLE_CATEGORIES_API_URL = 'https://api.avgle.com/v1/categories';
$response = json_decode(file_get_contents($url), true);
var_dump($response);
if ($response['success']) {
    $categories = $response['response']['categories'];
    doSomethingWith($categories);
}
import urllib.request
import json
AVGLE_CATEGORIES_API_URL = 'https://api.avgle.com/v1/categories'
response = json.loads(urllib.request.urlopen(url).read().decode())
print(response)
if response['success']:
    categories = response['response']['categories']
    do_something_with(categories)
// node.js
const request = require('request');
const AVGLE_CATEGORIES_API_URL = 'https://api.avgle.com/v1/categories';
request(AVGLE_CATEGORIES_API_URL, (error, response, body) => {
    if (err) return console.log(err);
    var response = JSON.parse(body);
    console.log(response);
    if (response.success) {
        var categories = response.response.categories;
        doSomethingWith(categories);
    }
});


// node es7+
import rp from 'request-promise';
const AVGLE_CATEGORIES_API_URL = 'https://api.avgle.com/v1/categories';

const doSomethingWith = async (categories) => {
    // ...
}

const getCategories = async () => {
    return new Promise((resolve, reject) => {
        try {
            const body = await rp(AVGLE_CATEGORIES_API_URL);
            const json = JSON.parse(body);
            if (!json.success) {
                reject(new Error('API Failed'));
            }
            resolve(json.response.categories);
        } catch (e) {
            reject(e);
        }    
    });
}

(async () => {
    try {
        const categories = await getCategories();
        console.log(categories);
        await doSomethingWith(categories);
    } catch (e) {
        console.log('Error', e);
    }
})();

// jQuery
var AVGLE_CATEGORIES_API_URL = 'https://api.avgle.com/v1/categories';
$.getJSON(AVGLE_CATEGORIES_API_URL, function (response) {
    console.log(response);
    if (response.success) {
        var categories = response.response.categories;
        doSomethingWith(categories);
    }
})

The above command returns JSON structured like this:

{
    "success":true,
    "response":{
        "categories":[
            {
                "CHID":"1",
                "name":"Pornstar・AV女優",
                "slug":"pornstar",
                "total_videos":350,
                "category_url":"https://avgle.com/videos/pornstar",
                "cover_url":"https://static.avgle.com/media/categories/video/1.jpg"
            },
            {
                "CHID":"2",
                "name": "JAV・日本AV",
                "slug":"jav",
                "total_videos":2500,
                "category_url":"https://avgle.com/videos/jav",
                "cover_url":"https://static.avgle.com/media/categories/video/2.jpg"
            },
            {
                "CHID":"3",
                "name": "Uncensored・無修正",
                "slug":"uncensored",
                "total_videos":1000,
                "category_url":"https://avgle.com/videos/uncensored",
                "cover_url":"https://static.avgle.com/media/categories/video/3.jpg"
            }
        ]
    }
}

This endpoint retrieves all the video categories.

HTTP Request

GET https://api.avgle.com/v1/categories

Video collections

A video collection denotes a series of videos. All the videos in a series include the keyword specified.

In other words, they are recommended searches.

Get all video collections

$AVGLE_LIST_COLLECTIONS_API_URL = 'https://api.avgle.com/v1/collections/';
$page = 0;
$limit = '?limit=2';
$response = json_decode(file_get_contents($url . $page . $limit), true);
var_dump($response);
if ($response['success']) {
    $collections = $response['response']['collections'];
    doSomethingWith($collections);
}
import urllib.request
import json
AVGLE_LIST_COLLECTIONS_API_URL = 'https://api.avgle.com/v1/collections/{}?limit={}'
page = 0
limit = 2
response = json.loads(urllib.request.urlopen(url.format(page, limit)).read().decode())
print(response)
if response['success']:
    collections = response['response']['collections']
    do_something_with(collections)
// node.js
const request = require('request');
const AVGLE_LIST_COLLECTIONS_API_URL = 'https://api.avgle.com/v1/collections/';
var page = 0;
var limit = '?limit=2';
request(AVGLE_LIST_COLLECTIONS_API_URL + page + limit, (error, response, body) => {
    if (err) return console.log(err);
    var response = JSON.parse(body);
    console.log(response);
    if (response.success) {
        var collections = response.response.collections;
        doSomethingWith(collections);
    }
});

// jQuery
var AVGLE_LIST_COLLECTIONS_API_URL = 'https://api.avgle.com/v1/collections';
var page = 0;
var limit = '?limit=2';
$.getJSON(AVGLE_LIST_COLLECTIONS_API_URL + page + limit, function (response) {
    console.log(response);
    if (response.success) {
        var collections = response.response.collections;
        doSomethingWith(collections);
    }
})

The above command returns JSON structured like this:

{  
    "success":true,
    "response":{  
        "has_more":true,
        "total_collections":95,
        "current_offset":0,
        "limit":2,
        "collections":[  
            {  
                "id":"1",
                "title":"三上悠亜",
                "keyword":"三上悠亜",
                "cover_url":"https://static.avgle.com/media/videos/tmb/19944/1.jpg",
                "total_views":204011,
                "video_count":17,
                "collection_url":"https://avgle.com/c/三上悠亜"
            },
            {  
                "id":"2",
                "title":"高橋しょう子",
                "keyword":"高橋しょう子",
                "cover_url":"https://static.avgle.com/media/videos/tmb/3520/1.jpg",
                "total_views":128658,
                "video_count":11,
                "collection_url":"https://avgle.com/c/高橋しょう子"
            }
        ]
    }
}

This endpoint retrieves all the video collections.

HTTP Request

GET https://api.avgle.com/v1/collections/<page>

URL Parameters

Parameter Description Possible values
page 0 based pagination [0, +inf)

Query Parameters

Parameter Default Description Possible values
limit 50 The maximum number of video collections in the API response per page. [1, 250]

Response

Key Description
has_more true means there is next page. false otherwise.
total_collections The number of video collections.
current_offset The number of video collections skipped by pagination.
limit The maximum number of video collections the API response per page will include.
collections > keyword The keyword of the collection which is used as search query.
collections > total_views The total views of the videos in the video collection.
collections > video_count The number of videos in the video collection.

Videos

List all videos

$AVGLE_LIST_VIDEOS_API_URL = 'https://api.avgle.com/v1/videos/';
$page = 0;
$limit = '?limit=2';
$response = json_decode(file_get_contents($url . $page . $limit), true);
var_dump($response);
if ($response['success']) {
    $videos = $response['response']['videos'];
    doSomethingWith($videos);
}
import urllib.request
import json
AVGLE_LIST_VIDEOS_API_URL = 'https://api.avgle.com/v1/videos/{}?limit={}'
page = 0
limit = 2
response = json.loads(urllib.request.urlopen(AVGLE_LIST_VIDEOS_API_URL.format(page, limit)).read().decode())
print(response)
if response['success']:
    videos = response['response']['videos']
    do_something_with(videos)
// node.js
const request = require('request');
const AVGLE_LIST_VIDEOS_API_URL = 'https://api.avgle.com/v1/videos/';
var page = 0;
var limit = '?limit=2';
request(AVGLE_LIST_VIDEOS_API_URL + page + limit, (error, response, body) => {
    if (err) return console.log(err);
    var response = JSON.parse(body);
    console.log(response);
    if (response.success) {
        var videos = response.response.videos;
        doSomethingWith(videos);
    }
});

// jQuery
var AVGLE_LIST_VIDEOS_API_URL = 'https://api.avgle.com/v1/videos';
var page = 0;
var limit = '?limit=2';
$.getJSON(AVGLE_LIST_VIDEOS_API_URL + page + limit, function (response) {
    console.log(response);
    if (response.success) {
        var videos = response.response.videos;
        doSomethingWith(videos);
    }
})

The above command returns JSON structured like this:

{  
    "success":true,
    "response":{  
        "has_more":true,
        "total_videos":28261,
        "current_offset":0,
        "limit":2,
        "videos":[  
            {  
                "vid":"39271",
                "uid":"1",
                "title":"ミニミニ◆つるぺたいもうと 近親中出し 矢澤美々 身長145cm KTDS-958",
                "keyword":"矢澤美々",
                "channel":"2",
                "duration":7063.39,
                "framerate":29.97,
                "hd":true,
                "addtime":1491800115,
                "viewnumber":50,
                "likes":0,
                "dislikes":0,
                "video_url":"https://avgle.com/video/39271/ミニミニ-つるぺたいもうと-近親中出し-矢澤美々-身長145cm-ktds-958",
                "embedded_url":"https://avgle.com/embed/8bc32a2e41264b049793",
                "preview_url":"https://static.avgle.com/media/videos/tmb/39271/1.jpg"
            },
            {  
                "vid":"39270",
                "uid":"1",
                "title":"SENZ 性欲処理専門 セックス外来医院 14 真正中出し科 性交処置科が新設される病院に密着!編 SDDE-484",
                "keyword":"SENZ",
                "channel":"2",
                "duration":7256.65,
                "framerate":29.97,
                "hd":true,
                "addtime":1491800110,
                "viewnumber":28,
                "likes":0,
                "dislikes":0,
                "video_url":"https://avgle.com/video/39270/senz-性欲処理専門-セックス外来医院-14-真正中出し科-性交処置科が新設される病院に密着-編-sdde-484",
                "embedded_url":"https://avgle.com/embed/e5b41c4816769be4037e",
                "preview_url":"https://static.avgle.com/media/videos/tmb/39270/1.jpg"
            }
        ]
    }
}

This endpoint retrieves all the videos in criteria.

HTTP Request

GET https://api.avgle.com/v1/videos/<page>

URL Parameters

Parameter Description Possible values
page 0 based pagination [0, +inf)

Query Parameters

Parameter Default Description Possible values
o mr Videos ordering method. DESC order. For example, mr shows the latest videos in page 0. bw (Last viewed)
mr (Latest)
mv (Most viewed)
tr (Top rated)
tf (Most favoured)
lg (Longest)
t a Time frame. Videos older than the specified age will not be showed. For example, w shows only the videos uploaded from 7 days ago to now. t (1 day)
w (1 week)
m (1 month)
a (Forever)
type (null) Show only public or private videos, or show all videos if type not specified. public
private
c (null) Show only videos within the specified video category. For example, c=1 shows only videos in ‘Happy videos’ categories. See above. CHID of a valid video category (integer)
limit 50 The maximum number of videos in the API response per page. [1, 250]

Response

Key Description
has_more true means there is next page. false otherwise.
total_videos The number of videos in criteria.
current_offset The number of videos skipped by pagination.
limit The maximum number of videos the API response per page will include.
video > channel Video category’s ID (CHID).
video > duration Video duration in seconds.
video > video_url The viewing URL to the video.
video > embedded_url The URL showing an embedded player of the video.

Search videos

$AVGLE_SEARCH_VIDEOS_API_URL = 'https://api.avgle.com/v1/search/';
$query = '三上悠亜';
$page = 0;
$limit = '?limit=2';
$response = json_decode(file_get_contents($url . urlencode($query). '/' . $page . $limit), true);
var_dump($response);
if ($response['success']) {
    $videos = $response['response']['videos'];
    doSomethingWith($videos);
}
import urllib.request
import urllib.parse
import json
AVGLE_SEARCH_VIDEOS_API_URL = 'https://api.avgle.com/v1/search/{}/{}?limit={}'
query = '三上悠亜'
page = 0
limit = 2
response = json.loads(urllib.request.urlopen(url.format(urllib.parse.quote_plus(query), page, limit)).read().decode())
print(response)
if response['success']:
    videos = response['response']['videos']
    do_something_with(videos)
// node.js
const request = require('request');
const AVGLE_SEARCH_VIDEOS_API_URL = 'https://api.avgle.com/v1/search/';
var query = '三上悠亜';
var page = 0;
var limit = '?limit=2';
request(AVGLE_SEARCH_VIDEOS_API_URL + encodeURIComponent(query) + '/' + page + limit, (error, response, body) => {
    if (err) return console.log(err);
    var response = JSON.parse(body);
    console.log(response);
    if (response.success) {
        var videos = response.response.videos;
        doSomethingWith(videos);
    }
});

// jQuery
var AVGLE_SEARCH_VIDEOS_API_URL = 'https://api.avgle.com/v1/search';
var query = '三上悠亜';
var page = 0;
var limit = '?limit=2';
$.getJSON(AVGLE_SEARCH_VIDEOS_API_URL + encodeURIComponent(query) + '/' + page + limit, function (response) {
    console.log(response);
    if (response.success) {
        var videos = response.response.videos;
        doSomethingWith(videos);
    }
})

The above command returns JSON structured like this:

{  
    "success":true,
    "response":{  
        "has_more":true,
        "total_videos":17,
        "current_offset":0,
        "limit":2,
        "videos":[  
            {  
                "vid":"19944",
                "uid":"1",
                "title":"三上悠亜 快感スプラッシュ!はじめての気持ち良すぎる潮吹き TEK-081",
                "keyword":"三上悠亜 三上悠亞",
                "channel":"1",
                "duration":10268.98,
                "framerate":28.71,
                "hd":true,
                "addtime":1490539669,
                "viewnumber":17945,
                "likes":12,
                "dislikes":5,
                "video_url":"https://avgle.com/video/19944/三上悠亜-快感スプラッシュ-はじめての気持ち良すぎる潮吹き-tek-081",
                "embedded_url":"https://avgle.com/embed/e3d0bde3b1c8b5d10362",
                "preview_url":"https://static.avgle.com/media/videos/tmb/19944/1.jpg"
            },
            {  
                "vid":"19824",
                "uid":"1",
                "title":"三上悠亜 Princess Peach TEK-067",
                "keyword":"三上悠亜 三上悠亞",
                "channel":"1",
                "duration":10579.71,
                "framerate":29.97,
                "hd":true,
                "addtime":1490538334,
                "viewnumber":11040,
                "likes":2,
                "dislikes":1,
                "video_url":"https://avgle.com/video/19824/三上悠亜-princess-peach-tek-067",
                "embedded_url":"https://avgle.com/embed/7f8a1da5fc490022a9f5",
                "preview_url":"https://static.avgle.com/media/videos/tmb/19824/1.jpg"
            }
        ]
    }
}

This endpoint retrieves the videos matches the search query which are in criteria.

HTTP Request

GET https://api.avgle.com/v1/search/<query>/<page>

URL Parameters

Parameter Description Possible values
query Search query URL escaped non empty string
page 0 based pagination [0, +inf)

Query Parameters

See above.

Response

See above.

Search JAVs

$AVGLE_SEARCH_JAV_API_URL = 'https://api.avgle.com/v1/jav/';
$query = 'sdde-480';
$page = 0;
$limit = '?limit=2';
$response = json_decode(file_get_contents($url . urlencode($query). '/' . $page . $limit), true);
var_dump($response);
if ($response['success']) {
    $videos = $response['response']['videos'];
    doSomethingWith($videos);
}
import urllib.request
import urllib.parse
import json
AVGLE_SEARCH_JAV_API_URL = 'https://api.avgle.com/v1/jav/{}/{}?limit={}'
query = 'sdde-480'
page = 0
limit = 2
response = json.loads(urllib.request.urlopen(url.format(urllib.parse.quote_plus(query), page, limit)).read().decode())
print(response)
if response['success']:
    videos = response['response']['videos']
    do_something_with(videos)
// node.js
const request = require('request');
const AVGLE_SEARCH_JAV_API_URL = 'https://api.avgle.com/v1/jav/';
var query = 'sdde-480';
var page = 0;
var limit = '?limit=2';
request(AVGLE_SEARCH_JAV_API_URL + encodeURIComponent(query) + '/' + page + limit, (error, response, body) => {
    if (err) return console.log(err);
    var response = JSON.parse(body);
    console.log(response);
    if (response.success) {
        var videos = response.response.videos;
        doSomethingWith(videos);
    }
});

// jQuery
var AVGLE_SEARCH_JAV_API_URL = 'https://api.avgle.com/v1/jav';
var query = 'sdde-480';
var page = 0;
var limit = '?limit=2';
$.getJSON(AVGLE_SEARCH_JAV_API_URL + encodeURIComponent(query) + '/' + page + limit, function (response) {
    console.log(response);
    if (response.success) {
        var videos = response.response.videos;
        doSomethingWith(videos);
    }
})

The above command returns JSON structured like this:

{  
    "success":true,
    "response":{  
        "has_more":false,
        "total_videos":1,
        "current_offset":0,
        "limit":2,
        "videos":[  
            {  
                "vid":"5824",
                "uid":"1",
                "title":"【にしくん、初SEX収録】ロリっこ痴女とえっち遊び 椎名そら&宮崎あや SDDE-480",
                "keyword":"椎名そら 宮崎あや",
                "channel":"1",
                "duration":6074,
                "framerate":30,
                "hd":true,
                "addtime":1488762607,
                "viewnumber":38590,
                "likes":7,
                "dislikes":2,
                "video_url":"https://avgle.com/video/5824/にしくん-初sex収録-ロリっこ痴女とえっち遊び-椎名そら-宮崎あや-sdde-480",
                "embedded_url":"https://avgle.com/embed/7b35e6eb462bbf80915c",
                "preview_url":"https://static.avgle.com/media/videos/tmb/5824/1.jpg"
            }
        ]
    }
}

This endpoint retrieves the videos with category (channel, CHID) <= 12 that matches the search query which are in criteria, similar to video search.

HTTP Request

GET https://api.avgle.com/v1/jav/<query>/<page>

URL Parameters

Parameter Description Possible values
query Search query URL escaped non empty string
page 0 based pagination [0, +inf)

Query Parameters

See above.

Response

See above.

Get video by VID

$AVGLE_GET_VIDEO_API_URL = 'https://api.avgle.com/v1/video/';
$vid = '5824';
$response = json_decode(file_get_contents($url . $vid), true);
var_dump($response);
if ($response['success']) {
    $video = $response['response']['video'];
    doSomethingWith($video);
}
import urllib.request
import json
AVGLE_GET_VIDEO_API_URL = 'https://api.avgle.com/v1/video/{}'
vid = '5824'
response = json.loads(urllib.request.urlopen(url.format(vid)).read().decode())
print(response)
if response['success']:
    video = response['response']['video']
    do_something_with(video)
// node.js
const request = require('request');
const AVGLE_GET_VIDEO_API_URL = 'https://api.avgle.com/v1/video/';
var vid = '5824';
request(AVGLE_GET_VIDEO_API_URL + vid, (error, response, body) => {
    if (err) return console.log(err);
    var response = JSON.parse(body);
    console.log(response);
    if (response.success) {
        var video = response.response.video;
        doSomethingWith(video);
    }
});

// jQuery
var AVGLE_GET_VIDEO_API_URL = 'https://api.avgle.com/v1/video';
var vid = '5824';
$.getJSON(AVGLE_GET_VIDEO_API_URL + vid, function (response) {
    console.log(response);
    if (response.success) {
        var video = response.response.video;
        doSomethingWith(video);
    }
})

The above command returns JSON structured like this:

{  
    "success":true,
    "response":{  
        "video":{  
            "vid":"5824",
            "uid":"1",
            "title":"【にしくん、初SEX収録】ロリっこ痴女とえっち遊び 椎名そら&宮崎あや SDDE-480",
            "keyword":"椎名そら 宮崎あや",
            "channel":"1",
            "duration":6074,
            "framerate":30,
            "hd":true,
            "addtime":1488762607,
            "viewnumber":38590,
            "likes":7,
            "dislikes":2,
            "video_url":"https://avgle.com/video/5824/にしくん-初sex収録-ロリっこ痴女とえっち遊び-椎名そら-宮崎あや-sdde-480",
            "embedded_url":"https://avgle.com/embed/7b35e6eb462bbf80915c",
            "preview_url":"https://static.avgle.com/media/videos/tmb/5824/1.jpg"
        }
    }
}

Or if video is not found (404)

{  
    "success":false,
    "response":{  
        "error_message":"Video of VID 5824 not found."
    }
}

This endpoint retrieves the video of specified VID.

HTTP Request

GET https://api.avgle.com/v1/video/<VID>

URL Parameters

Parameter Description Possible values
VID ID of the video Integer

Response

See above.

Rate limitation

Avgle API v1 currently impose a rate limit of 2 req/s with burst 10 reqs. It’s possible for us to impose more strict rate limit anytime depends on the system load without announcement.

When rate limit exceeded, a 503 Service Unavailable response will be sent.

Embedding videos

We allow other adult sites embed our videos by using the example HTML code below. The iframe’s style may be customized to fit your site’s layout.

<iframe width="530" height="298" src="https://avgle.com/embed/a6289b7bc8b0bdd8155d" frameborder="0" allowfullscreen></iframe>

However, the following abusive behaviors are strictly prohibited:

If any of the abusive behaviors is found, your site will be banned. Please contact partners@avgle.com to appeal.

In addition, we require HTTP referrer to our servers. The video’s playback will not function if you disabled sending HTTP referrer to Avgle, such as

Errors

The Avgle API v1 uses the following error codes:

Error Code Meaning
400 Bad Request – Your request sucks
404 Not Found – The specified video could not be found
429 Too Many Requests – You’re requesting too fast! Slow down!
5xx Internal Server Error – We had a problem with our server. Try again later.