pipeline
pipeline

Run one scoped pipeline job per state for a selection that spans states

Fan a cross-state selection out into one ordinary scoped run per state.

Each leg goes through the same POST /trigger code path it would have taken if you had picked that state by hand — same validation, same Run Manifest, same per-entity COGS attribution, same concurrency lock.

Partial success is the normal outcome, not an error. A state whose lock is held by the overnight harvest cannot start a second run, and silently dropping it is how an operator comes to believe they enriched records they did not. Every leg is reported with its own status and job_id; the call fails (409 / 400) only when nothing started.

Scope with entity_id (IDs may span states — they are grouped) or filters (no state clause; each leg adds its own). limit is per state; pull is refused because it ignores record scope.

post/api/v1/pipeline/trigger-multi

Request

  • Base URL: https://app.goodleads.club (the document declares no server; this is the origin it was published from)
  • URL: https://app.goodleads.club/api/v1/pipeline/trigger-multi
  • Auth: API key in header X-API-Key

Request body

statesstring[] nullable

Restrict the fan-out to these states. Omit to run every state the selection touches. It narrows, never widens: a state named here that the selection does not touch is simply absent from the result.

limitinteger nullable

PER-STATE cap, not a total — limit=100 across 5 states runs up to 500 records. One shared budget would have to pick which state gets starved; capping each leg is the predictable reading of 'take 100 from each'.

entity_idstring nullable

Comma/space/newline-separated UUIDs or GLIDs that may span states. Grouped by state, one run per state. Mutually exclusive with filters.

filtersobject[] nullable

Filter expression, same shape as POST /api/v1/leads/browse, WITHOUT a state clause — the fan-out supplies each leg's own. Mutually exclusive with entity_id.

include_non_operatingboolean

Only meaningful with filters. Mirrors Browse's own default so the per-state counts match the number on the button the operator pressed — see TriggerRequest.include_non_operating.

include_existingboolean

Only meaningful with filters. See TriggerRequest.include_existing.

include_registrationsboolean

Deprecated alias of include_existing (kept one release so saved requests resolve).

gapfill_forceboolean

Forced paid re-dip, applied to every leg. Same rules as POST /trigger.

force_recomputeboolean

Force free stages to recompute in every leg. Same rules as POST /trigger.

Example request

{
  "summary": "Enrich an all-states Browse selection",
  "value": {
    "filters": [
      {
        "field": "has_email",
        "op": "eq",
        "value": false
      }
    ],
    "stages": [
      "skip_trace",
      "gapfill",
      "validate"
    ]
  }
}

Response

Successful Response

startedinteger required
skippedinteger required
stagesstring[] required

The expanded stage list every started leg is running.

capacity_notestring nullable

Changes

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