Account Management

Update signal

Pause or resume a signal, change its filters, its webhook endpoint or its daily lead limit — without recreating it or losing its lead history.

Input: name (new signal display name), webhookUrl (new endpoint URL where leads are delivered), config, dailyLeadLimit (max leads per day, 1–999,999), duplicateHandling (duplicate-lead policy: refuse = never re-accept a lead already delivered, allow = always accept, or Xd = accept again after X days, e.g. 7d), status (active or paused).

config is merged into the stored configuration: send only the fields you want to change, and every field you omit keeps its current value. To clear a list, send it empty (for example targetPersonas: []). A complete object still overwrites every field it carries.

Watched lists: on a watchlist, companies (or profiles on a job-change watchlist) sent in config are added to the watched list, exactly as POST /api/v1/watchlists/{signalId}/companies (or /profiles) does in its default append mode — nothing is removed, and the list is not echoed back in config. To replace the whole list use that endpoint with mode: replace; to remove one entry, DELETE it. A LinkedIn link in a company list that names no company (a person's profile, a post) is refused with 422 INVALID_COMPANY_ENTRY; a Sales Navigator company link is read as the company's LinkedIn id.

Connection signals: people added to linkedinProfileUrls start being watched, and people removed stop being watched, as on activation.

Output: the updated signal with its stored config, applied and warnings (see GET), status, real-time lead metrics (leads today + cumulative total since creation), and timestamps (created, updated, last lead received). When the PATCH carried a watched list, watchlist reports how many entries are now watched, were already watched, or were rejected.

patch/api/v1/signals/{signal_id}

Request

  • Base URL: https://api.rodz.io (the document declares no server; this is the origin it was published from)
  • URL: https://api.rodz.io/api/v1/signals/{signal_id}
  • Auth: HTTP bearer

Path parameters

signal_idstring required

Request body

namestring nullable
webhookUrlstring nullable
configobject nullable

MERGED into the stored configuration: send only the fields you want to change, every field you leave out keeps its current value. To clear a list, send it empty (e.g. "targetPersonas": []). A complete object still overwrites every field it carries. On a watchlist, companies (or profiles on a job-change watchlist) sent here are ADDED to the watched list, exactly as POST /api/v1/watchlists/{signalId}/companies in its default append mode: nothing is removed, and watchlist in the response reports what was taken in. To replace the list or remove an entry, use that endpoint with mode: replace, or DELETE on the entry.

dailyLeadLimitinteger nullable
duplicateHandlingstring nullable

Duplicate lead handling: 'refuse' (never accept), 'allow' (always accept), or 'Xd' (accept a duplicate after X days, e.g. '7d'). Optional — defaults to 'allow', so a contact who triggers this signal a second time is delivered a second time.

statusstring nullable

Signal status: active, paused

Example request

{
  "destinations": {
    "hubspot": {
      "enabled": true
    },
    "instantly": {
      "campaignId": "01920e5f-3c7a-7b1e-9d2f-8a1b2c3d4e5f"
    }
  },
  "config": {
    "linkedinCompanyUrls": [
      "https://linkedin.com/company/acme"
    ]
  },
  "duplicateHandling": "7d"
}

Response

Successful Response

idstring required
namestring required
statusstring required
signalTypeIdstring required
webhookUrlstring nullable
configobject nullable

Signal-specific configuration

dailyLeadLimitinteger required
leadsTodayinteger required
leadsTotalinteger required
duplicateHandlingstring required

Duplicate lead handling: 'refuse' (never accept), 'allow' (always accept), or 'Xd' (accept after X days)

createdAtstring required
updatedAtstring required
lastLeadAtstring nullable
appliedobject

Settings this signal runs with where they differ from config, keyed like config. {} when every stored setting is applied as stored. A null value means the stored field is not used by this signal. Every entry is explained by a warning naming the same field.

Example response

{
  "applied": {
    "allowUnknownCompanySize": false,
    "maxJobAgeDays": 180
  },
  "config": {
    "companySizeFilters": [
      "201-500",
      "501-1000"
    ],
    "getEmails": true,
    "jobTitles": [
      "CTO"
    ],
    "locations": [
      "France"
    ],
    "maxJobAgeDays": 90
  },
  "createdAt": "2026-01-15T10:30:00Z",
  "dailyLeadLimit": 50,
  "duplicateHandling": "refuse",
  "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "lastLeadAt": "2026-03-15T14:22:00Z",
  "leadsToday": 3,
  "leadsTotal": 127,
  "name": "CTOs changing jobs in France",
  "signalTypeId": "job_changes",
  "status": "active",
  "updatedAt": "2026-03-16T08:00:00Z",
  "warnings": [
    {
      "code": "VALUE_BELOW_MINIMUM",
      "field": "maxJobAgeDays",
      "message": "`maxJobAgeDays` is 90; this signal applies 180. Job changes are delivered up to 180 days after the start date, and a shorter window is raised to that minimum.",
      "severity": "info",
      "values": [
        "90"
      ]
    }
  ],
  "webhookUrl": "https://your-server.com/webhooks/rodz"
}

Changes

No recorded changes to this operation across all 1 revision of this API.