Opal Stories API

The Stories API from Opal — 6 operation(s) for stories.

Operations 10

GET /budgets/stories/{story_id} Get a budget associated with a Story. #
POST /budgets/stories/{story_id} Create a budget for a Story. #
DELETE /budgets/stories/{budget_id} Delete the budget with the given Id. #
GET /stories/v2/{story_id} Find a Story by ID #
PATCH /stories/v2/{story_id} Update the specified story #
GET /stories/v2 Get a collection of stories #
POST /stories/v2 Create a story #
GET /stories/v3/{story_id} Get a story by ID #
PATCH /stories/v3/{story_id} Update the specified Story #
POST /stories/v3/{story_id}/migrate_moments Migrate moments from a story to plans and/or boards #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/opal-stories-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

opal-stories-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Opal Stories API
  license:
    name: Opal API License
    url: https://www.workwithopal.com/api-license
  version: '1.0'
  description: 'Operations tagged Stories across 2 of this provider''s published API definitions: opal-v2-openapi.yml, opal-v3-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://login.ouropal.com
tags:
- name: Stories
paths:
  /budgets/stories/{story_id}:
    get:
      tags:
      - Stories
      operationId: ReadBudgetV0
      summary: Get a budget associated with a Story.
      security:
      - oauth2:
        - offline_access
      - api_key:
        - Session-Token
      description: "NOTE: When the Story exists but has no budget,\n  status 200 with an empty body will be returned instead of 404.\n"
      parameters:
      - name: story_id
        in: path
        description: ID of a story
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: The requested budget.
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    title: budget
                    type: object
                    required:
                    - id
                    - type
                    - attributes
                    - relationships
                    additionalProperties: false
                    properties:
                      id:
                        type: string
                        pattern: ^[0-9]+$
                      type:
                        type: string
                        enum:
                        - budget
                      attributes:
                        type: object
                        required:
                        - value
                        additionalProperties: false
                        properties:
                          value:
                            type: number
                            description: The value to assign to the budget.
                          post_spend:
                            type:
                            - number
                            - 'null'
                          moment_spend:
                            type:
                            - number
                            - 'null'
                          story_allocation:
                            type:
                            - number
                            - 'null'
                          moment_allocation:
                            type:
                            - number
                            - 'null'
                          content_type:
                            type:
                            - string
                            - 'null'
                      relationships:
                        type: object
                        required:
                        - opal
                        - story
                        additionalProperties: false
                        properties:
                          opal:
                            type: object
                            required:
                            - data
                            additionalProperties: false
                            properties:
                              data:
                                type: object
                                required:
                                - id
                                - type
                                additionalProperties: false
                                properties:
                                  id:
                                    type: string
                                  type:
                                    type: string
                                    enum:
                                    - opal
                          story:
                            type: object
                            required:
                            - data
                            additionalProperties: false
                            properties:
                              data:
                                type:
                                - object
                                - 'null'
                                required:
                                - id
                                - type
                                additionalProperties: false
                                properties:
                                  id:
                                    type: string
                                  type:
                                    type: string
                                    enum:
                                    - story
                          moment:
                            type: object
                            required:
                            - data
                            additionalProperties: false
                            properties:
                              data:
                                type:
                                - object
                                - 'null'
                                required:
                                - id
                                - type
                                additionalProperties: false
                                properties:
                                  id:
                                    type: string
                                  type:
                                    type: string
                                    enum:
                                    - moment
                          post:
                            type: object
                            required:
                            - data
                            additionalProperties: false
                            properties:
                              data:
                                type:
                                - object
                                - 'null'
                                required:
                                - id
                                - type
                                additionalProperties: false
                                properties:
                                  id:
                                    type: string
                                  type:
                                    type: string
                                    enum:
                                    - content
              example:
                data:
                  id: '1'
                  type: budget
                  attributes:
                    id: 1
                    value: 30000
                    post_spend: null
                    moment_spend: null
                    story_allocation: null
                    moment_allocation: null
                    content_type: budget
                  relationships:
                    opal:
                      data:
                        id: '1'
                        type: opal
                    story:
                      data:
                        id: '3'
                        type: story
                    moment:
                      data: null
                    post:
                      data: null
        '404':
          description: Story not found
          content:
            application/json:
              x-not-json-api: true
              schema:
                type: object
                required:
                - error
                properties:
                  error:
                    type: string
    post:
      tags:
      - Stories
      operationId: CreateBudgetV0
      summary: Create a budget for a Story.
      security:
      - oauth2:
        - offline_access
      - api_key:
        - Session-Token
      description: ''
      parameters:
      - name: story_id
        in: path
        description: ID of a story
        required: true
        schema:
          type: integer
      requestBody:
        content:
          application/json:
            x-not-json-api: true
            schema:
              type: object
              required:
              - budget
              properties:
                budget:
                  type: object
                  required:
                  - value
                  properties:
                    value:
                      type: number
      responses:
        '200':
          description: The budget has been created
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    title: budget
                    type: object
                    required:
                    - id
                    - type
                    - attributes
                    - relationships
                    additionalProperties: false
                    properties:
                      id:
                        type: string
                        pattern: ^[0-9]+$
                      type:
                        type: string
                        enum:
                        - budget
                      attributes:
                        type: object
                        required:
                        - value
                        additionalProperties: false
                        properties:
                          value:
                            type: number
                            description: The value to assign to the budget.
                          post_spend:
                            type:
                            - number
                            - 'null'
                          moment_spend:
                            type:
                            - number
                            - 'null'
                          story_allocation:
                            type:
                            - number
                            - 'null'
                          moment_allocation:
                            type:
                            - number
                            - 'null'
                          content_type:
                            type:
                            - string
                            - 'null'
                      relationships:
                        type: object
                        required:
                        - opal
                        - story
                        additionalProperties: false
                        properties:
                          opal:
                            type: object
                            required:
                            - data
                            additionalProperties: false
                            properties:
                              data:
                                type: object
                                required:
                                - id
                                - type
                                additionalProperties: false
                                properties:
                                  id:
                                    type: string
                                  type:
                                    type: string
                                    enum:
                                    - opal
                          story:
                            type: object
                            required:
                            - data
                            additionalProperties: false
                            properties:
                              data:
                                type:
                                - object
                                - 'null'
                                required:
                                - id
                                - type
                                additionalProperties: false
                                properties:
                                  id:
                                    type: string
                                  type:
                                    type: string
                                    enum:
                                    - story
                          moment:
                            type: object
                            required:
                            - data
                            additionalProperties: false
                            properties:
                              data:
                                type:
                                - object
                                - 'null'
                                required:
                                - id
                                - type
                                additionalProperties: false
                                properties:
                                  id:
                                    type: string
                                  type:
                                    type: string
                                    enum:
                                    - moment
                          post:
                            type: object
                            required:
                            - data
                            additionalProperties: false
                            properties:
                              data:
                                type:
                                - object
                                - 'null'
                                required:
                                - id
                                - type
                                additionalProperties: false
                                properties:
                                  id:
                                    type: string
                                  type:
                                    type: string
                                    enum:
                                    - content
              example:
                data:
                  id: '1'
                  type: budget
                  attributes:
                    id: 1
                    value: 30000
                    post_spend: null
                    moment_spend: null
                    story_allocation: null
                    moment_allocation: null
                    content_type: budget
                  relationships:
                    opal:
                      data:
                        id: '1'
                        type: opal
                    story:
                      data:
                        id: '3'
                        type: story
                    moment:
                      data: null
                    post:
                      data: null
        '404':
          description: Story not found
          content:
            application/json:
              x-not-json-api: true
              schema:
                type: object
                required:
                - error
                properties:
                  error:
                    type: string
        '422':
          description: The Story already has a budget.
          content:
            application/json:
              x-not-json-api: true
              schema:
                type: object
                required:
                - error
                properties:
                  error:
                    type: string
    servers:
    - url: https://login.ouropal.com
  /budgets/stories/{budget_id}:
    delete:
      tags:
      - Stories
      operationId: DeleteBudgetV0
      summary: Delete the budget with the given Id.
      security:
      - oauth2:
        - offline_access
      - api_key:
        - Session-Token
      description: ''
      parameters:
      - name: budget_id
        in: path
        description: ID of a budget
        required: true
        schema:
          type: integer
      responses:
        '204':
          description: The budget was successfully deleted.
    servers:
    - url: https://login.ouropal.com
  /stories/v2/{story_id}:
    get:
      tags:
      - Stories
      operationId: ReadStoryV2
      summary: Find a Story by ID
      security:
      - oauth2:
        - offline_access
      - api_key:
        - Session-Token
      parameters:
      - name: story_id
        in: path
        required: true
        description: The ID of the Story
        schema:
          type: string
      responses:
        '200':
          description: A Story
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    title: story
                    type: object
                    required:
                    - id
                    - type
                    - attributes
                    additionalProperties: false
                    properties:
                      id:
                        type: string
                        pattern: ^[0-9]+$
                      type:
                        type: string
                        enum:
                        - story
                      attributes:
                        type: object
                        required:
                        - asset_references_count
                        - color
                        - created_at
                        - description
                        - is_shared
                        - is_visible
                        - legacy_is_private
                        - members_count
                        - moments_count
                        - name
                        - scheduled_end_at
                        - scheduled_start_at
                        - strategies_count
                        - updated_at
                        - uuid
                        additionalProperties: false
                        properties:
                          scheduled_start_at:
                            type: string
                            description: An ISO8601 date-time. Formatted as an 'Internet Date/Time' (RFC 3339).
                          scheduled_end_at:
                            type: string
                            description: An ISO8601 date-time. Formatted as an 'Internet Date/Time' (RFC 3339).
                          name:
                            type: string
                          color:
                            type:
                            - string
                            - 'null'
                            description: A hex color value with the '#' prefix.
                          asset_references_count:
                            type:
                            - integer
                            - 'null'
                          created_at:
                            type: string
                            description: An ISO8601 date-time. Formatted as an 'Internet Date/Time' (RFC 3339).
                            format: date-time
                            readOnly: true
                          description:
                            type:
                            - string
                            - 'null'
                          is_shared:
                            type:
                            - boolean
                            - 'null'
                          is_visible:
                            type:
                            - boolean
                            - 'null'
                          legacy_is_private:
                            type:
                            - boolean
                            - 'null'
                          members_count:
                            type:
                            - integer
                            - 'null'
                          moments_count:
                            type:
                            - integer
                            - 'null'
                            description: Number of Moments created on this Story
                          strategies_count:
                            type:
                            - integer
                            - 'null'
                          updated_at:
                            type: string
                            description: An ISO8601 date-time. Formatted as an 'Internet Date/Time' (RFC 3339).
                            format: date-time
                            readOnly: true
                          uuid:
                            type:
                            - string
                            - 'null'
                      relationships:
                        type: object
                        additionalProperties: false
                        properties:
                          opal:
                            type: object
                            required:
                            - data
                            additionalProperties: false
                            properties:
                              data:
                                type: object
                                required:
                                - id
                                - type
                                additionalProperties: false
                                properties:
                                  id:
                                    type: string
                                  type:
                                    type: string
                                    enum:
                                    - opal
                          brand:
                            type: object
                            required:
                            - data
                            additionalProperties: false
                            properties:
                              data:
                                type:
                                - object
                                - 'null'
                                required:
                                - id
                                - type
                                additionalProperties: false
                                properties:
                                  id:
                                    type: string
                                  type:
                                    type: string
                                    enum:
                                    - brand
                          user:
                            type: object
                            required:
                            - data
                            additionalProperties: false
                            properties:
                              data:
                                type:
                                - object
                                - 'null'
                                required:
                                - id
                                - type
                                additionalProperties: false
                                properties:
                                  id:
                                    type: string
                                  type:
                                    type: string
                                    enum:
                                    - user
                          brands:
                            description: An array of Brand Ids stored on key 'shared_on_brand_ids'
                            type: object
                            required:
                            - data
                            additionalProperties: false
                            properties:
                              data:
                                type: array
                                items:
                                  type: object
                                  required:
                                  - id
                                  - type
                                  additionalProperties: false
                                  properties:
                                    id:
                                      type: string
                                    type:
                                      type: string
                                      enum:
                                      - brand
                          primary_label:
                            type: object
                            required:
                            - data
                            additionalProperties: false
                            properties:
                              data:
                                type:
                                - object
                                - 'null'
                                required:
                                - id
                                - type
                                additionalProperties: false
                                properties:
                                  id:
                                    type: string
                                  type:
                                    type: string
                                    enum:
                                    - label
                          labels:
                            type: object
                            required:
                            - data
                            additionalProperties: false
                            properties:
                              data:
                                type: array
                                items:
                                  type: object
                                  required:
                                  - id
                                  - type
                                  additionalProperties: false
                                  properties:
                                    id:
                                      type: string
                                    type:
                                      type: string
                                      enum:
                                      - label
              example:
                data:
                  id: '3'
                  type: story
                  attributes:
                    id: 3
                    asset_references_count: 10
                    color: 6f7d8a
                    created_at: '2019-11-13T18:14:56.166-08:00'
                    description: null
                    is_shared: false
                    is_visible: true
                    legacy_is_private: false
                    members_count: 2
                    moments_count: 2
                    name: Vernon Brown 3
                    scheduled_end_at: '2019-12-13T00:00:00.000-08:00'
                    scheduled_start_at: '2019-11-12T00:00:00.000-08:00'
                    strategies_count: 0
                    updated_at: '2019-11-13T18:40:50.112-08:00'
                    uuid: dc68d20c-3dd9-48f0-a8c5-8dd7b170ba99
                  relationships:
                    primary_label:
                      data:
                        id: '3'
                        type: label
                    opal:
                      data:
                        id: '1'
                        type: opal
                    brand:
                      data:
                        id: '1'
                        type: brand
                    user:
                      data:
                        id: '7'
                        type: user
                    brands:
                      data:
                      - id: '1'
                        type: brand
        '404':
          description: Not found
          content:
            application/json:
              schema:
                type: object
                required:
                - errors
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        status:
                          type: string
                        title:
                          type: string
                        detail:
                          type: string
                      required:
                      - status
    patch:
      tags:
      - Stories
      operationId: UpdateStoryV2
      summary: Update the specified story
      security:
      - oauth2:
        - offline_access
      - api_key:
        - Session-Token
      parameters:
      - name: story_id
        in: path
        required: true
        description: The ID of the Story
        schema:
          type: string
      requestBody:
        content:
          application/json:
            x-not-json-api: true
            schema:
              type: object
              required:
              - data
              properties:
                data:
                  type: object
                  required:
                  - id
                  - type
                  properties:
                    id:
                      type: string
                    type:
                      type: string
                      enum:
                      - story
                    attributes:
                      type: object
                      properties:
                        description:
                          type:
                          - string
                          - 'null'
                          description: A description of the Story.
                        name:
                          type: string
                          description: The name of the Story.
                        scheduled_start_at:
                          type: string
                          format: date-time
                          description: 'An ISO8601 date-time. The date and time when the Story begins.

                            '
                        scheduled_end_at:
                          type: string
                          format: date-time
                          description: 'An ISO8601 date-time. The date and time when the Story ends.

                            '
                    relationships:
                      type: object
                      properties:
                        brand:
                          type: object
                          required:
                          - data
                          additionalProperties: false
                          properties:
                            data:
                              type: object
                              required:
                              - id
                              - type
                              additionalProperties: false
                              properties:
                                id:
                                  type: string
                                type:
                                  type: string
                                  enum:
                                  - brand
                        labels:
                          type: object
                          required:
                          - data
                          additionalProperties: false
                          properties:
                            data:
                              type: array
                              items:
                                type: object
                                required:
                                - id
                                - type
                                additionalProperties: false
                                properties:
                                  id:
                                    type: string
                                  type:
                                    type: string
                                    enum:
                                    - label
      responses:
        '200':
          description: The story has been updated
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    title: story
                    type: object
                    required:
                    - id
                    - type
                    - attributes
                    additionalProperties:

# --- truncated at 32 KB (143 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/opal/refs/heads/main/openapi/opal-stories-api-openapi.yml