> **For coding agents and LLMs:** This is one page from the Social Fetch docs (markdown export). For curated orientation and workflow guidance, start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for agent onboarding and crawl rules, use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for the full endpoint list with links to pages like this one, use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt); for one platform's parameters and curls, use [`/llms-{platform}.txt`](https://www.socialfetch.dev/llms-tiktok.txt); use [`/llms.json`](https://www.socialfetch.dev/llms.json) when you need structured JSON for tool registration.

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/docs/api/v1/vimeo/ondemand/slug/get>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/docs/api/v1/vimeo/ondemand/slug/get.mdx>

## API base URL and authentication

- **API origin (from OpenAPI `servers`):** `https://api.socialfetch.dev`
- **Authentication:** send `x-api-key: sfk_...` on `/v1/**` and `/v2/**` routes unless the operation is explicitly anonymous (check OpenAPI `security`, the [API reference hub](https://www.socialfetch.dev/docs/api.mdx), [`/llms.txt`](https://www.socialfetch.dev/llms.txt), or [`/llms.json`](https://www.socialfetch.dev/llms.json) for each route).
- **OpenAPI JSON:** <https://www.socialfetch.dev/openapi.json>

## Recommended docs entrypoints (this site)

- [Documentation overview](https://www.socialfetch.dev/docs.mdx) — top-level orientation (markdown).
- [Quickstart](https://www.socialfetch.dev/docs/quickstart.mdx) — authenticate with `x-api-key`, validate auth with `whoami`, and understand the JSON envelope.
- [SDK](https://www.socialfetch.dev/docs/sdk.mdx) — official TypeScript SDK guide, including `SocialFetchClient`, `Result`, and `unwrap()`.
- [Capability matrix](https://www.socialfetch.dev/docs/capability-matrix.mdx) — every operation with identifiers, pagination, outcomes, media download, credits, and its SDK method. Generated from OpenAPI, so use it for route selection instead of scanning individual pages.
- [Recipes](https://www.socialfetch.dev/docs/recipes.mdx) — copyable workflows (brand monitoring, transcripts, Ad Library, creator scoring, Reddit research) with credit callouts and SDK examples.
- [Integrations](https://www.socialfetch.dev/docs/integrations.mdx) — MCP for AI clients, n8n verified node, Apify Store Actors, Make custom app, SDK, and REST API connection paths.
- [MCP product page](https://www.socialfetch.dev/mcp) — hosted MCP overview, OAuth, Skills install.
- [MCP integration](https://www.socialfetch.dev/docs/integrations/mcp.mdx) — hosted `/mcp` server, OAuth, Cursor/VS Code/Claude install snippets, 910 endpoint tools, plus docs_search/docs_read for implementation help.
- [n8n integration](https://www.socialfetch.dev/docs/integrations/n8n.mdx) — install `n8n-nodes-socialfetch`, credentials, and workflow examples.
- [Apify integration](https://www.socialfetch.dev/docs/integrations/apify.mdx) — Store Actors under @social-fetch, PPE billing, dataset export, and quick start.
- [Make integration](https://www.socialfetch.dev/docs/integrations/make.mdx) — custom app modules for Make scenarios, API key credentials, and module catalog.
- [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt) — every documented operation with a direct link to that route's agent-readable markdown page (prefer this over parsing OpenAPI).
- [`/llms-{platform}.txt`](https://www.socialfetch.dev/llms-tiktok.txt) — per-platform endpoint files generated from OpenAPI (parameters, credits, curls).
- [`/agents.txt`](https://www.socialfetch.dev/agents.txt) — agent crawl/onboarding file with capabilities, auth rules, and allowlist.
- [`/llms.json`](https://www.socialfetch.dev/llms.json) — structured machine-readable operation inventory with parameter names, pagination, outcomes, credits, and SDK mapping.
- [API reference hub](https://www.socialfetch.dev/docs/api.mdx) — human-friendly index of operations with links into generated pages.
- [Errors](https://www.socialfetch.dev/docs/errors.mdx) — shared error envelope and HTTP status guidance.
- [Credits](https://www.socialfetch.dev/docs/credits.mdx) — metering, `402`, and planning batch jobs.
- Outcome semantics such as `found`, `not_found`, and `private` are documented in [Errors](https://www.socialfetch.dev/docs/errors.mdx) and on operation pages when present in the OpenAPI contract.

## Markdown docs convention

- Every docs page has a markdown twin: append **`.mdx`** to the docs pathname (for example `/docs/quickstart` → `/docs/quickstart.mdx`).
- Agents that send `Accept: text/markdown` on `/docs/**` HTML URLs may receive markdown directly (same URL, `Vary: Accept`).
- Published blog posts use the same convention: `/blog/{slug}` → `/blog/{slug}.mdx`, or `Accept: text/markdown` on the HTML URL (`Vary: Accept`).

---
# Get Vimeo On Demand title (https://www.socialfetch.dev/docs/api/v1/vimeo/ondemand/slug/get)

## Summary

Get a Vimeo On Demand title: description, genres, prices, film, trailer, owner and counts.

**Tags:** `Vimeo`

## HTTP

- **Method:** GET
- **Path:** `/v1/vimeo/ondemand/{slug}`
- **Base URL:** `https://api.socialfetch.dev`

## Capability summary

- **SDK mapping:** `client.vimeo.getOnDemand({ slug: "pariah" })`
- **Accepted identifiers:** `slug` (path)
- **Pagination:** none
- **Business outcome field:** `data.lookupStatus` with values `found`, `not_found`

## Credits

- **Base:** 1 credit per successful lookup.
- **Maximum on success (200):** 1 credit.
- **Failed requests (`lookup_failed`, `503`):** not charged.
- **Authoritative field:** `meta.creditsCharged`.

## Authentication

- **`x-api-key`**: API key (`sfk_...`)

## Parameters

### `slug` (path)

- **Required:** yes
- **Constraints:** type `string`; pattern: `^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$`
- **Description:** Vimeo On Demand slug or numeric id, e.g. `pariah`.

## Responses (status codes)

- **200**: A Vimeo On Demand title.
- **400**: Invalid request
- **401**: Missing or invalid API key
- **402**: Insufficient credits
- **500**: Unexpected or billing error
- **502**: Lookup could not be completed.
- **503**: Service temporarily unavailable; safe to retry with backoff.

## Response body (200)

A Vimeo On Demand title.

### Field outline

- **data** (required) — type `object`. Endpoint-specific response payload.
  - **lookupStatus** (required) — type `string`; enum: found, not_found. Whether the entity was found. A removed, private, password-protected or never-existing item is `not_found`; Vimeo does not distinguish them.
  - **onDemand** (required) — type `object`; nullable. The On Demand title when found; otherwise null.
    - **id** (required) — type `integer`; minimum: 0; nullable. On Demand page id.
    - **name** (required) — type `string`; nullable. Title.
    - **description** (required) — type `string`; nullable. Description.
    - **type** (required) — type `string`; nullable. Title type, e.g. `film`.
    - **url** (required) — type `string`; nullable. Title page URL.
    - **domainUrl** (required) — type `string`; nullable. Custom-domain URL, when the seller has one.
    - **contentRating** (required) — type `array`. Content-rating labels the title carries.
      - _items:_
        - type `string`
    - **theme** (required) — type `string`; nullable. Player theme.
    - **colors** (required) — type `object`. Title colours.
      - **primary** (required) — type `string`; nullable. Primary colour.
      - **secondary** (required) — type `string`; nullable. Secondary colour.
    - **publish** (required) — type `object`. Publication state.
      - **active** (required) — type `boolean`; nullable. Whether it is published.
      - **at** (required) — type `string`; nullable. When it was published.
    - **preorder** (required) — type `object`. Preorder state.
      - **active** (required) — type `boolean`; nullable. Whether preorder is open.
      - **at** (required) — type `string`; nullable. When preordering started.
      - **cancelAt** (required) — type `string`; nullable. When preordering was cancelled.
      - **publishAt** (required) — type `string`; nullable. When it is due to publish.
    - **rating** (required) — type `string`; nullable. Rating label.
    - **poster** (required) — type `object`. An image Vimeo hosts.
      - **url** (required) — type `string`; nullable. Image URL at its base size.
      - **sizes** (required) — type `array`. The same image at named sizes.
        - _items:_
    - **thumbnail** (required) — type `object`. An image Vimeo hosts.
      - **url** (required) — type `string`; nullable. Image URL at its base size.
      - **sizes** (required) — type `array`. The same image at named sizes.
        - _items:_
    - **background** (required) — type `object`; nullable. An image Vimeo hosts.
      - **url** (required) — type `string`; nullable. Image URL at its base size.
      - **sizes** (required) — type `array`. The same image at named sizes.
        - _items:_
    - **genres** (required) — type `array`. Genres.
      - _items:_
    - **rent** (required) — type `object`. A rent, buy or subscription option.
      - **active** (required) — type `boolean`; nullable. Whether the option is offered.
      - **prices** (required) — type `array`. Prices Vimeo lists, one entry per currency.
        - _items:_
      - **url** (required) — type `string`; nullable. Store or title URL.
      - **period** (required) — type `string`; nullable. Rental period, e.g. `24 hour`.
    - **buy** (required) — type `object`. A rent, buy or subscription option.
      - **active** (required) — type `boolean`; nullable. Whether the option is offered.
      - **prices** (required) — type `array`. Prices Vimeo lists, one entry per currency.
        - _items:_
      - **url** (required) — type `string`; nullable. Store or title URL.
      - **period** (required) — type `string`; nullable. Rental period, e.g. `24 hour`.
    - **subscription** (required) — type `object`. A rent, buy or subscription option.
      - **active** (required) — type `boolean`; nullable. Whether the option is offered.
      - **prices** (required) — type `array`. Prices Vimeo lists, one entry per currency.
        - _items:_
      - **url** (required) — type `string`; nullable. Store or title URL.
      - **period** (required) — type `string`; nullable. Rental period, e.g. `24 hour`.
    - **episodes** (required) — type `object`. Episode purchase options.
      - **rent** (required) — type `object`. A rent, buy or subscription option.
      - **buy** (required) — type `object`. A rent, buy or subscription option.
    - **owner** (required) — type `object`; nullable. A Vimeo user. List rows carry only the fields that list provides; the rest are null.
      - **id** (required) — type `integer`; minimum: 0. Vimeo user id.
      - **name** (required) — type `string`; nullable. Display name.
      - **handle** (required) — type `string`; nullable. Vanity handle, or the `user<id>` form.
      - **url** (required) — type `string`; nullable. Profile page URL.
      - **bio** (required) — type `string`; nullable. Biography; null when the list row does not include it.
      - **shortBio** (required) — type `string`; nullable. Short biography; null when the list row does not include it.
      - **location** (required) — type `string`; nullable. Location the user set; null when the list row does not include it.
      - **website** (required) — type `string`; nullable. Website the user lists; null when the list row does not include it.
      - **links** (required) — type `array`. Links the user lists, when available.
        - _items:_
      - **verified** (required) — type `boolean`; nullable. Whether the user is verified; null when the list row does not include it.
      - **hasPublicVideos** (required) — type `boolean`; nullable. Whether the profile says the user has public videos; null on list rows that do not include it.
      - **createdAt** (required) — type `string`; nullable. When the account was created, in UTC.
      - **account** (required) — type `object`. Account flags.
      - **counts** (required) — type `object`. Counts for the user.
      - **avatar** (required) — type `object`. Profile pictures in the sizes Vimeo offers.
      - **profile** (required) — type `object`. Optional public profile fields. `available` is null when they are not included and false when they are unavailable. List rows that do not carry profile data leave these fields null.
    - **film** (required) — type `object`; nullable. The film or trailer behind an On Demand title.
      - **id** (required) — type `integer`; minimum: 0; nullable. Video id.
      - **name** (required) — type `string`; nullable. Title.
      - **description** (required) — type `string`; nullable. Description.
      - **url** (required) — type `string`; nullable. Public video URL.
      - **durationSeconds** (required) — type `integer`; minimum: 0; nullable. Length in seconds.
      - **width** (required) — type `integer`; minimum: 0; nullable. Width in pixels.
      - **height** (required) — type `integer`; minimum: 0; nullable. Height in pixels.
      - **language** (required) — type `string`; nullable. Language code.
    - **trailer** (required) — type `object`; nullable. The film or trailer behind an On Demand title.
      - **id** (required) — type `integer`; minimum: 0; nullable. Video id.
      - **name** (required) — type `string`; nullable. Title.
      - **description** (required) — type `string`; nullable. Description.
      - **url** (required) — type `string`; nullable. Public video URL.
      - **durationSeconds** (required) — type `integer`; minimum: 0; nullable. Length in seconds.
      - **width** (required) — type `integer`; minimum: 0; nullable. Width in pixels.
      - **height** (required) — type `integer`; minimum: 0; nullable. Height in pixels.
      - **language** (required) — type `string`; nullable. Language code.
    - **counts** (required) — type `object`; nullable. Counts shown on the title page.
      - **videos** (required) — type `integer`; minimum: 0; nullable. Videos on the title page.
      - **genres** (required) — type `integer`; minimum: 0; nullable. Genres.
      - **likes** (required) — type `integer`; minimum: 0; nullable. Likes.
      - **comments** (required) — type `integer`; minimum: 0; nullable. Comments.
      - **seasons** (required) — type `integer`; minimum: 0; nullable. Seasons.
- **meta** (required) — type `object`. Metadata describing the request and billing outcome.
  - **requestId** (required) — type `string`; minLength: 1. Unique request identifier for tracing this API call.
  - **creditsCharged** (required) — type `integer`; minimum: 0. Credits charged for this request.
  - **version** (required) — type `string`; enum: v1. Public API version that served the response.

### Example JSON (found)

```json
{
  "data": {
    "lookupStatus": "found",
    "onDemand": {
      "id": 466716,
      "name": "PARIAH",
      "description": "As a story this is simple - the innocent and the evil juxtaposed, the herd behavior of the people bowing to suspect authority, the sway of cult beliefs governing society.  But, as in music, in which the lyric is often simple and near usele…",
      "type": "film",
      "url": "https://vimeo.com/ondemand/pariah",
      "domainUrl": null,
      "contentRating": [
        "violence"
      ],
      "theme": "vader",
      "colors": {
        "primary": "#121212",
        "secondary": "#6f7071"
      },
      "publish": {
        "active": true,
        "at": "2024-06-02T19:08:49.000Z"
      },
      "preorder": {
        "active": false,
        "at": null,
        "cancelAt": null,
        "publishAt": null
      },
      "rating": null,
      "poster": {
        "url": "https://i.vimeocdn.com/vod_poster/638543?sig=87d203d8d621dc9721e7fe276fc2bbc78d80f994f7264e05d33c7fa4f5a8d52e&v=1&region=us",
        "sizes": [
          {
            "width": 100,
            "height": 75,
            "url": "https://i.vimeocdn.com/vod_poster/638543_100x75?sig=87d203d8d621dc9721e7fe276fc2bbc78d80f994f7264e05d33c7fa4f5a8d52e&v=1&region=us"
          }
        ]
      },
      "thumbnail": {
        "url": "https://i.vimeocdn.com/vod_page_thumbnail/default",
        "sizes": [
          {
            "width": 100,
            "height": 75,
            "url": "https://i.vimeocdn.com/vod_page_thumbnail/default_100x75?&region=us"
          }
        ]
      },
      "background": null,
      "genres": [
        {
          "id": "drama",
          "name": "Drama",
          "canonical": "drama",
          "url": "https://vimeo.com/ondemand/browse/drama"
        }
      ],
      "rent": {
        "active": true,
        "prices": [
          {
            "currency": "AUD",
            "amount": 15.01
          }
        ],
        "url": "https://vimeo.com/ondemand/pariah",
        "period": "24 hour"
      },
      "buy": {
        "active": true,
        "prices": [
          {
            "currency": "AUD",
            "amount": 22.52
          }
        ],
        "url": "https://vimeo.com/ondemand/pariah",
        "period": null
      },
      "subscription": {
        "active": false,
        "prices": [],
        "url": null,
        "period": null
      },
      "episodes": {
        "rent": {
          "active": false,
          "prices": [],
          "url": null,
          "period": null
        },
        "buy": {
          "active": false,
          "prices": [],
          "url": null,
          "period": null
        }
      },
      "owner": {
        "id": 1866672,
        "name": "Jon Jost",
        "handle": "jonjost",
        "url": "https://vimeo.com/jonjost",
        "bio": "Been making films for  50+ years.  Travel a lot.  Live a lot.  Write. Do photography.  Paint.  Workaholic.",
        "shortBio": null,
        "location": "On the road",
        "website": "https://www.jonjost.wordpress.com/",
        "links": [
          {
            "name": null,
            "url": "https://www.jonjost.wordpress.com/",
            "type": "link"
          }
        ],
        "verified": true,
        "hasPublicVideos": null,
        "createdAt": "2009-06-07T02:34:14.000Z",
        "account": {
          "plus": null,
          "pro": null,
          "type": "pro"
        },
        "counts": {
          "videos": 201,
          "videosOnProfile": null,
          "appearances": 0,
          "likes": 2,
          "contacts": null,
          "showcases": 3,
          "channels": 0,
          "groups": 0,
          "followers": 620,
          "following": 2,
          "portfolios": 0
        },
        "avatar": {
          "small": "https://i.vimeocdn.com/portrait/3917702_30x30?sig=3a862b9026d29b33c31b8a300bbfca6b100b4daf62e74cf0e0e0e7f9ffc22a43&v=1&region=us",
          "medium": "https://i.vimeocdn.com/portrait/3917702_75x75?sig=3a862b9026d29b33c31b8a300bbfca6b100b4daf62e74cf0e0e0e7f9ffc22a43&v=1&region=us",
          "large": "https://i.vimeocdn.com/portrait/3917702_100x100?sig=3a862b9026d29b33c31b8a300bbfca6b100b4daf62e74cf0e0e0e7f9ffc22a43&v=1&region=us",
          "huge": "https://i.vimeocdn.com/portrait/3917702_300x300?sig=3a862b9026d29b33c31b8a300bbfca6b100b4daf62e74cf0e0e0e7f9ffc22a43&v=1&region=us",
          "base": "https://i.vimeocdn.com/portrait/3917702?sig=3a862b9026d29b33c31b8a300bbfca6b100b4daf62e74cf0e0e0e7f9ffc22a43&v=1&region=us",
          "portrait360": null
        },
        "profile": {
          "available": null,
          "isPrivate": null,
          "updatedAt": null,
          "socialLinks": [],
          "portraitLarge": null
        }
      },
      "film": {
        "id": 952707838,
        "name": "PARIAH",
        "description": "As a story this is simple - the innocent and the evil juxtaposed, the herd behavior of the people bowing to suspect authority, the sway of cult beliefs governing society.  But, as in music, in which the lyric is often simple and near usele…",
        "url": "https://vimeo.com/952707838",
        "durationSeconds": 6323,
        "width": 1920,
        "height": 820,
        "language": "bn"
      },
      "trailer": {
        "id": 952887536,
        "name": "pariah_ _খ্যাপা_ _official_trailer_ _a_film_by_riddhi_majumder (1080p)",
        "description": "As a story this is simple - the innocent and the evil juxtaposed, the herd behavior of the people bowing to suspect authority, the sway of cult beliefs governing society.  But, as in music, in which the lyric is often simple and near usele…",
        "url": "https://vimeo.com/952887536",
        "durationSeconds": 143,
        "width": 1920,
        "height": 1080,
        "language": "bn"
      },
      "counts": {
        "videos": 2,
        "genres": 1,
        "likes": 2,
        "comments": 0,
        "seasons": 1
      }
    }
  },
  "meta": {
    "requestId": "req_15a19cf5-15d0-4594-858b-c3831eac18a2",
    "creditsCharged": 1,
    "version": "v1"
  }
}
```

### Machine-readable error codes

When an error JSON body is returned, it may include one of these `error.code` values (derived from the OpenAPI schemas for this operation; additional codes may exist at runtime):

- `bad_request`

## Error handling & retries

Interpret HTTP status codes using the descriptions below. Do not assume a JSON body unless the OpenAPI schema defines one for that status.

- **400**: Invalid request **Retry:** Fix the request; retrying the same invalid payload will not help.
- **401**: Missing or invalid API key **Retry:** Fix the API key first; retrying without changes will not help.
- **402**: Insufficient credits **Retry:** Do not retry without resolving billing/credits (retrying the same request will not help).
- **500**: Unexpected or billing error
- **502**: Lookup could not be completed. **Retry:** May be transient; a few retries with backoff are reasonable.
- **503**: Service temporarily unavailable; safe to retry with backoff. **Retry:** Usually safe to retry with exponential backoff and jitter.

### Suggested client defaults

- Send the API key using the `x-api-key` header on every request.
- On `503` (and sometimes `502`), retry with backoff; cap retries and surface a clear error to the user.
- On `402`, surface an actionable billing message rather than blind retries.

## Examples

### TypeScript SDK

```typescript
import { SocialFetchClient } from "@socialfetch/sdk";

const client = new SocialFetchClient({
  apiKey: process.env.SOCIALFETCH_API_KEY!,
});

const result = await client.vimeo.getOnDemand({
  slug: "pariah",
});

if (!result.ok) {
  console.error(result.error);
} else {
  console.log(result.value.data);
}
```

### Node.js

```javascript
const response = await fetch(
  "https://api.socialfetch.dev/v1/vimeo/ondemand/pariah",
  {
    headers: {
      "x-api-key": "YOUR_API_KEY"
    }
  }
);

const data = await response.json();
console.log(data);
```

### cURL

```bash
curl "https://api.socialfetch.dev/v1/vimeo/ondemand/pariah" \
  -H "x-api-key: YOUR_API_KEY"
```

### Python

```python
import requests

response = requests.get(
    "https://api.socialfetch.dev/v1/vimeo/ondemand/pariah",
    headers={"x-api-key": "YOUR_API_KEY"},
)
data = response.json()
print(data)
```