Quick Navigation

TMNT API Documentation

Everything you need to build your own TMNT-powered application!

Overview

The TMNT API provides programmatic access to comprehensive data about the Teenage Mutant Ninja Turtles universe. This RESTful API returns JSON responses and requires no authentication for public endpoints.

📄 API Specifications

Download the complete API specification for use with tools like Swagger UI, Postman, or code generators:

🚀 Fast & Reliable

Powered by Vercel Edge Config for ultra-low latency worldwide

📦 No Auth Required

Public API with no authentication needed for basic usage

🔄 Always Up-to-Date

Regularly maintained with accurate TMNT data

Authentication

The TMNT API is currently open and requires no authentication. Simply make requests to the endpoints and receive data!

Note: Rate limiting may apply for excessive usage. See Rate Limiting section.

Base URL

https://www.turtletime.dev/api/v1

All API endpoints are relative to this base URL.

API Endpoints

🐢 Turtles

GET /turtles

Get all ninja turtles

Example Request

curl https://www.turtletime.dev/api/v1/turtles

Example Response

[
  {
    "name": "leonardo",
    "full_name": "Leonardo",
    "color": "blue",
    "weapon": "Katana",
    "personality": "Leader, disciplined, responsible",
    "favorite_pizza": "Pepperoni",
    "catchphrase": "We strike hard and fade away into the night",
    "image_url": "/images/leonardo.svg"
  },
  {
    "name": "donatello",
    "full_name": "Donatello",
    "color": "purple",
    "weapon": "Bo Staff",
    "personality": "Tech genius, inventor, problem solver",
    "favorite_pizza": "Hawaiian",
    "catchphrase": "Does machine!",
    "image_url": "/images/donatello.svg"
  }
  // ... more turtles
]
GET /turtles/{name}

Get a specific turtle by name

Parameter Type Description
name string Turtle name (leonardo, donatello, raphael, michelangelo)

Example Request

curl https://www.turtletime.dev/api/v1/turtles/leonardo

👹 Villains

GET /villains

Get all villains

Example Response Schema

{
  "name": "string",
  "real_name": "string",
  "description": "string",
  "abilities": ["string"],
  "first_appearance": "string",
  "arch_enemy_of": "string | null",
  "image_url": "string"
}
GET /villains/{name}

Get a specific villain by name

Parameter Type Description
name string Villain name (shredder, krang, bebop, rocksteady, baxter_stockman)

📺 Episodes

GET /episodes

Get episodes with optional filtering and pagination

Query Parameter Type Description
season integer Filter by season number (optional)
limit integer Number of results per page (default: 10)
offset integer Number of results to skip (default: 0)

Example Request

curl "https://www.turtletime.dev/api/v1/episodes?season=1&limit=5"

💬 Quotes

GET /quotes/random

Get a random TMNT quote

Example Response

{
  "id": 1,
  "text": "Cowabunga!",
  "character": "Michelangelo",
  "context": "Battle cry"
}

⚔️ Weapons

GET /weapons

Get all turtle weapons

Response Schema

{
  "name": "string",
  "type": "string",
  "wielder": "string",
  "description": "string",
  "special_moves": ["string"]
}

Response Format

All responses are returned in JSON format with appropriate content-type headers.

Success Response

HTTP/1.1 200 OK
Content-Type: application/json

{
  // Response data
}

Error Response

HTTP/1.1 404 Not Found
Content-Type: application/json

{
  "detail": "Turtle 'splinter' not found"
}

HTTP Status Codes

Code Description
200 Success - Request completed successfully
400 Bad Request - Invalid parameters
404 Not Found - Resource doesn't exist
422 Unprocessable Entity - Validation error
500 Internal Server Error - Something went wrong

Code Examples

JavaScript (Fetch API)

// Get all turtles
async function getTurtles() {
  try {
    const response = await fetch('https://www.turtletime.dev/api/v1/turtles');
    const turtles = await response.json();
    console.log(turtles);
  } catch (error) {
    console.error('Error:', error);
  }
}

// Get specific turtle
async function getTurtle(name) {
  try {
    const response = await fetch(`https://www.turtletime.dev/api/v1/turtles/${name}`);
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }
    const turtle = await response.json();
    console.log(turtle);
  } catch (error) {
    console.error('Error:', error);
  }
}

Python (requests)

import requests

BASE_URL = "https://www.turtletime.dev/api/v1"

# Get all turtles
def get_turtles():
    response = requests.get(f"{BASE_URL}/turtles")
    if response.status_code == 200:
        return response.json()
    else:
        raise Exception(f"API request failed with status {response.status_code}")

# Get specific turtle
def get_turtle(name):
    response = requests.get(f"{BASE_URL}/turtles/{name}")
    if response.status_code == 200:
        return response.json()
    elif response.status_code == 404:
        raise Exception(f"Turtle '{name}' not found")
    else:
        raise Exception(f"API request failed with status {response.status_code}")

# Example usage
if __name__ == "__main__":
    # Get all turtles
    turtles = get_turtles()
    print(f"Found {len(turtles)} turtles")
    
    # Get Leonardo
    leo = get_turtle("leonardo")
    print(f"{leo['full_name']} uses {leo['weapon']}")

cURL

# Get all turtles
curl https://www.turtletime.dev/api/v1/turtles

# Get specific turtle
curl https://www.turtletime.dev/api/v1/turtles/leonardo

# Get all villains
curl https://www.turtletime.dev/api/v1/villains

# Get episodes from season 1
curl "https://www.turtletime.dev/api/v1/episodes?season=1"

# Get random quote
curl https://www.turtletime.dev/api/v1/quotes/random

# Pretty print with jq
curl https://www.turtletime.dev/api/v1/turtles | jq '.'

PHP

<?php
$baseUrl = "https://www.turtletime.dev/api/v1";

// Get all turtles
function getTurtles() {
    global $baseUrl;
    $response = file_get_contents("$baseUrl/turtles");
    return json_decode($response, true);
}

// Get specific turtle
function getTurtle($name) {
    global $baseUrl;
    $context = stream_context_create([
        "http" => ["ignore_errors" => true]
    ]);
    
    $response = file_get_contents("$baseUrl/turtles/$name", false, $context);
    $httpCode = substr($http_response_header[0], 9, 3);
    
    if ($httpCode == "200") {
        return json_decode($response, true);
    } elseif ($httpCode == "404") {
        throw new Exception("Turtle '$name' not found");
    } else {
        throw new Exception("API request failed with status $httpCode");
    }
}

// Example usage
try {
    // Get all turtles
    $turtles = getTurtles();
    echo "Found " . count($turtles) . " turtles\n";
    
    // Get Leonardo
    $leo = getTurtle("leonardo");
    echo $leo['full_name'] . " uses " . $leo['weapon'] . "\n";
} catch (Exception $e) {
    echo "Error: " . $e->getMessage() . "\n";
}
?>

Rate Limiting

To ensure fair usage and maintain service quality:

  • No authentication required for normal usage
  • Reasonable usage limits apply (1000 requests per hour)
  • Responses include caching headers for optimal performance
  • If you need higher limits, please contact us

Support & Feedback

Having issues or need help?

Ready to build something awesome?

Start using the TMNT API in your projects today!

Try it Now