# Get post

> Returns information about a specific post.

Breadcrumb: API › Get post
Docs index: https://docs.cevoid.com/developers/llms.txt

`GET https://api.cevoid.com/v2/posts/{id}`

Returns information about a specific post.

## Authorizations

Bearer token in the Authorization header: `Authorization: Bearer <key>` (API key).

## Path parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `id` | `string` | Yes | Cevoid post ID. Example: `pst_abc123`. |

## Query parameters

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `market` | `string` | No | Market for included product presentations. Required when including products. Length: `1 to 256`. Example: `mar_sweden`. |
| `include` | `string \| string[]` | No | Comma-separated related data. Products requires an explicit market and products:read. Profiles requires profiles:read and returns canonical profiles referenced by profile_id. Example: `products,profiles`. |

## Response

### 200: Successful response

`application/json`

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `data` | `object` | Yes | Requested resource. |
| `data.id` | `string` | Yes | Cevoid post ID. Example: `pst_abc123`. |
| `data.profile_id` | `string` | No | Cevoid profile ID for the contributor, when known. Example: `prf_abc123`. |
| `data.added_by_workspace` | `boolean` | Yes | Whether the post was added by the workspace rather than a profile. Example: `false`. |
| `data.custom_username` | `string` | No | Post-specific display-name override, when set. Example: `The weekend crew`. |
| `data.type` | `enum<string>` | Yes | Primary media type. Allowed values: `IMAGE`, `VIDEO`. Example: `IMAGE`. |
| `data.status` | `enum<string>` | Yes | Moderation state. Allowed values: `APPROVED`, `PENDING`, `DECLINED`, `REMOVED`, `NONE`. Example: `APPROVED`. |
| `data.media` | `object` | Yes |  |
| `data.media.url` | `string<uri>` | Yes | Delivery URL for the media asset. Example: `https://cdn.cevoid.com/posts/pst_abc123.jpg`. |
| `data.media.thumbnail_url` | `string<uri>` | No | Smaller preview image when available. Example: `https://cdn.cevoid.com/posts/pst_abc123-thumbnail.jpg`. |
| `data.media.sprite_url` | `string<uri>` | No | Video sprite image for timeline previews when available. Example: `https://cdn.cevoid.com/posts/pst_abc123-sprite.jpg`. |
| `data.media.blurhash` | `string` | No | BlurHash placeholder for the media asset. Example: `LEHV6nWB2yk8pyo0adR*.7kCMdnj`. |
| `data.media.filename` | `string` | No | Original filename, when available. Example: `summer-look.jpg`. |
| `data.media.aspect_ratio` | `number` | No | Width divided by height. Range: `0 < x`. Example: `1.25`. |
| `data.media.duration_seconds` | `number` | No | Video duration in seconds. Range: `0 <= x`. Example: `12.5`. |
| `data.media.has_audio` | `boolean` | No | Whether video media includes an audio track. Example: `true`. |
| `data.caption` | `string` | No | Contributor caption. Example: `Summer outfit`. |
| `data.hide_caption` | `boolean` | Yes | Whether clients should hide the caption. Example: `false`. |
| `data.language` | `string` | No | IETF BCP 47 language tag for the caption. Example: `en`. |
| `data.alt` | `string` | No | Alternative text for the media. Example: `Person wearing a linen shirt`. |
| `data.video_captions` | `string` | No | WebVTT captions for video media. Example: `WEBVTT

00:00.000 --> 00:02.000
Summer outfit.`. |
| `data.video_description` | `string` | No | Accessible description of video content. Example: `A person shows a summer outfit.`. |
| `data.source` | `object` | No |  |
| `data.source.platform` | `enum<string>` | Yes | External platform where the post originated. Allowed values: `INSTAGRAM`, `TIKTOK`. Example: `INSTAGRAM`. |
| `data.source.carousel_index` | `integer` | No | Zero-based position within the source carousel. Omitted for standalone posts or unknown positions. Group slides by platform and external_id when available. Range: `0 <= x`. Example: `0`. |
| `data.source.username` | `string` | No | Source account username when stored with the post. Example: `sarah.lifestyle`. |
| `data.source.external_id` | `string` | No | Post identifier from the external platform. Example: `18000000000000000`. |
| `data.source.url` | `string<uri>` | No | Original public post URL. Example: `https://www.instagram.com/p/example/`. |
| `data.source.posted_at` | `string<date-time>` | No | ISO 8601 timestamp when the external post was published. Example: `2026-08-01T09:00:00.000Z`. |
| `data.origin` | `object` | No |  |
| `data.origin.type` | `enum<string>` | Yes | How the post entered the workspace. Omitted when the origin is unknown. Allowed values: `INSTAGRAM_FEED`, `INSTAGRAM_HASHTAG`, `INSTAGRAM_TAGGED`, `INSTAGRAM_MENTIONED`, `TIKTOK_FEED`, `CEVOID_GENERAL`, `CEVOID_CUSTOM`, `WORKSPACE_UPLOADS`, `WORKSPACE_COPIES`, `WORKSPACE_IMPORTS`, `ACTIVITIES`. Example: `WORKSPACE_UPLOADS`. |
| `data.custom_link` | `object` | No |  |
| `data.custom_link.url` | `string<uri>` | Yes | Destination URL. Example: `https://shop.example.com/summer`. |
| `data.custom_link.title` | `string` | Yes | Link title. Example: `Shop the summer edit`. |
| `data.custom_link.description` | `string` | No | Link description. Example: `Explore the complete look.`. |
| `data.custom_link.image_url` | `string<uri>` | No | Link preview image. Example: `https://cdn.cevoid.com/links/summer.jpg`. |
| `data.labels` | `string[]` | Yes | Cevoid label IDs assigned to the post. Example: `["lbl_summer","lbl_featured"]`. |
| `data.tagged_products` | `object[]` | Yes |  |
| `data.tagged_products[].product_id` | `string` | Yes | Cevoid product ID. Example: `prd_abc123`. |
| `data.tagged_products[].x` | `number` | No | Normalized horizontal position. Range: `0 <= x <= 1`. Example: `0.35`. |
| `data.tagged_products[].y` | `number` | No | Normalized vertical position. Range: `0 <= x <= 1`. Example: `0.65`. |
| `data.posted_at` | `string<date-time>` | Yes | Effective content date. Uses the stored posted date, falling back to the Instagram date, TikTok date, then creation date for legacy posts. Does not change list ordering. Example: `2026-08-01T09:00:00.000Z`. |
| `data.created_at` | `string<date-time>` | Yes | ISO 8601 timestamp when the Post was created. Example: `2026-08-01T10:00:00.000Z`. |
| `data.updated_at` | `string<date-time>` | Yes | ISO 8601 timestamp when the Post was last updated. Example: `2026-08-02T10:00:00.000Z`. |
| `included` | `object` | No |  |
| `included.products` | `object[]` | No | Products referenced by this page, localized to market. Join tagged_products.product_id to id. |
| `included.products[].market_id` | `string` | Yes | Cevoid market ID for this product presentation. Example: `mar_sweden`. |
| `included.products[].external_id` | `string` | No | Product identifier from the connected commerce platform. Example: `shopify_product_123`. |
| `included.products[].title` | `string` | No | Market-specific product title. Example: `Merino crew neck`. |
| `included.products[].variant_title` | `string` | No | Market-specific variant option label. Example: `Navy / M`. |
| `included.products[].sku` | `string` | No | Market-specific stock keeping unit. Example: `MERINO-NAVY-M`. |
| `included.products[].url` | `string<uri>` | No | Storefront URL for the selected market presentation. Example: `https://shop.example/products/merino-crew`. |
| `included.products[].image_url` | `string<uri>` | No | Primary image for the selected market presentation. Example: `https://cdn.cevoid.com/products/merino-crew/0.jpg`. |
| `included.products[].availability` | `enum<string>` | No | Availability for the selected market presentation. Allowed values: `IN_STOCK`, `OUT_OF_STOCK`. Example: `IN_STOCK`. |
| `included.products[].id` | `string` | Yes | Cevoid product or variant ID. Example: `prd_abc123def456gh`. |
| `included.products[].type` | `enum<string>` | Yes | Product family. Allowed value: `PRODUCT`. Example: `PRODUCT`. |
| `included.products[].price` | `object` | No | Market-specific Product price range. |
| `included.products[].price.currency` | `string` | Yes | ISO 4217 currency code. Example: `SEK`. |
| `included.products[].price.min_amount` | `number` | Yes | Lowest Variant price. Range: `0 <= x`. Example: `799`. |
| `included.products[].price.max_amount` | `number` | Yes | Highest Variant price. Range: `0 <= x`. Example: `999`. |
| `included.products[].market_id` | `string` | Yes | Cevoid market ID for this product presentation. Example: `mar_sweden`. |
| `included.products[].external_id` | `string` | No | Product identifier from the connected commerce platform. Example: `shopify_product_123`. |
| `included.products[].title` | `string` | No | Market-specific product title. Example: `Merino crew neck`. |
| `included.products[].variant_title` | `string` | No | Market-specific variant option label. Example: `Navy / M`. |
| `included.products[].sku` | `string` | No | Market-specific stock keeping unit. Example: `MERINO-NAVY-M`. |
| `included.products[].url` | `string<uri>` | No | Storefront URL for the selected market presentation. Example: `https://shop.example/products/merino-crew`. |
| `included.products[].image_url` | `string<uri>` | No | Primary image for the selected market presentation. Example: `https://cdn.cevoid.com/products/merino-crew/0.jpg`. |
| `included.products[].availability` | `enum<string>` | No | Availability for the selected market presentation. Allowed values: `IN_STOCK`, `OUT_OF_STOCK`. Example: `IN_STOCK`. |
| `included.products[].id` | `string` | Yes | Cevoid product or variant ID. Example: `prd_abc123def456gh`. |
| `included.products[].type` | `enum<string>` | Yes | Purchasable Product variant. Allowed value: `VARIANT`. Example: `VARIANT`. |
| `included.products[].parent_product_id` | `string` | Yes | Cevoid product ID. Present when type is VARIANT. Example: `prd_abc123def456gh`. |
| `included.products[].price` | `object` | No | Market-specific Variant price. |
| `included.products[].price.currency` | `string` | Yes | ISO 4217 currency code. Example: `SEK`. |
| `included.products[].price.amount` | `number` | Yes | Current Variant price. Range: `0 <= x`. Example: `899`. |
| `included.products[].price.sale_amount` | `number` | No | Sale price when active. Range: `0 <= x`. Example: `799`. |
| `included.profiles` | `object[]` | No | Profiles referenced by this page. Join profile_id to id. Contains secret-key profile fields; keep server-side. |
| `included.profiles[].id` | `string` | Yes | Cevoid profile ID. Example: `prf_abc123`. |
| `included.profiles[].external_id` | `string` | No | Identifier this profile carries in the workspace source system, when known. Secret-key only. Example: `7391056823401`. |
| `included.profiles[].name` | `string` | No | Display name of the profile. Example: `Sarah Johnson`. |
| `included.profiles[].first_name` | `string` | No | First name of the profile. Example: `Sarah`. |
| `included.profiles[].last_name` | `string` | No | Last name of the profile. Example: `Johnson`. |
| `included.profiles[].email` | `string` | No | Email address for the profile. Secret-key only. Example: `sarah.johnson@example.com`. |
| `included.profiles[].avatar_url` | `string` | No | Profile image URL. Example: `https://cdn.cevoid.com/avatars/profile123/profile.jpg`. |
| `included.profiles[].country` | `string` | No | Country code associated with the profile. Example: `US`. |
| `included.profiles[].language` | `string` | No | Preferred language code associated with the profile. Example: `en`. |
| `included.profiles[].location` | `string` | No | Free-form location associated with the profile. Secret-key only. Example: `San Francisco, CA`. |
| `included.profiles[].social_instagram_handle` | `string` | No | Instagram handle associated with the profile. Example: `sarah.lifestyle`. |
| `included.profiles[].social_tiktok_handle` | `string` | No | TikTok handle associated with the profile. Example: `sarah.creates`. |
| `included.profiles[].social_x_handle` | `string` | No | X handle associated with the profile. Example: `sarah_j`. |
| `included.profiles[].birthday` | `string<date>` | No | Birthday in YYYY-MM-DD format. Secret-key only. Example: `1992-04-18`. |
| `included.profiles[].name_display_format` | `enum<string>` | No | Preferred format for displaying the profile name. Allowed values: `FULL`, `FIRST_LAST_INITIAL`, `FIRST`, `ANONYMOUS`. Example: `FIRST_LAST_INITIAL`. |
| `included.profiles[].bio` | `string` | No | Profile biography text. Secret-key only. Example: `Lifestyle blogger and photography enthusiast`. |
| `included.profiles[].notes` | `string` | No | Notes visible only to secret keys. Example: `VIP customer, prefers email communication`. |
| `included.profiles[].created_at` | `string<date-time>` | Yes | ISO 8601 timestamp when the profile was created. Example: `2024-01-15T09:30:00.000Z`. |
| `included.profiles[].updated_at` | `string<date-time>` | Yes | ISO 8601 timestamp when the profile was last updated. Example: `2024-01-20T14:22:15.000Z`. |

Response headers:

| Header | Type | Description |
| --- | --- | --- |
| `Cevoid-Processing-Ms` | `string` | End-to-end request processing time in milliseconds |
| `Cevoid-Request-Id` | `string` | Request identifier for support and tracing |
| `RateLimit-Limit` | `string` | Current rate limit bucket size |
| `RateLimit-Remaining` | `string` | Remaining requests in the current rate limit window |
| `RateLimit-Reset` | `integer` | Seconds until the next request token is available |

```json
{
  "data": {
    "id": "pst_summerlook",
    "profile_id": "prf_sarah",
    "added_by_workspace": false,
    "origin": {
      "type": "INSTAGRAM_TAGGED"
    },
    "type": "VIDEO",
    "status": "APPROVED",
    "media": {
      "url": "https://cdn.cevoid.com/posts/pst_summerlook.jpg",
      "thumbnail_url": "https://cdn.cevoid.com/posts/pst_summerlook-thumbnail.jpg",
      "sprite_url": "https://cdn.cevoid.com/posts/pst_summerlook-sprite.jpg",
      "blurhash": "LEHV6nWB2yk8pyo0adR*.7kCMdnj",
      "filename": "summer-look.jpg",
      "aspect_ratio": 1.25,
      "duration_seconds": 12.5,
      "has_audio": true
    },
    "caption": "Summer outfit",
    "hide_caption": false,
    "language": "en",
    "alt": "Person wearing a linen shirt",
    "video_captions": "WEBVTT\n\n00:00.000 --> 00:02.000\nSummer outfit.",
    "video_description": "A person shows a summer outfit.",
    "source": {
      "platform": "INSTAGRAM",
      "external_id": "18000000000000000",
      "url": "https://www.instagram.com/p/example/",
      "posted_at": "2026-08-01T09:00:00.000Z"
    },
    "custom_link": {
      "url": "https://shop.example.com/summer",
      "title": "Shop the summer edit",
      "description": "Explore the complete look.",
      "image_url": "https://cdn.cevoid.com/links/summer.jpg"
    },
    "labels": [
      "lbl_summer",
      "lbl_featured"
    ],
    "tagged_products": [
      {
        "product_id": "prd_abc123def456gh",
        "x": 0.35,
        "y": 0.65
      }
    ],
    "posted_at": "2026-08-01T09:00:00.000Z",
    "created_at": "2026-08-01T10:00:00.000Z",
    "updated_at": "2026-08-02T10:00:00.000Z"
  }
}
```

### 400: Bad request

`application/json`

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `additional_data` | `object` | No | Optional machine-readable error details. |
| `additional_data.{key}` | `any` | No |  |
| `status` | `number` | Yes | HTTP status code for the error response. Example: `404`. |
| `code` | `string` | Yes | Stable machine-readable error code. Example: `not_found`. |
| `message` | `string` | Yes | Human-readable description of the error. Example: `Route not found`. |
| `request_id` | `string` | No | Request identifier for support and tracing. Example: `req_abc123`. |

Response headers: the same as 200.

```json
{
  "additional_data": {
    "errors": [
      {
        "field": "query.market",
        "message": "Invalid input: expected string, received array"
      }
    ]
  },
  "status": 400,
  "code": "bad_request",
  "message": "Bad request",
  "request_id": "req_abc123"
}
```

### 401: Unauthorized

`application/json`

Same fields as 400.

Response headers: the same as 200.

```json
{
  "status": 401,
  "code": "unauthorized",
  "message": "Unauthorized",
  "request_id": "req_abc123"
}
```

### 403: Forbidden

`application/json`

Same fields as 400.

Response headers: the same as 200.

```json
{
  "status": 403,
  "code": "forbidden",
  "message": "Forbidden",
  "request_id": "req_abc123"
}
```

### 404: Not found

`application/json`

Same fields as 400.

Response headers: the same as 200.

```json
{
  "additional_data": {
    "errors": [
      {
        "field": "query.market",
        "message": "Invalid input: expected string, received array"
      }
    ]
  },
  "status": 404,
  "code": "not_found",
  "message": "Route not found",
  "request_id": "req_abc123"
}
```

### 422: Validation error

`application/json`

Same fields as 400.

Response headers: the same as 200.

```json
{
  "additional_data": {
    "errors": [
      {
        "field": "query.market",
        "message": "Invalid input: expected string, received array"
      }
    ]
  },
  "status": 422,
  "code": "validation_error",
  "message": "Validation error",
  "request_id": "req_abc123"
}
```

### 429: Too many requests

`application/json`

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `additional_data` | `object` | Yes | Machine-readable rate-limit details. |
| `additional_data.retry_after_seconds` | `integer` | Yes | Range: `0 <= x`. |
| `additional_data.{key}` | `any` | No |  |
| `status` | `integer` | Yes | HTTP status code. Example: `404`. |
| `code` | `string` | Yes | Stable machine-readable error code. Example: `not_found`. |
| `message` | `string` | Yes | Human-readable error description. Example: `Resource not found`. |
| `request_id` | `string` | No | Request identifier for support and tracing. Example: `req_abc123`. |

Response headers:

| Header | Type | Description |
| --- | --- | --- |
| `Cevoid-Processing-Ms` | `string` | End-to-end request processing time in milliseconds |
| `Cevoid-Request-Id` | `string` | Request identifier for support and tracing |
| `RateLimit-Limit` | `string` | Current rate limit bucket size |
| `RateLimit-Remaining` | `string` | Remaining requests in the current rate limit window |
| `RateLimit-Reset` | `integer` | Seconds until the next request token is available |
| `Retry-After` | `integer` | Seconds to wait before retrying the request |

```json
{
  "status": 429,
  "code": "rate_limit_exceeded",
  "message": "Rate limit exceeded",
  "request_id": "req_abc123",
  "additional_data": {
    "retry_after_seconds": 1
  }
}
```

### 500: Internal server error

`application/json`

Same fields as 400.

Response headers: the same as 200.

```json
{
  "status": 500,
  "code": "internal_server_error",
  "message": "Internal server error",
  "request_id": "req_abc123"
}
```

## Request example

```bash
curl 'https://api.cevoid.com/v2/posts/pst_abc123' \
  -H "Authorization: Bearer ${CEVOID_API_KEY}"
```

---

Canonical: https://docs.cevoid.com/developers/api/posts/get-post
