Open Science Framework API
Free Open Science Framework API with no key for public data: projects, registrations, preprints, files and contributors in JSON:API format. Tested example and live response.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Open Science Framework API?
The Open Science Framework API is a free REST interface to OSF's public research projects, preregistrations, preprints and files. Public data is readable without authentication; a personal access token is only needed for private content or to write.
OSF is where a large slice of psychology, education and social science now keeps its preregistrations, materials and data. The API exposes all of the public side: projects (called nodes), their contributors, their file trees, registrations and the preprint servers OSF hosts. For meta-research and reproducibility tooling it is the primary source, because preregistrations carry timestamps that cannot be edited after the fact.
The API follows JSON:API strictly, which is a mixed blessing. Every object separates `attributes` from `relationships`, and relationships are returned as links rather than embedded data — so getting a project's contributors means following `relationships.contributors.links.related.href` rather than reading an array. Bracketed query parameters (`page[size]`, `filter[title]`) need URL-encoding in most HTTP clients. Anonymous access is throttled fairly aggressively, so anything beyond casual polling wants a token even though the data itself is public.
Quick facts
- Base URL
https://api.osf.io/v2- Authentication
- No key needed to read public nodes, registrations and preprints. A free personal access token raises the rate limit and is required for private projects or any write operation.
- Rate limit
- Anonymous requests are throttled per IP and will return HTTP 429 under sustained use. Authenticated requests with a personal access token get a substantially higher allowance.
- Pricing
- Free. OSF is run by the non-profit Center for Open Science; individual projects set their own licence, exposed as `node_license`.
- CORS
- Not enabled — call it from your server
- Official docs
- Read the docs
How to use the Open Science Framework API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. List public OSF projects, one per page
GET https://api.osf.io/v2/nodes/?page%5Bsize%5D=1
curl 'https://api.osf.io/v2/nodes/?page%5Bsize%5D=1'const res = await fetch("https://api.osf.io/v2/nodes/?page%5Bsize%5D=1");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://api.osf.io/v2/nodes/?page%5Bsize%5D=1", timeout=20)
res.raise_for_status()
print(res.json()){
"data": [
{
"id": "wmx2h",
"type": "nodes",
"attributes": {
"title": "The effect of anonymity on willingness to testify",
"description": "",
"category": "project",
"custom_citation": null,
"date_created": "2025-02-05T10:40:56.699961",
"date_modified": "2026-08-21T07:38:31.695545",
"registration": false,
"preprint": false,
"fork": false,
"collection": false,
"tags": [],
"access_requests_enabled": true,
"node_license": null,
"analytics_key": "",
"current_user_can_comment": false,
"current_user_permissions": [
"read"
],
"current_user_is_contributor": false,
"current_user_is_contributor_or_group_member": false,
"wiki_enabled": true,
"public": true,
"subjects": []
},
"relationships": {
"children": {
"links": {
"related": {
"href": "https://api.osf.io/v2/nodes/wmx2h/children/",
"meta": {}
}
}
},
"collected_in": {
"links": {
"related": {
"href": "https://api.osf.io/v2/nodes/wmx2h/collections/",
"meta": {}
}
}
},
"comments": {
"links": {
"related": {
"href": "https://api.osf.io/v2/nodes/wmx2h/comments/?filter%5Btarget%5D=wmx2h",
"meta": {}
}
}
},
"contributors": {
"links": {Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
page[size] | query | Optional | Results per page, up to 100. Bracket characters must be URL-encoded. 10 |
page | query | Optional | One-based page number. 1 |
filter[title] | query | Optional | Filter nodes by title substring. Most attributes support a `filter[...]` form. replication |
embed | query | Optional | Embed a related resource inline instead of returning a link, saving a round trip. contributors |
sort | query | Optional | Sort field; prefix with `-` for descending. -date_modified |
Response fields
data[].idstring- The five-character OSF GUID, which is also the public URL path for the project.
data[].typestring- JSON:API resource type — `nodes`, `registrations`, `preprints`, `files` and so on.
attributes.title / descriptionstring- Project title and description as entered by the researchers.
attributes.categorystring- Self-declared project type such as `project`, `data`, `analysis` or `methods and measures`.
attributes.registrationboolean- True for frozen preregistrations, which cannot be edited after submission.
attributes.publicboolean- Whether the node is publicly visible. The anonymous API only ever returns true here.
relationshipsobject- Links to related resources. Follow the `related.href` values, or use `embed` to inline them.
What you can build with the Open Science Framework API
- Harvest preregistrations for a meta-research study
- Mirror a lab's public project list onto its own website
- Monitor a project for new files or contributors
- Cross-reference preprints to their underlying data and materials
- Check whether an analysis plan was registered before data collection
Common errors and how to fix them
429
Anonymous throttle exceeded.
Fix: Slow down and cache. A free personal access token, sent as a bearer header, raises the ceiling considerably.
400 on filter or page parameters
Square brackets were sent unencoded.
Fix: Encode them as `%5B` and `%5D`. Several HTTP clients do this automatically and several do not.
Empty relationships
JSON:API returns links, not embedded objects.
Fix: Follow `relationships.<name>.links.related.href`, or add `embed=<name>` to inline the resource in the same response.
404 on a project you can see in a browser
The node is private or view-only.
Fix: Anonymous API access sees public nodes only. View-only links are a web-interface feature and do not extend to the API.
Open Science Framework API — frequently asked questions
Do I need an OSF account to use the API?
Not for reading public projects, registrations and preprints — those work anonymously. You need a free personal access token for private content, for writing, and in practice for any sustained read volume because of the anonymous rate limit.
What is the difference between a node and a registration on OSF?
A node is a live project that contributors can edit. A registration is a frozen, timestamped snapshot of a node, typically a preregistered analysis plan, which cannot be changed afterwards. That immutability is why registrations are the interesting object for meta-research.
Why are contributors not included in the project response?
OSF follows the JSON:API specification, which returns relationships as links rather than embedded data. Either follow the link in `relationships.contributors` or request `embed=contributors` to have it inlined.
Can I download files through the API?
Yes. File objects carry download links that resolve through OSF's storage service. The metadata API describes the file tree; the actual bytes come from those separate URLs.
Tools that pair with this API
JSON Formatter
Format, beautify and minify JSON online with 2-space, 4-space or tab indentation. Sort keys alphabetically and catch syntax errors instantly — free and private.
JSON Path Finder
Evaluate a dot/bracket path against your JSON and list every leaf path for discovery. Free online JSON path finder that runs 100% in your browser.
JSON to CSV Converter
Convert a JSON array of objects to CSV online. Automatic column headers from the union of all keys, delimiter choice and proper quoting — all in-browser.
Open Science Framework is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.