Newscatcher Projects API

Operations to create, organize, and manage projects. A project is a named container for jobs, monitors, and datasets. Group related resources by use case, team, or client, and share them with teammates. Resources can be assigned at creation time or post-hoc.

OpenAPI Specification

newscatcher-projects-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Local News AggregationCount Projects API
  description: 'The Local News API provides access to local news articles with location-specific filtering capabilities.


    ## Standard endpoints


    - `/search`: Search articles by keywords with simple location filtering ("City, State" format).

    - `/latest_headlines`: Retrieve recent articles for specified locations and time periods.

    - `/search_by`: Retrieve articles by URL, ID, or RSS GUID.

    - `/sources`: List available news sources.


    ## Advanced endpoints


    - `/search/advanced`: Search with structured GeoNames filtering.

    - `/latest_headlines/advanced`: Latest headlines with structured GeoNames filtering.


    ## Features


    - Multiple location detection methods including dedicated sources, proximity analysis, and AI extraction

    - Natural language processing for sentiment analysis and entity recognition on original content and English translations

    - Article clustering for topic analysis

    - English translations for non-English content

    '
  termsOfService: https://newscatcherapi.com/terms-of-service
  contact:
    name: Maksym Sugonyaka
    email: maksym@newscatcherapi.com
    url: https://www.newscatcherapi.com/book-a-demo
  version: 1.2.0
servers:
- url: https://local-news.newscatcherapi.com
  description: Local News API production server
security:
- ApiKeyAuth: []
tags:
- name: Projects
  description: 'Operations to create, organize, and manage projects.


    A project is a named container for jobs, monitors, and datasets. Group

    related resources by use case, team, or client, and share them with

    teammates. Resources can be assigned at creation time or post-hoc.

    '
  externalDocs:
    description: Learn about projects and resource organization
    url: https://www.newscatcherapi.com/docs/web-search-api/guides-and-concepts/projects
paths:
  /catchAll/projects:
    post:
      tags:
      - Projects
      summary: Create project
      description: Creates a new project.
      operationId: createProject
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProjectRequestDto'
            example:
              name: AI M&A Tracking
              description: Tracks AI-related M&A activity for our investment team.
      responses:
        '201':
          $ref: '#/components/responses/CreateProjectResponse'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '422':
          $ref: '#/components/responses/ValidationError'
    get:
      tags:
      - Projects
      summary: List projects
      description: Returns all projects visible to the authenticated user.
      operationId: listProjects
      parameters:
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageSize'
      - name: search
        in: query
        required: false
        schema:
          type: string
        description: Filter by project name (case-insensitive substring match).
        example: M&A
      - $ref: '#/components/parameters/Ownership'
      responses:
        '200':
          $ref: '#/components/responses/ListProjectsResponse'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '422':
          $ref: '#/components/responses/ValidationError'
  /catchAll/projects/{project_id}:
    get:
      tags:
      - Projects
      summary: Get project
      description: Returns a single project by ID.
      operationId: getProject
      parameters:
      - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          $ref: '#/components/responses/ProjectResponse'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError'
    patch:
      tags:
      - Projects
      summary: Update project
      description: Updates the name or description of an existing project.
      operationId: updateProject
      parameters:
      - $ref: '#/components/parameters/ProjectId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateProjectRequestDto'
            example:
              name: AI M&A Tracking (Q2 2026)
      responses:
        '200':
          $ref: '#/components/responses/UpdateProjectResponse'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '422':
          $ref: '#/components/responses/ValidationError'
    delete:
      tags:
      - Projects
      summary: Delete project
      description: "Deletes a project. By default, assigned resources are unassigned but not deleted. \n"
      operationId: deleteProject
      parameters:
      - $ref: '#/components/parameters/ProjectId'
      - $ref: '#/components/parameters/DeleteResources'
      responses:
        '204':
          description: Project deleted successfully. No response body.
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError'
  /catchAll/projects/{project_id}/overview:
    get:
      tags:
      - Projects
      summary: Get project overview
      description: 'Returns resource counts for a project, grouped by type and status.


        For `jobs` and `monitors`, counts are broken down by status (for example, `completed`, `failed`). For `datasets` and `monitor_groups`, only a `total` count is returned.

        '
      operationId: getProjectOverview
      parameters:
      - $ref: '#/components/parameters/ProjectId'
      responses:
        '200':
          $ref: '#/components/responses/ProjectOverviewResponse'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError'
  /catchAll/projects/{project_id}/resources:
    post:
      tags:
      - Projects
      summary: Add resources to project
      description: 'Assigns one or more existing resources to a project in a single request.

        '
      operationId: addResourceToProject
      parameters:
      - $ref: '#/components/parameters/ProjectId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddResourceRequestDto'
            example:
              resources:
              - resource_type: job
                resource_id: 48421e16-1f50-4048-b62c-d3bc0789d30d
      responses:
        '200':
          $ref: '#/components/responses/AddResourceResponse'
        '201':
          $ref: '#/components/responses/AddResourceResponse'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError'
    get:
      tags:
      - Projects
      summary: List project resources
      description: Returns all resources assigned to a project, with optional filtering by type.
      operationId: listProjectResources
      parameters:
      - $ref: '#/components/parameters/ProjectId'
      - name: resource_type
        in: query
        required: false
        schema:
          $ref: '#/components/schemas/ProjectResourceType'
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageSize'
      responses:
        '200':
          $ref: '#/components/responses/ListProjectResourcesResponse'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError'
        '422':
          $ref: '#/components/responses/ValidationError'
  /catchAll/projects/{project_id}/resources/{resource_type}/{resource_id}:
    delete:
      tags:
      - Projects
      summary: Remove resource from project
      description: 'Removes a resource from a project. The resource itself is not

        deleted — it becomes unassigned and continues to exist.

        '
      operationId: removeResourceFromProject
      parameters:
      - $ref: '#/components/parameters/ProjectId'
      - name: resource_type
        in: path
        required: true
        schema:
          $ref: '#/components/schemas/ProjectResourceType'
      - name: resource_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
        description: ID of the resource to remove.
        example: 48421e16-1f50-4048-b62c-d3bc0789d30d
      responses:
        '200':
          $ref: '#/components/responses/RemoveResourceResponse'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '404':
          $ref: '#/components/responses/NotFoundError'
components:
  responses:
    NotFoundError:
      description: Job/monitor not found or results not available
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    ProjectOverviewResponse:
      description: Resource counts for the project, grouped by type and status.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProjectOverviewResponseDto'
          example:
            project_id: 60a85db4-78ec-4b78-876a-bc7d9cdadd04
            overview:
              jobs: {}
              monitors: {}
              datasets:
                total: 2
              monitor_groups:
                total: 0
    CreateProjectResponse:
      description: Project created successfully.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CreateProjectResponseDto'
          example:
            success: true
            message: Project created successfully.
            project_id: 60a85db4-78ec-4b78-876a-bc7d9cdadd04
            name: AI M&A Tracking
    ForbiddenError:
      description: Invalid or missing API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RemoveResourceResponse:
      description: Resource removed from the project.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RemoveResourceResponseDto'
          example:
            success: true
            message: Resource removed from project.
    ListProjectResourcesResponse:
      description: Paginated list of resources assigned to the project.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProjectResourceListResponseDto'
          example:
            total: 1
            page: 1
            page_size: 100
            total_pages: 1
            resources:
            - resource_type: job
              resource_id: 48421e16-1f50-4048-b62c-d3bc0789d30d
              name: Series B fintech funding rounds
              created_at: '2026-05-20T14:31:37Z'
              metadata: {}
    BadRequestError:
      description: 'Bad request - invalid parameters or constraint violations.


        Common causes: date ranges outside plan limits, invalid job state for continuation.

        '
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            date_validation:
              summary: Date outside plan limit
              value:
                detail: start_date must be >= 2025-02-05, your plan limited to lookback 365 days.
            invalid_continuation:
              summary: Invalid job continuation
              value:
                detail: New limit must be greater than the previous limit for this job.
    ValidationError:
      description: Validation error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ValidationErrorResponse'
    UpdateProjectResponse:
      description: Project updated successfully.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/UpdateProjectResponseDto'
          example:
            success: true
            message: Project updated successfully.
            project_id: 60a85db4-78ec-4b78-876a-bc7d9cdadd04
    ProjectResponse:
      description: Project details.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProjectResponseDto'
          example:
            success: true
            message: OK
            project_id: 60a85db4-78ec-4b78-876a-bc7d9cdadd04
            name: AI M&A Tracking
            description: Tracks AI-related M&A activity for our investment team.
            resources_count: 4
            created_at: '2026-05-20T14:31:35Z'
            updated_at: '2026-05-20T14:31:35Z'
    ListProjectsResponse:
      description: Paginated list of projects.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProjectListResponseDto'
          example:
            total: 2
            page: 1
            page_size: 100
            total_pages: 1
            projects:
            - project_id: 60a85db4-78ec-4b78-876a-bc7d9cdadd04
              name: AI M&A Tracking
              description: Tracks AI-related M&A activity.
              resources_count: 4
              created_at: '2026-05-20T14:31:35Z'
              updated_at: '2026-05-20T14:31:35Z'
    AddResourceResponse:
      description: 'One or more resources added to the project (`201`), or all were already present (`200`).

        '
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/AddResourceResponseDto'
          example:
            success: true
            message: Resources added to project.
            results:
            - resource_type: job
              resource_id: 48421e16-1f50-4048-b62c-d3bc0789d30d
              success: true
              message: Resource added to project.
              already_exists: false
  schemas:
    ProjectOverviewResponseDto:
      type: object
      required:
      - project_id
      - overview
      properties:
        project_id:
          type: string
          format: uuid
          description: Project identifier.
          example: 60a85db4-78ec-4b78-876a-bc7d9cdadd04
        overview:
          type: object
          description: Resource counts grouped by type.
          required:
          - jobs
          - monitors
          - datasets
          - monitor_groups
          properties:
            jobs:
              $ref: '#/components/schemas/ProjectOverviewCountsDto'
            monitors:
              $ref: '#/components/schemas/ProjectOverviewCountsDto'
            datasets:
              $ref: '#/components/schemas/ProjectOverviewCountsDto'
            monitor_groups:
              $ref: '#/components/schemas/ProjectOverviewCountsDto'
    RemoveResourceResponseDto:
      type: object
      required:
      - success
      - message
      properties:
        success:
          type: boolean
          description: True if the operation succeeded; false otherwise.
          example: true
        message:
          type: string
          description: Human-readable result message.
          example: Resource removed from project.
    ValidationErrorDetail:
      type: object
      properties:
        loc:
          type: array
          items:
            oneOf:
            - type: string
            - type: integer
          description: Location of the validation error
        msg:
          type: string
          description: Error message
        type:
          type: string
          description: Error type
    ProjectResponseDto:
      type: object
      required:
      - success
      - message
      - project_id
      - name
      properties:
        success:
          type: boolean
          description: True if the operation succeeded; false otherwise.
          example: true
        message:
          type: string
          description: Human-readable result message.
          example: OK
        project_id:
          type: string
          format: uuid
          description: Project identifier.
          example: 60a85db4-78ec-4b78-876a-bc7d9cdadd04
        name:
          type: string
          description: Project name.
          example: AI M&A Tracking
        description:
          type:
          - string
          - 'null'
          description: Project description.
          example: Tracks AI-related M&A activity for our investment team.
        resources_count:
          type: integer
          description: Number of resources assigned to this project.
          example: 4
          default: 0
        created_at:
          type: string
          format: date-time
          description: Project creation timestamp.
          example: '2026-05-20T14:31:35Z'
        updated_at:
          type: string
          format: date-time
          description: Timestamp of the last update.
          example: '2026-05-20T14:31:35Z'
    ResourceResultDto:
      type: object
      required:
      - resource_type
      - resource_id
      - success
      - message
      properties:
        resource_type:
          type: string
          description: Type of the resource.
          example: job
        resource_id:
          type: string
          format: uuid
          description: Resource identifier.
          example: 48421e16-1f50-4048-b62c-d3bc0789d30d
        success:
          type: boolean
          description: True if this resource was processed successfully.
          example: true
        message:
          type: string
          description: Per-resource result message.
          example: Resource added to project.
        already_exists:
          type: boolean
          description: True if the resource is already assigned to this project.
          default: false
          example: false
    ProjectResourceType:
      type: string
      enum:
      - job
      - monitor
      - dataset
      - monitor_group
      description: 'Resource type for project association.

        '
    ProjectSummaryDto:
      type: object
      description: Abbreviated project object returned in list responses.
      required:
      - project_id
      - name
      properties:
        project_id:
          type: string
          format: uuid
          description: Project identifier.
          example: 60a85db4-78ec-4b78-876a-bc7d9cdadd04
        name:
          type: string
          description: Project name.
          example: AI M&A Tracking
        description:
          type:
          - string
          - 'null'
          description: Project description.
          example: Tracks AI-related M&A activity for our investment team.
        resources_count:
          type: integer
          description: Number of resources assigned to this project.
          example: 4
          default: 0
        created_at:
          type: string
          format: date-time
          description: Project creation timestamp.
          example: '2026-05-20T14:31:35Z'
        updated_at:
          type: string
          format: date-time
          description: Timestamp of the last update.
          example: '2026-05-20T14:31:35Z'
    ResourceItemDto:
      type: object
      required:
      - resource_type
      - resource_id
      properties:
        resource_type:
          $ref: '#/components/schemas/ProjectResourceType'
        resource_id:
          type: string
          format: uuid
          description: ID of the resource to add.
          example: 48421e16-1f50-4048-b62c-d3bc0789d30d
    ValidationErrorResponse:
      type: object
      properties:
        detail:
          type: array
          items:
            $ref: '#/components/schemas/ValidationErrorDetail'
    UpdateProjectRequestDto:
      type: object
      description: Updates one or more fields of an existing project. At least one field must be provided.
      properties:
        name:
          type: string
          minLength: 1
          description: New name for the project.
          example: AI M&A Tracking (Q2)
        description:
          type: string
          description: New description for the project.
          example: Updated scope to include private equity.
    ProjectResourceDto:
      type: object
      description: A resource assigned to a project.
      required:
      - resource_type
      - resource_id
      properties:
        resource_type:
          $ref: '#/components/schemas/ProjectResourceType'
        resource_id:
          type: string
          format: uuid
          description: Resource identifier.
          example: 48421e16-1f50-4048-b62c-d3bc0789d30d
        name:
          type: string
          description: 'Resource display name. For jobs, this is the original query

            string. For monitors and datasets, this is the resource name.

            '
          example: Series B fintech funding rounds
        created_at:
          type: string
          format: date-time
          description: Resource creation timestamp.
          example: '2026-05-20T14:31:37Z'
        metadata:
          type: object
          description: Additional resource-specific metadata.
          additionalProperties: true
          example: {}
    ProjectResourceListResponseDto:
      type: object
      required:
      - total
      - page
      - page_size
      - total_pages
      - resources
      properties:
        total:
          type: integer
          description: Total number of resources assigned to the project.
          example: 1
        page:
          type: integer
          description: Current page number.
          example: 1
        page_size:
          type: integer
          description: Number of resources per page.
          example: 100
        total_pages:
          type: integer
          description: Total number of pages.
          example: 1
        resources:
          type: array
          items:
            $ref: '#/components/schemas/ProjectResourceDto'
          description: Resources on this page.
    Error:
      type: object
      properties:
        detail:
          type: string
          description: Error message.
          example: Invalid API key
    CreateProjectRequestDto:
      type: object
      required:
      - name
      properties:
        name:
          type: string
          minLength: 1
          description: Name for the project.
          example: AI M&A Tracking
        description:
          type: string
          description: Optional description.
          example: Tracks AI-related M&A activity for our investment team.
    ProjectListResponseDto:
      type: object
      required:
      - total
      - page
      - page_size
      - total_pages
      - projects
      properties:
        total:
          type: integer
          description: Total number of projects matching the filter criteria.
          example: 2
        page:
          type: integer
          description: Current page number.
          example: 1
        page_size:
          type: integer
          description: Number of projects per page.
          example: 100
        total_pages:
          type: integer
          description: Total number of pages.
          example: 1
        projects:
          type: array
          items:
            $ref: '#/components/schemas/ProjectSummaryDto'
          description: Projects on this page.
    UpdateProjectResponseDto:
      type: object
      required:
      - success
      - message
      - project_id
      properties:
        success:
          type: boolean
          description: True if the operation succeeded; false otherwise.
          example: true
        message:
          type: string
          description: Human-readable result message.
          example: Project updated successfully.
        project_id:
          type: string
          format: uuid
          description: Project identifier.
          example: 60a85db4-78ec-4b78-876a-bc7d9cdadd04
    ProjectOverviewCountsDto:
      type: object
      description: 'Status breakdown for a single resource type.

        '
      additionalProperties: true
    AddResourceRequestDto:
      type: object
      required:
      - resources
      properties:
        resources:
          type: array
          minItems: 1
          description: Resources to assign to the project.
          items:
            $ref: '#/components/schemas/ResourceItemDto'
    CreateProjectResponseDto:
      type: object
      required:
      - success
      - message
      - project_id
      - name
      properties:
        success:
          type: boolean
          description: True if the operation succeeded; false otherwise.
          example: true
        message:
          type: string
          description: Human-readable result message.
          example: Project created successfully.
        project_id:
          type: string
          format: uuid
          description: Project identifier.
          example: 60a85db4-78ec-4b78-876a-bc7d9cdadd04
        name:
          type: string
          description: Name of the created project.
          example: AI M&A Tracking
    AddResourceResponseDto:
      type: object
      required:
      - success
      - message
      - results
      properties:
        success:
          type: boolean
          description: True if the overall operation succeeded.
          example: true
        message:
          type: string
          description: Top-level result message.
          example: Resources added to project.
        results:
          type: array
          description: Per-resource outcome, one entry per submitted resource.
          items:
            $ref: '#/components/schemas/ResourceResultDto'
    OwnershipFilter:
      type: string
      enum:
      - all
      - own
      - shared
      default: all
      description: "Controls which resources are returned based on ownership.\n\n- `all`: Returns resources owned by the user and resources shared\n  with them (default, backward compatible).\n- `own`: Returns only resources created by the authenticated user.\n- `shared`: Returns only resources shared with the user by others.\n"
  parameters:
    Page:
      name: page
      in: query
      required: false
      schema:
        type: integer
        default: 1
        minimum: 1
      description: 'Page number to retrieve.

        '
    ProjectId:
      name: project_id
      in: path
      required: true
      description: Unique project identifier.
      schema:
        type: string
        format: uuid
      example: 60a85db4-78ec-4b78-876a-bc7d9cdadd04
    Ownership:
      name: ownership
      in: query
      required: false
      schema:
        $ref: '#/components/schemas/OwnershipFilter'
    DeleteResources:
      name: delete_resources
      in: query
      required: false
      description: 'If true, permanently deletes all resources (jobs, monitors, datasets) assigned to the project. If false, the project is deleted and its resources are unassigned but not deleted.

        '
      schema:
        type: boolean
        default: false
    PageSize:
      name: page_size
      in: query
      required: false
      schema:
        type: integer
        default: 100
        minimum: 1
        maximum: 1000
      description: 'Number of records per page.

        '
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-token
      description: "API Key to authenticate requests.\n\nTo access the API, include your API key in the `x-api-token` header. \nTo obtain your API key, complete the [form](https://www.newscatcherapi.com/book-a-demo) or contact us directly.\n"
externalDocs:
  description: Find out more about Local News API
  url: https://www.newscatcherapi.com/docs/local-news-api/get-started/introduction