Get the Plugin Free — Download APIJAV v3.4.0 (plugin + theme) to connect your WordPress site to this API.
⬇ Free Download
⏳ Connecting…
Base URL
Base Endpoint
https://server.apijav.com/wp-json/myvideo/v1
Authentication

All GET endpoints are fully public — no API keys required by default. Optional X-API-Key header support is available for private servers.

Optional Header
X-API-Key: your-secret-key
X-Client-Site: https://your-client-site.com
Rate Limiting — If the server has rate limiting enabled, excessive requests from a single IP will return HTTP 429. Contact your server admin to whitelist your IP or raise the limit.
Response Headers

Paginated responses include these standard WordPress REST API headers:

HeaderDescription
X-WP-TotalTotal number of matching posts across all pages.
X-WP-TotalPagesTotal number of pages at the current per_page setting.
Access-Control-Allow-OriginAlways * — CORS is fully open on all endpoints.
Endpoints
GET /wp-json/myvideo/v1/posts List posts with filtering & pagination

Query Parameters

ParameterTypeDefaultDescription
per_pageinteger20Results per page. Max 1000.
pageinteger1Page number. Use with X-WP-TotalPages header for pagination.
searchstringKeyword search against post title and content.
categorystringFilter by category name or numeric ID.
tagstringFilter by tag slug or name.
actorstringFilter by actor taxonomy term slug or name.
studiostringFilter by studio taxonomy term slug or name.
orderbystringdateSort field: date, title, or views.
orderstringDESCASC or DESC.
afterstringISO 8601 date. Only return posts published after this date.

Example Request

URL
https://server.apijav.com/wp-json/myvideo/v1/posts?per_page=10&page=1&category=Uncensored&orderby=views&order=DESC

Live Test

Example Response

200 OK — Array of Post Objects
[
  {
    "id":          1042,
    "title":       "Sample Video Title",
    "slug":        "sample-video-title",
    "date":        "2024-11-15T12:00:00+09:00",
    "thumbnail":   "https://server.com/wp-content/uploads/thumb.jpg",
    "duration":    "01:23:45",
    "categories": ["Uncensored", "Amateur"],
    "tags":        ["HD", "Blowjob"],
    "actors":      ["Yua Mikami"],
    "studio":      "Prestige",
    "code":        "ABP-123",
    "views":       48293,
    "likes":       1024,
    "dislikes":    12,
    "is_hd":       true,
    "embed_url":   "https://server.com/?mvembed=TOKEN&id=1042",
    "iframe_html": "<iframe src=\"...\" width=\"100%\" ...></iframe>",
    "player_api":  "https://server.com/wp-json/myvideo/v1/player/1042"
  }
]
GET /wp-json/myvideo/v1/posts/{id} Get a single post by ID

Path Parameters

ParameterTypeRequiredDescription
idintegerYesWordPress post ID on the server.

Example Request

URL
https://server.apijav.com/wp-json/myvideo/v1/posts/1042

Live Test

Returns a single Post Object (same schema as the list endpoint). Returns HTTP 404 if the post doesn't exist or isn't published.

GET /wp-json/myvideo/v1/player/{id} Get embed URL & iframe for a post

Path Parameters

ParameterTypeRequiredDescription
idintegerYesWordPress post ID on the server.
🔒
Permanent Tokens — Embed URLs use permanent tokens that never expire. Safe to store the embed_url or iframe_html directly in your database forever.

Example Request

URL
https://server.apijav.com/wp-json/myvideo/v1/player/1042

Live Test

Example Response

200 OK — Player Object
{
  "post_id":     1042,
  "embed_url":   "https://server.com/?mvembed=abc123&id=1042",
  "iframe_html": "<iframe src=\"https://server.com/?mvembed=...\" width=\"100%\" height=\"500\" frameborder=\"0\" allowfullscreen allow=\"autoplay; fullscreen; encrypted-media\" scrolling=\"no\"></iframe>",
  "permanent":   true
}
POST /wp-json/myvideo/v1/webhook/register Register a client webhook URL on the server

Used by the APIJAV client plugin to register itself for push notifications. The server will POST new post data to the registered URL whenever a new video is published.

Request Body (JSON)

FieldTypeRequiredDescription
urlstringYesThe client site's webhook receiver URL.
secretstringYesHMAC shared secret for payload signing.

Example

curl
curl -X POST "https://server.apijav.com/wp-json/myvideo/v1/webhook/register" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://yourclient.com/wp-json/mvapic/v1/webhook","secret":"your-hmac-secret"}'
ℹ️
Auto-registration — The APIJAV client plugin handles this automatically when you click "Auto Register" in APIJAV → Webhook. Manual calls are only needed for custom integrations.
POST /wp-json/mvapic/v1/webhook Client-side webhook receiver endpoint

This endpoint lives on your client site (installed by the APIJAV plugin). The server calls this URL when a new video is published, and the client auto-imports it.

Request Headers from Server

HeaderDescription
X-MVAPIC-SignatureHMAC-SHA256 signature of the payload body, using the shared secret.
Content-Typeapplication/json

Payload Body

JSON
{
  "action": "new_post",
  "post_id": 1042,
  "server_url": "https://server.apijav.com"
}

The receiver verifies the HMAC signature, fetches the full post from /posts/{post_id}, and imports it locally. Returns 403 if the receiver is disabled or the signature is invalid.

Code Examples
JS JavaScript — Fetch with Pagination
JavaScript
const BASE = 'https://server.apijav.com/wp-json/myvideo/v1';

// Fetch page 1 with 100 results, filtered by category
const response = await fetch(
  `${BASE}/posts?per_page=100&page=1&category=Uncensored&orderby=views&order=DESC`
);

const total      = parseInt(response.headers.get('X-WP-Total'));
const totalPages = parseInt(response.headers.get('X-WP-TotalPages'));
const posts      = await response.json();

console.log(`Total: ${total} across ${totalPages} pages`);

// Filter by studio
const studio = await fetch(`${BASE}/posts?studio=Prestige&per_page=20`).then(r => r.json());

// Get embed URL for a specific post
const player = await fetch(`${BASE}/player/1042`).then(r => r.json());
console.log(player.embed_url); // permanent — safe to store
PHP PHP — WordPress wp_remote_get
PHP
$base = 'https://server.apijav.com/wp-json/myvideo/v1';

// Fetch posts filtered by studio
$response = wp_remote_get( $base . '/posts?per_page=100&page=1&studio=Prestige', [
    'headers' => [ 'X-Client-Site' => home_url() ],
] );
$posts    = json_decode( wp_remote_retrieve_body( $response ), true );
$total    = intval( wp_remote_retrieve_header( $response, 'x-wp-total' ) );

foreach ( $posts as $post ) {
    echo $post['title'] . ' — ' . $post['studio'] . "\n";
    echo $post['embed_url'] . "\n"; // permanent
}

// Get player for single post
$player = json_decode(
    wp_remote_retrieve_body( wp_remote_get( $base . '/player/1042' ) ),
    true
);
echo $player['iframe_html']; // ready-to-output iframe
CLI cURL — Command Line
bash
# List posts (newest first)
curl -s "https://server.apijav.com/wp-json/myvideo/v1/posts?per_page=10" \
  -H "Accept: application/json" | jq .

# Get total count from headers
curl -sI "https://server.apijav.com/wp-json/myvideo/v1/posts?per_page=1" \
  | grep -i "x-wp-total"

# Filter by category + studio
curl -s "https://server.apijav.com/wp-json/myvideo/v1/posts?category=Uncensored&studio=Prestige&per_page=100"

# Sort by most viewed
curl -s "https://server.apijav.com/wp-json/myvideo/v1/posts?orderby=views&order=DESC&per_page=20"

# Get player embed URL
curl -s "https://server.apijav.com/wp-json/myvideo/v1/player/1042" \
  | jq .embed_url
PY Python — requests library
Python
import requests

BASE = 'https://server.apijav.com/wp-json/myvideo/v1'

# Fetch all pages for a given filter
def get_all_posts(category=None, studio=None, actor=None):
    all_posts = []
    page = 1
    while True:
        params = {'per_page': 100, 'page': page}
        if category: params['category'] = category
        if studio:   params['studio']   = studio
        if actor:    params['actor']    = actor
        r = requests.get(f'{BASE}/posts', params=params)
        posts = r.json()
        if not posts: break
        all_posts.extend(posts)
        total_pages = int(r.headers.get('X-WP-TotalPages', 1))
        if page >= total_pages: break
        page += 1
    return all_posts

posts = get_all_posts(studio='Prestige')
print(f'Total: {len(posts)} posts')
Response Schema
Post Object
FieldTypeDescription
idintegerWordPress post ID on the server.
titlestringPost title, HTML-decoded.
slugstringURL slug.
datestringPublish date in ISO 8601 format.
thumbnailstringThumbnail image URL.
durationstringVideo duration as HH:MM:SS.
categoriesstring[]Category names.
tagsstring[]Tag names.
actorsstring[]Actor names (custom taxonomy). Empty array if not registered.
studiostringStudio name (first term of studio custom taxonomy).
codestringVideo code/product ID. Used for duplicate detection.
viewsintegerView count from post_views_count meta.
likesintegerLike count from likes_count meta.
dislikesintegerDislike count.
is_hdbooleantrue if HD quality (hd_video meta is "on").
embed_urlstringPermanent embed URL. Safe to store in database.
iframe_htmlstringReady-to-output <iframe> tag.
player_apistringURL to the /player/{id} endpoint for this post.
Player Object
FieldTypeDescription
post_idintegerWordPress post ID.
embed_urlstringPermanent embed URL.
iframe_htmlstringFull <iframe> tag, ready to echo.
permanentbooleanAlways true. Tokens never expire.
Client Plugin — APIJAV v3.4.0
WordPress REST Endpoints (Client Side)

The APIJAV client plugin registers these endpoints on your client WordPress site for internal use and webhook integration.

EndpointMethodDescription
/wp-json/mvapic/v1/webhookPOSTReceives webhook pushes from the server. Verifies HMAC signature, auto-imports post.
Download the Plugin Install the APIJAV client plugin on your WordPress site to start importing videos.

⬇ apijav-v3.4.0.zip — Free Download