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://docs.up2data.ai/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

Modify a signal

Change the name, the schedule or the batch body of a signal in place.

PATCHhttps://api.up2data.ai/v1/signals/{signal_id}
Freesynchronous

A partial update: keys you omit keep their value, and inside schedule each key is optional too. Send null for schedule.ends_at or schedule.max_runs to clear them. schedule.start_at can only change before the first run. Changing schedule.interval_ms after a run moves next_run_at to last_run_at plus the new interval, or to now if that is already past. If the new schedule means a completed signal is no longer complete, for example a higher max_runs, it is revived and resumes on schedule. Pausing and resuming have their own endpoints and are not done here.

#Request

FieldTypeNotes
signal_idrequiredstringPath parameter. The signal_id returned by POST /signals.
namestringAt most 200 characters.
scheduleobjectAny of interval_ms, start_at, ends_at, max_runs. ends_at and max_runs accept null.
requestobjectReplaces the batch body used on future runs. Same rules as on create.

#Call it

cURL
curl -X PATCH "https://api.up2data.ai/v1/signals/9d1f4c2e-7b3a-4e8f-a1c5-2f6b8d9e0a11" \
  -H "X-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "schedule": {
    "interval_ms": 43200000,
    "max_runs": null
  }
}'

#Response

200
{
  "data": {
    "signal_id": "9d1f4c2e-7b3a-4e8f-a1c5-2f6b8d9e0a11",
    "name": "Watch key accounts",
    "status": "active",
    "active": true,
    "pause_reason": null,
    "schedule": { "interval_ms": 43200000, "start_at": "2026-11-01T08:00:00Z", "ends_at": null, "max_runs": null },
    "run_count": 3,
    "next_run_at": "2026-11-03T20:00:00Z",
    "last_run_at": "2026-11-03T08:00:00Z",
    "last_job_id": "job_7hd92kfa",
    "last_error": null,
    "completed_at": null,
    "request": {
      "items": [
        { "type": "profile", "url": "https://linkedin.com/in/a" },
        { "type": "company", "url": "https://linkedin.com/company/acme" }
      ],
      "webhook_url": "https://your-server.com/hooks/up2data"
    },
    "created_at": "2026-10-30T12:00:00Z",
    "updated_at": "2026-11-03T08:00:01Z"
  },
  "meta": { "creditsUsed": 0, "creditsRemaining": 98413, "billed": false, "reason": "signal_updated", "requestId": "req_t4sk0001" }
}

#Errors

StatusTypeWhenBilled
400invalid_requestMalformed body, start_at changed after the first run, interval_ms below 60000, ends_at not after start_at, max_runs below 1, or an invalid request body.No
404not_foundNo signal with this signal_id in your organization, or signal_id is not a UUID.No
401invalid_api_keyMissing, malformed, or revoked key.No
429rate_limitedOver the 5,000 requests/min limit. Honor Retry-After.No
500internal_errorSomething broke on the server side.No
503upstream_errorThe scheduling service is unreachable. Safe to retry.No

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