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/v2 would 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_token gives an unverified or suspended account the same answer as a wrong password: HTTP 401 with 0004. It used to give HTTP 406 with 0005 or 0006, 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_status treats the token of an account suspended since sign-in as invalid: HTTP 401 with 0026. Sign in again; the answer is then 0004. In 2.2.0 this was HTTP 406 with 0006.

Removed ​

  • Error codes 0005 and 0006. They are retired and will not be reused.

2.3.0—November 2026 ​

Changed ​

  • get_auth_token limits 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 and 0028, 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. See rate-limiting.md.

2.2.0—November 2026 ​

Changed ​

  • get_subscription_status checks the account and its subscription each time it is called, not only when the token was issued. An account suspended since then gets 0006, and an account with no active subscription gets 0009, 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 with 0001. Other endpoints still rely on the checks made when the token was issued.
  • expiration_timestamp in get_subscription_status is null for a subscription that does not expire. Such subscriptions used to get HTTP 500 with 0001.

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_modes on create_job and create_job_from_file: how much PubMed and Crossref may change a reference they match — link, add or merge. Leaving it out keeps the previous behaviour (pubmed: merge, crossref: add). Job information now reports the modes each job ran in. See service-modes.md.

  • journal_abbr_contents on create_job and create_job_from_file: a journal-abbreviation file sent with a custom stylesheet, which overrides Edifix's journal names and abbreviations for that job. See stylesheet-contents.md.

  • Editorial styles Chicago18 (Chicago 18th ed., Author-Date) and CSE9 (CSE 9th ed.).

  • Error codes, all HTTP status 406:

    CodeMeaning
    0046timeout_time, an optional processing limit in seconds, is not a positive integer. It used to return HTTP 500 with 0001.
    0047The Word document is password-protected.
    0048The Word document is write-protected.
    0049The Word document failed the virus scan.
    0050journal_abbr_contents was sent without stylesheet_contents.
    0051journal_abbr_contents has no <Custom journals> or <Bad journals> section.
    0052The stylesheet sent with journal_abbr_contents declares no add-abbr-file.
    0053stylesheet_contents is larger than 256 KB.
    0054job_name is longer than 255 characters.
    0055service_modes is not a map of service to mode.
    0056service_modes names an unknown service.
    0057service_modes gives an unknown mode.

    0047–0049 are not returned by create_job_from_file, which accepts the file: the job fails later and records the code in reason_of_failure. These jobs used to fail with HTTP 500 and 0001.

  • This documentation: the OpenAPI 3.1 specification and these pages, published on docs.typefi.com.

Changed ​

  • New limits. stylesheet_contents may be at most 256 KB (0053) and job_name at most 255 characters (0054). An uploaded file must be a Word document in its contents, not only in its name and content type (0038).
  • Chicago and CSE are now named as the 17th and 8th editions. They behave as before.
  • TRR is no longer listed by get_edit_styles. It is still accepted: the job runs as Chicago18, and its edit_style stays TRR.
  • JATS XML from export_job, and from get_job with 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 and https://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_flag is accepted and echoed back, but ignored: the Cabells lookup no longer runs. cabells_flagged_refs is 0 for jobs run since then.
Last updated: 6 Nov 2026, 22:07:47
Loading navigation...