The rules of the DOI Registry
Names, states, the record, the ledger, resolution, transfers, rights — written to ISO 26324 and to the practice of today's Registration Agencies.
Files: the rules (Markdown) · the registrant's handbook · the policies · the quality procedure · the metadata format · the API · the DOI System Metadata
29 September 2026. The registry is the one place that holds every DOI Smart Scholars is responsible for: the master record each was registered with, the address it resolves to, its state, and a permanent record of everything that ever happened to it. These are its rules. They are written to the DOI system's own standard, ISO 26324 (the DOI Handbook), and to the practice of the Registration Agencies that exist today.
1. What is held
A registrant is the publisher, journal, institution, society or person that holds one or more DOI prefixes here and is answerable for the names under them. A registrant has a name, a kind, a country, a contact, and may be linked to a member's account so that member acts for it. A registrant is active, suspended (no new names or changes) or closed (its prefixes transferred or retired).
A prefix is 10. followed by the registrant code — digits, optionally with numeric sub-elements (10.46243, 10.1000.10). Every prefix has one holder at a time, a status — test (names given for trials; they resolve only through this registry), live (names registered for the world: today through Crossref under the registrant's own prefix, after accreditation under Smart Scholars' own) or retired (no new names; every existing one kept and resolving) — a source (where the prefix came from: crossref, test, doi-foundation) and a suffix rule.
A DOI record is one row per name: the name in its stored form and as the registrant wrote it, the prefix and the registrant, the state, the address, the master record in the Smart Scholars DOI Metadata Format 1.0, the record's SHA-256, the version number, how it was registered (registry, crossref, handle) and the dates.
The ledger is one row per change to any of the above — see section 5.
2. Names (ISO 26324)
A DOI name is <prefix>/<suffix>. The suffix is chosen by the registrant and is opaque: nothing may be read into it, and no meaning is promised by it. The name may hold any printable characters and no white space. Names are case-insensitive: 10.46243/JST.2025 and 10.46243/jst.2025 are one name. The registry therefore stores and compares every name lower-cased, and shows it as the registrant wrote it. A name is at most 300 characters.
A name, once given, is never given again — not after a withdrawal, not after a transfer, not ever. The registry refuses a second reservation or registration of a name it holds in any state.
Written as an address, a name is https://doi.org/ followed by the name, with only the characters a URL cannot carry percent-encoded (#, ?, %, <, >, space); /, (, ), ; and : stay as they are.
2.1 The naming policy for names minted here
Names the registry itself mints under a prefix follow a stricter policy, so that every one of them travels through a URL, an e-mail or a print citation unchanged:
- lower-case letters, digits and
. - _ ( ) ;only — the characters that never need escaping; - at most 100 characters; not beginning or ending with
.or-; - either from the prefix's pattern — tokens
{code}(the prefix's own code, e.g.jst),{year},{vol},{issue},{first},{last},{seq},{rand}(an opaque 6-symbol piece) — as the journals already name their articles (jst.2025.v10.i12.pp35-41); - or opaque: eight symbols from the digits and the consonants, a hyphen in the middle (
k7m2-p9tq) — never a vowel, so an opaque name never spells a word.
A name a registrant chooses itself (a reservation) must meet the same policy. A name that arrives from Crossref (an import) is accepted as it is registered there — it is already a DOI.
3. States
reserved — the name is taken; it has no record and no address; it does not resolve. Given by take a name (minted) or reserve (chosen).
registered — a record that meets every rule of the format, and an address. Given by register; renewed by update (a new version of the record) and address (the address alone).
withdrawn — the referent is gone, or must not be reached, or the DOI was given in error. The name stays, the record stays, the address is remembered; the resolver shows a tombstone page carrying the reason the registrant gave. A withdrawal must give its reason. Restore brings the name back to registered. A withdrawn name is not re-registered silently: a new registration of it needs allow_withdrawn, and the history shows both lives.
A name is never in any other state and never absent once it has been in one.
4. The record
Registration needs a record in the Smart Scholars DOI Metadata Format 1.0 — every element of the DOI Kernel (ISO 26324: the referent's identifiers, names, type, principal agents, dates, linked creations) and, beside them, what journals and indexes need. The registry accepts a record only when the format's validator finds nothing wrong and the record's own doi is the name being registered; it refuses in words otherwise, listing every rule not met. The address must be an http(s) URL with a host.
An update with an identical record changes nothing and writes nothing. A changed record becomes a new version; the difference, field by field, is in the ledger. Every version can be produced as a Kernel Metadata Declaration (XML, DOIMetadataKernel.xsd) — resolve.php?doi=…&as=xml — with the version as its issueNumber.
5. The ledger
Every change is one row: the subject (a DOI, a prefix, a registrant), a number that counts up per subject without a gap, the kind (reserve, register, update, url, withdraw, restore, transfer; created, changed for prefixes and registrants), when, who (a member by name, the engine, the registry key, the registry itself — never an e-mail address), the SHA-256 of the record before and after, the list of fields that changed with their old and new values, the full record after the change, and a note.
Rows are only ever added. The registry's code holds no statement that changes or removes a row; on MySQL two triggers make the database itself refuse one. Any version of any record can be read back from its row. The ledger of a DOI is public: its record page shows it, and the API hands it out as JSON.
6. Resolution
resolve.php?doi=<name> (or, with the rewrite in the door's .htaccess, registry.smartscholars.in/<name>):
| the request | registered | withdrawn | reserved | not held |
|---|---|---|---|---|
a browser (Accept: text/html) | 302 to the address, with Link: <record page>; rel="describedby" | 200, the tombstone page | 404, "reserved" | 404, with the doi.org address when the prefix is not ours |
Accept: application/json or ?as=json | 200, the record as JSON | 200, the record (state withdrawn, the reason) | 200 (state reserved, no record) | 404 |
Accept: application/xml, text/xml or ?as=xml | 200, the Kernel Metadata Declaration | 200 | 404 | 404 |
This follows the DOI system's content negotiation practice: a DOI asked for with an Accept header hands back metadata instead of a redirect.
Until Smart Scholars is accredited, a live name also resolves at doi.org through the Registration Agency that registered it (Crossref); a test name resolves here only. The registry already keeps every address on a Handle server as the DOI system does — one handle per DOI, its URL value the address (a withdrawn DOI's: its tombstone page), pushed at every change and never deleted (includes/handle.php; today a standalone test server of our own, docs/handle-test-setup.md). After accreditation the DOI Foundation registers that server for our prefixes and doi.org resolves through it; nothing in the registry changes for that.
7. Transfers and retirement
A prefix moves from one registrant to another whole: the prefix row changes holder, and every DOI under it changes holder in the same act, each with a transfer row in its own ledger naming the old and the new holder. A retired prefix takes no new names and no changes; its names keep resolving. A closed registrant holds nothing.
8. Who may do what
Reading — records, histories, addresses, lists — needs no key: DOI metadata is public. Writing needs the registry key (a program: header X-Registry-Token; only its SHA-256 is stored; made and re-made on Admin) or a signed-in member linked to the registrant that holds the prefix — for that prefix only. An admin acts for every registrant; an import of a whole prefix needs an admin or the key.
9. Bringing today's DOIs in
Every DOI Smart Scholars has registered for a client so far is registered at Crossref. A whole prefix is brought in from Admin, page by page through Crossref's REST API with its deep-paging cursor kept on the prefix row: each work becomes a record in the format (ssmd_from_crossref), registered here via crossref with the work's primary resource URL as its address; a work already here is re-read and only a change is recorded as a new version. A single DOI is brought in the same way from the console. A journal's own title-level DOI is held as a Journal record (no container, its ISSN its own identifier); a volume or issue record whose Crossref entry omits the journal's ISSN takes it from the records already held for that journal — a journal nobody here knows the ISSN of is refused with the reason.
Crossref has slow moments. A page it does not answer (the connection fails, or 50 seconds pass), or answers 429 or 5xx, is asked three times, with a pause between; only then is the press refused, in words that say what happened and how often it was tried. Every page that did come in is already written — each page's records and the cursor go in together — so the next press continues where the last one stopped, and its message says what was kept.
10. Public metadata services
Everything the registry holds about a registered or withdrawn DOI is open, in the forms programs and people already use — the same rows the record pages show, nothing prepared apart:
- Search —
search.php, andapi.php?action=search. A DOI name (or a doi.org address) finds that one name; any other words must all occur in the record — the name, the titles, the people and organisations, the journal or book, its ISSN or ISBN, volume, issue, pages, the year, the type (never the abstract). Filters: prefix, registrant, year, type, state; sorted newest first, oldest first, by year or by title; year and type counts come with every answer. Reserved names are never listed. - Feeds —
feed.php: Atom 1.0 (or RSS 2.0 with?as=rss) of every change — registration, a new version of the record, a new address, a withdrawal, a restoration — newest first;?prefix=or?registrant=narrows it;?kind=registeredlists new registrations only. Each entry links the record page and the address the DOI resolves to, names the authors, and says when a DOI is withdrawn. - Bulk —
bulk.php: the whole registry, or one prefix or registrant, as JSON Lines (?as=jsonl: one object a line, the objectapi.php?action=getgives, the full record included) or CSV (?as=csv), streamed row by row;&since=gives only the rows changed at or after a date, so a mirror keeps itself current with one small file a day;?as=manifestlists what is available with the counts. The JSON Lines dump of the whole registry is the escrow export of section 12 of the plan. - Citations —
cite.php?doi=shows a DOI as an APA (7th) reference, BibTeX, RIS and CSL-JSON, each to copy or download;api.php?action=citegives all four at once; and the resolver hands them out by content negotiation —Accept: application/vnd.citationstyles.csl+json,application/x-bibtex,application/x-research-info-systems,text/x-bibliography(styleapa, the one style offered; CSL-JSON gives any style through citeproc) — exactly as doi.org does for every DOI. Nothing is invented: a part the record lacks is left out of the citation.
11. Sources
- ISO 26324:2025 (third edition, March 2025; it replaced the 2022 edition), Information and documentation — Digital object identifier system; the DOI Handbook (doi.org/hb), chapters Numbering (syntax: prefix, suffix, case-insensitivity, opacity, persistence), Resolution (content negotiation), Data Model (the Kernel), and Registration Agencies.
- The DOI Kernel Metadata Declaration schema,
DOIMetadataKernel.xsd(doi:10.1000/276), and the Attribute Value Sets 2.3 (doi:10.1000/282). - Crossref's and DataCite's practice for withdrawn DOIs: the name persists and resolves to a page that explains (a tombstone); a DOI is never deleted.
- The Smart Scholars DOI Metadata Format 1.0 —
docs/ssmd-1.0.mdon this platform. - DOI content negotiation as practised at doi.org (Crossref, DataCite, mEDRA):
application/vnd.citationstyles.csl+json,application/x-bibtex,application/x-research-info-systems,text/x-bibliography; Citation Style Language 1.0.2 (the CSL-JSON item), RIS and BibTeX as reference managers read them; Atom 1.0 (RFC 4287) and RSS 2.0; CSV as RFC 4180.
