Sources
The Sources endpoint represents venues where scholarly works are published — journals, conference proceedings, repositories, and ebook platforms. Each source links to its publisher, APC pricing, ISSN identifiers, and metadata about the works it contains.
Quick Start
Get a source by OpenAlex ID
from aletheca import AlethecaSession
async with AlethecaSession() as session:
source = await session.sources.get("S137030756") # Nature
print(source.display_name)
print(source.type) # "journal"
print(source.issn)
print(source.is_oa)
Search for sources
from aletheca import AlethecaSession
async with AlethecaSession() as session:
results = await session.sources.search(
search="nature communications",
page_size=10,
)
for source in results.results:
print(f"{source.display_name} ({source.type})")
Filtering
Use SourcesFilters to construct structured filter queries:
from aletheca import AlethecaSession
from aletheca.endpoints import SourcesFilters
async with AlethecaSession() as session:
filters = SourcesFilters(
type="journal",
is_oa=True,
)
results = await session.sources.search(filters=filters, page_size=25)
Filter by type
Source types include journal, repository, conference, ebook platform, and book series:
from aletheca import AlethecaSession
from aletheca.endpoints import SourcesFilters
async with AlethecaSession() as session:
# Journals only
filters = SourcesFilters(type="journal")
# Conference proceedings
filters = SourcesFilters(type="conference")
# Repositories (e.g. arXiv, bioRxiv)
filters = SourcesFilters(type="repository")
# Ebook platforms
filters = SourcesFilters(type="ebook platform")
ISSN lookup
from aletheca import AlethecaSession
from aletheca.endpoints import SourcesFilters
async with AlethecaSession() as session:
# Look up by specific ISSN
filters = SourcesFilters(issn="0028-0836") # Nature
results = await session.sources.search(filters=filters, page_size=1)
if results.results:
print(results.results[0].display_name)
# Look up by ISSN-L (linking ISSN)
filters = SourcesFilters(issn_l="0028-0836")
# Filter to sources that have an ISSN
filters = SourcesFilters(has_issn=True)
Filter by APC data
from aletheca import AlethecaSession
from aletheca.endpoints import SourcesFilters
async with AlethecaSession() as session:
# Sources that charge an APC
filters = SourcesFilters(has_apc=True, type="journal")
results = await session.sources.search(filters=filters, page_size=25)
for source in results.results:
print(f"{source.display_name}: ${source.apc_usd}")
# Access detailed APC pricing
source = await session.sources.get("S137030756")
for price in source.apc_prices:
print(f" {price.currency}: {price.price}")
Filter by open access status
from aletheca import AlethecaSession
from aletheca.endpoints import SourcesFilters
async with AlethecaSession() as session:
# Fully open access journals
filters = SourcesFilters(is_oa=True, type="journal")
# Journals indexed in DOAJ
source = await session.sources.get("S137030756")
print(source.is_in_doaj)
Filter by host organization (publisher)
from aletheca import AlethecaSession
from aletheca.endpoints import SourcesFilters
async with AlethecaSession() as session:
# Sources from a specific publisher
filters = SourcesFilters(host_organization="P4310320990") # Springer Nature
results = await session.sources.search(filters=filters, page_size=25)
Filter by geography
from aletheca import AlethecaSession
from aletheca.endpoints import SourcesFilters
async with AlethecaSession() as session:
# Sources from the Global South
filters = SourcesFilters(is_global_south=True)
# Sources from a specific continent
filters = SourcesFilters(continent="europe")
Iteration
from aletheca import AlethecaSession
from aletheca.endpoints import SourcesFilters
async with AlethecaSession() as session:
filters = SourcesFilters(
type="journal",
is_oa=True,
works_count_range="1000-",
)
async for source in session.sources.iterate(
filters=filters,
per_page=200,
sort="works_count:desc",
):
print(f"{source.display_name}: {source.works_count} works")
Key Fields
| Field | Type | Description |
|---|---|---|
display_name |
str \| None |
Source display name |
type |
str \| None |
journal, repository, conference, ebook platform, book series |
issn |
list[str] |
ISSN identifiers |
issn_l |
str \| None |
Linking ISSN |
is_oa |
bool \| None |
Whether fully open access |
is_in_doaj |
bool \| None |
Whether indexed in DOAJ |
apc_usd |
int \| None |
Article processing charge in USD |
apc_prices |
list[APCEntry] |
Detailed APC pricing by currency |
host_organization |
str \| None |
Publisher OpenAlex ID |
host_organization_name |
str \| None |
Publisher display name |
host_organization_lineage |
list[str] |
Publisher lineage (parent orgs) |
works_count |
int \| None |
Total number of works |
cited_by_count |
int \| None |
Total citations |
country_code |
str \| None |
ISO country code |
homepage_url |
str \| None |
Source homepage |
societies |
list[Society] |
Associated academic societies |
counts_by_year |
list[YearCount] |
Annual works/citations breakdown |
is_in_jstage |
bool \| None |
Whether the source is indexed in J-Stage |
is_in_jstage_since_year |
int \| None |
Year since which the source has been in J-Stage |
Live API Notes
- Source IDs (
idsfield) no longer include afatcatkey. The live API returnsopenalex,issn_l,issn,mag, andwikidataonly. Thefatcatfield was removed without documentation. - The OpenAlex spec lists only 21 of the 37 fields that the live API returns. Aletheca models all live fields.
Notes
- OpenAlex IDs for sources start with
S(e.g.S137030756). - Source types:
journal,repository,conference,ebook platform,book series. - APC data is available via
apc_usd(single value) andapc_prices(detailed list). host_organizationlinks to the publisher entity;host_organization_lineagetraces parent publishers.- The
is_in_doajflag indicates whether the journal is in the Directory of Open Access Journals. - The
x_conceptsfield is deprecated; usetopicsandtopic_shareinstead.