eStudium.eu

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.

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.

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.

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.

is recorded in issuer_core; journals do not reserve a prefix or restart the

sequence. The registry stores the identifier, publisher, metadata and revision.

and PDF. Authors can link that existing PIVO from their own publication entry;

they do not issue another identifier. The catalogue groups duplicate records.

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:

ORCID,

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.

See Zotero metadata support.

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.

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.