List collection jobs
Retrieve collection jobs for the authenticated Woodpecker account. Use this endpoint after collecting profiles from posts to monitor their statuses or locate their collector and target List UUIDs.
Results are ordered from newest to oldest and returned in fixed pages of 100. Polling this endpoint does not use credits.
Request
Endpoint
GET https://api.woodpecker.co/rest/v2/linkedin/post_profiles_collectors?page=1
Headers
x-api-key: {YOUR_API_KEY}
For details on how to authenticate your requests, please see the authentication guide.
Parameters
| Parameter | Required | Type | Default | Description |
|---|---|---|---|---|
page | No | integer | 1 | One-based page number |
Request samples
List the first page of collectors
- cURL
- Python
- Java
- Node.js
- PHP
curl --request GET \
--url "https://api.woodpecker.co/rest/v2/linkedin/post_profiles_collectors?page=1" \
--header "x-api-key: {YOUR_API_KEY}"
import requests
def list_post_profile_collectors():
url = "https://api.woodpecker.co/rest/v2/linkedin/post_profiles_collectors"
headers = {
"x-api-key": "{YOUR_API_KEY}"
}
params = {
"page": 1
}
response = requests.get(url, headers=headers, params=params)
if response.status_code == 200:
return response.json()
raise Exception(f"GET request failed: {response.status_code}, {response.text}")
if __name__ == "__main__":
try:
print("GET response:", list_post_profile_collectors())
except Exception as error:
print("Error:", error)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class WoodpeckerApiClient {
public static void main(String[] args) {
try {
String url = "https://api.woodpecker.co/rest/v2/linkedin/post_profiles_collectors?page=1";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(new URI(url))
.header("x-api-key", "{YOUR_API_KEY}")
.GET()
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
if (response.statusCode() == 200) {
System.out.println("GET response: " + response.body());
} else {
throw new RuntimeException(
"GET request failed: " + response.statusCode() + ", " + response.body()
);
}
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
}
}
const axios = require("axios");
async function listPostProfileCollectors() {
const url = "https://api.woodpecker.co/rest/v2/linkedin/post_profiles_collectors";
const headers = {
"x-api-key": "{YOUR_API_KEY}"
};
const params = {
page: 1
};
try {
const response = await axios.get(url, { headers, params });
console.log("GET response:", response.data);
} catch (error) {
console.error(
"GET request failed:",
error.response ? error.response.status : error.message
);
}
}
listPostProfileCollectors();
<?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
$client = new Client([
'base_uri' => 'https://api.woodpecker.co/rest/v2/',
'headers' => [
'x-api-key' => getenv('WOODPECKER_API_KEY'),
],
]);
try {
$response = $client->get('linkedin/post_profiles_collectors', [
'query' => [
'page' => 1,
],
]);
echo $response->getStatusCode(), "\n";
echo $response->getBody(), "\n";
} catch (RequestException $e) {
echo "Error: ", $e->getMessage(), "\n";
if ($e->hasResponse()) {
echo $e->getResponse()->getBody(), "\n";
}
}
Response
Response examples
- 200
- 400
- 401
- 500
Collectors for the requested page. post_collectors is an empty array when the account has no collectors on that page.
{
"post_collectors": [
{
"uid": "caf15107-53dc-4f19-8920-ddfbd98b44c3",
"post_url": "https://www.linkedin.com/posts/linkedin_post_url",
"target_list_uid": "5f17c0d2-5100-4bb9-a312-fd17f27f94c1",
"status": "COLLECTING",
"collect_from": "COMMENTS",
"collected_profiles_count": 0,
"created": "2026-08-05T10:15:30+02:00"
},
{
"uid": "e9e6abc4-799e-4c24-b412-7917b1db919d",
"post_url": "https://www.linkedin.com/posts/linkedin_post_url",
"target_list_uid": "5f17c0d2-5100-4bb9-a312-fd17f27f94c1",
"status": "SUCCESS",
"collect_from": "REACTIONS",
"collected_profiles_count": 27,
"created": "2026-08-05T10:15:30+02:00"
}
],
"pagination_data": {
"total_elements": 2,
"total_pages": 1,
"current_page_number": 1,
"page_size": 100
}
}
If a collection is interrupted and saves partial results, you can submit the post for collection again. The new job starts from the beginning, so credits are charged again for every profile it collects, including profiles saved by the previous job
Body schema
| Field | Type | Description |
|---|---|---|
post_collectors | array[object] | Collectors on the requested page, ordered from newest to oldest |
└─ uid | string | Collector UUID |
└─ post_url | string | LinkedIn post processed by the collector |
└─ target_list_uid | string | UUID of the List receiving collected data |
└─ status | string | Collector status:
|
└─ collect_from | string | Collection source: REACTIONS or COMMENTS |
└─ collected_profiles_count | integer | Number of collected profiles saved to the target List |
└─ created | string | Collector creation time in ISO 8601 format, including an offset |
pagination_data | object | Pagination metadata |
└─ total_elements | integer | Total number of collectors in the account |
└─ total_pages | integer | Total number of pages at 100 collectors per page |
└─ current_page_number | integer | Requested one-based page number |
└─ page_size | integer | Fixed page size: 100 |
page is not an integer greater than zero.
{
"type": "validation_error",
"code": "invalid_fields",
"message": "Invalid field(s)",
"requestId": "4a3cc945-f502-4f83-b0ee-5d7fd1f38548",
"fields": [
{
"field": "page",
"issue": "must_be_greater_than_zero",
"value": 0
}
]
}
Body schema
| Field | Type | Description |
|---|---|---|
type | string | Error type: validation_error |
code | string | Error code: invalid_fields |
message | string | Human-readable error summary |
requestId | string/null | Request identifier, or null when unavailable |
fields | array[object] | Invalid parameters |
└─ field | string | Invalid field: page |
└─ issue | string | Validation issue: must_be_greater_than_zero |
└─ value | integer/string | Rejected query value |
An issue with authorization. Please review the authorization guide
{
"title": "Unauthorized",
"status": 401,
"detail": "Invalid api key",
"timestamp": "2026-08-05 10:00:00"
}
Body schema
| Field | Type | Description |
|---|---|---|
title | string | A short title describing the error |
status | integer | The HTTP status code |
detail | string | A detailed message explaining the error |
timestamp | string | The timestamp when the error occurred |
Unexpected error, please try again later
{
"type": "internal_error",
"code": "internal_server_error",
"message": "An unexpected error occurred on the server.",
"requestId": "4a3cc945-f502-4f83-b0ee-5d7fd1f38548"
}
Body schema
| Field | Type | Description |
|---|---|---|
type | string | Error type: internal_error |
code | string | Error code: internal_server_error |
message | string | Human-readable error summary |
requestId | string/null | Request identifier, or null when unavailable |