Verify citations programmatically.
The CiteOrbit API lets your platform validate a paper's references, or a whole manuscript file, and link straight to the verification report. Integrate in minutes, or drop in our ready-made OJS plugin with no code at all.
Overview
Two ways to integrate, one API behind both.
CiteOrbit extracts, enriches and validates the bibliographic references in academic papers. You can drive it two ways:
- Reference checks: send a list of raw citation strings (for example, the references a manuscript system already has on file) and get them verified.
- File checks: upload a DOCX or ODT manuscript and CiteOrbit extracts and verifies the references inside it.
Every check runs asynchronously and returns a report_id you can poll or link to. Checks spend credits from the workspace the API key belongs to.
Getting started
From zero to a verified reference list in three steps.
Create an API key
In CiteOrbit, open Profile, then API Keys, then New key. Choose its scopes (Validate references and / or Validate files) and copy the key: it is shown once and starts with cob_live_.
Set the base URL and auth header
All requests go to https://app.citeorbit.com and carry your key as a bearer token.
https://app.citeorbit.com
Authorization: Bearer cob_live_xxxxxxxxxxxxxxxxSend your first check
POST a few references and you are done:
# verify three references
curl -X POST https://app.citeorbit.com/api/ojs/reference-checks \
-H "Authorization: Bearer cob_live_xxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"article_title": "On the verification of citations",
"citation_style": "apa-7",
"references": [
{ "position": 1, "raw": "Smith, J. (2021). A study of things. Journal of Things, 4(2), 11-20." },
{ "position": 2, "raw": "Doe, A. (2019). Another paper. Press." }
]
}'{ "code": "queued", "report_id": "..." }. Open /check-references/by-check/<report_id> to view the report.Authentication & limits
Bearer keys, scopes, and the limits that protect your credits.
Authenticate every request with Authorization: Bearer <key>. Keys are workspace-scoped and carry one or both permissions:
| Scope | Grants |
|---|---|
references:write | Submit reference-list checks (/reference-checks) |
files:write | Submit manuscript file checks (/file-checks) |
Limits
- Per-key cap: each key has a configurable daily, weekly, or monthly check limit.
- Rate limit: bursts are throttled per workspace; throttled calls return
rate_limitedwith aRetry-Afterheader. - Expiry: keys can be given an expiry date and revoked anytime from Profile, then API Keys.
- Max 100 references per reference check.
API reference
Three endpoints. All responses are JSON.
Check references
references:write| Field | Type | Description | |
|---|---|---|---|
references | array | required | 1 to 100 items, each { position, raw, citation_id? } |
article_title | string | optional | Title of the paper being checked |
citation_style | string | optional | e.g. apa-7, vancouver, ieee (defaults to apa-7) |
journal_abbreviation | string | optional | Shown on the report |
submission_id | number | optional | Your system's submission id, echoed back |
{
"code": "queued",
"report_id": "chk_a1b2c3",
"message": "References sent to CiteOrbit."
}Check a file
files:writeMultipart upload. Accepts DOCX, DOC, or ODT (PDF is not supported for file checks).
curl -X POST https://app.citeorbit.com/api/ojs/file-checks \
-H "Authorization: Bearer cob_live_xxxxxxxxxxxxxxxx" \
-F "file=@manuscript.docx" \
-F "citation_style=apa-7" \
-F "journal_abbreviation=J. Things"Get a check's result
Poll until status is completed.
{
"status": "completed",
"score": 92,
"summary": {
"total": 24,
"verified": 22,
"issues": 2
}
}Error codes
Failures return a code and a human-readable message.
| Code | Meaning |
|---|---|
invalid_api_key | Key missing, malformed, or revoked. |
insufficient_scope | Key lacks the scope for this endpoint. |
insufficient_credits | Workspace is out of credits (response includes topup_url). |
no_references | No references in the request body. |
too_many_references | More than 100 references in one check. |
unsupported_file / invalid_file_content | File type or contents not a supported document. |
file_too_large | Uploaded file exceeds the size limit. |
rate_limited | Too many requests, retry after the Retry-After seconds. |
key_limit_reached | Key hit its daily / weekly / monthly cap. |
concurrent_limit | Another check is already running for this workspace. |
server_error | CiteOrbit could not process the request. |
OJS plugin
No code required: validate references and files inside your editorial workflow.
Running Open Journal Systems? Install the CiteOrbit plugin and editors get one-click Validate with CiteOrbit actions on the References tab and on manuscript files: the report opens straight from OJS.
OJS 3.3
stable-3_3_0OJS 3.4
stable-3_4_0OJS 3.5
stable-3_5_0Install
Download the release for your OJS version and upload it under Settings, then Website, then Plugins, then Upload a new plugin.
Enable CiteOrbit Reference Checking, open its settings, and paste your cob_live_ API key.
Open any submission, then Validate with CiteOrbit on the References tab or a manuscript file.
Support
We are happy to help you integrate.
Questions about the API or the OJS plugin? Email support@citeorbit.com or open an issue on the plugin's GitHub repository. For workspace, billing and credit questions, see your account dashboard.