API Documentation

Build powerful integrations with the Leedo API

https://api.leedo.app/v1 v1

Introduction

The Leedo API allows you to programmatically manage your CRM data. You can create, read, update leads, accounts, contacts, and campaigns through a RESTful API.

Base URL: https://api.leedo.app/v1

Authentication

All API requests require authentication using an API token. Include your token in the Authorization header using the Bearer scheme.

Example Request
curl https://api.leedo.app/v1/leads \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json"

Endpoints

Leads

Leads represent potential customers. Manage your sales pipeline by creating, updating, and tracking leads through various stages.

GET /leads

List all leads in your organization

Response

{
  "data": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "name": "John Doe",
      "email": "john@example.com",
      "company": "Acme Corp",
      "status": "new",
      "created_at": "2025-10-01T12:00:00Z"
    }
  ],
  "meta": {
    "total": 1,
    "page": 1,
    "per_page": 20
  }
}
POST /leads

Create a new lead

Request Body

{
  "name": "John Doe",
  "email": "john@example.com",
  "company": "Acme Corp",
  "phone": "+1234567890",
  "status": "new"
}

Response

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "John Doe",
  "email": "john@example.com",
  "company": "Acme Corp",
  "phone": "+1234567890",
  "status": "new",
  "created_at": "2025-10-01T12:00:00Z",
  "updated_at": "2025-10-01T12:00:00Z"
}
GET /leads/:id

Retrieve a specific lead

Response

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "John Doe",
  "email": "john@example.com",
  "company": "Acme Corp",
  "phone": "+1234567890",
  "status": "new",
  "created_at": "2025-10-01T12:00:00Z",
  "updated_at": "2025-10-01T12:00:00Z"
}
PATCH /leads/:id

Update a lead

Request Body

{
  "status": "qualified",
  "phone": "+1234567890"
}

Response

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "John Doe",
  "email": "john@example.com",
  "company": "Acme Corp",
  "phone": "+1234567890",
  "status": "qualified",
  "created_at": "2025-10-01T12:00:00Z",
  "updated_at": "2025-10-01T12:10:00Z"
}

Accounts

Accounts represent companies or organizations. Convert qualified leads into accounts to maintain long-term business relationships.

GET /accounts

List all accounts

Response

{
  "data": [
    {
      "id": "650e8400-e29b-41d4-a716-446655440000",
      "name": "Acme Corporation",
      "industry": "Technology",
      "website": "https://acme.com",
      "created_at": "2025-10-01T12:00:00Z"
    }
  ],
  "meta": {
    "total": 1,
    "page": 1,
    "per_page": 20
  }
}
POST /accounts

Create a new account

Request Body

{
  "name": "Acme Corporation",
  "industry": "Technology",
  "website": "https://acme.com"
}

Response

{
  "id": "650e8400-e29b-41d4-a716-446655440000",
  "name": "Acme Corporation",
  "industry": "Technology",
  "website": "https://acme.com",
  "created_at": "2025-10-01T12:00:00Z",
  "updated_at": "2025-10-01T12:00:00Z"
}
GET /accounts/:id

Retrieve a specific account

Response

{
  "id": "650e8400-e29b-41d4-a716-446655440000",
  "name": "Acme Corporation",
  "industry": "Technology",
  "website": "https://acme.com",
  "created_at": "2025-10-01T12:00:00Z",
  "updated_at": "2025-10-01T12:00:00Z"
}

Contacts

Contacts are individuals associated with accounts. Store contact information, roles, and communication preferences for each person.

GET /contacts

List all contacts

Response

{
  "data": [
    {
      "id": "750e8400-e29b-41d4-a716-446655440000",
      "name": "Jane Smith",
      "email": "jane@acme.com",
      "role": "Product Manager",
      "account_id": "650e8400-e29b-41d4-a716-446655440000",
      "created_at": "2025-10-01T12:00:00Z"
    }
  ],
  "meta": {
    "total": 1,
    "page": 1,
    "per_page": 20
  }
}
POST /contacts

Create a new contact

Request Body

{
  "name": "Jane Smith",
  "email": "jane@acme.com",
  "role": "Product Manager",
  "account_id": "650e8400-e29b-41d4-a716-446655440000"
}

Response

{
  "id": "750e8400-e29b-41d4-a716-446655440000",
  "name": "Jane Smith",
  "email": "jane@acme.com",
  "role": "Product Manager",
  "account_id": "650e8400-e29b-41d4-a716-446655440000",
  "created_at": "2025-10-01T12:00:00Z",
  "updated_at": "2025-10-01T12:00:00Z"
}

Campaigns

Campaigns track marketing initiatives and lead generation efforts. Monitor performance and manage lead capture forms for each campaign.

GET /campaigns

List all campaigns

Response

{
  "data": [
    {
      "id": "850e8400-e29b-41d4-a716-446655440000",
      "name": "Q4 2025 Launch",
      "status": "active",
      "leads_count": 42,
      "created_at": "2025-10-01T12:00:00Z"
    }
  ],
  "meta": {
    "total": 1,
    "page": 1,
    "per_page": 20
  }
}
GET /campaigns/:id

Retrieve a specific campaign

Response

{
  "id": "850e8400-e29b-41d4-a716-446655440000",
  "name": "Q4 2025 Launch",
  "status": "active",
  "leads_count": 42,
  "created_at": "2025-10-01T12:00:00Z",
  "updated_at": "2025-10-01T12:00:00Z"
}

Example: Create a Lead

Request
curl -X POST https://api.leedo.app/v1/leads \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "John Doe", "email": "john@example.com"}'
Response
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "name": "John Doe",
  "email": "john@example.com",
  "company": "Acme Corp",
  "phone": "+1234567890",
  "status": "new",
  "created_at": "2025-10-01T12:00:00Z",
  "updated_at": "2025-10-01T12:00:00Z"
}

Rate Limits

API requests are rate-limited to ensure fair usage and system stability:

  • Free plan: 100 requests per hour
  • Duo plan: 500 requests per hour
  • Pro plan: 5,000 requests per hour

Rate limit information is included in response headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset

Error Codes

Status Code Description
200 OK - Request succeeded
201 Created - Resource successfully created
400 Bad Request - Invalid request parameters
401 Unauthorized - Invalid or missing API token
403 Forbidden - Insufficient permissions
404 Not Found - Resource does not exist
429 Too Many Requests - Rate limit exceeded
500 Internal Server Error - Something went wrong on our end

Need Help?

If you have questions or need assistance with the API, please contact our support team.

Contact Support