Edifix API changelog
Changes to the Edifix API, newest first. Each entry names the version of the specification, openapi.yaml, that describes it.
How versions are numbered
The specification's version has three parts, MAJOR.MINOR.PATCH:
- MAJOR matches the API path: version 2 is
/api/v2. A change that could stop an existing request from working would come with a new major version and a new path, and/api/v2would keep working as it does. - MINOR goes up when something is added: a parameter, a response field, an editorial style or an error code. Existing requests keep working.
- PATCH goes up when the documentation is corrected and the API itself is unchanged.
Within version 2, write clients to accept what may be added: ignore response fields you do not recognise, and treat an unknown error code by its HTTP status.
2.4.2—November 2026
Documentation only; the API is unchanged. The error-code tables in these pages and in the specification now show each error_message exactly as the API returns it, in place of a paraphrase. Where the server fills in a value, the message shows a placeholder, such as <Accept header>. The codes that are not returned, or not in the usual form, are listed.
2.4.1—November 2026
Documentation only; the API is unchanged. These pages and the specification take the wording edited on docs.typefi.com, so the two copies match, and gain three pages: a quick start guide, the service modes guide and this changelog.
2.4.0—November 2026
Changed
get_auth_tokengives an unverified or suspended account the same answer as a wrong password: HTTP 401 with0004. It used to give HTTP 406 with0005or0006, but only when the password was right, which told anyone holding a password the account's state. These sign-ins count against the sign-in limits like any other failure.get_subscription_statustreats the token of an account suspended since sign-in as invalid: HTTP 401 with0026. Sign in again; the answer is then0004. In 2.2.0 this was HTTP 406 with0006.
Removed
- Error codes
0005and0006. They are retired and will not be reused.
2.3.0—November 2026
Changed
get_auth_tokenlimits failed sign-ins, so a password cannot be guessed at an unlimited rate. An IP address may make 31 failed sign-ins at once, then 1 every 6 seconds; a username may fail 10 times in a row from one address, then 1 every 6 minutes. Past either limit, sign-in from that address is refused with HTTP 429 and0028, even with the right password, until the limit refills. Successful sign-ins never count, and a username refused at one address can still sign in from any other. Seerate-limiting.md.
2.2.0—November 2026
Changed
get_subscription_statuschecks the account and its subscription each time it is called, not only when the token was issued. An account suspended since then gets0006, and an account with no active subscription gets0009, both HTTP 406. Before, a suspended account with a current subscription got a normal answer, and an account with no current subscription got HTTP 500 with0001. Other endpoints still rely on the checks made when the token was issued.expiration_timestampinget_subscription_statusisnullfor a subscription that does not expire. Such subscriptions used to get HTTP 500 with0001.
2.1.0—November 2026
The changes since the Edifix API v2.0 Developer Documentation PDF of 10 September 2025. This is also the first version of the specification to carry a three-part version number; earlier copies said 2.0.
Added
service_modesoncreate_jobandcreate_job_from_file: how much PubMed and Crossref may change a reference they match —link,addormerge. Leaving it out keeps the previous behaviour (pubmed:merge,crossref:add). Job information now reports the modes each job ran in. Seeservice-modes.md.journal_abbr_contentsoncreate_jobandcreate_job_from_file: a journal-abbreviation file sent with a custom stylesheet, which overrides Edifix's journal names and abbreviations for that job. Seestylesheet-contents.md.Editorial styles
Chicago18(Chicago 18th ed., Author-Date) andCSE9(CSE 9th ed.).Error codes, all HTTP status 406:
Code Meaning 0046timeout_time, an optional processing limit in seconds, is not a positive integer. It used to return HTTP 500 with0001.0047The Word document is password-protected. 0048The Word document is write-protected. 0049The Word document failed the virus scan. 0050journal_abbr_contentswas sent withoutstylesheet_contents.0051journal_abbr_contentshas no<Custom journals>or<Bad journals>section.0052The stylesheet sent with journal_abbr_contentsdeclares noadd-abbr-file.0053stylesheet_contentsis larger than 256 KB.0054job_nameis longer than 255 characters.0055service_modesis not a map of service to mode.0056service_modesnames an unknown service.0057service_modesgives an unknown mode.0047–0049are not returned bycreate_job_from_file, which accepts the file: the job fails later and records the code inreason_of_failure. These jobs used to fail with HTTP 500 and0001.This documentation: the OpenAPI 3.1 specification and these pages, published on docs.typefi.com.
Changed
- New limits.
stylesheet_contentsmay be at most 256 KB (0053) andjob_nameat most 255 characters (0054). An uploaded file must be a Word document in its contents, not only in its name and content type (0038). ChicagoandCSEare now named as the 17th and 8th editions. They behave as before.TRRis no longer listed byget_edit_styles. It is still accepted: the job runs asChicago18, and itsedit_stylestaysTRR.- JATS XML from
export_job, and fromget_jobwith a results view, keeps the italic and bold the editorial style sets, in titles, volumes and issues for example. - DOIs in results views are written in the editorial style's own form, for example
doi: 10.x.for IEEE andhttps://doi.org/10.x.for Chicago. A DOI no longer ends in two full stops, and a label already in the reference is replaced rather than repeated. - Rate limits for an account with a single session are counted per user, so renewing the token no longer starts a new count. See
rate-limiting.md.
Deprecated
run_cabells_flagis accepted and echoed back, but ignored: the Cabells lookup no longer runs.cabells_flagged_refsis0for jobs run since then.