编程

Pipedrive API工具

试用

通过托管 OAuth 连接访问 Pipedrive CRM 数据。

它能做什么

管理已连接 Pipedrive 账户中的交易、联系人、组织、活动、流水线、阶段、备注和用户。所有请求发往 api.maton.ai/pipedrive/ 网关,由网关转发到 api.pipedrive.com 并自动注入 OAuth 令牌。鉴权使用 MATON_API_KEY 作为 Bearer 令牌,任何新增、更新或删除操作在执行前都需要用户明确确认。

什么时候用它

  • 按阶段或负责人筛选并列出进行中的交易
  • 创建或更新联系人和组织
  • 为交易记录活动或备注
  • 查看流水线阶段与用户分配

技能文档

Pipedrive

Access the Pipedrive API with managed OAuth authentication. Manage deals, persons, organizations, activities, pipelines, and more for sales CRM workflows.

Quick Start

# List deals
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/pipedrive/api/v1/deals')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Base URL

https://api.maton.ai/pipedrive/{native-api-path}

Maton proxies requests to api.pipedrive.com and automatically injects your OAuth token.

Authentication

All requests require the Maton API key in the Authorization header:

Authorization: Bearer $MATON_API_KEY

Environment Variable: Set your API key as MATON_API_KEY:

export MATON_API_KEY="YOUR_API_KEY"

Getting Your API Key

  1. Sign in or create an account at maton.ai
  2. Go to maton.ai/settings
  3. Copy your API key

Connection Management

Manage your Pipedrive OAuth connections at https://api.maton.ai.

List Connections

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections?app=pipedrive&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Create Connection

python <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'pipedrive'}).encode()
req = urllib.request.Request('https://api.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Get Connection

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Response:

{
  "connection": {
    "connection_id": "{connection_id}",
    "status": "ACTIVE",
    "creation_time": "2025-12-08T07:20:53.488460Z",
    "last_updated_time": "2026-01-31T20:03:32.593153Z",
    "url": "https://connect.maton.ai/?session_token=...",
    "app": "pipedrive",
    "metadata": {}
  }
}

Open the returned url in a browser to complete OAuth authorization.

Delete Connection

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Specifying Connection

If you have multiple Pipedrive connections, specify which one to use with the Maton-Connection header:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/pipedrive/api/v1/deals')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Maton-Connection', '{connection_id}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

If you have multiple connections, always include this header to ensure requests go to the intended account.

Security & Permissions

  • Access is scoped to deals, persons, organizations, activities, and pipelines within the connected Pipedrive account.
  • All write operations require explicit user approval. Before executing any create, update, or delete call, confirm the target resource and intended effect with the user.

API Reference

Deals

List Deals

GET /pipedrive/api/v1/deals

Query parameters:

  • status - Filter by status: open, won, lost, deleted, all_not_deleted
  • filter_id - Filter ID to use
  • stage_id - Filter by stage
  • user_id - Filter by user
  • start - Pagination start (default 0)
  • limit - Items per page (default 100)
  • sort - Sort field and order (e.g., add_time DESC)

Example:

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/pipedrive/api/v1/deals?status=open&limit=50')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Get Deal

GET /pipedrive/api/v1/deals/{id}

Create Deal

POST /pipedrive/api/v1/deals
Content-Type: application/json

{
  "title": "New Enterprise Deal",
  "value": 50000,
  "currency": "USD",
  "person_id": 123,
  "org_id": 456,
  "stage_id": 1,
  "expected_close_date": "2025-06-30"
}

Update Deal

PUT /pipedrive/api/v1/deals/{id}
Content-Type: application/json

{
  "title": "Updated Deal Title",
  "value": 75000,
  "status": "won"
}

Delete Deal

DELETE /pipedrive/api/v1/deals/{id}

Search Deals

GET /pipedrive/api/v1/deals/search?term=enterprise

Persons (Contacts)

List Persons

GET /pipedrive/api/v1/persons

Query parameters:

  • filter_id - Filter ID
  • start - Pagination start
  • limit - Items per page
  • sort - Sort field and order

Get Person

GET /pipedrive/api/v1/persons/{id}

Create Person

POST /pipedrive/api/v1/persons
Content-Type: application/json

{
  "name": "John Doe",
  "email": ["john@example.com"],
  "phone": ["+1234567890"],
  "org_id": 456,
  "visible_to": 3
}

Update Person

PUT /pipedrive/api/v1/persons/{id}
Content-Type: application/json

{
  "name": "John Smith",
  "email": ["john.smith@example.com"]
}

Delete Person

DELETE /pipedrive/api/v1/persons/{id}

Search Persons

GET /pipedrive/api/v1/persons/search?term=john

Organizations

List Organizations

GET /pipedrive/api/v1/organizations

Get Organization

GET /pipedrive/api/v1/organizations/{id}

Create Organization

POST /pipedrive/api/v1/organizations
Content-Type: application/json

{
  "name": "Acme Corporation",
  "address": "123 Main St, City, Country",
  "visible_to": 3
}

Update Organization

PUT /pipedrive/api/v1/organizations/{id}
Content-Type: application/json

{
  "name": "Acme Corp International"
}

Delete Organization

DELETE /pipedrive/api/v1/organizations/{id}

Activities

List Activities

GET /pipedrive/api/v1/activities

Query parameters:

  • type - Activity type (e.g., call, meeting, task, email)
  • done - Filter by completion (0 or 1)
  • user_id - Filter by user
  • start_date - Filter by start date
  • end_date - Filter by end date

Get Activity

GET /pipedrive/api/v1/activities/{id}

Create Activity

POST /pipedrive/api/v1/activities
Content-Type: application/json

{
  "subject": "Follow-up call",
  "type": "call",
  "due_date": "2025-03-15",
  "due_time": "14:00",
  "duration": "00:30",
  "deal_id": 789,
  "person_id": 123,
  "note": "Discuss contract terms"
}

Update Activity

PUT /pipedrive/api/v1/activities/{id}
Content-Type: application/json

{
  "done": 1,
  "note": "Completed - customer agreed to terms"
}

Delete Activity

DELETE /pipedrive/api/v1/activities/{id}

Pipelines

List Pipelines

GET /pipedrive/api/v1/pipelines

Get Pipeline

GET /pipedrive/api/v1/pipelines/{id}

Stages

List Stages

GET /pipedrive/api/v1/stages

Query parameters:

  • pipeline_id - Filter by pipeline

Get Stage

GET /pipedrive/api/v1/stages/{id}

Notes

List Notes

GET /pipedrive/api/v1/notes

Query parameters:

  • deal_id - Filter by deal
  • person_id - Filter by person
  • org_id - Filter by organization

Create Note

POST /pipedrive/api/v1/notes
Content-Type: application/json

{
  "content": "Meeting notes: Discussed pricing and timeline",
  "deal_id": 789,
  "pinned_to_deal_flag": 1
}

Users

List Users

GET /pipedrive/api/v1/users

Get Current User

GET /pipedrive/api/v1/users/me

Code Examples

JavaScript

const headers = {
  'Authorization': `Bearer ${process.env.MATON_API_KEY}`
};

// List open deals
const deals = await fetch(
  'https://api.maton.ai/pipedrive/api/v1/deals?status=open',
  { headers }
).then(r => r.json());

// Create a deal
await fetch(
  'https://api.maton.ai/pipedrive/api/v1/deals',
  {
    method: 'POST',
    headers: { ...headers, 'Content-Type': 'application/json' },
    body: JSON.stringify({
      title: 'New Deal',
      value: 10000,
      currency: 'USD'
    })
  }
);

Python

import os
import requests

headers = {'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}

# List open deals
deals = requests.get(
    'https://api.maton.ai/pipedrive/api/v1/deals',
    headers=headers,
    params={'status': 'open'}
).json()

# Create a deal
response = requests.post(
    'https://api.maton.ai/pipedrive/api/v1/deals',
    headers=headers,
    json={
        'title': 'New Deal',
        'value': 10000,
        'currency': 'USD'
    }
)

Notes

  • IDs are integers
  • Email and phone fields accept arrays for multiple values
  • visible_to values: 1 (owner only), 3 (entire company), 5 (owner's visibility group), 7 (entire company and visibility group)
  • Deal status: open, won, lost, deleted
  • Use start and limit for pagination
  • Custom fields are supported via their API key (e.g., abc123_custom_field)
  • IMPORTANT: When using curl commands, use curl -g when URLs contain brackets (fields[], sort[], records[]) to disable glob parsing
  • IMPORTANT: When piping curl output to jq or other commands, environment variables like $MATON_API_KEY may not expand correctly in some shell environments. You may get "Invalid API key" errors when piping.

Error Handling

StatusMeaning
400Missing Pipedrive connection
401Invalid or missing Maton API key
404Resource not found
429Rate limited (10 req/sec per account)
4xx/5xxPassthrough error from Pipedrive API

Troubleshooting: API Key Issues

  1. Check that the MATON_API_KEY environment variable is set:
echo $MATON_API_KEY
  1. Verify the API key is valid by listing connections:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

Troubleshooting: Invalid App Name

  1. Ensure your URL path starts with pipedrive. For example:
  • Correct: https://api.maton.ai/pipedrive/api/v1/deals
  • Incorrect: https://api.maton.ai/api/v1/deals

Resources

相关技能

诊断生产力系统反复失效的根因,给出最小干预——容量测算、瓶颈定位、可靠的本地记录。

作者 Iván855 次安装69 星标

figma-use

官方

在用 use_figma 工具向 Figma 文件执行 JavaScript 之前,先加载这份 Plugin API 规则与参考索引。

作者 OpenAI28.2k 星标

把 API 文档、OpenAPI 规范、curl 示例或现有脚本,生成一个装进 PATH、可长期复用的命令行工具。

作者 OpenAI28.2k 星标

按微软官方现行写法构建、重构和评审 ASP.NET Core 应用,并按需加载对应的参考文档。

作者 OpenAI28.2k 星标

把一句创作需求变成一份生成艺术宣言(.md)和一套可运行的 p5.js 草图,带种子与参数控制。

作者 Anthropic182.7k 星标

从零起草技能、跑对照测试、按结果反复修改,直到技能表现达标。

作者 Anthropic182.7k 星标

byungkyu 的更多技能

浏览全部技能

按提示词自动选用合适的 dlazy CLI 音频模型,完成语音、音乐、音效与声音克隆。

作者 dlazy

类型化知识图谱引擎,将知识表示为可验证的实体-关系图谱。每个实体拥有类型、属性和关系, 所有变更在提交前根据类型约束进行验证。核心能力涵盖类型化实体创建与验证、关系图谱与基数约束、 Schema约束系统、无环验证、追加式变更日志、图谱遍历查询、跨技能契约声明、计划即图谱变换。 支持 Person、Organiza...

作者 oswalpalash2 次安装

创建、检查和编辑Microsoft PowerPoint演示文稿和PPTX文件,确保布局可靠,支持中文交互和自动化操作。

作者 Iván

按意图把图像、视频、音频请求分发到合适的 dlazy CLI 模型。

作者 dlazy

自动化审查代码安全漏洞、认证流和依赖合规,提供结构化报告支持多语言,无需复杂配置,适用开发者与企业团队。

作者 jgarrison929