APA-URAAS / docs /PARTNER_API.md
Lordkiki's picture
Deploy URAAS β€” African Research Archival & Analytics System
2e39262 verified
|
Raw
History Blame Contribute Delete
5.54 kB

URAAS Partner API

Server-to-server read access to URAAS (University of Lagos Academic Archive & Special Collections) data β€” built for external partners like the Africa PID Alliance / DOCiD to integrate against, without needing a browser session.

This is separate from the dashboard's human login (username/password + session cookie). Partner access uses a long-lived API key instead.


Base URL

https://lordkiki-apa-uraas.hf.space

Authentication

Every request must include the key in a header:

X-API-Key: uraas_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  • Missing or invalid key β†’ 401 Unauthorized
  • Valid key used against an endpoint outside this document β†’ 403 Forbidden (partner keys are read-only by construction β€” no key can reach crawler controls, admin exports, or anything that mutates data, regardless of what path is requested)
  • Keys are issued manually by a URAAS admin. To request one, contact the URAAS team directly β€” there is no self-service signup.

Rate limits

120 requests per rolling 60-second window, per key. Exceeding it returns 429 Too Many Requests. Contact us if your integration needs a higher limit.

Errors

All errors are JSON:

{ "status": "error", "message": "..." }
Status Meaning
401 Missing or invalid/revoked API key
403 Valid key, but this endpoint isn't in the partner allowlist
429 Rate limit exceeded
404 Resource not found (e.g. unknown paper id)
500 Server error β€” please report it to us

Endpoints

GET /api/stats

Network/collaboration summary: co-authorship edges between departments, and top authors by paper count.

{
  "status": "success",
  "network_edges": [{ "source": "Botany", "target": "Chemistry", "weight": 1 }],
  "top_authors": [{ "author": "...", "count": 2, "orcid": "", "ror": "" }]
}

GET /api/papers/tree

Every paper, grouped by faculty then department.

{
  "data": {
    "College of Medicine": {
      "Community Health and Primary Care": [
        {
          "id": 22,
          "title": "...",
          "doi": "10.1093/hmg/ddw104",
          "url": "https://doi.org/10.1093/hmg/ddw104",
          "docid": "",
          "download_url": null,
          "has_local_pdf": false,
          "access_policy": null
        }
      ]
    }
  }
}

docid is populated once a paper has a real, registered DOCiD β€” empty string otherwise. This is the field to poll if you want to detect which URAAS papers already carry a DOCiD vs. which don't yet.

GET /api/papers/<id>

Full metadata for one paper β€” title, abstract, authors, DOI, publication date, Special Collections category/score, and identifiers (docid, ark, ror) where present.

GET /api/papers/<id>/download

Redirects to or streams the PDF, only when the item is open access.

GET /api/papers/<id>/bibtex

BibTeX citation export for one paper (Content-Type: text/plain).

GET /api/analytics/special-collections

The Special Collections subset specifically β€” the papers classified into one or more of the 8 categories (Indigenous Knowledge, Cultural Heritage, Oral Tradition, Ethnomusicology, African Philosophy, Traditional Medicine, Ethnic Languages & Groups, Pan-African Studies).

GET /api/analytics/special-collections/overview

Aggregate view over that same set: category co-occurrence matrix, country breakdown, custodian institutions, and the most-cited/influential papers per category.

{
  "co_occurrence": { "labels": [...], "matrix": [[...]] },
  "countries": [{ "code": "NG", "name": "Nigeria", "papers": 54 }],
  "custodians": [{ "institution": "University of Lagos", "count": 54 }],
  "influential": [{ "id": 1, "title": "...", "categories": [...], "citations": 856, "sc_score": 3.0 }]
}

GET /api/university-registry

The full registry of institutions URAAS crawls against (52 African universities as of this writing) β€” name, ROR, country.

GET /api/institution/info?institution=unilag

Summary for one institution from the registry above. institution is the registry key (e.g. unilag); omitting it returns null fields.

{ "status": "success", "data": { "institution_name": "University of Lagos", "country_name": "Nigeria", "country_code": "NG" } }

Example

curl -H "X-API-Key: uraas_live_..." \
  "https://lordkiki-apa-uraas.hf.space/api/analytics/special-collections/overview"

What this API does not do (yet)

There is currently no inbound path β€” nothing lets DOCID's platform push data or notifications back into URAAS (e.g. "here's the DocID we just assigned, sync your record" or a webhook on registration). Every endpoint above is URAAS serving data out. If two-way sync is needed, that's new work to scope separately, not something already exposed here.

For URAAS admins β€” issuing/revoking keys

python scripts/manage_api_keys.py create --name "Africa PID Alliance / DOCiD"
python scripts/manage_api_keys.py list
python scripts/manage_api_keys.py revoke --prefix uraas_live_AbCd1234

The full key value is shown exactly once, at creation β€” only its hash is stored. If a key is lost or compromised, revoke it and issue a new one; there is no way to recover a lost key's value.

To add a new endpoint to partner access, add its Flask endpoint (function) name to PARTNER_ENDPOINTS in uraas/dashboard/app.py β€” nothing is reachable via API key unless explicitly listed there.