---
title: "Get profile"
method: GET
path: "/api/profiles/{id}"
tags: ["Profiles"]
---

# Get profile

`GET /api/profiles/{id}`

## Request

- Base URL: `https://api.postproxy.dev`
- URL: `https://api.postproxy.dev/api/profiles/{id}`
- Auth: HTTP bearer

Retrieves a single profile by its ID. The response includes the profile fields plus the latest stats snapshot per placement and (for placement networks) a summary_stats rollup.

## Path parameters

- `id` string, required

## Query parameters

- `profile_group_id` string

## Response `200`

The profile with latest stats

- object: A connected social media account.
  - `id` string: Unique profile identifier (id).
  - `name` string: Display name of the connected account.
  - `username` string, nullable: Handle on the platform (without @). null when the platform does not expose one.
  - `platform_id` string: The account's ID on the platform.
  - `status` 'active' | 'expired' | 'inactive': Platform connection status. inactive might mean disconnected or suspended on a platform, or waiting for a group that can take it - see inactive_reason.
  - `inactive_reason` 'network_taken' | 'null', nullable: Why an inactive profile is inactive. network_taken: the account arrived with a Facebook login that granted several Instagram accounts, but its group already holds an active Instagram profile - move it to a group without one to activate it. null otherwise, including when the connection was lost and needs reconnecting.
  - `platform` 'facebook' | 'instagram' | 'tiktok' | 'linkedin' | 'youtube' | 'twitter' | 'threads' | 'pinterest' | 'bluesky' | 'telegram' | 'google_business': Platform identifier.
  - `profile_group_id` string: ID of the profile group this belongs to.
  - `expires_at` string, nullable: ISO 8601 timestamp when the connection expires (if applicable). null when the token does not expire or has a refresh token.
  - `post_count` integer: Number of posts made through this profile.
  - `avatar_url` string, nullable: Stable Postproxy storage URL of the account's profile picture, resized to 256x256. null until it has been mirrored. For facebook this is the connecting user's picture; each Page's picture is avatar_url on its placement.
  - `platform_url` string, nullable: Public URL of the account on the platform. null when the platform has no stable public profile URL (e.g. linkedin, google_business).
  - `placements_sync_status` 'syncing' | 'synced' | 'failed' | 'null', nullable: State of the latest pull of this profile's placements. The pull runs in the background right after connecting and can take several minutes on profiles with many pages/locations. null for platforms without placements and for telegram, whose channels arrive via webhook.
  - `latest_stats` object[]: Latest snapshot per placement. One entry for non-placement networks (with placement_id: null). Empty array if no snapshots have been recorded yet.
    - `placement_id` string, nullable: Platform-specific placement ID. null for non-placement networks.
    - `stats` object: Platform-specific metrics. Keys come straight from each platform's API and are not normalized into a common schema.
    - `recorded_at` string: ISO 8601 timestamp when the snapshot was captured.
  - `summary_stats` object, nullable: For placement networks: numeric values summed across the latest snapshot of every placement. null for non-placement networks and when no snapshots exist. Non-numeric values are omitted from the summary.
    - `stats` object: Summed metrics.
    - `recorded_at` string: ISO 8601 timestamp of the most recent placement snapshot included in the summary.

## Other responses

- `401`: Invalid, missing, or insufficient API key permissions.
- `404`: Resource does not exist or is not accessible.

---

[API](https://skmtc.dev/postproxy/apis/postproxy-social-media-api.md) - [All operations](https://skmtc.dev/postproxy/apis/postproxy-social-media-api/llms.txt) - [OpenAPI document](https://skmtc.dev/postproxy/apis/postproxy-social-media-api/revisions/d54482ac4ce7?raw)
