---
title: "Create collection"
method: POST
path: "/collections"
tags: ["Collections"]
---

# Create collection

`POST /collections`

## Request

- Base URL: `https://studio.fintechstudios.com/api/v1`
- URL: `https://studio.fintechstudios.com/api/v1/collections`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer

Create a new multi-source news collection. Defaults to type 'news'. Available types: news, stock_portfolio (beta), regulatory (beta). Types crypto and prediction_markets are coming soon and will return a validation error.

## Request body

- object
  - `name` string, required
  - `description` string
  - `type` 'news' | 'stock_portfolio' | 'regulatory'
  - `sources` object[], required
    - `provider_id` 'news' | 'web', required: Source category: 'news' for curated news sources, 'web' for web search
    - `weight` integer
    - `is_active` boolean
  - `global_filters` object
    - `query` string
    - `keywords` string[]
    - `entities` object[]
      - `type` string
      - `name` string
    - `date_range` object
      - `relative` string
      - `start` string
      - `end` string
    - `sentiment` object
      - `min` number
      - `max` number
    - `regions` string[]
    - `exclude_terms` string[]
  - `merge_strategy` object
    - `type` 'date' | 'priority' | 'interleave'
  - `deduplication_rules` object
    - `enabled` boolean
    - `strategy` 'url' | 'title_similarity' | 'content_hash'
  - `refresh_interval` integer: Auto-refresh interval in minutes
  - `max_articles_per_refresh` integer: Default result cap for every execute of this collection, used when the request omits max_articles. Omit for unbounded within the window.
  - `type_config` object: Type-specific configuration (e.g., stock holdings)

## Response `201`

Collection created

- object
  - `data` CollectionDetail
    - `id` string
    - `name` string
    - `description` string, nullable
    - `type` 'news' | 'stock_portfolio' | 'regulatory' | 'crypto' | 'prediction_markets'
    - `sources` object[]
      - `provider_id` string
      - `weight` integer
      - `is_active` boolean
      - `priority` integer
      - `max_results` integer, nullable
      - `fts_channel_id` integer, nullable: Saved FTS channel supplying this source's filters. Applies to the FTS provider only; global_filters are ANDed on top of it.
    - `global_filters` object
      - `query` string, nullable
      - `keywords` string[], nullable
      - `entities` object[], nullable
        - `type` string
        - `name` string
      - `date_range` object, nullable
        - `start` string
        - `end` string
        - `relative` string
      - `sentiment` object, nullable
        - `min` number
        - `max` number
      - `regions` string[], nullable
      - `exclude_terms` string[], nullable
    - `merge_strategy` object
      - `type` 'date' | 'priority' | 'interleave'
    - `deduplication_rules` object
      - `enabled` boolean
      - `strategy` 'url' | 'title_similarity' | 'content_hash'
    - `refresh_interval` integer, nullable: Auto-refresh interval in minutes (5-1440)
    - `max_articles_per_refresh` integer, nullable: Result cap this collection executes under when a request does not pass max_articles. Null means unbounded within the window.
    - `is_active` boolean
    - `type_config` object, nullable
    - `last_executed_at` string, date-time, nullable
    - `created_at` string, date-time
    - `updated_at` string, date-time
  - `meta` Meta
    - `request_id` string
    - `credits_used` integer
    - `credits_remaining` integer
    - `rate_limit` object
      - `limit` integer
      - `remaining` integer
      - `reset` integer

## Other responses

- `400`: Validation error
- `401`: Invalid API key

---

[API](https://skmtc.dev/fintechstudios/apis/fts-studio-api.md) · [All operations](https://skmtc.dev/fintechstudios/apis/fts-studio-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fintechstudios/apis/fts-studio-api/revisions/4886597d1d96?raw)
