{"info":{"_postman_id":"72692d57-835c-41cc-a447-c267c901e1a7","name":"Job Status & Monitoring","description":"<html><head></head><body><p>This collection covers the full lifecycle of <strong>pipeline management</strong>, <strong>webhook ingestion</strong>, and <strong>job monitoring</strong> for a local API running at <code>http://localhost:3000</code>.</p>\n<h2 id=\"pipelines\">Pipelines</h2>\n<p>Requests for creating, retrieving, and deleting processing pipelines. Includes pipelines with different processor types:</p>\n<ul>\n<li><p><code>EXTRACT_ISSUE_SUMMARY</code> – extracts structured issue summaries from incoming payloads</p>\n</li>\n<li><p><code>FILTER_SENSITIVE</code> – filters out sensitive content before further processing</p>\n</li>\n</ul>\n<p>Also includes <strong>negative test cases</strong> to validate error handling, such as attempting to create a pipeline with a duplicate slug.</p>\n<h2 id=\"webhook-ingestion\">Webhook Ingestion</h2>\n<p>Requests for triggering pipelines via webhook endpoints. Covers:</p>\n<ul>\n<li><p>Sending payloads to named pipeline slugs (e.g., <code>issue-extractor-001</code>, <code>uppercase-test-001</code>)</p>\n</li>\n<li><p>Testing the sensitive filter pipeline</p>\n</li>\n<li><p>A <strong>negative test</strong> for routing to a non-existent pipeline slug to verify proper error responses</p>\n</li>\n</ul>\n<h2 id=\"job-status--monitoring\">Job Status &amp; Monitoring</h2>\n<p>Requests for inspecting the status of background jobs spawned by pipeline executions:</p>\n<ul>\n<li><p>Retrieve all jobs currently tracked by the system</p>\n</li>\n<li><p>Fetch the details of a specific job by its UUID</p>\n</li>\n</ul>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"49389411","collectionId":"72692d57-835c-41cc-a447-c267c901e1a7","publishedId":"2sBXikoBHp","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-03-26T12:00:11.000Z"},"item":[{"name":"Create a New Pipeline","id":"c0df50b8-8a62-4914-b50f-b2708f9a88ab","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"name\": \"Uppercase Transfrmer\",\r\n    \"sourceSlug\": \"uprase-test-001\",\r\n    \"actionType\": \"TRANSFORM_UPPERCASE\",\r\n    \"subscriberUrls\": [\"https://discord.com/api/webhooks/your-webhook-url\"]\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/pipelines","urlObject":{"protocol":"http","port":"3000","path":["pipelines"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"c0df50b8-8a62-4914-b50f-b2708f9a88ab"},{"name":"Create Pipeline with EXTRACT_ISSUE_SUMMARY","id":"bd2726c4-14eb-46fb-b234-308e7aeecc46","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"name\": \"Issue Extractor\",\r\n    \"sourceSlug\": \"issue-extractor-001\",\r\n    \"actionType\": \"EXTRACT_ISSUE_SUMMARY\",\r\n    \"subscriberUrls\": []\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/pipelines","urlObject":{"protocol":"http","port":"3000","path":["pipelines"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"bd2726c4-14eb-46fb-b234-308e7aeecc46"},{"name":"Create Pipeline with FILTER_SENSITIVE","id":"1d2ae171-753f-477c-bb74-3aa9ffc216ce","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"name\": \"Sensitive Data Filter\",\r\n    \"sourceSlug\": \"sensitive-filter-001\",\r\n    \"actionType\": \"FILTER_SENSITIVE\",\r\n    \"subscriberUrls\": [\"https://discord.com/api/webhooks/your-webhook-url\"]\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/pipelines","description":"<p>Creates a new pipeline configured with the <code>FILTER_SENSITIVE</code> action type. This pipeline is designed to intercept incoming webhook events and filter out sensitive data before forwarding the payload to one or more subscriber URLs.</p>\n<p><strong>Method:</strong> <code>POST</code><br /><strong>URL:</strong> <code>http://localhost:3000/pipelines</code></p>\n<hr />\n<p><strong>Request Body</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>name</code></td>\n<td>string</td>\n<td>Human-readable name for the pipeline</td>\n</tr>\n<tr>\n<td><code>sourceSlug</code></td>\n<td>string</td>\n<td>Unique identifier for the data source feeding this pipeline</td>\n</tr>\n<tr>\n<td><code>actionType</code></td>\n<td>string</td>\n<td>The processing action to apply — <code>FILTER_SENSITIVE</code> strips sensitive fields from the payload</td>\n</tr>\n<tr>\n<td><code>subscriberUrls</code></td>\n<td>array</td>\n<td>List of downstream URLs (e.g. Discord webhooks) that receive the filtered output</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<p><strong>Response — <code>201 Created</code></strong></p>\n<p>Returns the newly created pipeline object, including:</p>\n<ul>\n<li><code>id</code> — UUID of the pipeline</li>\n<li><code>name</code>, <code>sourceSlug</code>, <code>actionType</code> — Echo of the submitted configuration</li>\n<li><code>actionConfig</code> — Additional action configuration (null if not provided)</li>\n<li><code>createdAt</code> / <code>updatedAt</code> — ISO 8601 timestamps</li>\n<li><code>subscribers</code> — Array of registered subscriber objects, each containing their own <code>id</code>, <code>url</code>, <code>pipelineId</code>, and <code>createdAt</code></li>\n</ul>\n<hr />\n<blockquote>\n<p><strong>Note:</strong> Replace <code>https://discord.com/api/webhooks/your-webhook-url</code> in <code>subscriberUrls</code> with a valid webhook endpoint before sending.</p>\n</blockquote>\n","urlObject":{"protocol":"http","port":"3000","path":["pipelines"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"1d2ae171-753f-477c-bb74-3aa9ffc216ce"},{"name":"Create Pipeline with Duplicate Slug (Negative Test)","id":"7b0dfc5e-b2e0-4e11-a634-c16929964086","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"name\": \"Duplicate Test\",\r\n    \"sourceSlug\": \"uppercase-test-001\",\r\n    \"actionType\": \"TRANSFORM_UPPERCASE\",\r\n    \"subscriberUrls\": []\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/pipelines","urlObject":{"protocol":"http","port":"3000","path":["pipelines"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"7b0dfc5e-b2e0-4e11-a634-c16929964086"},{"name":"Get Specific Job","id":"57fd4a41-7378-4616-bddf-13a80074196d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/api/jobs/a90c8264-b8f3-4925-b1c9-78177a2a7d04","description":"<p>Retrieves the details of a single job by its unique identifier. This request targets the local Job Status &amp; Monitoring API and is useful for checking the current state or metadata of a specific job within the pipeline.</p>\n<p>The URL follows the pattern <code>/api/jobs/{jobId}</code>, where the UUID segment in the path represents the ID of the job to retrieve. In this example, <code>a90c8264-b8f3-4925-b1c9-78177a2a7d04</code> is used as the job ID.</p>\n<p>A successful response typically returns a JSON object containing the job's details, such as its status, associated pipeline, timestamps, and any relevant output or error information.</p>\n<h3 id=\"path-parameters\">Path Parameters</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parameter</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>jobId</code></td>\n<td>UUID</td>\n<td>The unique identifier of the job to retrieve</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"protocol":"http","port":"3000","path":["api","jobs","a90c8264-b8f3-4925-b1c9-78177a2a7d04"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"57fd4a41-7378-4616-bddf-13a80074196d"},{"name":"Get All Pipelines","id":"a5fc4381-6e66-47f4-8312-c593feb7c7f8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/pipelines","urlObject":{"protocol":"http","port":"3000","path":["pipelines"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"a5fc4381-6e66-47f4-8312-c593feb7c7f8"},{"name":"Send Webhook to Sensitive Filter Pipeline","id":"5edfdcb7-a40e-4817-a717-012a77b24620","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"username\": \"john_doe\",\r\n    \"email\": \"john@example.com\",\r\n    \"password\": \"secret123\",\r\n    \"token\": \"abc123xyz\",\r\n    \"credit_card\": \"4111-1111-1111-1111\",\r\n    \"message\": \"User logged in successfully\",\r\n    \"ip_address\": \"192.168.1.100\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/webhook/sensitive-filter-001","urlObject":{"protocol":"http","port":"3000","path":["webhook","sensitive-filter-001"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"5edfdcb7-a40e-4817-a717-012a77b24620"},{"name":"Get Specific Pipeline by ID","id":"e97a2d43-6579-45c7-8f24-7cee6a11899a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/pipelines/4e44bbdc-f8c5-4501-93d4-77036dc2f5d0","urlObject":{"protocol":"http","port":"3000","path":["pipelines","4e44bbdc-f8c5-4501-93d4-77036dc2f5d0"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"e97a2d43-6579-45c7-8f24-7cee6a11899a"},{"name":"Send Webhook to Issue Extractor Pipeline","id":"1b86441e-5174-4344-9c5a-3ebfc97c6667","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"issue\": {\r\n        \"title\": \"Database connection timeout\",\r\n        \"priority\": \"critical\",\r\n        \"description\": \"Unable to connect to PostgreSQL after 30 seconds\",\r\n        \"assignee\": \"oncall@example.com\",\r\n        \"severity\": \"high\"\r\n    },\r\n    \"user\": \"system\",\r\n    \"environment\": \"production\",\r\n    \"timestamp\": \"2026-03-26T13:00:00Z\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/webhook/uprase-test-001","urlObject":{"protocol":"http","port":"3000","path":["webhook","uprase-test-001"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"1b86441e-5174-4344-9c5a-3ebfc97c6667"},{"name":"Send Webhook to Non-existent Pipeline (Negative Test)","id":"2108b08d-cdea-42b4-a0db-1b74bb00199a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"test\": \"data\"\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/webhook/non-existent-slug","urlObject":{"protocol":"http","port":"3000","path":["webhook","non-existent-slug"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"2108b08d-cdea-42b4-a0db-1b74bb00199a"},{"name":"Get All Jobs","id":"f220a9ba-451a-442c-8916-0d81c61e4161","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/api/jobs","description":"<h2 id=\"get-all-jobs\">Get All Jobs</h2>\n<p>Retrieves a list of all jobs currently tracked by the system.</p>\n<p><strong>Endpoint:</strong> <code>GET /api/jobs</code></p>\n<p><strong>Base URL:</strong> <code>http://localhost:3000</code></p>\n<h3 id=\"description\">Description</h3>\n<p>This request fetches all job records from the local API. It is useful for monitoring the status and progress of jobs that have been created as part of pipeline executions. Use this endpoint to get a high-level overview of all jobs in the system.</p>\n<h3 id=\"request-details\">Request Details</h3>\n<ul>\n<li><strong>Method:</strong> <code>GET</code></li>\n<li><strong>No query parameters or request body required</strong></li>\n<li><strong>No authentication configured</strong></li>\n</ul>\n<h3 id=\"expected-response\">Expected Response</h3>\n<p>A successful response returns an array of job objects, each containing details such as job ID, status, associated pipeline, and timestamps.</p>\n","urlObject":{"protocol":"http","port":"3000","path":["api","jobs"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"f220a9ba-451a-442c-8916-0d81c61e4161"},{"name":"Webhook Ingestion","id":"a330b93d-0214-40e4-9b9e-31b0e7277e4e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n    \"message\": \"hello world\",\r\n    \"user\": \"john doe\",\r\n    \"priority\": \"high\",\r\n    \"data\": {\r\n        \"action\": \"test\",\r\n        \"value\": 123\r\n    }\r\n}","options":{"raw":{"language":"json"}}},"url":"http://localhost:3000/webhook/uprase-test-001","description":"<h2 id=\"webhook-ingestion\">Webhook Ingestion</h2>\n<p>Sends a webhook payload to a specific pipeline for processing. This request triggers the <code>uppercase-test-001</code> pipeline, which is designed to process or transform the incoming data (e.g., uppercasing text content). It is the entry point for submitting jobs into the pipeline system.</p>\n<hr />\n<h3 id=\"endpoint\">Endpoint</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>POST http://localhost:3000/webhook/{pipelineSlug}\n</code></pre><div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Component</th>\n<th>Value</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>Method</strong></td>\n<td><code>POST</code></td>\n</tr>\n<tr>\n<td><strong>Base URL</strong></td>\n<td><code>http://localhost:3000</code></td>\n</tr>\n<tr>\n<td><strong>Path</strong></td>\n<td><code>/webhook/uppercase-test-001</code></td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h3 id=\"request-body\">Request Body</h3>\n<p>The request body is a JSON object with the following fields:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>message</code></td>\n<td><code>string</code></td>\n<td>The primary text content to be processed by the pipeline (e.g., <code>\"hello world\"</code>).</td>\n</tr>\n<tr>\n<td><code>user</code></td>\n<td><code>string</code></td>\n<td>The identifier of the user or actor submitting the webhook (e.g., <code>\"john doe\"</code>).</td>\n</tr>\n<tr>\n<td><code>priority</code></td>\n<td><code>string</code></td>\n<td>The priority level of the job. Accepted values may include <code>\"high\"</code>, <code>\"medium\"</code>, or <code>\"low\"</code>.</td>\n</tr>\n<tr>\n<td><code>data.action</code></td>\n<td><code>string</code></td>\n<td>A descriptor for the type of action being performed (e.g., <code>\"test\"</code>).</td>\n</tr>\n<tr>\n<td><code>data.value</code></td>\n<td><code>number</code></td>\n<td>A numeric value associated with the action payload (e.g., <code>123</code>).</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Example Body:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"message\": \"hello world\",\n  \"user\": \"john doe\",\n  \"priority\": \"high\",\n  \"data\": {\n    \"action\": \"test\",\n    \"value\": 123\n  }\n}\n</code></pre>\n<hr />\n<h3 id=\"successful-response\">Successful Response</h3>\n<p>A successful response indicates that the webhook payload has been accepted and a job has been queued for processing by the pipeline. Typically, this returns a <code>200 OK</code> or <code>202 Accepted</code> status along with a job ID or confirmation that can be used to monitor the job's progress via the <strong>Job Status &amp; Monitoring</strong> endpoints.</p>\n","urlObject":{"protocol":"http","port":"3000","path":["webhook","uprase-test-001"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"a330b93d-0214-40e4-9b9e-31b0e7277e4e"},{"name":"Delete Pipeline","id":"cb68ccbe-15db-47c7-87b4-8fbbc7cb5b06","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"DELETE","header":[],"url":"http://localhost:3000/pipelines/4e44bbdc-f8c5-4501-93d4-77036dc2f5d0","urlObject":{"protocol":"http","port":"3000","path":["pipelines","4e44bbdc-f8c5-4501-93d4-77036dc2f5d0"],"host":["localhost"],"query":[],"variable":[]}},"response":[],"_postman_id":"cb68ccbe-15db-47c7-87b4-8fbbc7cb5b06"},{"name":"https://discord.com/api/webhooks/your-webhook-url","id":"79a7bcb8-d41c-4b53-9cc6-c8d593f4c3cd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"https://discord.com/api/webhooks/your-webhook-url","description":"<p>Sends a notification to a Discord channel via an incoming webhook URL. This request is used to deliver status updates, alerts, or pipeline event summaries directly to a Discord channel as part of the job monitoring workflow.</p>\n<p><strong>Endpoint:</strong> <code>GET https://discord.com/api/webhooks/your-webhook-url</code></p>\n<h3 id=\"usage\">Usage</h3>\n<p>Replace <code>your-webhook-url</code> in the URL with the actual webhook path generated from your Discord server's channel settings (<strong>Server Settings → Integrations → Webhooks</strong>).</p>\n<h3 id=\"notes\">Notes</h3>\n<ul>\n<li>No authentication headers are required; the webhook URL itself acts as the credential.</li>\n<li>The webhook URL should be treated as a secret and stored in an environment variable (e.g., <code>{{discord_webhook_url}}</code>) to avoid exposing it in the request URL.</li>\n<li>This request can be triggered at the end of a pipeline run to report job outcomes to a designated Discord channel.</li>\n</ul>\n","urlObject":{"protocol":"https","path":["api","webhooks","your-webhook-url"],"host":["discord","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"79a7bcb8-d41c-4b53-9cc6-c8d593f4c3cd"},{"name":"New Request","id":"d9f681f9-c28f-4439-b59b-3964d9289491","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"urlObject":{"query":[],"variable":[]},"url":""},"response":[],"_postman_id":"d9f681f9-c28f-4439-b59b-3964d9289491"}]}