figshare-skill
NewManage Figshare articles, metadata, and files directly from the command line or via AI coding agents.
Overview
Figshare Skill
Interact with the Figshare v2 REST API to search, download, create, and upload research outputs.
Prerequisites
- •
curlandjqavailable on PATH. - •For authenticated endpoints (anything under
/account/...or uploads), a personal token from https://figshare.com/account/applications exported as:
``bash export FIGSHARE_TOKEN=xxxxxxxxxxxxxxxx ``
- •Public endpoints (search, public articles, downloads) need no token.
Always confirm with the user before creating, modifying, publishing, or deleting anything on their account — these are hard to reverse.
API Basics
- •Base URL:
https://api.figshare.com/v2 - •Auth header:
Authorization: token $FIGSHARE_TOKEN - •Content-Type:
application/jsonfor POST/PUT bodies - •Rate limit: keep it under ~1 request/second to avoid abuse throttling
- •Errors: JSON body with
message,code; common codes 400/401/403/404/422
Common Recipes
Search public articles
curl -s -X POST https://api.figshare.com/v2/articles/search \
-H "Content-Type: application/json" \
-d '{"search_for": ":title: single cell", "page_size": 20}' | jqField operators: :title:, :author:, :tag:, :category:, :doi:, :resource_doi:.
Get a public article (by ID or DOI)
curl -s https://api.figshare.com/v2/articles/{article_id} | jq
# or resolve from a figshare.com URL: the numeric tail is the article_idDownload all files from a public article
ART=12345678
curl -s https://api.figshare.com/v2/articles/$ART/files \
| jq -r '.[] | "\(.download_url)\t\(.name)"' \
| while IFS=$'\t' read -r url name; do curl -L -o "$name" "$url"; doneList your own articles
curl -s -H "Authorization: token $FIGSHARE_TOKEN" \
"https://api.figshare.com/v2/account/articles?page=1&page_size=50" | jqCreate an article (draft)
curl -s -X POST https://api.figshare.com/v2/account/articles \
-H "Authorization: token $FIGSHARE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "My dataset",
"description": "Full description here.",
"defined_type": "dataset",
"tags": ["demo"],
"categories": [2]
}' | jqResponse is { "location": ".../account/articles/{id}", "entity_id": 123 }.
Update / publish an article
# update metadata
curl -s -X PUT https://api.figshare.com/v2/account/articles/$ART \
-H "Authorization: token $FIGSHARE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title": "New title"}'
# publish (becomes public, assigns DOI, version is frozen)
curl -s -X POST https://api.figshare.com/v2/account/articles/$ART/publish \
-H "Authorization: token $FIGSHARE_TOKEN"Always ask before publishing — it's permanent for that version.
Collections & projects
# create collection that groups existing articles
curl -s -X POST https://api.figshare.com/v2/account/collections \
-H "Authorization: token $FIGSHARE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title": "My Collection", "articles": [123, 456]}'
# create project
curl -s -X POST https://api.figshare.com/v2/account/projects \
-H "Authorization: token $FIGSHARE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title": "Research Project"}'Uploading Files (Multi-part Flow)
Figshare uploads are 3-step: initiate → PUT each part → complete. Use the bundled helpers for anything non-trivial:
# upload a file to an existing draft article
./scripts/upload.sh <article_id> <path/to/file>
# batch-download every file from a public article (accepts id or figshare.com URL)
./scripts/download.sh <article_id_or_url> [output_dir]
# reserve + upload + publish a new version of an already-published article
./scripts/new-version.sh <article_id> <path/to/file>The raw flow, in case you need to adapt it:
- Initiate — compute md5 + size, POST to article:
```bash
| SIZE=$(stat -f%z "$FILE" 2>/dev/null | stat -c%s "$FILE") |
|---|---|
| MD5=$(md5sum "$FILE" | awk '{print $1}') # or: md5 -q on macOS |
curl -s -X POST https://api.figshare.com/v2/account/articles/$ART/files \ -H "Authorization: token $FIGSHARE_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"md5\":\"$MD5\",\"name\":\"$(basename $FILE)\",\"size\":$SIZE}" ```
Response has location pointing at /account/articles/$ART/files/$FILE_ID.
- Fetch upload info from that file record — it contains an
upload_url. GET the upload_url to learn the part layout (parts: [{partNo, startOffset, endOffset}]).
- Upload parts — for each part, PUT the byte range to
${upload_url}/${partNo}:
```bash dd if="$FILE" bs=1 skip=$START count=$((END-START+1)) 2>/dev/null \
-H "Authorization: token $FIGSHARE_TOKEN" ```
- Complete — POST to the file record to finalize:
``bash curl -s -X POST https://api.figshare.com/v2/account/articles/$ART/files/$FILE_ID \ -H "Authorization: token $FIGSHARE_TOKEN" ``
Why three steps: Figshare streams large files through a separate upload service. Skipping the complete call leaves the file in a pending state and it won't appear on the article.
Pagination
Most list endpoints accept either page+page_size or limit+offset. Max page_size is typically 1000. For large harvests, loop until an empty page:
page=1
while :; do
out=$(curl -s "https://api.figshare.com/v2/articles?page=$page&page_size=100")
[ "$(echo "$out" | jq 'length')" = "0" ] && break
echo "$out" | jq -c '.[]'
page=$((page+1))
sleep 1
doneTroubleshooting
- •401 — token missing/expired; re-check
$FIGSHARE_TOKEN. - •403 on
/account/...— token lacks the needed scope; regenerate with full permissions. - •422 on article create — missing required field (usually
title) or badcategories/defined_type. - •Upload parts mismatch — md5 or size in step 1 didn't match the bytes actually uploaded; recompute and restart.
- •Published article won't update — publishing freezes a version; create a new version instead.
References
- •API reference: https://docs.figshare.com/
- •Token management: https://figshare.com/account/applications
- •Category IDs:
GET https://api.figshare.com/v2/categories - •License IDs:
GET https://api.figshare.com/v2/licenses
Install & Usage
mkdir -p .claude/skillsmkdir -p .claude/skills && curl -o .claude/skills/figshare-skill.md https://raw.githubusercontent.com/Selleparental3533/figshare-skill/main/SKILL.md/figshare-skillSecurity Audits
Frequently Asked Questions
What is figshare-skill?
Manage Figshare articles, metadata, and files directly from the command line or via AI coding agents.
How to install figshare-skill?
To install figshare-skill: create the skills directory (mkdir -p .claude/skills), then run: mkdir -p .claude/skills && curl -o .claude/skills/figshare-skill.md https://raw.githubusercontent.com/Selleparental3533/figshare-skill/main/SKILL.md. Finally, /figshare-skill in Claude Code.
What is figshare-skill best for?
figshare-skill is a skill categorized under General. It is designed for: agent. Created by Selleparental3533.