> ## Documentation Index
> Fetch the complete documentation index at: https://deepline.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Particle: List Sponsor Segments

> List a sponsor's individual podcast ad segments with episode attribution, from a sponsor ID. Includes inputs, outputs, SDK V2 examples, and Deepline cost.

List a sponsor's individual podcast ad segments with episode attribution, from a sponsor ID.

> [!NOTE]
>
> Tool ID: `particle_list_sponsor_segments`

## Run this action

Use the TypeScript SDK for one call. Use `ctx.tools.execute(...)` inside a Play for durable calls, scheduled calls, or CSV processing.

```ts theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
import { Deepline } from 'deepline';

const deepline = await Deepline.connect();
const result = await deepline.tools.execute(
  'particle_list_sponsor_segments',
  {
    "id": "id_123"
  },
);

console.log(result.toolResponse.raw);
```

### CLI

```bash theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
deepline tools execute particle_list_sponsor_segments --input '{
  "id": "id_123"
}' --json
```

## Example response

The SDK returns this shape at `result.toolResponse.raw`. The example values illustrate the response.

```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
{
  "data": {
    "data": [
      {
        "duration_seconds": 123,
        "end_seconds": 123,
        "id": "id_123",
        "number": 123,
        "start_seconds": 123,
        "title": "VP of Engineering",
        "type": "example"
      }
    ],
    "has_more": true
  }
}
```

Use `deepline describe particle_list_sponsor_segments --json` for the latest machine-readable contract.

## Input reference

Returns the individual ad segments attributed to a sponsor, ordered by episode publication date descending, optionally scoped to a single podcast. Results are consistent with the ad\_count values from the sponsor podcasts endpoint. Network promos are excluded.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `payload.limit` | `integer` | No | `25` | Results per page Format: `int64`. Minimum: 1. Maximum: 100. |
| `payload.cursor` | `string` | No | — | Opaque pagination cursor from previous response |
| `payload.id` | `string` | Yes | — | Sponsor ID, company ID, company domain, or company slug |
| `payload.podcast_id` | `string` | No | — | Scope results to one podcast by slug, internal ID, or numeric iTunes ID |
| `payload.since` | `string` | No | — | Only include ads from episodes published on or after this ISO 8601 date or date-time |
| `payload.until` | `string` | No | — | Only include ads from episodes published before this ISO 8601 date or date-time |

<details>
  <summary>Show raw input schema</summary>

  ### Input JSON Schema

  ```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
  {
    "type": "object",
    "description": "Returns the individual ad segments attributed to a sponsor, ordered by episode publication date descending, optionally scoped to a single podcast. Results are consistent with the ad_count values from the sponsor podcasts endpoint. Network promos are excluded.",
    "properties": {
      "limit": {
        "type": "integer",
        "description": "Results per page",
        "default": 25,
        "minimum": 1,
        "maximum": 100,
        "format": "int64"
      },
      "cursor": {
        "type": "string",
        "description": "Opaque pagination cursor from previous response"
      },
      "id": {
        "type": "string",
        "description": "Sponsor ID, company ID, company domain, or company slug"
      },
      "podcast_id": {
        "type": "string",
        "description": "Scope results to one podcast by slug, internal ID, or numeric iTunes ID"
      },
      "since": {
        "type": "string",
        "description": "Only include ads from episodes published on or after this ISO 8601 date or date-time"
      },
      "until": {
        "type": "string",
        "description": "Only include ads from episodes published before this ISO 8601 date or date-time"
      }
    },
    "required": [
      "id"
    ],
    "additionalProperties": false
  }
  ```
</details>

## Output reference

Standard tool result payload.

| Name | Type | Required | Default | Details |
| - | - | - | - | - |
| `result.data` | `object` | Yes | — | Provider response payload. |
| `result.data.cursor` | `string` | No | — | Pass to next request for more results |
| `result.data.data` | `array` | Yes | — | List of results |
| `result.data.data[].audio_url` | `string` | No | — | Direct audio URL for this segment |
| `result.data.data[].description` | `string` | No | — | AI-generated segment description |
| `result.data.data[].duration_seconds` | `number` | Yes | — | Segment duration Format: `double`. |
| `result.data.data[].end_line` | `integer` | No | — | Last transcript line covered by this segment (1-indexed, inclusive). Omitted for episodes segmented before line ranges were recorded. Format: `int64`. |
| `result.data.data[].end_seconds` | `number` | Yes | — | End time within the episode — when the segment's last spoken line ends. Where start\_line/end\_line are present, segments partition the transcript's lines rather than tiling the wall-clock timeline, and the interval between this and the next segment's start\_seconds contains no transcribed speech (typically under a second, occasionally minutes of music or silence). Segments without a recorded line range were produced by an earlier segmenter and a small share of them do leave transcript lines See the live schema for the complete constraint. |
| `result.data.data[].episode` | `object` | No | — | — |
| `result.data.data[].episode.id` | `string` | Yes | — | Episode ID |
| `result.data.data[].episode.podcast` | `object` | No | — | — |
| `result.data.data[].episode.podcast.best_rank` | `object` | No | — | — |
| `result.data.data[].episode.podcast.best_rank.captured_at` | `string` | Yes | — | Format: `date-time`. |
| `result.data.data[].episode.podcast.best_rank.category_slug` | `string` | No | — | — |
| `result.data.data[].episode.podcast.best_rank.chart_type` | `"top_podcasts"` | Yes | — | Allowed: `top_podcasts`. |
| `result.data.data[].episode.podcast.best_rank.country` | `string` | No | — | — |
| `result.data.data[].episode.podcast.best_rank.rank` | `integer` | Yes | — | Format: `int64`. |
| `result.data.data[].episode.podcast.best_rank.source` | `"apple" \| "spotify"` | Yes | — | Allowed: `apple`, `spotify`. |
| `result.data.data[].episode.podcast.id` | `string` | Yes | — | Podcast ID |
| `result.data.data[].episode.podcast.image_url` | `string` | No | — | Cover image URL |
| `result.data.data[].episode.podcast.popularity` | `number` | No | — | Global popularity percentile in (0,1], a cume\_dist ranking over all currently-charting podcasts (Apple Podcasts charts). Higher is more popular. Omitted when the podcast is not currently charting, on endpoints that build this resource from a projection rather than the full podcast row, and in episode stream, feed and archive payloads, which are stored and replayed: read it live from the podcast endpoints. Format: `double`. |
| `result.data.data[].episode.podcast.publisher` | `object` | No | — | — |
| `result.data.data[].episode.podcast.publisher.id` | `string` | Yes | — | Publisher ID |
| `result.data.data[].episode.podcast.publisher.name` | `string` | Yes | — | Publisher name |
| `result.data.data[].episode.podcast.publisher.slug` | `string` | No | — | Human-readable slug identifier (e.g., 'goalhanger', 'iheartpodcasts'). When present, accepted in place of the ID anywhere a publisher reference is taken in the API. Occasionally absent on publishers whose name doesn't slugify (e.g., scripts not representable in ASCII URL slugs). |
| `result.data.data[].episode.podcast.slug` | `string` | No | — | Human-readable slug identifier |
| `result.data.data[].episode.podcast.title` | `string` | Yes | — | Podcast title |
| `result.data.data[].episode.published_at` | `string` | No | — | Publication date Format: `date-time`. |
| `result.data.data[].episode.slug` | `string` | No | — | Human-readable slug identifier |
| `result.data.data[].episode.title` | `string` | Yes | — | Episode title |
| `result.data.data[].episode.web_url` | `string` | No | — | The episode's page on Radar, where it plays beside its transcript: [https://radar.particle.pro/podcasts/\&#123;podcast\&#125;/episodes/\&#123;episode\&#125](https://radar.particle.pro/podcasts/\&#123;podcast\&#125;/episodes/\&#123;episode\&#125);, each segment the slug or, when there is none, the raw UUID. Append ?t=\{seconds} to start at a moment. The hit's own url field already does. Omitted for back-catalogue episodes we have not ingested, which have no page, and in episode stream, feed and archive payloads stored before this field shipped (they are replayed as stored): build it from the slugs, or fetch See the live schema for the complete constraint. |
| `result.data.data[].id` | `string` | Yes | — | Unique identifier |
| `result.data.data[].number` | `integer` | Yes | — | Segment position within the episode Format: `int64`. |
| `result.data.data[].read_type` | `string` | No | — | For AD segments, how the ad was delivered (HOST\_READ, PRE\_RECORDED, NETWORK\_PROMO) |
| `result.data.data[].start_line` | `integer` | No | — | First transcript line covered by this segment (1-indexed, inclusive). Line numbers match the number field of GET /v1/podcasts/episodes/\{id}/transcript lines. This segment's end\_line + 1 is the next segment's start\_line, and the segments together cover every line of the transcript. Omitted for episodes segmented before line ranges were recorded. Format: `int64`. |
| `result.data.data[].start_seconds` | `number` | Yes | — | Start time within the episode — when the segment's first spoken line begins Format: `double`. |
| `result.data.data[].summary` | `string` | No | — | AI-generated segment summary |
| `result.data.data[].title` | `string` | Yes | — | AI-generated segment title |
| `result.data.data[].type` | `string` | Yes | — | Segment type (INTRO, PERSONAL\_BANTER, TOPIC\_DISCUSSION, INTERVIEW, TRANSITION, AD, OUTRO) |
| `result.data.data[].url` | `string` | No | — | Moment link that plays the segment on Radar from start\_seconds: the episode's web\_url with ?t=. Ad placements are segments, so this is also the link to an ad read. On a search match's segment it comes from the match's episode. Omitted only when the segment's episode or its podcast is unavailable. |
| `result.data.has_more` | `boolean` | Yes | — | Whether more results exist |
| `result.meta` | `object` | No | — | Additional response metadata (status, paging). |

<details>
  <summary>Show raw output schema</summary>

  ### Output JSON Schema

  ```json theme={"languages":{"custom":["/languages/deepline-prompt.json"]}}
  {
    "type": "object",
    "description": "Standard tool result payload.",
    "properties": {
      "data": {
        "type": "object",
        "description": "Provider response payload.",
        "properties": {
          "cursor": {
            "type": "string",
            "description": "Pass to next request for more results"
          },
          "data": {
            "type": "array",
            "description": "List of results",
            "items": {
              "type": "object",
              "properties": {
                "audio_url": {
                  "type": "string",
                  "description": "Direct audio URL for this segment"
                },
                "description": {
                  "type": "string",
                  "description": "AI-generated segment description"
                },
                "duration_seconds": {
                  "type": "number",
                  "description": "Segment duration",
                  "format": "double"
                },
                "end_line": {
                  "type": "integer",
                  "description": "Last transcript line covered by this segment (1-indexed, inclusive). Omitted for episodes segmented before line ranges were recorded.",
                  "format": "int64"
                },
                "end_seconds": {
                  "type": "number",
                  "description": "End time within the episode — when the segment's last spoken line ends. Where start_line/end_line are present, segments partition the transcript's lines rather than tiling the wall-clock timeline, and the interval between this and the next segment's start_seconds contains no transcribed speech (typically under a second, occasionally minutes of music or silence). Segments without a recorded line range were produced by an earlier segmenter and a small share of them do leave transcript lines uncovered, so a gap between two such segments may contain real speech. Use start_line/end_line to slice a transcript losslessly.",
                  "format": "double"
                },
                "episode": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "description": "Episode ID"
                    },
                    "podcast": {
                      "type": "object",
                      "properties": {
                        "best_rank": {
                          "type": "object",
                          "properties": {
                            "captured_at": {
                              "type": "string",
                              "format": "date-time"
                            },
                            "category_slug": {
                              "type": "string"
                            },
                            "chart_type": {
                              "type": "string",
                              "enum": [
                                "top_podcasts"
                              ]
                            },
                            "country": {
                              "type": "string"
                            },
                            "rank": {
                              "type": "integer",
                              "format": "int64"
                            },
                            "source": {
                              "type": "string",
                              "enum": [
                                "apple",
                                "spotify"
                              ]
                            }
                          },
                          "required": [
                            "source",
                            "chart_type",
                            "rank",
                            "captured_at"
                          ],
                          "additionalProperties": false
                        },
                        "id": {
                          "type": "string",
                          "description": "Podcast ID"
                        },
                        "image_url": {
                          "type": "string",
                          "description": "Cover image URL"
                        },
                        "popularity": {
                          "type": "number",
                          "description": "Global popularity percentile in (0,1], a cume_dist ranking over all currently-charting podcasts (Apple Podcasts charts). Higher is more popular. Omitted when the podcast is not currently charting, on endpoints that build this resource from a projection rather than the full podcast row, and in episode stream, feed and archive payloads, which are stored and replayed: read it live from the podcast endpoints.",
                          "format": "double"
                        },
                        "publisher": {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "description": "Publisher ID"
                            },
                            "name": {
                              "type": "string",
                              "description": "Publisher name"
                            },
                            "slug": {
                              "type": "string",
                              "description": "Human-readable slug identifier (e.g., 'goalhanger', 'iheartpodcasts'). When present, accepted in place of the ID anywhere a publisher reference is taken in the API. Occasionally absent on publishers whose name doesn't slugify (e.g., scripts not representable in ASCII URL slugs)."
                            }
                          },
                          "required": [
                            "id",
                            "name"
                          ],
                          "additionalProperties": false
                        },
                        "slug": {
                          "type": "string",
                          "description": "Human-readable slug identifier"
                        },
                        "title": {
                          "type": "string",
                          "description": "Podcast title"
                        }
                      },
                      "required": [
                        "id",
                        "title"
                      ],
                      "additionalProperties": false
                    },
                    "published_at": {
                      "type": "string",
                      "description": "Publication date",
                      "format": "date-time"
                    },
                    "slug": {
                      "type": "string",
                      "description": "Human-readable slug identifier"
                    },
                    "title": {
                      "type": "string",
                      "description": "Episode title"
                    },
                    "web_url": {
                      "type": "string",
                      "description": "The episode's page on Radar, where it plays beside its transcript: https://radar.particle.pro/podcasts/{podcast}/episodes/{episode}, each segment the slug or, when there is none, the raw UUID. Append ?t={seconds} to start at a moment; the hit's own url field already does. Omitted for back-catalogue episodes we have not ingested, which have no page, and in episode stream, feed and archive payloads stored before this field shipped (they are replayed as stored): build it from the slugs, or fetch the episode."
                    }
                  },
                  "required": [
                    "id",
                    "title"
                  ],
                  "additionalProperties": false
                },
                "id": {
                  "type": "string",
                  "description": "Unique identifier"
                },
                "number": {
                  "type": "integer",
                  "description": "Segment position within the episode",
                  "format": "int64"
                },
                "read_type": {
                  "type": "string",
                  "description": "For AD segments, how the ad was delivered (HOST_READ, PRE_RECORDED, NETWORK_PROMO)"
                },
                "start_line": {
                  "type": "integer",
                  "description": "First transcript line covered by this segment (1-indexed, inclusive). Line numbers match the number field of GET /v1/podcasts/episodes/{id}/transcript lines. This segment's end_line + 1 is the next segment's start_line, and the segments together cover every line of the transcript. Omitted for episodes segmented before line ranges were recorded.",
                  "format": "int64"
                },
                "start_seconds": {
                  "type": "number",
                  "description": "Start time within the episode — when the segment's first spoken line begins",
                  "format": "double"
                },
                "summary": {
                  "type": "string",
                  "description": "AI-generated segment summary"
                },
                "title": {
                  "type": "string",
                  "description": "AI-generated segment title"
                },
                "type": {
                  "type": "string",
                  "description": "Segment type (INTRO, PERSONAL_BANTER, TOPIC_DISCUSSION, INTERVIEW, TRANSITION, AD, OUTRO)"
                },
                "url": {
                  "type": "string",
                  "description": "Moment link that plays the segment on Radar from start_seconds: the episode's web_url with ?t=. Ad placements are segments, so this is also the link to an ad read. On a search match's segment it comes from the match's episode. Omitted only when the segment's episode or its podcast is unavailable."
                }
              },
              "required": [
                "id",
                "number",
                "type",
                "title",
                "start_seconds",
                "end_seconds",
                "duration_seconds"
              ],
              "additionalProperties": false
            }
          },
          "has_more": {
            "type": "boolean",
            "description": "Whether more results exist"
          }
        },
        "required": [
          "data",
          "has_more"
        ],
        "additionalProperties": false
      },
      "meta": {
        "type": "object",
        "description": "Additional response metadata (status, paging).",
        "additionalProperties": true
      }
    },
    "required": [
      "data"
    ],
    "additionalProperties": false
  }
  ```
</details>

## Deepline cost

* Pricing model: `fixed` (per call).
* Estimated Deepline credits: `0` per pricing unit.
* Provider-native pricing may still exist outside Deepline credit billing.

## Related documentation

* [Particle provider guide](https://deepline.com/docs/providers/particle/guide.md)
* [SDK V2 quickstart](https://deepline.com/docs/sdk-v2/quickstart.md)
* [SDK reference](https://deepline.com/docs/sdk-v2/sdk-reference.md)
* [Run tools across a CSV](https://deepline.com/docs/sdk-v2/batch-csv.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.