agentlyleads docs
Offerings API

API Reference

The reference below covers every endpoint in the Products API. Code examples are generated automatically; the live playground is disabled to prevent accidental writes to production from the docs site.

POST/api/v1/products

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/products" \  -H "Content-Type: application/json" \  -d '{    "products": [      {        "name": "Pro Plan — Monthly",        "type": "SUBSCRIPTION",        "sku": "PLAN-PRO-MO",        "price": 49,        "currency": "USD",        "unit": "seat",        "billingPeriod": "MONTHLY",        "category": "SaaS Plans"      }    ]  }'
{  "created": 1,  "updated": 1,  "errors": 0,  "results": [    {      "index": 0,      "status": "created",      "id": "018e2a4b-0000-7000-8000-aabbccddeeff"    },    {      "index": 1,      "status": "updated",      "id": "018e2a4b-1111-7000-8000-aabbccddeeff"    }  ]}
{  "created": 1,  "updated": 0,  "errors": 1,  "results": [    {      "index": 0,      "status": "created",      "id": "018e2a4b-0000-7000-8000-aabbccddeeff"    },    {      "index": 1,      "status": "error",      "error": "name: String must contain at least 1 character(s)"    }  ]}
{  "error": "products must not be empty."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: write:products."}
{  "error": "Rate limit exceeded."}
GET/api/v1/products

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Query Parameters

sku?string

Filter to the single product with this exact SKU.

category?string

Filter to products whose category name matches exactly (case-sensitive).

limit?integer

Page size. When omitted, the full catalog is returned in one response (the endpoint's original behaviour) and nextCursor is always null. When set, results are cursor-paginated.

Range1 <= value <= 1000
cursor?string

The nextCursor value from the previous page.

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/products?sku=PLAN-PRO-MO&category=SaaS+Plans"
{  "products": [    {      "id": "018e2a4b-0000-7000-8000-aabbccddeeff",      "name": "Pro Plan — Monthly",      "type": "SUBSCRIPTION",      "sku": "PLAN-PRO-MO",      "externalId": null,      "category": "SaaS Plans",      "price": 49,      "cost": null,      "currency": "USD",      "unit": "seat",      "billingPeriod": "MONTHLY",      "termMonths": null,      "stockQty": null,      "reorderLevel": null,      "description": null,      "features": null,      "active": true,      "createdAt": "2024-01-15T10:30:00.000Z",      "updatedAt": "2024-06-27T08:15:00.000Z"    }  ]}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: write:products."}
{  "error": "Rate limit exceeded."}
GET/api/v1/products/{id}/communication

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

ID of the offering (product/service/subscription/contract).

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/products/cmq1abc2def3ghi4jkl5/communication"
{  "offeringId": "cmq1abc2def3ghi4jkl5",  "campaigns": [    {      "id": "cmq2xyz9abc1def2ghi3",      "name": "Promo",      "subject": "Introducing our new plan",      "status": "SENT",      "scheduledAt": "2026-06-01T12:00:00.000Z",      "recipientCount": 120,      "sentCount": 118,      "openCount": 42    }  ],  "timeline": [    {      "id": "cmq3lmn4opq5rst6uvw7",      "kind": "email",      "subject": "Following up on the demo",      "snippet": "Hi Pat, just wanted to follow up on...",      "direction": "OUTBOUND",      "contact": {        "id": "cmq4pat0000abc1def2g",        "name": "Pat"      },      "occurredAt": "2026-06-02T09:15:00.000Z"    }  ]}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: read:offerings."}
{  "error": "Offering not found."}
{  "error": "Rate limit exceeded."}
GET/api/v1/products/{id}/prospects

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

agentlyleads ID or externalId.

Query Parameters

limit?integer

1 to 200 (default 50).

Range1 <= value <= 200
Default50

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/products/string/prospects"
{  "offeringId": "string",  "offering": {    "name": "string",    "category": "string",    "description": "string",    "price": 0,    "unit": "string",    "sku": "string"  },  "prospects": [    {      "contactId": "string",      "name": "string",      "title": "string",      "company": "string",      "email": "string",      "status": "string",      "category": "string",      "timelineDigest": "string"    }  ],  "skippedNoEmail": 0,  "skippedSuppressed": 0,  "totalEligible": 0}
{  "error": "limit must be an integer between 1 and 200."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: read:offerings."}
{  "error": "Offering not found."}
{  "error": "Rate limit exceeded."}
POST/api/v1/products/{id}/match

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

agentlyleads ID or externalId.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/products/string/match" \  -H "Content-Type: application/json" \  -d '{}'
{  "match": {    "id": "string",    "status": "MATCHING",    "offering": {      "id": "string",      "name": "string",      "sku": "string",      "category": "string"    },    "campaignId": "string",    "candidates": [      {        "id": "string",        "contact": {          "id": "string",          "name": "string",          "email": "string",          "title": "string",          "company": "string"        },        "fitScore": 0,        "tier": "STRONG",        "reason": "string",        "angle": "string",        "decision": "INCLUDED",        "emailMessageId": "string"      }    ],    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  },  "judged": 0,  "skippedNoEmail": 0,  "skippedSuppressed": 0}
{  "error": "Invalid or missing API key."}
{  "error": "This workspace has used its 25 AI actions for the month. They reset on October 1."}
{  "error": "API key missing required scope: write:offerings."}
{  "error": "Offering not found."}
{  "error": "Rate limit exceeded."}
{  "error": "We couldn't generate a brief right now. Please try again."}
GET/api/v1/outreach-matches/{id}

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The agentlyleads ID.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/api/v1/outreach-matches/string"
{  "match": {    "id": "string",    "status": "MATCHING",    "offering": {      "id": "string",      "name": "string",      "sku": "string",      "category": "string"    },    "campaignId": "string",    "candidates": [      {        "id": "string",        "contact": {          "id": "string",          "name": "string",          "email": "string",          "title": "string",          "company": "string"        },        "fitScore": 0,        "tier": "STRONG",        "reason": "string",        "angle": "string",        "decision": "INCLUDED",        "emailMessageId": "string"      }    ],    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  }}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: read:offerings."}
{  "error": "Match not found."}
{  "error": "Rate limit exceeded."}
PATCH/api/v1/outreach-matches/{id}/candidates/{candidateId}

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The agentlyleads ID.

candidateId*string

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://example.com/api/v1/outreach-matches/string/candidates/string" \  -H "Content-Type: application/json" \  -d '{    "decision": "INCLUDED"  }'
{  "candidate": {    "id": "string",    "matchId": "string",    "decision": "INCLUDED"  }}
{  "error": "decision must be one of: INCLUDED, EXCLUDED, PENDING."}
{  "error": "Invalid or missing API key."}
{  "error": "API key missing required scope: write:offerings."}
{  "error": "Candidate not found."}
{  "error": "Rate limit exceeded."}
POST/api/v1/outreach-matches/{id}/drafts

Authorization

BearerAuth
AuthorizationBearer <token>

Pass an API key issued from the agentlyleads workspace settings. Example: Authorization: Bearer alk_live_xxxxxxxxxxxx

In: header

Path Parameters

id*string

The agentlyleads ID.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/api/v1/outreach-matches/string/drafts" \  -H "Content-Type: application/json" \  -d '{}'
{  "matchId": "string",  "drafted": 0,  "skipped": 0,  "campaignId": "string"}
{  "error": "Invalid or missing API key."}
{  "error": "This workspace has used its 25 AI actions for the month. They reset on October 1."}
{  "error": "API key missing required scope: write:offerings."}
{  "error": "Match not found."}
{  "error": "Rate limit exceeded."}
{  "error": "We couldn't generate a brief right now. Please try again."}