
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.
Table of Contents
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.
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
/api/posts
Retrieve artwork posts with full attribution and source information.
Query Parameters:
Parameter | Type | Required | Description |
---|---|---|---|
category | string | No | Filter by content category (optional, returns random posts from all categories if not specified) |
limit | number | No | Number of random posts to return (default: 1, max: 20) |
post_id | string | No | Filter 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.
/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 Name | Category Value | Description |
---|---|---|
SFW Artwork | sfw_artwork | Safe for work artwork |
NSFW Artwork | nsfw_artwork | Not safe for work artwork |
Fanart | fanart | Fan-created artwork of existing characters |
Official Art | official_art | Official artwork from series or games |
Original Art | original_art | Original character artwork |
Sketch | sketch | Sketch or work-in-progress artwork |
Comics & Manga Categories
Display Name | Category Value | Description |
---|---|---|
Yuri Manga | yuri_manga | Professional yuri manga content |
Doujinshi | doujinshi | Self-published manga works |
Comic | comic | Western-style comics and webcomics |
Other Categories
Display Name | Category Value | Description |
---|---|---|
GIF | gif | Animated 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 Request | Requests per Minute |
---|---|
1 post (default) | 50 requests |
2 posts | 45 requests |
3 posts | 40 requests |
4 posts | 35 requests |
5 posts | 30 requests |
6-20 posts | 25-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.