Coverage
How every endpoint in each vendor's public API reference is reached by outbound-sdk, with the counts per vendor and the rules the per-vendor tables follow.
One page per vendor lists every endpoint in that vendor’s public API reference and says how the SDK reaches it. The rule: nothing a vendor can report about campaigns, leads, senders or results is dropped. A read is either normalized, or it is in the adapter’s native catalog and returned as the vendor sent it.
| Vendor | Endpoints | Normalized | Native | Excluded | Writes |
|---|---|---|---|---|---|
| Instantly | 268 | 22 | 105 | 4 | 137 |
| Smartlead | 230 | 27 | 78 | 20 | 105 |
| HeyReach | 106 | 17 | 25 | 3 | 61 |
Each inventory was taken from the vendor’s documentation on 2026-11-14. The repository’s test suite checks each table against the adapter (packages/outbound-sdk/test/coverage-docs.test.ts), so a table cannot drift from the code. It checks the table against the adapter, not against the vendor: an endpoint a vendor adds later is missing here until the inventory is taken again. The research note each adapter was written from is in the repository, under docs/research/.
The table
Each vendor page has exactly one table with these columns, one row per endpoint:
| Column | Holds |
|---|---|
| Method | GET, POST, PUT, PATCH or DELETE |
| Path | The vendor’s path, with {name} for each path parameter |
| Reads | What the endpoint returns, in a few words |
| Coverage | normalized, native, excluded or write |
| Through | See below |
What Through holds depends on Coverage:
normalized: the SDK read or reads that use the endpoint, by capability key (campaigns.settings,stats.byDay), separated by commas.campaigns.listandcampaigns.getare also accepted.native: the name of the read in the adapter’s native catalog. Its method and path must match the row.excluded: the reason it is left out, in one sentence. Only four reasons are accepted: the endpoint returns secrets, it duplicates another row’s data exactly, it reports nothing about campaigns, leads, senders or results (billing, marketplace pricing, search filter lists), or it returns a file and not JSON, which the request engine cannot carry.write: left empty. The SDK is read-only; writes are listed so the inventory is complete.
A POST that only reads counts as a read. A read that spends vendor credits is listed as a write.
What the test checks
- Every row has a known method, a path, and a few words on what it reads, and is listed once.
- A
normalizedrow names only SDK reads that exist. - A
nativerow names a read in the adapter’s catalog with the same method and path, and every read in the catalog has a row. - An
excludedrow gives a reason. - A
writerow is never aGET.