{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/gtm-api/main/json-schema/gtm-api-get-linkedin-account-my-profile-views-response-schema.json", "title": "GetLinkedinAccountMyProfileViewsResponse", "x-generated": "2026-10-18", "x-method": "derived", "x-generator": "derive-json-schema.py", "x-source": "openapi/_original/gtm-api-openapi-openapi.yml#/components/schemas/GetLinkedinAccountMyProfileViewsResponse", "type": "object", "properties": { "success": { "type": "boolean", "enum": [ true ] }, "operation": { "type": "string", "enum": [ "action" ] }, "action": { "type": "string", "description": "kebab-case verb; matches the route segment." }, "item": { "type": [ "object", "null" ], "properties": { "sid": { "type": "string" }, "team_sid": { "type": "string" }, "antidetect_browser_sid": { "type": "string" }, "status": { "type": "string", "enum": [ "new", "initial_syncing", "active", "sync_failed", "shared_out", "subscription_required" ], "description": "Platform lifecycle (onboarding phases and hold states), NOT health and NOT login state: a sender signed out of LinkedIn still reads \"active\" here. Login state lives on the bound browser, request include antidetect_browser and read its status (login_issue means signed out, restricted means signed out AND the public profile is gone from LinkedIn, so a re-login alone will not fix it)." }, "account_share_sid": { "type": [ "string", "null" ] }, "share_role": { "type": [ "string", "null" ], "enum": [ "owner", "holder", "giver", "receiver" ] }, "ln_id": { "type": [ "string", "null" ] }, "ln_member_id": { "type": [ "string", "null" ] }, "sn_id": { "type": [ "string", "null" ] }, "nickname": { "type": [ "string", "null" ] }, "recruiter_seat_id": { "type": [ "string", "null" ], "description": "The account's own LinkedIn Recruiter seat number (the talent ts_seat), stamped by the premium check when the recruiter probe says yes and cleared when it says no. Every recruiter sync / thread read / reply dispatches with it; null with recruiter_status set means the seat is not stamped yet: run check_linkedin_account_premium_subscription with checks: ['recruiter']." }, "recruiter_contract_id": { "type": [ "string", "null" ], "description": "The Recruiter contract (talent ts_contract number) the stamped seat belongs to, from the same seat read. A seat only means something inside its contract: hiring-project urns embed it, and a member on several contracts holds a different seat on each." }, "recruiter_session_expires_at": { "type": [ "string", "null" ], "description": "When the Recruiter (enterprise) session of the bound browser profile runs out (ISO 8601): the expiry of LinkedIn's li_a cookie, read by the premium check from the account's running browser (the plugin's own cookie jar; the antidetect vendor's cookie store is consulted only for a platform-owned profile whose browser did not answer), the clock, never the value. LinkedIn issues that session for 30 days when the seat holder enters the LinkedIn password on the Recruiter sign-in page. Past this clock the account's recruiter_status turns signed_out (the session sweep confirms it in the browser's cookie jar within 15 minutes) and every recruiter tool answers 409 recruiter_reauth_required, whose context.account_url is the account's page where the seat holder signs in again through the cloud browser. Null = no clock (not read, or the session cookie was not seen, which is not a verdict; recruiter_status is the verdict)." }, "full_name": { "type": [ "string", "null" ] }, "avatar_url": { "type": [ "string", "null" ] }, "label": { "type": [ "string", "null" ] }, "has_premium": { "type": "boolean" }, "has_sn": { "type": "boolean" }, "recruiter_status": { "type": [ "string", "null" ], "enum": [ "active", "signed_out" ], "description": "The account's LinkedIn Recruiter status. null = no Recruiter seat (the premium check's recruiter probe said no, or never ran). active = the seat's Recruiter (enterprise) session answers talent calls. signed_out = LinkedIn Recruiter asks the seat holder for the LinkedIn password again (about every 30 days): every recruiter tool answers 409 recruiter_reauth_required and the recruiter sync waits until the seat holder signs in through the cloud browser from the account's page (the 409's context.account_url); the status returns to active by itself once they have. Filter on it to find seats that need their holder." }, "smart_limits_enabled": { "type": "boolean" }, "inmail_credits": { "type": [ "number", "null" ], "description": "The Sales Navigator seat's InMail balance (the LSS_INMAIL grant), read only while the account holds a seat and cleared when the seat goes. Null = never read, the last read failed, or the seat was just lost; not zero." }, "premium_inmail_credits": { "type": [ "number", "null" ], "description": "The Premium plan's own InMail balance (Premium Career / Business), read off LinkedIn's Premium page for a Premium account WITHOUT a Sales Navigator seat (a seat holder's linkedin.com InMail is the seat's grant above) and cleared when the plan goes. Null = never read or the last read could not be parsed; not zero." }, "recruiter_inmail_credits": { "type": [ "number", "null" ], "description": "The Recruiter contract's own InMail balance (what Recruiter's Usage Overview shows as InMail credits), read off the talent API for an account with an ACTIVE Recruiter seat and cleared when the seat goes; a signed-out seat keeps its last number. LinkedIn grants Recruiter InMails per contract and moves nothing between its products, so this is the pool send_linkedin_recruiter_message spends, not the two above. Null = never read or the last read could not be parsed; not zero." }, "last_premium_check_at": { "type": [ "string", "null" ] }, "last_connections_sync_at": { "type": [ "string", "null" ] }, "last_conversations_sync_at": { "type": [ "string", "null" ] }, "last_sales_navigator_conversations_sync_at": { "type": [ "string", "null" ] }, "last_recruiter_conversations_sync_at": { "type": [ "string", "null" ] }, "last_connection_requests_sync_at": { "type": [ "string", "null" ] }, "last_connection_invitations_sync_at": { "type": [ "string", "null" ] }, "last_followers_sync_at": { "type": [ "string", "null" ] }, "last_snapshot_at": { "type": [ "string", "null" ] }, "initial_sync_completed_at": { "type": [ "string", "null" ] }, "initial_sync_held_at": { "type": [ "string", "null" ], "description": "When THIS onboarding first parked on a smart-limit budget (the daily self_account_sync allowance ran out before the initial set was done); null = never held. Kept after the latch, cleared by reset-sync." }, "initial_sync_hold_reason": { "type": [ "string", "null" ], "description": "The run's park code at that moment: limit:daily_saturation, limit:held or limit:linkedin_quota_hit." }, "last_heartbeat_at": { "type": [ "string", "null" ] }, "sync_config": { "type": [ "object", "null" ], "properties": { "entries": { "type": "object", "properties": { "connections": { "type": "object", "properties": { "interval_minutes": { "type": "number" } }, "required": [ "interval_minutes" ] }, "conversations": { "type": "object", "properties": { "interval_minutes": { "type": "number" } }, "required": [ "interval_minutes" ] }, "sales_navigator_conversations": { "type": "object", "properties": { "interval_minutes": { "type": "number" } }, "required": [ "interval_minutes" ] }, "recruiter_conversations": { "type": "object", "properties": { "interval_minutes": { "type": "number" } }, "required": [ "interval_minutes" ] }, "connection_requests": { "type": "object", "properties": { "interval_minutes": { "type": "number" } }, "required": [ "interval_minutes" ] }, "connection_invitations": { "type": "object", "properties": { "interval_minutes": { "type": "number" } }, "required": [ "interval_minutes" ] }, "premium_check": { "type": "object", "properties": { "interval_minutes": { "type": "number" } }, "required": [ "interval_minutes" ] }, "snapshot_check": { "type": "object", "properties": { "interval_minutes": { "type": "number" } }, "required": [ "interval_minutes" ] } }, "description": "Per-track sync-interval overrides, keyed by sync track." }, "timezone": { "type": "string", "description": "IANA timezone the window is evaluated in." }, "window": { "type": "array", "items": { "type": "object", "properties": { "day_of_week": { "type": "integer", "minimum": 1, "maximum": 7 }, "start_minute": { "type": "integer", "minimum": 0, "maximum": 1439 }, "end_minute": { "type": "integer", "minimum": 1, "maximum": 1440 } }, "required": [ "day_of_week", "start_minute", "end_minute" ] }, "description": "Weekly sync-activity window blocks; empty = always open." } } }, "webhook_config": { "type": [ "object", "null" ], "properties": { "connections": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "since": { "type": [ "string", "null" ] } }, "required": [ "enabled", "since" ] }, "connection_requests": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "since": { "type": [ "string", "null" ] } }, "required": [ "enabled", "since" ] }, "connection_invitations": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "since": { "type": [ "string", "null" ] } }, "required": [ "enabled", "since" ] }, "conversations": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "since": { "type": [ "string", "null" ] } }, "required": [ "enabled", "since" ] }, "sales_navigator_conversations": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "since": { "type": [ "string", "null" ] } }, "required": [ "enabled", "since" ] }, "recruiter_conversations": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "since": { "type": [ "string", "null" ] } }, "required": [ "enabled", "since" ] }, "messages": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "since": { "type": [ "string", "null" ] } }, "required": [ "enabled", "since" ] }, "followers": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "since": { "type": [ "string", "null" ] } }, "required": [ "enabled", "since" ] }, "snapshot": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "since": { "type": [ "string", "null" ] } }, "required": [ "enabled", "since" ] }, "strike_log": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "since": { "type": [ "string", "null" ] } }, "required": [ "enabled", "since" ] }, "limits": { "type": "object", "properties": { "enabled": { "type": "boolean" }, "since": { "type": [ "string", "null" ] } }, "required": [ "enabled", "since" ] } } }, "created_by": { "type": "object", "properties": { "actor_type": { "type": "string", "enum": [ "user", "support", "api_key", "system", "agent" ] }, "actor_sid": { "type": [ "string", "null" ] }, "team_sid": { "type": "string" }, "permissions": { "type": "object", "additionalProperties": {} }, "request_sid": { "type": [ "string", "null" ] }, "reason": { "type": [ "string", "null" ] } }, "required": [ "actor_type", "actor_sid", "team_sid", "permissions", "reason" ] }, "created_at": { "type": "string" }, "updated_at": { "type": "string" }, "deleted_at": { "type": [ "string", "null" ] } }, "required": [ "sid", "team_sid", "antidetect_browser_sid", "status", "account_share_sid", "share_role", "ln_id", "ln_member_id", "sn_id", "nickname", "recruiter_seat_id", "recruiter_contract_id", "recruiter_session_expires_at", "full_name", "avatar_url", "label", "has_premium", "has_sn", "recruiter_status", "smart_limits_enabled", "inmail_credits", "premium_inmail_credits", "recruiter_inmail_credits", "last_premium_check_at", "last_connections_sync_at", "last_conversations_sync_at", "last_sales_navigator_conversations_sync_at", "last_recruiter_conversations_sync_at", "last_connection_requests_sync_at", "last_connection_invitations_sync_at", "last_followers_sync_at", "last_snapshot_at", "initial_sync_completed_at", "initial_sync_held_at", "initial_sync_hold_reason", "last_heartbeat_at", "sync_config", "webhook_config", "created_by", "created_at", "updated_at", "deleted_at" ] }, "result": { "type": "object", "properties": { "status": { "type": "string", "description": "Plugin dispatch status for this read." }, "profile_views": { "type": "object", "properties": { "elements": { "type": "array", "items": { "type": "object", "properties": { "position": { "type": "integer", "description": "LinkedIn's own rank for this viewer, read off the card. Server-authored and the sort key, ascending." }, "is_anonymous": { "type": "boolean", "description": "True when the viewer browsed in private mode. Branch on this FIRST: an anonymous row has a descriptor instead of a name, a search url instead of a profile, and no member ids at all." }, "display_name": { "type": [ "string", "null" ], "description": "The viewer name. On an ANONYMIZED row this holds the descriptor LinkedIn shows instead, e.g. \"Someone at Acme\" or \"Executive Director in the software industry\"." }, "headline": { "type": [ "string", "null" ] }, "network_distance": { "type": [ "string", "null" ], "description": "Rendered degree: \"1st\" / \"2nd\" / \"3rd\". LinkedIn prefixes the line with punctuation, which is stripped before you see it." }, "url": { "type": [ "string", "null" ], "description": "Profile url for a named viewer. For an ANONYMIZED viewer it is a PEOPLE-SEARCH url instead, so there is nothing to open and it is not an identity key." }, "public_identifier": { "type": [ "string", "null" ], "description": "Vanity slug, taken from url. Never present on an anonymized row, because that url is a search rather than a profile." }, "profile_id": { "type": [ "string", "null" ], "description": "ACoA member id. Present only when the card offered the MESSAGE action, which depends on network distance." }, "member_urn": { "type": [ "string", "null" ], "description": "urn:li:member:N. Present only when the card offered the CONNECT action. A row may carry this, profile_id, both, or neither." }, "image_url": { "type": [ "string", "null" ], "description": "Viewer avatar. An anonymized card renders a ghost placeholder and carries none." }, "company_logo_url": { "type": [ "string", "null" ] }, "viewed_at_text": { "type": [ "string", "null" ], "description": "RENDERED relative text, exactly as LinkedIn printed it, e.g. \"Viewed 1w ago\". Locale-bound and not parseable: this feed ships no machine-readable date anywhere." }, "mutual_connections_text": { "type": [ "string", "null" ], "description": "Rendered shared-connections line, e.g. \"3 mutual connections\"." } }, "required": [ "position", "is_anonymous" ] }, "description": "The viewers on this page, newest first. Empty on a page that rendered with nothing on it, and ALSO empty when the read failed: check status." }, "paging": { "type": "object", "properties": { "page_size": { "type": [ "integer", "null" ], "description": "Rows on this page as requested (the wire default is 10). It is what we ASKED for, not what came back." }, "page_cursor": { "type": [ "string", "null" ], "description": "Absolute offset of the page just read, as a string. It is not an opaque token, but treat it as one." }, "next_page_cursor": { "type": [ "string", "null" ], "description": "Pass back as `cursor` to get the next page. ABSENT means the feed is over, and that is the ONLY end signal: there is deliberately no total and no has-more flag." } }, "required": [ "page_size", "page_cursor" ] } }, "required": [ "elements", "paging" ] } }, "required": [ "status", "profile_views" ] }, "meta": { "type": "object", "properties": { "trace_id": { "type": "string", "description": "UUID v7; same 128-bit value as the X-Trace-Id header." }, "span_id": { "type": "string", "pattern": "^[0-9a-f]{16}$", "description": "16 hex chars, root span of this request." }, "timestamp": { "type": "string", "description": "ISO 8601 UTC (Y-m-dTH:i:sZ), response time." }, "duration_ms": { "type": "integer", "minimum": 0, "description": "Server-side wall clock." }, "team_sid": { "type": [ "string", "null" ], "description": "The team this call ran in (the token team, or the team_sid override). Null when unauthenticated; absent from pre-2026-08-20 backends." }, "actor_type": { "type": [ "string", "null" ], "description": "user | agent | api_key | system. Null when unauthenticated; absent from pre-2026-08-20 backends." } }, "required": [ "trace_id", "span_id", "timestamp", "duration_ms" ] }, "pacing": { "type": "object", "properties": { "linkedin_account_sid": { "type": "string", "description": "The account whose bucket the call spent." }, "limit_type": { "type": "string", "description": "The smart-limit bucket the call spent, e.g. send_messages." }, "next_call_after": { "type": "string", "description": "ISO 8601, the same form as retry_after: the moment this same call goes through again without waiting. The next pacing slot while the day has budget left, the daily reset when it has none, the end of a LinkedIn lock while one stands." }, "remaining_today": { "type": "integer", "minimum": 0, "description": "daily_limit minus done_today_count of that bucket, after this call." } }, "required": [ "linkedin_account_sid", "limit_type", "next_call_after", "remaining_today" ] } }, "required": [ "success", "operation", "action", "item", "result", "meta" ] }