- IMPORTANT: The package no longer automatically uses the
ORCID_TOKENenvironment variable for API requests - Reason: The ORCID public API does NOT require authentication and actually rejects invalid tokens with 401 errors
- Impact: If you previously set
ORCID_TOKENand experienced authentication errors, you can now safely unset it - Migration: If you need authentication (for rate limits or private data), pass the token explicitly:
orcid_works(id, token = "your-token") - Authentication is now truly optional as intended by ORCID's public API design
- Fixed
orcid_ping()to useapplication/jsoninstead oftext/plainAccept header - Now properly parses JSON response and returns "OK" when API is healthy
- Resolves 406 (Not Acceptable) errors from the status endpoint
- Fixed empty search results returning 1 row of NA values instead of 0 rows
orcid_search()andorcid()now correctly return empty data.table with 0 rows when no matches foundattr(result, "found")still correctly shows 0 for total matches
- Enhanced
parse_search_results()to handle NA values fromsafe_extract()when JSON contains null - Prevents creation of placeholder rows with NA values
- Updated README and vignette to explicitly state authentication is optional
- Explained when tokens are actually needed (rate limits, private data access)
- Provided OAuth2 flow example for users who do need tokens
- Corrected misconceptions from rorcid documentation about token requirements
- Updated
orcid_request()documentation to reflect optional authentication - Clarified that public API works without any token
- Improved error messages for authentication failures
- Removed
ORCID_TOKENchecks from all test helper functions - All 302 tests now pass without requiring any authentication
- Tests correctly handle both authenticated and unauthenticated scenarios
orcid_person(): Fetch complete person/biographical dataorcid_bio(): Retrieve biography textorcid_keywords(): Get researcher keywordsorcid_researcher_urls(): Fetch researcher URLsorcid_external_identifiers(): Get external identifiers (Scopus, ResearcherID, etc.)orcid_other_names(): Retrieve alternative namesorcid_address(): Get address/country informationorcid_email(): Fetch email addresses (if public)
orcid_distinctions(): Fetch distinctions and honorsorcid_invited_positions(): Get invited positionsorcid_memberships(): Retrieve professional membershipsorcid_qualifications(): Fetch qualificationsorcid_services(): Get service activitiesorcid_research_resources(): Retrieve research resources
orcid_employments(): Fetch employment historyorcid_educations(): Retrieve education records
orcid_works(): Get works/publicationsorcid_funding(): Fetch funding recordsorcid_peer_reviews(): Retrieve peer review activities
orcid_activities(): Fetch all activities in one call (returns named list of all activity types)
orcid(): Flexible Solr query search of ORCID registryorcid_search(): User-friendly search with named parametersorcid_doi(): Search for ORCID records by DOI
orcid_fetch_record(): Get complete ORCID record (supports all sections)orcid_fetch_many(): Batch fetch for multiple ORCIDs
orcid_ping(): Check ORCID API status
- Full ORCID API v3.0 support
- CRAN-compliant implementation
- Comprehensive test coverage (302 tests) with
skip_on_cran()guards - All functions return data.table objects for efficient data manipulation
- Complete roxygen2 documentation
- Built with modern httr2 package for HTTP requests
- No authentication required for public data access
- Optional token support for enhanced rate limits