Documentation banner
Documentation

API Documentation

Access our curated collection of yuri artwork through a simple API that respects artist attribution and original sources. We manually curate content while ensuring proper credit to creators.

Authentication

Our API is open and does not require authentication. As a non-commercial project, we believe in making art accessible while ensuring proper attribution to creators.

While no authentication is needed, you must follow our attribution requirements and respect rate limits. Our service will always remain free and non-commercial.

Attribution Requirements

Each response includes the original artist's name and source URL. You must display these prominently in immediate proximity to the artwork, with clickable links and without requiring user interaction. For social media shares, include artist handles in post text.

Endpoints

GET/api/posts

Retrieve artwork posts with full attribution and source information.

Query Parameters:

ParameterTypeRequiredDescription
categorystringNoFilter by content category (optional, returns random posts from all categories if not specified)
limitnumberNoNumber of random posts to return (default: 1, max: 20)
post_idstringNoFilter by specific post ID (overrides random selection)

Example Response:

{
  "success": true,
  "data": [
    {
      "post_id": "yuri94052",
      "post_author": "Airi Hio",
      "author_url": "https://example.com/artist/airi-hio",
      "post_url": "https://example.com/artwork/sakura-bloom",
      "image_url": "https://content.lesbians.ink/sfw_artwork/sakura-bloom.jpg",
      "category": "sfw_artwork",
      "added_at": "2024-04-01T12:00:00"
    }
  ]
}

Random Selection

By default, the API returns random posts from the specified category (or all categories if none specified). Each request will return a different set of posts. If you need a specific post, use the post_id parameter.

GET/api/posts/post-of-the-day

Get the current post of the day. Returns a new SFW artwork each day, ensuring all posts are shown before repeating.

Features:

  • Returns the same post throughout the day
  • Only includes SFW artwork
  • Tracks previously shown posts to avoid repetition
  • Resets history only after all posts have been shown

Example Response:

{
  "success": true,
  "data": [
    {
      "post_id": "yuri94052",
      "post_author": "Airi Hio",
      "author_url": "https://example.com/artist/airi-hio",
      "post_url": "https://example.com/artwork/sakura-bloom",
      "image_url": "https://content.lesbians.ink/sfw_artwork/sakura-bloom.jpg",
      "category": "sfw_artwork",
      "added_at": "2024-04-01T12:00:00"
    }
  ]
}

Post Selection

The post of the day is selected randomly from all SFW artwork that hasn't been featured recently. The system keeps track of previously shown posts to ensure all artwork gets featured before repeating. The selected post remains constant throughout the day (UTC).

Available Categories

Display NameCategory ValueDescription
SFW Artworksfw_artworkSafe for work artwork
NSFW Artworknsfw_artworkNot safe for work artwork
FanartfanartFan-created artwork of existing characters
Official Artofficial_artOfficial artwork from series or games
Original Artoriginal_artOriginal character artwork
SketchsketchSketch or work-in-progress artwork

Comics & Manga Categories

Display NameCategory ValueDescription
Yuri Mangayuri_mangaProfessional yuri manga content
DoujinshidoujinshiSelf-published manga works
ComiccomicWestern-style comics and webcomics

Other Categories

Display NameCategory ValueDescription
GIFgifAnimated GIF content

Code Examples

JavaScript / Node.js

// Fetch random artwork posts
const fetchArtwork = async () => {
  try {
    // Example with category and limit
    const response = await fetch('https://lesbians.ink/api/posts?category=artwork&limit=5');
    
    // Example without category (all categories)
    // const response = await fetch('https://lesbians.ink/api/posts?limit=5');
    
    const data = await response.json();
    
    if (data.success) {
      // Process the data
      data.data.forEach(post => {
        console.log(`Post by ${post.post_author}: ${post.image_url}`);
      });
    } else {
      console.error('Error fetching data');
    }
  } catch (error) {
    console.error('API request failed:', error);
  }
};

// Fetch random posts
fetchArtwork();

Python

import requests

def fetch_artwork():
    try:
        # Example with category and limit
        response = requests.get('https://lesbians.ink/api/posts', params={
            'category': 'artwork',
            'limit': 5
        })
        
        # Example without category (all categories)
        # response = requests.get('https://lesbians.ink/api/posts', params={
        #     'limit': 5
        # })
        
        data = response.json()
        
        if data['success']:
            # Process the data
            for post in data['data']:
                print(f"Post by {post['post_author']}: {post['image_url']}")
        else:
            print("Error fetching data")
    except Exception as e:
        print(f"API request failed: {e}")

# Fetch random posts
fetch_artwork()

Rate Limiting

To ensure fair usage and maintain our free, non-commercial service quality, we implement dynamic rate limits based on the number of posts requested per API call. The rate limits are more strict when requesting more posts.

Posts per RequestRequests per Minute
1 post (default)50 requests
2 posts45 requests
3 posts40 requests
4 posts35 requests
5 posts30 requests
6-20 posts25-5 requests

Important Notes

  • • The default number of posts per request is 1
  • • Maximum number of posts per request is 20
  • • Rate limits are tracked per IP address
  • • Hourly limit of 1000 requests applies to all requests
  • • Rate limits are more strict when requesting more posts to prevent abuse

Rate Limit Exceeded

If you exceed the rate limits, you will receive a 429 Too Many Requests response. The response will include a Retry-After header indicating when you can make another request. Repeated violations may result in temporary or permanent API access revocation.