logo-darkPipe0

Concepts

Every pipe adds fields to your input records. Two properties tell you how a pipe behaves before you run it: its type (how many providers it tries) and its field mode (the shape of its config). This page covers both.

Pipe types

Single-provider pipes

A single-provider pipe runs on one third-party service (for example LeadMagic or ZeroBounce) or on pipe0 itself (native pipes).

Waterfall pipes

A waterfall pipe tries providers in order. The first one that returns data wins; the rest are skipped.

Only the provider that returns a result is billed. A no_result costs nothing.

Waterfalls raise coverage at the cost of latency: each provider attempted adds a round-trip.

Choosing waterfall providers

Set config.providers to an array of { "provider": <PROVIDER_NAME> }. Providers run in array order, index 0 first. Remove an entry to skip it, reorder to change priority. Omit config.providers to use the default order.

Reorder providers
{
  "pipe_id": "person:workemail:waterfall@1",
  "config": {
    "providers": [
      { "provider": "prospeo" },
      { "provider": "leadmagic" }
    ]
  }
}

The default provider order and the credit price per provider are listed on each pipe's page in the pipe catalog.

Field mode

field_mode determines the shape of a pipe's config object.

Field mode: static

The pipe's inputs and outputs are fixed. You can remap inputs and rename outputs, but the schema is known up front.

Example: person:workemail:waterfall@1 reads name + company_domain and writes work_email.

Rename outputs

Set config.output_fields.<FIELD>.alias:

Rename an output field
fetch('https://api.pipe0.com/v1/pipes/run', {
    method: 'POST',
    headers: {
        'Authorization': `Bearer ${API_KEY}`,
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        pipes: [
            {
                pipe_id: 'person:name:split@1',
                config: {
                    output_fields: {
                        first_name: { alias: 'special_first_name' }
                    }
                }
            }
        ],
        input: [{ id: '1', name: 'Jane Doe' }]
    })
})

Disable outputs

Set config.output_fields.<FIELD>.enabled: false:

Disable an output field
fetch('https://api.pipe0.com/v1/pipes/run', {
    method: 'POST',
    headers: {
        'Authorization': `Bearer ${API_KEY}`,
        'Content-Type': 'application/json'
    },
    body: JSON.stringify({
        pipes: [
            {
                pipe_id: 'person:name:split@1',
                config: {
                    output_fields: {
                        first_name: { enabled: false }
                    }
                }
            }
        ],
        input: [{ id: '1', name: 'Jane Doe' }]
    })
})

Field mode: config

You declare inputs and outputs as part of the pipe's config. The pipe doesn't know them ahead of time.

The most common config-mode pattern is a template: a text field where you reference inputs and declare outputs inline. LLM pipes like prompt:run@1 work this way. Templates have their own page.

Next steps

On this page