# Teamfluence API v2.0 > Teamfluence API Reference v2.0 This document contains the full content of all documentation pages for AI consumption. --- ## Content Endpoints **URL:** https://developer.teamfluence.com/docs/content **Description:** Retrieve team feed posts and tracked contacts feed posts The content tag provides endpoints for accessing LinkedIn post activity — both from your workspace team members and from tracked contacts. ## List Team Members Feed GET `/v2/content/team/feed` Retrieves LinkedIn posts published by your workspace team members, with filtering and cursor pagination. ### Authentication Required: bearer token. ### Query Parameters | Name | Type | Default | Description | |------|------|---------|-------------| | sort_by | string | newest_first | newest_first, oldest_first, most_viewed_first, least_viewed_first | | start_date | string (YYYY-MM-DD) | — | Filter posts published on or after this date (UTC) | | end_date | string (YYYY-MM-DD) | — | Filter posts published on or before this date (UTC) | | team_member_id | string | — | Restrict to a specific team member. Obtain from [/v2/workspace/users](/docs/workspace) | | cursor | string | — | Pagination cursor from previous response | | limit | integer | 15 | Number of results per page (1–50) | ### Example Request ### Response Fields (TeamFeedPostsListResponse) | Field | Type | Notes | |-------|------|-------| | total | integer | Total matching posts | | has_more | boolean | Whether additional pages exist | | cursor | string \| null | Cursor to fetch the next page | | items | array | List of post objects | #### User Content Object / Feed Post | Field | Type | Notes | |-------|------|-------| | id | string | Post identifier | | activity_urn | string \| null | LinkedIn activity URN | | type | string \| null | Post type (e.g. SHARE, REPOST) | | content | string \| null | Post text | | parent_content | string \| null | Original post text for reposts | | author | string | LinkedIn username of the author | | post_url | string | Direct URL to the LinkedIn post | | image | string \| null | Primary image URL | | parent_image | string \| null | Image from the original post | | shares_num | integer \| null | Share count | | likes_num | integer \| null | Like count | | impressions_num | integer \| null | Impression count | | comments_num | integer \| null | Comment count | | published_at | string (datetime) | Publication timestamp (UTC) | | team_member_id | string \| null | Internal ID of the team member who published | ### Example Response ```json { "total": 2, "has_more": false, "cursor": null, "items": [ { "id": "post_111", "activity_urn": "urn:li:activity:7210000000000000001", "type": "SHARE", "content": "Excited to share our Q3 results — 40% growth in pipeline 🚀", "parent_content": null, "author": "alex-doe", "post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7210000000000000001", "image": null, "parent_image": null, "shares_num": 12, "likes_num": 204, "impressions_num": 8500, "comments_num": 31, "published_at": "2026-08-10T09:00:00Z", "team_member_id": "usr_123" }, { "id": "post_112", "activity_urn": "urn:li:activity:7210000000000000002", "type": "REPOST", "content": "Great perspective on B2B go-to-market 👇", "parent_content": "The best GTM motions start with deep ICP clarity...", "author": "alex-doe", "post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7210000000000000002", "image": null, "parent_image": null, "shares_num": 3, "likes_num": 47, "impressions_num": 1900, "comments_num": 7, "published_at": "2026-08-08T14:30:00Z", "team_member_id": "usr_123" } ] } ``` --- ## List Tracked Contacts Feed GET `/v2/content/tracked-contacts/feed` Retrieves LinkedIn posts published by contacts that your workspace members are tracking. Shares the same query parameters and response shape as the team feed endpoint. ### Authentication Required: bearer token. ### Query Parameters | Name | Type | Default | Description | |------|------|---------|-------------| | sort_by | string | newest_first | newest_first, oldest_first, most_viewed_first, least_viewed_first | | start_date | string (YYYY-MM-DD) | — | Filter posts published on or after this date (UTC) | | end_date | string (YYYY-MM-DD) | — | Filter posts published on or before this date (UTC) | | team_member_id | string | — | Restrict feed to contacts tracked by a specific team member | | cursor | string | — | Pagination cursor from previous response | | limit | integer | 15 | Number of results per page (1–50) | ### Example Request ### Response Same structure as [GET /v2/content/team/feed](#get-v2contentteamfeed). Returns a `TeamFeedPostsListResponse` object with paginated `TeamFeedPostRead` items. ### Example Response ```json { "total": 1, "has_more": false, "cursor": null, "items": [ { "id": "post_220", "activity_urn": "urn:li:activity:7220000000000000003", "type": "SHARE", "content": "The future of AI in sales enablement — my take after 10 years in the industry.", "parent_content": null, "author": "jane-prospect", "post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7220000000000000003", "image": "https://media.licdn.com/dms/image/sample.jpg", "parent_image": null, "shares_num": 55, "likes_num": 892, "impressions_num": 41000, "comments_num": 113, "published_at": "2026-08-19T11:00:00Z", "team_member_id": "usr_123" } ] } ``` --- ## Errors and Validation **URL:** https://developer.teamfluence.com/docs/errors **Description:** Error handling, validation responses, and troubleshooting Teamfluence API uses standard HTTP response codes. Successful requests return 2xx codes and JSON payloads. ## Common Status Codes | Code | Meaning | |------|---------| | 200 | Success | | 401 | Missing or invalid bearer token | | 403 | Access denied for current workspace/user | | 404 | Resource not found | | 422 | Validation error | | 5xx | Server-side failure | ## Validation Error Format When request validation fails, endpoints return an HTTP 422 payload in this shape: ```json { "detail": [ { "loc": ["body", "status"], "msg": "Input should be 'NEW', 'QUALIFIED' or 'DISQUALIFIED'", "type": "enum", "input": "INVALID_STATUS", "ctx": {} } ] } ``` ### ValidationError Fields | Field | Type | Description | |-------|------|-------------| | loc | array[string\|integer] | Path to invalid value | | msg | string | Human-readable validation message | | type | string | Error category | | input | any | Received invalid input | | ctx | object | Optional context | ## Troubleshooting Checklist 1. Confirm your base URL is https://api.teamfluence.com and endpoint begins with /v2. 2. Confirm Authorization header is exactly Bearer <token>. 3. Confirm date fields use ISO date format: YYYY-MM-DD. 4. Confirm enum values are valid, especially lead status and sort_by. 5. For paginated leads calls, pass cursor exactly as returned by previous response. --- ## Health Endpoint **URL:** https://developer.teamfluence.com/docs/health **Description:** Service health check endpoint ## Check API Availability GET `/v2/health` Simple system endpoint for connectivity and uptime checks. ### Authentication Not required. ### Example Request ### Response - **200 OK** — Service is up. Returns an empty JSON object. ```json {} ``` ### Success Response - 200: service is reachable --- ## Teamfluence API v2.0 **URL:** https://developer.teamfluence.com/docs **Description:** REST API reference for Teamfluence workspace, leads, and system endpoints The Teamfluence API exposes workspace and lead data through a secure JSON REST interface. ## Base URL and Version - Base URL: https://api.teamfluence.com - API prefix: /v2 - OpenAPI version: 3.1.0 - API version (info.version): 0.2.0 ## Authentication All protected endpoints require a bearer token in the Authorization header. ```http Authorization: Bearer ``` Generate your API key from Teamfluence workspace settings. ## Endpoint Groups - workspace: workspace users and credits balance - leads: list and update leads - content: team feed posts and tracked contacts feed posts - networking: add profiles to connection campaigns - default: health check endpoint ## OpenAPI Schema The machine-readable API specification is available at: - https://api.teamfluence.com/openapi.json ## Terms and Contact - Terms of service: https://teamfluence.com/tos - API website: https://developer.teamfluence.com/ - Contact email: developer@teamfluence.com ## Example Request ```bash curl -X GET "https://api.teamfluence.com/v2/workspace/credits" \ -H "Authorization: Bearer $TEAMFLUENCE_API_KEY" \ -H "Accept: application/json" ``` --- ## Leads Endpoints **URL:** https://developer.teamfluence.com/docs/leads **Description:** List workspace leads and update lead records The leads tag provides endpoints for retrieval and updates. ## List Workspace Leads GET `/v2/leads` Retrieves leads for the workspace with filters, sorting, and cursor pagination. ### Query Parameters | Name | Type | Description | |------|------|-------------| | sort_by | string | newest_first, oldest_first, last_touch_first, last_touch_last, most_engaged_first, least_engaged_first | | start_date | string (YYYY-MM-DD) | Start date in UTC | | end_date | string (YYYY-MM-DD) | End date in UTC | | days | integer | Overrides start_date/end_date with a rolling range | | status | string | NEW, QUALIFIED, DISQUALIFIED | | company_public_id | string | Company LinkedIn handle or numeric id | | post_id | string | Filter by originating post. Obtain post IDs from the [Content team feed](/docs/content) endpoint | | email_enriched | boolean | `true` = enriched emails only, `false` = non-enriched only, omit = all leads | | cursor | string | Cursor token from previous response page | | limit | integer (1–50) | Max leads per page. Default 50 | ### Example Request ### Response Shape | Field | Type | Notes | |-------|------|-------| | total | integer | Total leads count | | has_more | boolean | Whether additional pages exist | | cursor | string \| null | Cursor for next page | | items | array | Lead items for this page | #### Lead Item Fields | Field | Type | Notes | |-------|------|-------| | id | string | Lead identifier | | first_name | string \| null | | | last_name | string \| null | | | headline | string \| null | LinkedIn headline | | job_title | string \| null | | | username | string \| null | LinkedIn username | | linkedin_url | string \| null | | | contact_email | string \| null | Enriched email if available | | phone_number | string \| null | | | enrichment_status | string \| null | Email enrichment state | | team_member_email | string \| null | Team member who sourced the lead | | source | string \| null | How the lead was captured | | source_content_url | string \| null | URL of the originating post | | status | string \| null | NEW, QUALIFIED, DISQUALIFIED | | tags | string[] | Label list | | engagement_events_count | integer \| null | Raw event count | | engagement_score | integer \| null | Computed score (0–100) | | is_icp_match | boolean | Whether lead matches ICP criteria | | is_account_based | boolean | Account-based flag | | history | array | Shallow history records | | picture | string \| null | Profile picture URL | | followers_count | integer \| null | | | connections_count | integer \| null | | | country | string \| null | | | created_at | string (datetime) | Lead creation timestamp (UTC) | | last_engagement_dt | string \| null | Most recent engagement timestamp | | company | object \| null | Nested company details | ### Example Response ```json { "total": 1, "has_more": false, "cursor": null, "items": [ { "id": "lead_abc123", "first_name": "Jane", "last_name": "Smith", "headline": "VP of Marketing at Acme Corp", "job_title": "VP of Marketing", "username": "jane-smith", "linkedin_url": "https://www.linkedin.com/in/jane-smith", "contact_email": "jane@acme.com", "phone_number": null, "enrichment_status": "ENRICHED", "team_member_email": "owner@example.com", "source": "POST", "source_content_url": "https://www.linkedin.com/feed/update/urn:li:activity:123456", "status": "NEW", "tags": ["enterprise", "fintech"], "engagement_events_count": 5, "engagement_score": 82, "is_icp_match": true, "is_account_based": false, "history": [], "picture": "https://my.teamfluence.app/placeholders/default-profile.png", "followers_count": 1200, "connections_count": 500, "country": "US", "feed_updated_at": "2026-08-01T09:15:00Z", "created_at": "2026-07-15T14:30:00Z", "last_engagement_dt": "2026-08-01T09:15:00Z", "company": { "name": "Acme Corp", "slug": "acme-corp", "website_url": "https://acme.com", "employees_num_min": 201, "employees_num_max": 500, "headquarters": "San Francisco, CA", "country": "US", "founded_year": 2012, "industries": ["Software Development"], "linkedin_url": "https://www.linkedin.com/company/acme-corp", "created_at": "2026-06-01T00:00:00Z" } } ] } ``` ## Update Lead PATCH `/v2/leads/{lead_id}` Updates a lead's status, tags, note, CRM information, and ICP match state. ### Path Parameter | Name | Type | Required | |------|------|----------| | lead_id | string | yes | ### Request Body Fields (LeadUpdatePayload) | Field | Type | Notes | |-------|------|-------| | status | string \| null | NEW, QUALIFIED, DISQUALIFIED | | tags | string[] \| null | Updates tag list | | note | object \| null | Note payload | | crm_id | string \| null | External CRM identifier | | crm_contact_url | string \| null | CRM contact URL | | is_icp_match | boolean \| null | ICP match flag | ### Note Object | Field | Type | Notes | |-------|------|-------| | note_id | string \| null | If omitted or null, a new note is created | | note_content | string | Note text | ### Example Request ### Responses - 200: update accepted - 422: validation error --- ## Networking Endpoints **URL:** https://developer.teamfluence.com/docs/networking **Description:** Manage networking campaigns and enroll profiles for connection outreach The networking tag contains endpoints for automating LinkedIn connection campaigns. ## Extend Networking Campaign PUT `/v2/networking/campaigns/\{campaign_id\}` Adds one or more LinkedIn profiles to an existing networking campaign. Each profile will be enrolled for automated connection outreach. ### Authentication Required: bearer token. ### Path Parameter | Name | Type | Required | |------|------|----------| | campaign_id | string | yes | ### Request Body | Field | Type | Required | Notes | |-------|------|----------|-------| | profiles | array | yes | List of profiles to enroll | #### Profile Object | Field | Type | Required | Notes | |-------|------|----------|-------| | username | string | yes | LinkedIn username / public handle | | linkedin_urn | string \| null | no | LinkedIn URN identifier | | first_name | string \| null | no | Profile first name | | last_name | string \| null | no | Profile last name | | email | string \| null | no | Profile email address | | crm_id | string \| null | no | External CRM record identifier | ### Example Request ### Responses | Status | Description | |--------|-------------| | 200 | Profiles successfully added to the campaign | | 422 | Validation error — check request body structure | ### Example Response ```json {} ``` --- ## Quick Start **URL:** https://developer.teamfluence.com/docs/quickstart **Description:** Make your first authenticated request to Teamfluence API This guide helps you call Teamfluence API in a few minutes. ## Prerequisites Before you begin, make sure you have: - A Teamfluence account - An API key generated in workspace settings - A terminal with curl installed ## First API Call ## Update a Lead ## Common Headers ```http Accept: application/json Authorization: Bearer Content-Type: application/json ``` ## Next Steps --- ## Workspace Endpoints **URL:** https://developer.teamfluence.com/docs/workspace **Description:** Endpoints for workspace users and credits balance The workspace tag contains team and billing-related read operations. ## List Workspace Users GET `/v2/workspace/users` Returns workspace team members and LinkedIn integration details. ### Authentication Required: bearer token. ### Example Request ### Response Fields | Field | Type | Notes | |-------|------|-------| | id | string | Workspace user identifier | | email | string | User email | | first_name | string \| null | First name | | last_name | string \| null | Last name | | is_active_seat | boolean | Whether user occupies an active seat | | integration_status | string \| null | NOT_CONNECTED, CONNECTED, or DISCONNECTED | | linkedin_username | string \| null | LinkedIn username | | last_linkedin_update | string \| null | Last LinkedIn sync datetime | ### Example Response ```json [ { "id": "usr_123", "email": "owner@example.com", "first_name": "Alex", "last_name": "Doe", "is_active_seat": true, "integration_status": "CONNECTED", "linkedin_username": "alex-doe", "last_linkedin_update": "2026-07-20T11:41:09Z" } ] ``` ## Get Workspace Credits Balance GET `/v2/workspace/credits` Returns current workspace credits balance. ### Example Request ### Response Fields | Field | Type | Notes | |-------|------|-------| | current_balance | integer | Available workspace credits | | last_updated | string \| null | Last update datetime | ### Example Response ```json { "current_balance": 1482, "last_updated": "2026-07-29T08:12:10Z" } ``` --- ## Links - [Discord](https://discord.gg/your-invite) - [Support](https://teamfluence.com/help)