
Identifiers, organizations and PIVO API
<!-- Author: PB <pavel.bartos.pb@gmail.com> -->
People, organizations and identifiers
Profile cards, short URLs and sign-in
A person has a public profile URL such as
https://update.estudium.eu/CAR-0000-0002; an organization uses, for example,
https://update.estudium.eu/CORE-00001. These IDs are examples: use the identifier
assigned to the actual account. Changing the display name does not change the
identifier or profile URL. Profiles require an active account and publication consent.
An article or book with PIVO uses https://update.estudium.eu/PIVO-0-0000-0001.
A publication without PIVO uses its existing 32-character publication ID directly
after the domain. Copy its Open link from the catalog or profile. A short URL
does not issue PIVO; only organizations can issue it. Legacy
/profile.php?id=…, /pivo.php?id=… and /article.php?id=… links redirect with
HTTP 301. Canonical URLs, sitemap.xml and the publication feed.xml use the new
addresses. Software keeps /login/project, for example /admin/eweb-server.
To sign in, enter your login, CAR or CORE and the account's normal password.
CAR/CORE matching is case-insensitive. These public identifiers do not replace a
password; blocked accounts cannot sign in. New passwords require at least 10 characters.
Under My account → My public profile, drop a photo or logo onto the upload
area, or choose a file with the file picker. Use one PNG, JPEG or WebP up to
512 KiB and 4000 × 4000 pixels. A preview appears immediately; click
Save profile to commit it. Removing the image also requires saving. File
errors appear beside the upload area, and the server validates the actual image.
The public card has a compact header, contacts and identifiers, education or
business category, affiliations and a filled-in CV. Optional contacts such as
email and phone appear only when their publication boxes are checked.
Organization logos are displayed without cropping. Empty CV sections are omitted.
Author projects / Organization projects combines public software, books,
articles and other publications associated with the account. Use the category
buttons to filter. All cards are present in the initial HTML for search and
indexing. Choose the publication type when adding it to your account or PIVO.
The catalog merges recognized duplicate works. A matching author name alone does
not attach another account's publication to your profile: add it to your own
publications, optionally referencing an existing PIVO. Private and archived
software projects are excluded from the public portfolio.
Quick start for research journals
CAR identifies a person, CORE identifies an organization/publisher, and PIVO
identifies a published output. CAR and CORE are allocated **when the account is
created**, both through public registration and administrator account creation.
People receive CAR and organizations CORE regardless of role or profile consent.
Existing accounts missing their identifier are repaired on the next request.
Account identifiers are automatic and immutable.
- Register a Company / school / organization account for the journal or
publisher. Enter the public publisher name, logo, registration number,
business category and existing ROR if applicable. CORE is allocated immediately.
If an administrator supplied a temporary password, change it first.
- Authors create personal accounts with CAR and may add ORCID. They can request
affiliation through My organizations; the publisher approves it in
Organization members. Membership and project collaboration do not grant
PIVO issuing rights: only the organization account or its server API key issues PIVO.
- After editorial approval, sign in as the organization and open
Manage PIVO → Register PIVO. Enter title, semicolon-separated authors,
publication month/year, abstract, keywords, and a public article URL or an owned PDF.
Add journal name, ISSN, volume, issue, pages and license. A publisher can serve
several journals, distinguished by the journal and issn metadata.
- Confirm publication to allocate the next global sequential PIVO. The issuer
is recorded in issuer_core; journals do not reserve a prefix or restart the
sequence. The registry stores the identifier, publisher, metadata and revision.
- Save the returned PIVO and stable URL in the editorial system, article page
and PDF. Authors can link that existing PIVO from their own publication entry;
they do not issue another identifier. The catalogue groups duplicate records.
- When a PDF moves, update the same PIVO URL. For corrections, submit its current
revision and complete metadata. Use withdraw with a reason for retractions;
the public status page and reserved identifier remain available.
Editorial system API integration
From the organization account, open Manage PIVO → API keys → Create API key.
Store the secret on your editorial server, never in visitor JavaScript. This
example expects the key in the PIVO_TOKEN environment variable.
curl --request POST 'https://update.estudium.eu/pivo-api.php' \
--header "Authorization: Bearer $PIVO_TOKEN" \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: journal-2026-article-0042' \
--data '{"action":"create","metadata":{"title":"Example journal article","authors":"Novak, Jan; Smith, Eva","publication_date":"2026-09","abstract":"A complete public abstract of the article.","keywords":"education; research; learning analytics","type":"article","journal":"Example Research Journal","issn":"0378-5955","volume":"4","issue":"2","pages":"10-21","publisher":"Example Publisher","url":"https://journal.example.org/articles/42","language":"en","license":"CC BY 4.0"}}'Example response (abbreviated; the actual identifier is allocated by the registry):
{"ok":true,"created":true,"record":{"id":"PIVO-0-0000-0001","sequence":1,"issuer_core":"CORE-00001","revision":1,"status":"published","url":"https://update.estudium.eu/pivo.php?id=PIVO-0-0000-0001"}}Save record.id, record.url and record.revision in the editorial database.
After a timeout, retry the same metadata and Idempotency-Key to retrieve the
already allocated ID. A new article needs a different key. Public lookup is
GET /pivo-api.php?id=PIVO-0-0000-0001. Send updates or withdrawals as POST to
the same endpoint using action: update or action: withdraw. Full examples
and response codes follow below.
eUpdate does not automatically insert IDs into external editorial systems or
modify their PDFs. OJS and other journal platforms need a server integration
that calls this API after publication and stores its response. PIVO is not a
Crossref/DataCite DOI; issuing it does not imply peer review or external indexing.
Enter keywords as research; education; learning analytics. A semicolon or Enter
creates a chip; pasted semicolon lists are split immediately. Remove a chip with
its cross button. Multiword phrases stay together. The API accepts the same
semicolon-separated string or an array of strings. Commas within a phrase are
preserved. At most 30 keywords of up to 100 characters are accepted; empty and
exact duplicate entries are ignored.
Registration offers Person or Company / school / organization. Organizations
have a name, logo, category, registration ID (ICO or another scheme), country,
legal form, address, description, projects, modules, collaborators and publications.
The account type is fixed after registration; create a separate organization account.
The login is a technical sign-in name; the public name may contain spaces and Unicode.
Contact email remains private unless its disclosure is enabled. Other completed
profile fields are public while public-profile consent is active.
CAR, CORE, ORCID and ROR
CAR (Czech Academic Researcher) identifies a person: CAR-0000-0001.
CORE (Czech Organization for Research Entities) identifies an organization: CORE-00001.
PIVO (Persistent Index of Verified Outputs) identifies an output: PIVO-0-0000-0001.
Each independent sequence starts at 1, then 2, 3, 4… Integers are encoded as padded
base36 (0–9, A–Z): 9 → 00009, 10 → 0000A. CAR has 8 characters, CORE 5, PIVO 9.
Hyphens only group characters; the first PIVO character is part of the sequence,
not a publisher prefix. Capacities including unused zero are 36^8 = 2,821,109,907,456;
36^5 = 60,466,176; 36^9 = 101,559,956,668,416. Allocation is global within this
installation, serialized by a database lock and committed transactionally. IDs
never change or become available for reuse after account deletion. Existing person
accounts receive CAR automatically on the first request after upgrading.
Find CAR/CORE in the community or resolve /identity.php?id=CAR-0000-0001.
Only public profile cards are revealed; a deleted account returns HTTP 410.
Enter an existing ORCID for a person or an organization's contact person.
ROR denotes an organization; people may enter their related institution's ROR.
Examples: https://orcid.org/0000-0002-1825-0097, https://ror.org/02mhbdp94.
Format and checksums are validated; eUpdate does not issue ORCID/ROR or verify
external account ownership. Specifications:
ROR.
Organization membership
A person requests membership by organization login or email in My organizations.
Multiple organizations are supported. The organization sees requests and members
in Organization members. Membership approval and project collaboration are
separate actions. Granting collaboration gives access to all organization projects;
removal or leaving immediately revokes it. A pending request or a ROR reference
does not grant access. Accepted affiliations appear on a person's public card only
when the related organization also has a public profile.
Publications and PDF
Both account types support title, authors, year, type, publisher, ISBN, ISSN, DOI,
language, license, abstract, output URL, Google Scholar URL and an existing PIVO ID.
ISBN and ISSN include checksum validation. DOI is recorded, not registered.
PDF uploads are chunked, at most 20 MiB per file and 500 MiB per account. Incomplete
and unattached files stay private. A completed PDF becomes downloadable when attached
to a consenting public profile or a published PIVO record. PDF is served as an
attachment and never executed on the server; format checks are not malware scanning.
Use PDF storage to remove unused or incomplete files. Detach profile files and
save first. PIVO attachments are protected against deletion. Publish only material
you are authorized to share and omit private personal data.
Public PIVO catalogue and API
/pivo.php is public and searchable with pagination. Every record has a permanent
landing page /pivo.php?id=PIVO-0-0000-0001, JSON and sitemap entry. Public profiles
use Person/Organization structured data; records use CreativeWork/ScholarlyArticle.
Search result pages are not indexed; publicly linked PDFs can be indexed.
Organizations issue PIVO through Manage PIVO or the API. Required metadata:
title, authors, publication month/year, abstract, keywords, and an HTTP/HTTPS target URL or an owned uploaded PDF.
The issuer attests the metadata; the registry name **does not imply peer review or
scientific quality verification**. PIVO is an eUpdate registry, not DOI, Crossref or
DataCite. Persistence depends on continued operation of update.estudium.eu.
Metadata and target URLs can change, but the ID is immutable. Revisions are retained.
Withdrawal requires a reason and is irreversible; the public landing page becomes
a tombstone. Deleting the issuer account does not delete PIVO. Do not register
metadata that should not remain public.
Public reads
curl 'https://update.estudium.eu/pivo-api.php?q=research&offset=0'
curl 'https://update.estudium.eu/pivo-api.php?id=PIVO-0-0000-0001'Lists return records, total, offset, limit (50). The next page uses offset=50.
Detail returns record and revision dates. sequence is the decimal ordinal,
issuer_core identifies the issuer, revision is the current revision number.
Keys and creation
An organization creates a key in Manage PIVO → API keys. Its secret appears only
once; only a hash is stored. Keys expire after 90 days and may be revoked immediately.
An account may have 10 active keys, each allowing 120 successful writes per hour.
Keys grant PIVO operations for their issuer only, not account/project management.
Blocked/deleted accounts cannot use their keys. Send the token in Authorization,
never the URL. Use HTTPS and Content-Type: application/json.
curl -X POST 'https://update.estudium.eu/pivo-api.php' \
-H "Authorization: Bearer $PIVO_TOKEN" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: journal-2026-article-001' \
--data '{"action":"create","metadata":{"title":"Example research output","authors":"Jane Doe; John Smith","publication_date":"2026-09","keywords":["education"],"type":"article","publisher":"Example School","url":"https://example.org/article","language":"en","license":"CC BY 4.0","abstract":"An example record."}}'Success: HTTP 201, {"ok":true,"created":true,"record":{...}}. Reusing an
Idempotency-Key with identical metadata returns the original ID (200); different
metadata conflicts (409). Keys accept 1–100 letters, numbers, dot, colon, hyphen
or underscore. The JSON field idempotency_key is an alternative to the header.
Updating and withdrawal
POST to the same URL with the Bearer token. Read current revision first. Updates
supply complete metadata, not a partial patch.
{"action":"update","id":"PIVO-0-0000-0001","revision":1,"metadata":{"title":"Updated title","authors":"Jane Doe","abstract":"Updated complete abstract.","publication_date":"2026-09","keywords":["education"],"url":"https://example.org/new-location"}}{"action":"withdraw","id":"PIVO-0-0000-0001","revision":2,"reason":"Duplicate publication"}Stale revisions return 409, preventing lost updates. Other issuers' records cannot
be changed. The landing page shows revision history; JSON exposes revision numbers
and dates. A withdrawn record cannot be edited or republished.
PDF and API
The API accepts a target URL or metadata.file_id of the issuer's completed PDF.
Upload PDFs through the signed-in web form; Bearer keys do not grant file uploads.
For server-only integrations, use the publication URL on your own server.
Errors and operation
JSON responses include ok, and error on failure. Status codes: 401 invalid/expired
key, 403 wrong owner/account type, 404 not found, 409 idempotency/revision conflict,
422 invalid metadata, 429 rate limit, 503 unavailable storage. Reads use GET, writes
POST, other methods return 405. OpenAPI specification.
MySQL stores the registry, memberships, PDF metadata and key hashes. PDF blobs live
outside the web root in private/update-data/publications. Full internal backups
include logical SQL state, identifier sequences and PDFs. Restore the newest snapshot;
never overwrite newly issued identifiers with an older registry snapshot. Preserve
resolver addresses or permanent redirects when migrating. Back up before deployment.
Why use PIVO and how to start
PIVO provides a stable landing address separate from the PDF location. If the file
moves, update its target URL without changing the identifier cited by readers.
The registry links an output to its CORE issuer and provides metadata, citations
and revision history. It can serve institutional studies and research reports;
an identifier does not itself confer prestige, peer review or database indexing.
Register an organization, complete its card, open Manage PIVO and register an output.
Article authors must provide **title, author names, publication month/year, abstract
and keywords**. PIVO also requires a URL or PDF. Separate authors with semicolons,
preferably Doe, Jane; Smith, John; write institutional authors as {Example School}.
Omit academic degree suffixes from author names. The API accepts 2026-09 or
09/2026, stores 2026-09, and derives the year. Keywords may be an array or
semicolon-separated text, up to 30 entries. Legacy records remain available; missing
required metadata must be completed when editing them.
Search, citations and duplicates
/articles.php combines public personal/organization publications and PIVO records.
Search title, abstract, keywords, author/CAR/ORCID or organization/CORE/ROR. Every
article offers APA 7, IEEE and ISO 690 citations, BibTeX and RIS downloads and link
copying. Add journal, volume, issue and pages for more complete citations. Generated
citations depend on supplied author names and metadata; check the target journal's
requirements. Bibliographic managers can import BibTeX/RIS.
Matching DOI, PIVO reference, PDF checksum or exact title/authors/month without DOI
is grouped into one search item, preferring a PIVO record. Original publications
are not deleted; alias URLs resolve to the canonical item. Different DOI records
are not grouped solely by similar titles. Creating another PIVO for a recognized
output returns 409 with its existing identifier. Idempotency-Key handles retries.
The nine most viewed articles are ranked within the selected calendar month,
defaulting to the current month in Europe/Prague. A month picker shows earlier
periods. Lifetime totals remain separate. Repeated views by the same visitor in
one hour within that month count once; recognizable crawlers are excluded. This
measures detail-page visits, not citation impact or quality. With no visits the
ranking is empty; with fewer viewed articles it contains fewer than nine entries.
Google Scholar and other platforms
Article pages show public abstracts and Highwire citation metadata, with separate
author tags and a full-text link when PDF is available. This prepares the pages
for Scholar crawlers; inclusion is not guaranteed. Use searchable-text PDFs with
a title, authors and references. Scholar's documented file limit is 5 MB, although
eUpdate accepts 20 MiB. See Google Scholar guidelines.
The Google Scholar link searches for the article title; it is not a submission.
Zotero can read embedded metadata; other managers can import BibTeX/RIS.
Share the persistent URL on institutional sites, author profiles or other platforms.
eUpdate does not log in to ORCID or submit records to Crossref, DataCite, Scopus or
Web of Science without a separate integration.
Complete API example
{
"action": "create",
"idempotency_key": "study-2026-09-001",
"metadata": {
"title": "Example educational research",
"authors": "Doe, Jane; Smith, John",
"publication_date": "2026-09",
"abstract": "A complete author-written abstract of this study.",
"keywords": ["education", "learning analytics"],
"type": "article",
"journal": "Example Journal",
"volume": "2",
"issue": "1",
"pages": "10-19",
"url": "https://example.org/research",
"language": "en"
}
}Read the combined catalogue and citations:
curl 'https://update.estudium.eu/article-api.php?q=education&month=2026-09'
curl 'https://update.estudium.eu/article-api.php?author=CAR-0000-0001'
curl 'https://update.estudium.eu/article-api.php?organization=CORE-00001'
curl 'https://update.estudium.eu/article-api.php?id=PIVO-0-0000-0001'
curl 'https://update.estudium.eu/citation.php?id=PIVO-0-0000-0001&format=bibtex'Lists return records, total, offset, limit, month, timezone and top. Items contain
lifetime views, selected month_views and a monthly_views map. Detail returns
article and citations. Citation formats: apa, ieee, iso690, bibtex, ris. Private
articles and unattached PDFs return 404 publicly. Publicly linked PDF can be indexed;
private files remain protected by access checks.
Publication and project RSS in Czech and English
The public Czech RSS and English RSS each contain
up to 130 items: 100 recently updated public publications, articles and PIVO
records, plus 30 recent public, non-archived projects. Each project appears
once, using the version with the latest release date. Missing release dates
fall back to the version upload time; projects without releases use their
creation date. Modules do not appear as separate items. All entries are
merged and ordered newest first.
- Czech:
https://update.estudium.eu/feed.xml - English:
https://update.estudium.eu/feed.en.xml
Channel titles, descriptions, categories and language tags are localized.
Both variants contain the same records; submitted titles, abstracts and author
text are not automatically translated. The storage tab shows a timestamp,
preview and link for each feed. Regenerate RSS refreshes both variants.
Both feeds refresh after publication, PIVO, public profile, project, release,
visibility, archive or owner-login changes. The first request after upgrading
regenerates RSS automatically; unchanged requests do not keep rewriting it.
Publication duplicates are grouped as in the catalogue. Private publications,
withdrawn PIVO records and private or archived projects are excluded. Items
include title, description, author, category, canonical link and a public PDF
enclosure where available. pubDate is the ordering date; dc:date retains the
entered publication date. The canonical URL is the GUID. Reading RSS does
not increase article views.
Readers may retain items after they are removed from the current feed.
RSS does not itself guarantee Google Scholar inclusion.