Skip to main content
GET
https://api.pictory.ai
/
pictoryapis
/
v2
/
projects
List Projects
curl --request GET \
  --url https://api.pictory.ai/pictoryapis/v2/projects \
  --header 'Authorization: <authorization>'
{
  "items": [
    {
      "id": "20251222191648030d7df02f5b4054d4ca8831f1369459e25",
      "name": "Hello World Template",
      "source": "script",
      "projectPreview": "https://d3uryq9bhgb5qr.cloudfront.net/TeamsAnnual/aa46778d-7965-46e0-967d-b48ee5d6ead9/f1c3b5a7-65f9-4386-a3ef-5ac378c12fa2/image/f1c3b5a7-65f9-4386-a3ef-5ac378c12fa2.jpg",
      "savedDate": "2025-12-23T01:54:26.755Z",
      "schemaVersion": "v3",
      "type": "project"
    },
    {
      "id": 1762768083800,
      "name": "my_saved_project",
      "source": "script",
      "projectPreview": "https://media.gettyimages.com/id/2161111014/video/create-social-media-content.mp4",
      "savedDate": "2025-11-10T09:48:03.800Z",
      "aspectRatio": "sixteen-nine",
      "schemaVersion": "v2",
      "type": "project"
    },
    {
      "id": 1751663566232,
      "name": "What_is_Calculus",
      "source": "transcribe",
      "projectPreview": null,
      "savedDate": "2025-07-04T21:13:26.094Z",
      "aspectRatio": "sixteen-nine",
      "type": "project"
    }
  ],
  "pageKey": null
}

Overview

Retrieve a list of all projects associated with your Pictory account. Projects represent video creation workflows at various stages, including those created from scripts, video/audio transcriptions, or URLs.
You need a valid API key to use this endpoint. Get your API key from the API Access page in your Pictory dashboard.

API Endpoint

GET https://api.pictory.ai/pictoryapis/v2/projects

Request Parameters

Headers

Authorization
string
required
API key for authentication (starts with pictai_)
Authorization: YOUR_API_KEY

Query Parameters

pagekey
string
Pagination token for retrieving the next page of results. Pass this value exactly as received from the pageKey field in the previous API response.
folder
string
Filter to retrieve projects from a specific folder by folder ID

Response

items
array of objects
Array of project objects
pageKey
string | null
Pagination token for retrieving the next page of results. null if there are no more pages.

Response Examples

{
  "items": [
    {
      "id": "20251222191648030d7df02f5b4054d4ca8831f1369459e25",
      "name": "Hello World Template",
      "source": "script",
      "projectPreview": "https://d3uryq9bhgb5qr.cloudfront.net/TeamsAnnual/aa46778d-7965-46e0-967d-b48ee5d6ead9/f1c3b5a7-65f9-4386-a3ef-5ac378c12fa2/image/f1c3b5a7-65f9-4386-a3ef-5ac378c12fa2.jpg",
      "savedDate": "2025-12-23T01:54:26.755Z",
      "schemaVersion": "v3",
      "type": "project"
    },
    {
      "id": 1762768083800,
      "name": "my_saved_project",
      "source": "script",
      "projectPreview": "https://media.gettyimages.com/id/2161111014/video/create-social-media-content.mp4",
      "savedDate": "2025-11-10T09:48:03.800Z",
      "aspectRatio": "sixteen-nine",
      "schemaVersion": "v2",
      "type": "project"
    },
    {
      "id": 1751663566232,
      "name": "What_is_Calculus",
      "source": "transcribe",
      "projectPreview": null,
      "savedDate": "2025-07-04T21:13:26.094Z",
      "aspectRatio": "sixteen-nine",
      "type": "project"
    }
  ],
  "pageKey": null
}

Code Examples

Replace YOUR_API_KEY with your actual API key that starts with pictai_
curl --request GET \
  --url 'https://api.pictory.ai/pictoryapis/v2/projects' \
  --header 'Authorization: YOUR_API_KEY' \
  --header 'accept: application/json' | python -m json.tool

Usage Notes

Projects are returned in reverse chronological order by saved date, with the most recently saved projects appearing first.
Pagination: When you have many projects, use the pageKey value from the response to retrieve subsequent pages. Pass the pageKey as the pagekey query parameter in your next request.
Schema Versions: Projects may have different schema versions (v2, v3, or null). The schema version affects the structure and capabilities of the project. Newer schema versions (v3) typically support more features.

Common Use Cases

1. List All Projects

Retrieve and display all projects in your account:
import requests

url = "https://api.pictory.ai/pictoryapis/v2/projects"
headers = {"Authorization": "YOUR_API_KEY"}

response = requests.get(url, headers=headers)
data = response.json()

print(f"Total projects: {len(data['items'])}")

for project in data['items']:
    print(f"{project['name']} ({project['source']})")

2. Paginate Through Projects

Handle pagination to retrieve all projects across multiple pages:
def get_all_projects(api_key):
    """
    Retrieve all projects using pagination
    """
    all_projects = []
    page_key = None
    base_url = "https://api.pictory.ai/pictoryapis/v2/projects"
    headers = {"Authorization": api_key}

    while True:
        # Build URL with page key if available
        url = f"{base_url}?pagekey={page_key}" if page_key else base_url

        response = requests.get(url, headers=headers)
        data = response.json()

        # Add projects from this page
        all_projects.extend(data['items'])

        # Check if there are more pages
        page_key = data.get('pageKey')
        if not page_key:
            break

    return all_projects

# Get all projects
projects = get_all_projects("YOUR_API_KEY")
print(f"Retrieved {len(projects)} total projects")

3. Filter Projects by Source Type

Filter projects based on how they were created:
const getProjectsBySource = async (sourceType) => {
  const response = await fetch(
    'https://api.pictory.ai/pictoryapis/v2/projects',
    {
      headers: { 'Authorization': 'YOUR_API_KEY' }
    }
  );

  const data = await response.json();

  // Filter by source type
  const filtered = data.items.filter(p => p.source === sourceType);

  console.log(`Found ${filtered.length} ${sourceType} projects`);
  return filtered;
};

// Get only script-based projects
const scriptProjects = await getProjectsBySource('script');

// Get only transcription-based projects
const transcribeProjects = await getProjectsBySource('transcribe');

// Get only URL-based projects
const urlProjects = await getProjectsBySource('url');

4. Get Projects from Specific Folder

Retrieve projects from a specific folder:
def get_folder_projects(folder_id, api_key):
    """
    Get all projects within a specific folder
    """
    url = f"https://api.pictory.ai/pictoryapis/v2/projects?folder={folder_id}"
    headers = {"Authorization": api_key}

    response = requests.get(url, headers=headers)
    data = response.json()

    return data['items']

# Example usage
folder_projects = get_folder_projects("your-folder-id", "YOUR_API_KEY")
print(f"Folder contains {len(folder_projects)} projects")

5. Find Recently Modified Projects

Get projects modified within the last N days:
from datetime import datetime, timedelta
import requests

def get_recent_projects(days=7, api_key="YOUR_API_KEY"):
    """
    Get projects modified in the last N days
    """
    url = "https://api.pictory.ai/pictoryapis/v2/projects"
    headers = {"Authorization": api_key}

    response = requests.get(url, headers=headers)
    data = response.json()

    # Calculate cutoff date
    cutoff = datetime.now() - timedelta(days=days)

    # Filter by saved date
    recent = [
        p for p in data['items']
        if datetime.fromisoformat(p['savedDate'].replace('Z', '+00:00')) > cutoff
    ]

    return recent

# Get projects from last 7 days
recent_projects = get_recent_projects(days=7)
print(f"Found {len(recent_projects)} projects modified in last 7 days")

for project in recent_projects:
    print(f"- {project['name']} (saved: {project['savedDate']})")

6. Organize Projects by Schema Version

Group projects by their schema version:
const organizeBySchemaVersion = async () => {
  const response = await fetch(
    'https://api.pictory.ai/pictoryapis/v2/projects',
    { headers: { 'Authorization': 'YOUR_API_KEY' } }
  );

  const data = await response.json();

  // Group by schema version
  const grouped = data.items.reduce((acc, project) => {
    const version = project.schemaVersion || 'legacy';
    if (!acc[version]) acc[version] = [];
    acc[version].push(project);
    return acc;
  }, {});

  // Display statistics
  Object.entries(grouped).forEach(([version, projects]) => {
    console.log(`${version}: ${projects.length} projects`);
  });

  return grouped;
};

// Organize projects
const projectsByVersion = await organizeBySchemaVersion();

7. Export Project Metadata

Export project metadata to CSV or JSON:
import json
import csv
import requests

def export_projects_json(api_key, filename="projects.json"):
    """
    Export all projects to JSON file
    """
    url = "https://api.pictory.ai/pictoryapis/v2/projects"
    headers = {"Authorization": api_key}

    response = requests.get(url, headers=headers)
    data = response.json()

    with open(filename, 'w') as f:
        json.dump(data['items'], f, indent=2)

    print(f"Exported {len(data['items'])} projects to {filename}")

def export_projects_csv(api_key, filename="projects.csv"):
    """
    Export all projects to CSV file
    """
    url = "https://api.pictory.ai/pictoryapis/v2/projects"
    headers = {"Authorization": api_key}

    response = requests.get(url, headers=headers)
    data = response.json()

    if not data['items']:
        print("No projects to export")
        return

    # Get fieldnames from first project
    fieldnames = ['id', 'name', 'source', 'savedDate', 'aspectRatio', 'schemaVersion', 'type']

    with open(filename, 'w', newline='') as f:
        writer = csv.DictWriter(f, fieldnames=fieldnames, extrasaction='ignore')
        writer.writeheader()
        writer.writerows(data['items'])

    print(f"Exported {len(data['items'])} projects to {filename}")

# Export to both formats
export_projects_json("YOUR_API_KEY")
export_projects_csv("YOUR_API_KEY")

8. Search Projects by Name

Search for projects by name pattern:
def search_projects_by_name(search_term, api_key):
    """
    Search for projects matching a name pattern
    """
    url = "https://api.pictory.ai/pictoryapis/v2/projects"
    headers = {"Authorization": api_key}

    response = requests.get(url, headers=headers)
    data = response.json()

    # Case-insensitive search
    matches = [
        p for p in data['items']
        if search_term.lower() in p['name'].lower()
    ]

    return matches

# Example usage
results = search_projects_by_name("hello", "YOUR_API_KEY")
print(f"Found {len(results)} projects containing 'hello':")
for project in results:
    print(f"- {project['name']} (ID: {project['id']})")