Install the Up2Data skill

Teach Claude Code to integrate the Up2Data API. Installs once, then loads automatically whenever you ask it about Up2Data.

  1. Run this in your terminal
    bash
    mkdir -p ~/.claude/skills/up2data-api && curl -fsSL https://up2data.ai/docs/v1/skill.md -o ~/.claude/skills/up2data-api/SKILL.md
  2. Restart Claude CodeSo it picks up the new skill.
  3. Try it"Enrich these LinkedIn profiles with Up2Data and send results to my webhook"

Requires Claude Code. macOS, Linux, or WSL.

Prefer to read it first? View the skill file

Get post reposts

Inbound engagement on a post - who reposted it.

POSThttps://api.up2data.ai/v1/posts/engagement/reposts
1 credit per returned repostsynchronous

Identify the post with urn (preferred) or url. A plain repost has no commentary of its own, so text and the reposter headline are omitted for it; a repost with commentary carries both.

Info

Inbound engagement on a post. For what a profile reposted elsewhere, use profile activity - that is a separate scrape.

Info

Send many as batch operation items (operation posts.engagement.reposts); up to 1,000 reposts per item. See the batch endpoint.

#Request

FieldTypeNotes
urnstringPost activity URN (numeric). Preferred over url. Provide url or urn.
urlstringPublic post URL. Provide url or urn.
share_urnstringShare URN - pass when paginating if returned by a prior page.
pageintegerDefault 1.
per_pageintegerDefault 25. 1 to 25.
max_resultsintegerCaps how many items the first page returns. Defaults to per_page.
pagination_tokenstringRequired for pages after the first, when returned by a prior response.

#Call it

cURL
curl -X POST "https://api.up2data.ai/v1/posts/engagement/reposts" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "urn": "7267273010393358336",
  "page": 1
}'

#Response

200
{
  "data": {
    "reposts": [{
      "reposted_at": "2026-07-06T19:10:00.000Z",
      "reposter": { "url": "https://linkedin.com/in/janedoe", "full_name": "Jane Doe", "urn": "ACoAABOPHB8BM6example", "headline": "VP Marketing at Acme Corp" },
      "url": "https://linkedin.com/feed/update/urn:li:activity:7267273010393358999",
      "text": "Worth sharing"
    }],
    "pagination": { "page": 1, "per_page": 25, "returned": 1, "has_more": false },
    "pagination_token": null,
    "urn": "7267273010393358336",
    "share_urn": "7267273010393358336"
  },
  "meta": { "creditsUsed": 1, "creditsRemaining": 98419, "billed": true, "reason": "success", "requestId": "req_example", "latencyMs": 2100 }
}

#Errors

StatusTypeWhenBilled
400invalid_requestMalformed body, unknown field, bad URL format, or a pagination_token that does not match the request.No
401invalid_api_keyMissing, malformed, or revoked key.No
402insufficient_creditsBalance can't cover a full page.No
422unprocessable_targetPost not found, private, deleted, or unreachable. Billed as 1 credit.Yes
429rate_limitedOver the 300 requests/min per-key limit. Honor Retry-After.No
500internal_errorSomething broke on the server side.No
504upstream_timeoutThe live scrape didn't complete in time.No

See the Errors guide for every error type this version can return.