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.
https://fisapi.it.tum.de/
Available Data
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.
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
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
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",
"..."
]
}
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.
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 |