# Read a brand's sources

`POST https://api.endless.app/users/{user_id}/brand-source`

Source: https://endless.app/docs/api/users/brand-source

What a website (its text, the social profiles it links to, its Instagram account) or an Instagram account says about a brand — the material the onboarding extraction reads. `brand_source_unreadable` when nothing usable came back. Not charged.

## Authentication

- `bearerAuth`: HTTP bearer (JWT)

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `user_id` | path | string | yes |  |
| `Endless-Api-Version` | header | string | no | Pin the caller to an API major (`1`). Omit to accept the current version. A major this deployment cannot serve is refused with 400 `unsupported_api_version`. |

## Request body

Required.

Content type: `application/json` — object

- `source` (object, required)
- `organization_id` (string): The workspace to attribute the provider calls to.

## Responses

### 200 OK

Content type: `application/json` — object

- `pages` (array<object>, required)
  - `url` (string, required)
  - `title` (string, required)
  - `text` (string, required)
- `socials` (array<object>, required)
  - `platform` (string, required)
  - `handle` (string, required)
  - `url` (string | null, required)
- `instagram` (object | null, required)
  - `profile` (object, required)
    - `pk` (string)
    - `id` (string)
    - `username` (string)
    - `full_name` (string)
    - `biography` (string)
    - `is_verified` (boolean)
    - `is_private` (boolean)
    - `follower_count` (number)
    - `following_count` (number)
    - `media_count` (number)
    - `category` (string)
    - `external_url` (string)
    - `profile_pic_url` (string)
    - `city_name` (string)
  - `posts` (array<object>, required)
    - `url` (string, required)
    - `caption` (string, required)
    - `pinned` (boolean, required)

### Errors

- `400` (Error): The request is malformed, or failed input validation. `message` names the field and the rule it broke; `data.issues` carries them individually.
- `401` (Error): No bearer token, or a token that failed verification.
- `402` (Error): The workspace has no credits left, or the caller is over a spending limit.
- `403` (Error): Authenticated, but the caller's role in this workspace does not carry the permission this operation needs.
- `404` (Error): No resource with that id, or the caller cannot read it. The two are deliberately one answer, so an id cannot be probed for existence.
- `409` (Error): The request is well-formed, but the resource's current state forbids it — a taken name, a last admin, a limit already reached.
- `429` (Error): The caller has spent its rate-limit window. `Retry-After` says when to come back.
- `500` (Error): The request failed on our side. Safe to retry an idempotent operation with backoff.
