LeadPanther API Overview

LeadPanther API v1 is currently available by approved API key. API keys are bearer tokens. Keep them server-side and never expose them in browser code.

The canonical base URL is:

https://app.leadpanther.ai/api/v1

https://api.leadpanther.ai/v1 is not the LeadPanther app API base URL.

Current Capabilities

API v1 supports:

  • Reading API key subject information.
  • Listing accessible client accounts.
  • Creating, reading, updating, and deleting draft or scheduled posts.
  • Reading post engagement metrics.
  • Creating, reading, updating, and archiving lead magnets.
  • Reading lead magnet analytics.
  • Creating signed media upload URLs and deleting uploaded media.
  • Listing leads.
  • Listing inbound activity.

Do not guess endpoint names. Use only documented paths under https://app.leadpanther.ai/api/v1. Generic paths such as /accounts, /users, /lists, /campaigns, /organizations, /team, /workspaces, and /lead-magnet-posts are not API v1 endpoints.

Authentication

Send your API key in the Authorization header:

Authorization: Bearer lp_live_REDACTED

Supported key prefixes are lp_live_ and lp_test_.

All authenticated endpoints require a valid API key. Most endpoints also require a specific scope. The * scope satisfies any required scope.

Direct And Agency Access

Direct-user routes operate on the API key owner's account:

/posts
/lead-magnets
/leads
/activity

Agency client work uses nested client routes:

/clients/{clientId}/posts
/clients/{clientId}/lead-magnets
/clients/{clientId}/leads
/clients/{clientId}/activity

For agency access, use the nested client routes. A valid agency API key alone is not enough; the agency must also have an active grant for the target client account.

In API v1, clientId is the client account user_id. Use values returned by GET /clients; do not use account table IDs, API key IDs, key hashes, or private database fields.

Response Format

Success responses use a data envelope:

{
  "data": {
    "name": "LeadPanther API",
    "version": "v1"
  },
  "request_id": "req_000000000000000000000001"
}

List responses include pagination:

{
  "data": [],
  "pagination": {
    "limit": 50,
    "offset": 0,
    "has_more": false
  },
  "request_id": "req_000000000000000000000002"
}

Error responses include a stable error code and message:

{
  "error": {
    "code": "forbidden",
    "message": "API key is missing a required scope."
  },
  "request_id": "req_000000000000000000000003"
}

Use the response request_id when contacting LeadPanther support about an API call.

Pagination

All list endpoints use limit and offset pagination. Unless otherwise documented, limit defaults to 50 and is capped at 100.

GET /posts?limit=25&offset=0

Lead magnet analytics uses the same style for recent capture references.

Error Codes

API v1 can return these error codes:

  • bad_request
  • unauthorized
  • forbidden
  • not_found
  • conflict
  • method_not_allowed
  • not_implemented
  • internal_error

If a call returns 403, check both the API key scope and, for agency routes, the agency-client grant.

Data Sensitivity

Public examples in these docs are redacted and do not represent the full sensitivity of production data.

The leads:read scope can return personal data, including lead email fields and profile references. The activity:read scope can return message or comment content and platform identifiers. Store, process, and share responses according to your privacy and compliance obligations.

Current Limitations

These features are planned or future-facing and are not currently available as a public API v1 contract:

  • Public self-serve API key provisioning.
  • Published rate-limit semantics.
  • Guaranteed idempotency key behavior.
  • Webhook endpoints.
  • Generated SDKs.
  • A public changelog and deprecation policy.

Do not use Supabase REST, Supabase storage URLs, or api.leadpanther.ai as the app API unless LeadPanther support explicitly directs you to an internal integration path.

Endpoint Summary

MethodPathPurposeRequired scope
GET/API metadatanone
GET/meAPI key owner and subject infovalid API key
GET/clientsList accessible client accountsclients:read
GET/clients/{clientId}Get one client accountclients:read
GET/postsList posts for direct userposts:read
POST/postsCreate post for direct userposts:write
GET/posts/{id}Get post for direct userposts:read
PATCH/posts/{id}Update post for direct userposts:write
DELETE/posts/{id}Delete unpublished post for direct userposts:write
GET/posts/{id}/engagementGet post engagement for direct useranalytics:read
GET/lead-magnetsList lead magnets for direct userlead_magnets:read
POST/lead-magnetsCreate lead magnet for direct userlead_magnets:write
GET/lead-magnets/{id}Get lead magnet for direct userlead_magnets:read
PATCH/lead-magnets/{id}Update lead magnet for direct userlead_magnets:write
DELETE/lead-magnets/{id}Archive lead magnet for direct userlead_magnets:write
GET/lead-magnets/{id}/analyticsGet lead magnet analytics for direct useranalytics:read
POST/media/upload-urlCreate signed upload URL for direct usermedia:write
DELETE/mediaDelete uploaded media for direct usermedia:write
GET/leadsList leads for direct userleads:read
GET/activityList inbound activity for direct useractivity:read

Agency equivalents use /clients/{clientId}/... for posts, lead magnets, media, leads, and activity.