Skip to content

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

curl -sS \
  "https://api.openprospect.io/api/v1/deliveries/${PROSPECT_SEARCH_ID}/companies?limit=50" \
  -H "Authorization: Bearer ${OPENPROSPECT_API_KEY}"
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.