skills/labarchive-integration/references/authentication_guide.md
Verified against official public sources on 2026-07-23. LabArchives may provide additional institution-specific development documentation with API credentials; that documentation controls when it differs from this summary.
The official ELN subscription guide (updated 2025-09-24) lists developer API access as an Enterprise capability. An Access Key ID and Access Password are issued by LabArchives for a specific organization/vendor and intended purpose. They are not ordinary account credentials.
Official source: https://help.labarchives.com/hc/en-us/articles/11723701830676-ELN-for-Research-Introduction-and-Subscription-Plans
The Inventory FAQ (updated 2026-05-19) states that API access is available only to Enterprise and Enterprise Plus licensees. The caller must:
An eligible Inventory license member can request access through
[email protected].
Official source: https://help.labarchives.com/hc/en-us/articles/11811035048212-Inventory-FAQs
Keep these values distinct:
akid) — identifies the API client.users::user_access_info.password parameter by users::user_access_info.X-LabArchives-LabId.Do not use a normal LabArchives account password in API scripts.
The two host types are intentionally shown in separate columns. Login URLs come from the help-center SSO article updated 2025-11-04; API URLs come from the official ELN API overview updated 2025-11-03.
| Region | Browser login | ELN API URL |
|---|---|---|
| US and rest of world | https://mynotebook.labarchives.com | https://api.labarchives.com/api |
| Canada | https://ca-mynotebook.labarchives.com | https://caapi.labarchives.com/api |
| Australia/New Zealand | https://au-mynotebook.labarchives.com | https://auapi.labarchives.com/api |
| United Kingdom | https://uk-mynotebook.labarchives.com | https://ukapi.labarchives.com/api |
| Europe outside the UK | https://eu-mynotebook.labarchives.com | https://euapi.labarchives.com/api |
Official sources:
The official ELN overview recommends utilities::api_base_urls for distributed
applications so they can discover future regional API additions. The bundled
validator intentionally pins the five hosts documented at this refresh date.
The public Inventory authentication and endpoint pages reviewed here document
relative /public/v1/... paths and required headers. They did not establish
a complete regional absolute API base-URL table. Inventory browser hosts are not
proof of API hosts. Use the base URL supplied with the institution/vendor API
documentation; do not derive one from a login URL.
These names are conventions used by this skill's local helpers:
LABARCHIVES_ELN_API_URL
LABARCHIVES_ACCESS_KEY_ID
LABARCHIVES_ACCESS_PASSWORD
LABARCHIVES_USER_ID
LABARCHIVES_INVENTORY_LAB_ID
Use a shell session, OS keychain, workload secret store, or institution-approved secret manager to populate them. The scripts:
.env,Validate presence and endpoint selection:
uv run scripts/setup_config.py check
uv run scripts/setup_config.py check \
--require-user-id --require-inventory-lab-id
--prompt-missing-secret uses getpass for a missing Access Password and keeps
the value in memory only. It does not save or authenticate it.
The official page describes an OAuth-like redirect flow. It does not
document generic OAuth 2.0 client credentials, /oauth/authorize, or
/oauth/token endpoints.
/api_user_login path with akid,
expires, sig, and redirect_uri.auth_code
and email.users::user_access_info, passing the
authorization code as its password parameter and the returned email.If redirects cannot be used, the official flow allows a user-generated
temporary password token in the same password parameter. Handle it with
getpass or a secure UI field; never put it on a command line or in a log.
Official user-login page (updated 2023-03-03): https://mynotebook.labarchives.com/share/LabArchives%20API/ODEuOXwyNy82My05My9UcmVlTm9kZS8yMjYyMTU0MTg3fDIwNy44OTk5OTk5OTk5OTk5OA==
The official call-authentication page (updated 2023-05-10) defines:
message = AccessKeyID + api_method_input + expires
signature = Base64(HMAC-SHA-512(key=AccessPassword, message=message))
There are no separators. expires is current epoch milliseconds, corrected for
server clock skew when needed—not a future token lifetime. The official page
allows two minutes for latency/minor clock synchronization, while the
best-practices page recommends utilities::epoch_time for unreliable clocks.
api_method_input is the method name only, without its
class.Official signing page: https://mynotebook.labarchives.com/share/LabArchives%20API/Ny44fDI3LzYvVHJlZU5vZGUvMTE1MzU5MTAyNXwxOS44
Use scripts/entry_operations.py self-test to check the implementation against
the official published test vector without credentials or network access.
https.epoch_time adjustment.sig.