Manage your CRM contacts (leads). Search, create, update, and organize contacts across lists and pipeline stages.
Grinfi.io API (2.0.0)
Complete API reference for Grinfi.io — the all-in-one LinkedIn & email outreach platform. Use this API to manage your CRM contacts, run outreach automations, send messages, and integrate Grinfi with your own tools.
All requests require a Bearer token in the Authorization header.
- Log in at leadgen.grinfi.io
- Go to Settings → API Keys
- Copy your key and pass it as:
Authorization: Bearer YOUR_API_KEY
List endpoints support limit (default 20) and offset (default 0) query parameters. Responses include total count and has_more boolean.
Most list endpoints accept a filter object. Supported value types: | Type | Example | SQL equivalent | |------|---------|----------------| | Scalar | "status": "ok" | = 'ok' | | Array | "status": ["ok", "pending"] | IN ('ok', 'pending') | | Object | "created_at": {">=": "2024-01-01"} | >= '2024-01-01' | | "is_null" | "email": "is_null" | IS NULL | | "is_not_null" | "email": "is_not_null" | IS NOT NULL | Supported operators: =, !=, <, <=, >, >=, <>
- Productionhttps://leadgen.grinfi.io/leads/api/leads/{uuid}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X DELETE \
'https://leadgen.grinfi.io/leads/api/leads/{uuid}' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'Request
Create a new contact in a list, or update an existing one if found. The contact is identified by linkedin_id. If the contact already exists and update_if_exists is true, their data will be updated. Optionally move the contact to the specified list with move_to_list.
Custom field values as key-value pairs.
- Productionhttps://leadgen.grinfi.io/leads/api/leads/upsert
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X POST \
https://leadgen.grinfi.io/leads/api/leads/upsert \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"lead": {
"linkedin_id": "john-doe-123456",
"first_name": "John",
"last_name": "Doe",
"company_name": "Acme Inc",
"email": "john@acme.com"
},
"list_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"update_if_exists": true
}'{ "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "team_id": 0, "user_id": 0, "sender_profile_uuid": "string", "list_uuid": "string", "data_source_uuid": "string", "pipeline_stage_uuid": "string", "company_uuid": "string", "name": "John Doe", "first_name": "John", "last_name": "Doe", "company_name": "Acme Inc", "company_ln_id": "string", "position": "VP of Sales", "headline": "VP of Sales at Acme Inc", "about": "string", "avatar_url": "string", "ln_id": "string", "sn_id": "string", "linkedin": "john-doe-123456", "facebook": "string", "twitter": "string", "work_email": "john@acme.com", "personal_email": "string", "work_phone_number": "string", "personal_phone_number": "string", "connections_number": 0, "followers_number": 0, "primary_language": "string", "supported_languages": [ "string" ], "has_open_profile": 0, "has_verified_profile": 0, "has_premium": 0, "experience": [ { … } ], "posts": [ { … } ], "educations": [ { … } ], "skills": [ "string" ], "raw_address": "San Francisco, CA, USA", "location": [ { … } ], "tags": [ "string" ], "status": "ok", "linkedin_status": "active", "email_status": "string", "unread_counts": [ { … } ], "last_automation_approve_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z" }
Request
Perform a bulk operation on contacts matching a filter. Supported actions include changing pipeline stage, assigning/removing tags, moving to a list, and deleting.
Action type: contact_change_pipeline_stage, contact_assign_tag, contact_remove_tag, contact_move_to_list, contact_delete, contact_mark_read.
Action-specific payload.
- Productionhttps://leadgen.grinfi.io/leads/api/leads/mass-action
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X PUT \
https://leadgen.grinfi.io/leads/api/leads/mass-action \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"type": "contact_change_pipeline_stage",
"payload": {
"pipeline_stage_uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
},
"filter": {
"ids": [
"uuid-1",
"uuid-2"
]
}
}'{ "count": 0, "data": [ {} ] }