TUM Research Information API

TUM Research Information API

Access publication and project data from the TUM Pure research information system. Query publications and projects by organization or person with optional type filtering.

Overview

This API provides access to publication and project data from the TUM research information system (Pure). You can retrieve publications and projects associated with specific organizations or persons, with optional filtering by type.

Base URL: https://fisapi.it.tum.de/

Available Data

186,941
Publications
2,355
Authors
4,524
Projects
1,269
Organizations

Pagination

All endpoints support pagination to handle large result sets efficiently. By default, results are limited to 50 items per page, with a maximum of 100 per page.

Authentication

All API endpoints require authentication using a Bearer token. You must include the token in the Authorization header of every request.

Need an API token? Contact cio@tum.de to request access.

Using Your Token

Include the token in the Authorization header:

Authorization: Bearer YOUR_API_TOKEN

Example Request

curl -H "Authorization: Bearer YOUR_API_TOKEN" \
     "https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC"

Error Responses

Status Response Description
401 {"error": "Missing Authorization header..."} No token provided
401 {"error": "Invalid API token"} Token not recognized
401 {"error": "API token has been revoked"} Token was revoked by administrator

API Endpoints

GET /publications

Retrieve publications by organization or person TUM ID. When querying by organization, publications from all child organizations in the hierarchy are automatically included.

Parameters

Parameter Type Required Description
tumId string Required The TUM ID of the organization or person. Supports multiple IDs separated by commas (e.g., TUS1ABC,TUS2DEF)
by string Required Filter type: org for organization, person for person
type string Optional Filter by publication type (see available types below)
keywords string Optional Filter by keywords - searches for publications containing the specified keyword(s). Max 200 characters.
year integer Optional Filter by publication year (4-digit, e.g. 2024). Range: 1900-2100.
sort string Optional Sort field: year (publicationDate) or title. Default: year.
order string Optional Sort direction: asc or desc. Default: desc.
page integer Optional Page number for pagination (default: 1)
per_page integer Optional Number of results per page (min: 10, max: 100, default: 50)

Response

{
    "orgTumIds": ["TUS1ABC"],            // or "personTumIds" depending on 'by' parameter
                                         // Array of successfully found TUM IDs
    "pagination": {
        "page": 1,
        "per_page": 50,
        "total": 150,
        "total_pages": 3
    },
    "count": 50,                         // Number of publications in current page
    "sort": "year",                      // active sort field
    "order": "desc",                     // active sort direction
    "availableTypes": ["Article", "Chapter", "Conference contribution"],
                                         // distinct publication types in the filtered set
                                         // (ignores the active type filter, so consumers can switch)
    "filteredByType": "Article",         // only present if type filter was used
    "filteredByKeywords": "machine learning",  // only present if keywords filter was used
    "filteredByYear": 2024,              // only present if year filter was used
    "notFoundIds": ["TUS9XYZ"],          // only present if some IDs were not found
    "publications": [
        {
            "id": 1,
            "typeDiscriminator": "JournalArticle",
            "pureId": 12345,
            "uuid": "12345678-1234-1234-1234-123456789abc",
            "title": "Publication Title",
            "subTitle": "Optional Subtitle",
            "abstract": "This paper presents...",
            "keywords": "machine learning; artificial intelligence; healthcare",
            "type": "Article",
            "publicationStatus": "published",
            "publicationDate": 20240115,
            "authors": "Smith, John; Doe, Jane",
            "doi": "10.1234/example.2024.001",
            "pages": "1-15",
            "articleNumber": "e12345",
            "numberOfPages": 15,
            "volume": "42",
            "journalNumber": "3",
            "journalTitle": "Journal of Example Research",
            "issn": "1234-5678",
            "isbn": "978-3-16-148410-0",
            "publisher": "Springer Nature",
            "peerReview": true,
            "openAccess": "Gold",
            "contentHash": "a1b2c3d4...",
            "lastSyncedAt": "2024-01-15 10:30:00",
            "url": "https://portal.fis.tum.de/en/publications/12345678-1234-1234-1234-123456789abc"
        }
    ]
}

Available Publication Types

Abstract Anthology Article Book Book/Film/Article review Chapter Comment/debate Commissioned report Conference article Conference contribution Discussion paper Doctoral Thesis Editorial Entry for encyclopedia/dictionary Featured article Foreword/postscript Letter Master's Thesis Meeting Abstract Other contribution Paper Patent Poster Preprint Review article Scientific review Short survey Software Special issue Working paper
GET /publication-types

Retrieve all currently available publication types. This endpoint returns a simple list of all publication type values that can be used with the type parameter in the publications endpoint.

Parameters

This endpoint does not require any parameters.

Response

{
    "count": 15,
    "types": [
        "Article",
        "Book",
        "Conference",
        "Contribution to Book/Anthology",
        "Patent",
        "Thesis",
        "..."
    ]
}
GET /projects

Retrieve projects by organization or person TUM ID. When querying by organization, projects from all child organizations in the hierarchy are automatically included.

Note: Only projects with Pure workflow step validated are returned. Projects in earlier states (entryInProgress, forApproval, approved, forRevalidation) and projects without a workflow step are excluded.

Parameters

Parameter Type Required Description
tumId string Required The TUM ID of the organization or person. Supports multiple IDs separated by commas (e.g., TUS1ABC,TUS2DEF)
by string Required Filter type: org for organization, person for person
type string Optional Filter by project type (e.g., "Research"). Max 255 characters.
year integer Optional Filter by project start year (4-digit, e.g. 2024). Range: 1900-2100.
sort string Optional Sort field: year (startDate) or title. Default: year.
order string Optional Sort direction: asc or desc. Default: desc.
page integer Optional Page number for pagination (default: 1)
per_page integer Optional Number of results per page (min: 10, max: 100, default: 50)

Response

{
    "orgTumIds": ["TUS1ABC"],     // or "personTumIds" depending on 'by' parameter
                                  // Array of successfully found TUM IDs
    "pagination": {
        "page": 1,
        "per_page": 50,
        "total": 75,
        "total_pages": 2
    },
    "count": 50,                  // Number of projects in current page
    "sort": "year",               // active sort field
    "order": "desc",              // active sort direction
    "filteredByType": "Research", // only present if type filter was used
    "filteredByYear": 2024,       // only present if year filter was used
    "notFoundIds": ["TUS9XYZ"],   // only present if some IDs were not found
    "projects": [
        {
            "id": 1,
            "pureId": 12345,
            "uuid": "...",
            "title": "Project Title",
            "description": "Project description...",
            "type": "Research",
            "startDate": "2020-01-01",
            "endDate": "2023-12-31",
            "managingOrgUuid": "...",
            "url": "https://gepris.dfg.de/...",
            "portalUrl": "https://portal.fis.tum.de/en/projects/..."
        }
    ]
}

Tools

Search for organization TUM IDs by name. Enter part of the organization name to find matching entries.

Enter a search term to find organizations.

Search for person TUM IDs by name. Enter part of the person's first or last name to find matching entries.

Enter a search term to find authors.

Test API endpoints interactively. Build queries using the form below or enter a complete URL directly.

Query Builder

Note: The API Tester uses an internal token for demonstration purposes. To test with your own token, use curl or your preferred HTTP client.

Use these type values with the type parameter to filter publications.

Type Value Example Usage
Abstract /publications?by=org&tumId=...&type=Abstract
Anthology /publications?by=org&tumId=...&type=Anthology
Article /publications?by=org&tumId=...&type=Article
Book /publications?by=org&tumId=...&type=Book
Book/Film/Article review /publications?by=org&tumId=...&type=Book%2FFilm%2FArticle+review
Chapter /publications?by=org&tumId=...&type=Chapter
Comment/debate /publications?by=org&tumId=...&type=Comment%2Fdebate
Commissioned report /publications?by=org&tumId=...&type=Commissioned+report
Conference article /publications?by=org&tumId=...&type=Conference+article
Conference contribution /publications?by=org&tumId=...&type=Conference+contribution
Discussion paper /publications?by=org&tumId=...&type=Discussion+paper
Doctoral Thesis /publications?by=org&tumId=...&type=Doctoral+Thesis
Editorial /publications?by=org&tumId=...&type=Editorial
Entry for encyclopedia/dictionary /publications?by=org&tumId=...&type=Entry+for+encyclopedia%2Fdictionary
Featured article /publications?by=org&tumId=...&type=Featured+article
Foreword/postscript /publications?by=org&tumId=...&type=Foreword%2Fpostscript
Letter /publications?by=org&tumId=...&type=Letter
Master's Thesis /publications?by=org&tumId=...&type=Master%27s+Thesis
Meeting Abstract /publications?by=org&tumId=...&type=Meeting+Abstract
Other contribution /publications?by=org&tumId=...&type=Other+contribution
Paper /publications?by=org&tumId=...&type=Paper
Patent /publications?by=org&tumId=...&type=Patent
Poster /publications?by=org&tumId=...&type=Poster
Preprint /publications?by=org&tumId=...&type=Preprint
Review article /publications?by=org&tumId=...&type=Review+article
Scientific review /publications?by=org&tumId=...&type=Scientific+review
Short survey /publications?by=org&tumId=...&type=Short+survey
Software /publications?by=org&tumId=...&type=Software
Special issue /publications?by=org&tumId=...&type=Special+issue
Working paper /publications?by=org&tumId=...&type=Working+paper

Usage Examples

Get all available publication types

GET https://fisapi.it.tum.de/publication-types

Get all publications by organization

GET https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC

Get all publications by person

GET https://fisapi.it.tum.de/publications?by=person&tumId=go42tum

Get publications from multiple orgs

GET https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC,TUS2DEF

Get publications from multiple authors

GET https://fisapi.it.tum.de/publications?by=person&tumId=go42tum,ab12tum

Get only articles by organization

GET https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC&type=Article

Get conference papers by person

GET https://fisapi.it.tum.de/publications?by=person&tumId=go42tum&type=Conference

Filter by keywords

GET https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC&keywords=machine%20learning

Combine type and keywords filters

GET https://fisapi.it.tum.de/publications?by=person&tumId=go42tum&type=Article&keywords=AI

Filter publications by year

GET https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC&year=2024

Filter projects by start year

GET https://fisapi.it.tum.de/projects?by=org&tumId=TUS1ABC&year=2024

Sort publications by title (A-Z)

GET https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC&sort=title&order=asc

Sort projects by year (oldest first)

GET https://fisapi.it.tum.de/projects?by=org&tumId=TUS1ABC&sort=year&order=asc

Get all projects by organization

GET https://fisapi.it.tum.de/projects?by=org&tumId=TUS1ABC

Get all projects by person

GET https://fisapi.it.tum.de/projects?by=person&tumId=go42tum

Get projects from multiple orgs

GET https://fisapi.it.tum.de/projects?by=org&tumId=TUS1ABC,TUS2DEF

Get projects from multiple persons

GET https://fisapi.it.tum.de/projects?by=person&tumId=go42tum,ab12tum

Get second page of publications

GET https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC&page=2

Get 25 publications per page

GET https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC&per_page=25

Combine pagination with filters

GET https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC&type=Article&page=3&per_page=20

JavaScript Example

// API token - replace with your actual token
const API_TOKEN = 'YOUR_API_TOKEN';

// Helper function to make authenticated requests
async function apiFetch(url) {
    const response = await fetch(url, {
        headers: {
            'Authorization': `Bearer ${API_TOKEN}`
        }
    });
    if (!response.ok) {
        throw new Error(`API error: ${response.status}`);
    }
    return response.json();
}

// Fetch all available publication types
async function getPublicationTypes() {
    const url = 'https://fisapi.it.tum.de/publication-types';
    const data = await apiFetch(url);

    console.log(`Found ${data.count} publication types`);
    return data.types;
}

// Example usage
getPublicationTypes()
    .then(types => {
        console.log('Available types:', types);
    });

// Fetch publications for one or more organizations
async function getOrgPublications(orgTumIds, options = {}) {
    // orgTumIds can be a string or an array
    const ids = Array.isArray(orgTumIds) ? orgTumIds.join(',') : orgTumIds;
    let url = `https://fisapi.it.tum.de/publications?by=org&tumId=${ids}`;

    if (options.type) {
        url += `&type=${encodeURIComponent(options.type)}`;
    }
    if (options.keywords) {
        url += `&keywords=${encodeURIComponent(options.keywords)}`;
    }
    if (options.year) {
        url += `&year=${encodeURIComponent(options.year)}`;
    }
    if (options.sort) {
        url += `&sort=${encodeURIComponent(options.sort)}`;
    }
    if (options.order) {
        url += `&order=${encodeURIComponent(options.order)}`;
    }
    if (options.page) {
        url += `&page=${options.page}`;
    }
    if (options.per_page) {
        url += `&per_page=${options.per_page}`;
    }

    const data = await apiFetch(url);

    console.log(`Found ${data.pagination.total} total publications`);
    console.log(`Page ${data.pagination.page} of ${data.pagination.total_pages}`);
    if (data.notFoundIds && data.notFoundIds.length > 0) {
        console.log(`Not found: ${data.notFoundIds.join(', ')}`);
    }
    return data;
}

// Example usage - single organization with type filter
getOrgPublications('TUS1ABC', { type: 'Article' })
    .then(data => {
        data.publications.forEach(pub => {
            console.log(`${pub.title} (${pub.publicationDate})`);
        });
    });

// Example usage - filter by keywords with pagination
getOrgPublications('TUS1ABC', { keywords: 'machine learning', page: 1, per_page: 25 })
    .then(data => {
        console.log(`Showing ${data.count} of ${data.pagination.total} results`);
        data.publications.forEach(pub => {
            console.log(`${pub.title} - Keywords: ${pub.keywords}`);
        });
    });

// Example usage - combine type and keywords filters with pagination
getOrgPublications('TUS1ABC', { type: 'Article', keywords: 'AI', page: 2 })
    .then(data => {
        data.publications.forEach(pub => {
            console.log(`${pub.title} (${pub.publicationDate})`);
        });
    });

cURL Example

# Set your API token (replace with your actual token)
TOKEN="YOUR_API_TOKEN"

# Get all available publication types
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/publication-types"

# Get all publications for an organization
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC"

# Get publications from multiple organizations
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC,TUS2DEF"

# Get only journal articles
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC&type=Article"

# Filter by keywords
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC&keywords=machine%20learning"

# Combine type and keywords filters
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/publications?by=person&tumId=go42tum&type=Article&keywords=AI"

# Filter publications by year
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC&year=2024"

# Filter projects by start year
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/projects?by=org&tumId=TUS1ABC&year=2024"

# Sort publications alphabetically by title
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC&sort=title&order=asc"

# Sort projects by year ascending
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/projects?by=org&tumId=TUS1ABC&sort=year&order=asc"

# Get publications for a person
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/publications?by=person&tumId=go42tum"

# Get publications from multiple persons
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/publications?by=person&tumId=go42tum,ab12tum"

# Get all projects for an organization
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/projects?by=org&tumId=TUS1ABC"

# Get projects from multiple organizations
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/projects?by=org&tumId=TUS1ABC,TUS2DEF"

# Get projects for a person
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/projects?by=person&tumId=go42tum"

# Get projects from multiple persons
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/projects?by=person&tumId=go42tum,ab12tum"

# Get second page of publications (50 per page by default)
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC&page=2"

# Get 25 publications per page
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC&per_page=25"

# Combine pagination with filters
curl -H "Authorization: Bearer $TOKEN" \
     "https://fisapi.it.tum.de/publications?by=org&tumId=TUS1ABC&type=Article&page=3&per_page=20"

PHP Example

// API token - replace with your actual token
define('API_TOKEN', 'YOUR_API_TOKEN');

// Helper function to make authenticated API requests
function apiFetch($url) {
    $context = stream_context_create([
        'http' => [
            'header' => 'Authorization: Bearer ' . API_TOKEN
        ]
    ]);
    $response = file_get_contents($url, false, $context);
    return json_decode($response, true);
}

// Fetch all available publication types
function fetchPublicationTypes() {
    $url = 'https://fisapi.it.tum.de/publication-types';
    $data = apiFetch($url);
    return $data['types'];
}

// Example usage
$types = fetchPublicationTypes();
echo "Available publication types:\n";
foreach ($types as $type) {
    echo "- $type\n";
}

// Fetch publications using PHP
function fetchPublications($tumIds, $by = 'org', $options = []) {
    $baseUrl = 'https://fisapi.it.tum.de/publications';

    // Handle both string and array inputs
    $ids = is_array($tumIds) ? implode(',', $tumIds) : $tumIds;

    $params = [
        'tumId' => $ids,
        'by' => $by
    ];

    if (!empty($options['type'])) {
        $params['type'] = $options['type'];
    }

    if (!empty($options['keywords'])) {
        $params['keywords'] = $options['keywords'];
    }

    if (!empty($options['year'])) {
        $params['year'] = $options['year'];
    }

    if (!empty($options['sort'])) {
        $params['sort'] = $options['sort'];
    }

    if (!empty($options['order'])) {
        $params['order'] = $options['order'];
    }

    if (!empty($options['page'])) {
        $params['page'] = $options['page'];
    }

    if (!empty($options['per_page'])) {
        $params['per_page'] = $options['per_page'];
    }

    $url = $baseUrl . '?' . http_build_query($params);

    return apiFetch($url);
}

// Example usage - single organization with type filter
$data = fetchPublications('TUS1ABC', 'org', ['type' => 'Article']);
echo "Found " . $data['pagination']['total'] . " articles total\n";
echo "Showing page " . $data['pagination']['page'] . " of " . $data['pagination']['total_pages'] . "\n";

foreach ($data['publications'] as $pub) {
    echo "- " . $pub['title'] . "\n";
}

// Example usage - filter by keywords with pagination
$data = fetchPublications('TUS1ABC', 'org', [
    'keywords' => 'machine learning',
    'page' => 1,
    'per_page' => 25
]);
echo "Found " . $data['pagination']['total'] . " publications about machine learning\n";
echo "Showing " . $data['count'] . " results on this page\n";

foreach ($data['publications'] as $pub) {
    echo "- " . $pub['title'] . " (Keywords: " . $pub['keywords'] . ")\n";
}

// Example usage - combine type and keywords filters with pagination
$data = fetchPublications('TUS1ABC', 'org', [
    'type' => 'Article',
    'keywords' => 'AI',
    'page' => 2
]);
echo "Page 2 - Found " . $data['count'] . " articles about AI\n";

Error Responses

Status Code Error Description
401 Missing Authorization header No API token was provided in the request
401 Invalid API token The provided token is not valid
401 API token has been revoked The token was revoked by an administrator
400 Missing required parameter: tumId The tumId parameter was not provided
400 Missing or invalid parameter: by The by parameter must be "org" or "person" for both publications and projects
400 tumId parameter too long The tumId parameter exceeds the maximum length of 1000 characters
400 type parameter too long The type parameter exceeds the maximum length of 255 characters
400 keywords parameter too long The keywords parameter exceeds the maximum length of 200 characters
400 Invalid year parameter The year parameter must be a 4-digit year between 1900 and 2100
400 Invalid sort parameter The sort parameter must be "year" or "title"
400 Invalid order parameter The order parameter must be "asc" or "desc"
404 Organization/Person not found No record found with the provided TUM ID
500 Database error An internal server error occurred