Delivery Integration¶
Use the delivery sync endpoint when your CRM or data warehouse pulls completed OpenProspect results on a schedule.
Endpoint¶
GET /api/v1/deliveries/{prospect_search_id}/companies
Required scopes: companies:read and prospects:read.
This endpoint returns delivered companies with embedded prospects and pagination
metadata. Use delivered_since for incremental syncs.
Query Parameters¶
| Parameter | Type | Required | Description |
|---|---|---|---|
delivered_since |
ISO 8601 datetime | No | Return companies delivered after this timestamp |
limit |
integer | No | Maximum companies to return, from 1 to 100; default 50 |
offset |
integer | No | Number of companies to skip; default 0 |
Pull Delivered Companies¶
import os
import httpx
api_key = os.environ["OPENPROSPECT_API_KEY"]
prospect_search_id = os.environ["PROSPECT_SEARCH_ID"]
response = httpx.get(
f"https://api.openprospect.io/api/v1/deliveries/{prospect_search_id}/companies",
headers={"Authorization": f"Bearer {api_key}"},
params={"limit": 50},
timeout=30.0,
)
response.raise_for_status()
print(response.json()["items"])
const prospectSearchId = process.env.PROSPECT_SEARCH_ID;
const url = new URL(
`https://api.openprospect.io/api/v1/deliveries/${prospectSearchId}/companies`,
);
url.searchParams.set("limit", "50");
const response = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.OPENPROSPECT_API_KEY}` },
});
if (!response.ok) {
throw new Error(`Delivery sync failed: ${response.status}`);
}
console.log((await response.json()).items);
interface DeliveredCompaniesResponse {
items: Array<{ id: string; name: string; prospects: unknown[] }>;
total: number;
limit: number;
offset: number;
has_more: boolean;
}
const prospectSearchId = process.env.PROSPECT_SEARCH_ID;
const url = new URL(
`https://api.openprospect.io/api/v1/deliveries/${prospectSearchId}/companies`,
);
url.searchParams.set("limit", "50");
const response = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.OPENPROSPECT_API_KEY}` },
});
if (!response.ok) {
throw new Error(`Delivery sync failed: ${response.status}`);
}
const result = (await response.json()) as DeliveredCompaniesResponse;
console.log(result.items);
using System.Net.Http.Headers;
var apiKey = Environment.GetEnvironmentVariable("OPENPROSPECT_API_KEY")
?? throw new InvalidOperationException("OPENPROSPECT_API_KEY is not set.");
var prospectSearchId = Environment.GetEnvironmentVariable("PROSPECT_SEARCH_ID")
?? throw new InvalidOperationException("PROSPECT_SEARCH_ID is not set.");
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);
var url = $"https://api.openprospect.io/api/v1/deliveries/{prospectSearchId}/companies?limit=50";
var response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());
Expected response:
{
"items": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"name": "Grand Hotel Berlin",
"website_url": "https://www.grandhotel-berlin.de",
"source_id": "crm-1001",
"prospects": [
{
"id": "e5f6a7b8-c9d0-1234-e5f6-a7b8c9d01234",
"first_name": "Maria",
"last_name": "Schmidt",
"email": "m.schmidt@grandhotel-berlin.de",
"job_title": "General Manager"
}
]
}
],
"total": 1,
"limit": 50,
"offset": 0,
"has_more": false
}
Incremental Sync¶
Store the latest successful delivery timestamp in your system. On the next run,
send it as delivered_since.
curl -sS \
"https://api.openprospect.io/api/v1/deliveries/${PROSPECT_SEARCH_ID}/companies?delivered_since=2026-02-25T12:00:00Z" \
-H "Authorization: Bearer ${OPENPROSPECT_API_KEY}"
Use has_more and offset to page through large result sets.