Opal Moments API

The Moments API from Opal — 6 operation(s) for moments.

Operations 12

POST /asgard-bff/moments/add_to_boards Add multiple moments to multiple boards #
POST /asgard-bff/moments/add_to_plan Add multiple moments to a plan #
GET /moments/v2 Return all moments available to the authenticated user. #
POST /moments/v2 Create a new public or private moment. #
GET /moments/v2/{moment_id} Return the specified Moment #
PATCH /moments/v2/{moment_id} Update the specified Moment #
DELETE /moments/v2/{moment_id} Delete the specified Moment #
GET /moments/v3 Return all moments available to the authenticated user. #
POST /moments/v3 Create a new public or private moment. #
GET /moments/v3/{moment_id} Return the specified Moment #
PATCH /moments/v3/{moment_id} Update the specified Moment #
DELETE /moments/v3/{moment_id} Delete the specified Moment #

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-moments-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-moments-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Opal Moments API
  license:
    name: Opal API License
    url: https://www.workwithopal.com/api-license
  version: '1.0'
  description: 'Operations tagged Moments across 3 of this provider''s published API definitions: opal-asgard-bff-openapi.yml, 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: Moments
paths:
  /asgard-bff/moments/add_to_boards:
    post:
      tags:
      - Moments
      operationId: MomentsAddToBoardsBFFV1
      summary: Add multiple moments to multiple boards
      description: 'Adds multiple moments to multiple boards by creating board_objects. Also

        supports removing moments from boards, and associating moments with the

        default story of a board.


        Internally, this wraps a bulk operation request. A successful 200 response

        indicates that the overall bulk_operation has completed, while partial

        success/failure for sub-operations may have occurred.


        A 202 response indicates that the bulk operation has been successfully

        started, and is being processed asynchronously.

        '
      security:
      - oauth2:
        - offline_access
      - api_key:
        - Session-Token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - data
              properties:
                data:
                  type: object
                  required:
                  - type
                  - attributes
                  properties:
                    type:
                      type: string
                      enum:
                      - add_to_boards
                    attributes:
                      type: object
                      required:
                      - moments
                      properties:
                        moments:
                          type: array
                          items:
                            type: object
                            required:
                            - id
                            - board_ids
                            - delete_board_object_ids
                            properties:
                              id:
                                type: string
                                format: uuid
                              board_ids:
                                type: array
                                items:
                                  type: string
                                  format: uuid
                              delete_board_object_ids:
                                type: array
                                items:
                                  type: string
                                  format: uuid
                              story_id:
                                type: string
                                format: uuid
            example:
              data:
                type: add_to_boards
                attributes:
                  moments:
                  - id: 9b2e0fd6-76c0-4c21-af5b-7a58b118665d
                    board_ids:
                    - 2b457b63-f44b-457b-80cf-45d7af5ceedc
                    delete_board_object_ids:
                    - bccc3d21-7bee-4936-bbe0-d53ab19f117a
                  - id: 48e50fa7-1a23-4a9b-aadb-7a4fe4110a20
                    board_ids:
                    - 2b457b63-f44b-457b-80cf-45d7af5ceedc
                    delete_board_object_ids:
                    - 0ae58dec-429f-4e4d-828f-9d8e98722611
      responses:
        '200':
          description: The bulk operation has completed successfully.
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    type: object
                    required:
                    - successes
                    - failures
                    additionalProperties: false
                    properties:
                      successes:
                        type: array
                        description: Operations that succeeded.
                        items:
                          oneOf:
                          - type: object
                            required:
                            - moment_id
                            - related_resource_id
                            - type
                            additionalProperties: false
                            properties:
                              moment_id:
                                type: string
                                format: uuid
                                description: The ID of the moment.
                              related_resource_id:
                                type: string
                                description: The ID of the resource that was associated with the moment.
                              type:
                                type: string
                                enum:
                                - board
                                - board_object
                                - story
                      failures:
                        type: array
                        description: Operations that did not succeed.
                        items:
                          oneOf:
                          - type: object
                            required:
                            - moment_id
                            - related_resource_id
                            - type
                            - status_code
                            - error
                            additionalProperties: false
                            properties:
                              moment_id:
                                type: string
                                format: uuid
                                description: The ID of the moment.
                              related_resource_id:
                                type: string
                                description: The ID of the resource that was associated with the moment.
                              type:
                                type: string
                                enum:
                                - board
                                - board_object
                                - story
                              error:
                                type: string
                                description: A human-readable error messaging explaining why the operation failed.
                              status_code:
                                type: integer
                                description: The status code received when processing the underlying request.
              example:
                data:
                  successes:
                  - moment_id: 9b2e0fd6-76c0-4c21-af5b-7a58b118665d
                    related_resource_id: 2b457b63-f44b-457b-80cf-45d7af5ceedc
                    type: board
                  - moment_id: 9b2e0fd6-76c0-4c21-af5b-7a58b118665d
                    related_resource_id: 2b457b63-f44b-457b-80cf-45d7af5ceedc
                    type: board_object
                  - moment_id: 48e50fa7-1a23-4a9b-aadb-7a4fe4110a20
                    related_resource_id: 0ae58dec-429f-4e4d-828f-9d8e98722611
                    type: board_object
                  failures:
                  - moment_id: 48e50fa7-1a23-4a9b-aadb-7a4fe4110a20
                    related_resource_id: 2b457b63-f44b-457b-80cf-45d7af5ceedc
                    type: board
                    status_code: 422
                    error: Cannot create duplicate board_object.
        '202':
          description: The bulk operation is processing.
        '401':
          description: Unauthorized
          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
        '403':
          description: Forbidden
          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
        '500':
          description: Internal Server Error
          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
    servers:
    - url: https://login.ouropal.com
  /asgard-bff/moments/add_to_plan:
    post:
      tags:
      - Moments
      operationId: MomentsAddToPlanBFFV1
      summary: Add multiple moments to a plan
      description: 'Adds multiple moments to a plan by creating a paired_moment block in the

        plan. Also supports associating the new blocks with a category, if

        provided.


        Internally, this wraps a bulk operation request. A successful 200 response

        indicates that the overall bulk_operation has completed, while partial

        success/failure for sub-operations may have occurred.


        A 202 response indicates that the bulk operation has been successfully

        started, and is being processed asynchronously.

        '
      security:
      - oauth2:
        - offline_access
      - api_key:
        - Session-Token
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - data
              properties:
                data:
                  type: object
                  required:
                  - type
                  - attributes
                  - relationships
                  properties:
                    type:
                      type: string
                      enum:
                      - add_to_plan
                    attributes:
                      type: object
                      required:
                      - moments
                      properties:
                        moments:
                          type: array
                          items:
                            type: object
                            required:
                            - id
                            - start_at
                            - end_at
                            - title
                            properties:
                              id:
                                type: string
                                format: uuid
                              start_at:
                                type:
                                - string
                                - 'null'
                                format: date
                              end_at:
                                type:
                                - string
                                - 'null'
                                format: date
                              title:
                                type: string
                    relationships:
                      type: object
                      required:
                      - plan
                      - workspace
                      properties:
                        plan:
                          type: object
                          required:
                          - data
                          properties:
                            data:
                              required:
                              - id
                              - type
                              properties:
                                id:
                                  type: string
                                  format: uuid
                                type:
                                  type: string
                                  enum:
                                  - plan
                        workspace:
                          type: object
                          required:
                          - data
                          properties:
                            data:
                              required:
                              - id
                              - type
                              properties:
                                id:
                                  type: string
                                  format: uuid
                                type:
                                  type: string
                                  enum:
                                  - workspace
                        category:
                          type: object
                          required:
                          - data
                          properties:
                            data:
                              required:
                              - id
                              - type
                              properties:
                                id:
                                  type: string
                                  format: uuid
                                type:
                                  type: string
                                  enum:
                                  - category
                        category_type:
                          type: object
                          required:
                          - data
                          properties:
                            data:
                              required:
                              - id
                              - type
                              properties:
                                id:
                                  type: string
                                  format: uuid
                                type:
                                  type: string
                                  enum:
                                  - category_type
            example:
              type: add_to_plan
              attributes:
                moments:
                - id: 9b2e0fd6-76c0-4c21-af5b-7a58b118665d
                  start_at: null
                  end_at: null
                  title: Paired Moment A
                - id: 48e50fa7-1a23-4a9b-aadb-7a4fe4110a20
                  start_at: null
                  end_at: null
                  title: Paired Moment B
              relationships:
                workspace:
                  id: 798ac6d9-b3fc-4155-88ee-237f43f3404b
                  type: workspace
                plan:
                  id: 7ccc7721-8473-46c4-8abe-e2061933a23f
                  type: plan
                category:
                  id: 2bc75fd1-7f3a-4458-8f66-87dd7f2cd446
                  type: category
      responses:
        '200':
          description: The bulk operation has completed successfully.
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    type: object
                    required:
                    - successes
                    - failures
                    additionalProperties: false
                    properties:
                      successes:
                        type: array
                        description: Operations that succeeded.
                        items:
                          oneOf:
                          - type: object
                            required:
                            - moment_id
                            - related_resource_id
                            - type
                            additionalProperties: false
                            properties:
                              moment_id:
                                type: string
                                format: uuid
                                description: The ID of the moment.
                              related_resource_id:
                                type: string
                                description: The ID of the resource that was associated with the moment.
                              type:
                                type: string
                                enum:
                                - plan
                                - category
                      failures:
                        type: array
                        description: Operations that did not succeed.
                        items:
                          oneOf:
                          - type: object
                            required:
                            - moment_id
                            - related_resource_id
                            - type
                            - status_code
                            - error
                            additionalProperties: false
                            properties:
                              moment_id:
                                type: string
                                format: uuid
                                description: The ID of the moment.
                              related_resource_id:
                                type: string
                                description: The ID of the resource that was associated with the moment.
                              type:
                                type: string
                                enum:
                                - plan
                                - category
                              error:
                                type: string
                                description: A human-readable error messaging explaining why the operation failed.
                              status_code:
                                type: integer
                                description: The status code received when processing the underlying request.
              example:
                data:
                  successes:
                  - moment_id: 9b2e0fd6-76c0-4c21-af5b-7a58b118665d
                    related_resource_id: 7ccc7721-8473-46c4-8abe-e2061933a23f
                    type: plan
                  - moment_id: 9b2e0fd6-76c0-4c21-af5b-7a58b118665d
                    related_resource_id: 2bc75fd1-7f3a-4458-8f66-87dd7f2cd446
                    type: category
                  - moment_id: 48e50fa7-1a23-4a9b-aadb-7a4fe4110a20
                    related_resource_id: 7ccc7721-8473-46c4-8abe-e2061933a23f
                    type: plan
                  - moment_id: 48e50fa7-1a23-4a9b-aadb-7a4fe4110a20
                    related_resource_id: 2bc75fd1-7f3a-4458-8f66-87dd7f2cd446
                    type: category
                  failures: []
        '202':
          description: The bulk operation is processing.
        '401':
          description: Unauthorized
          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
        '403':
          description: Forbidden
          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
        '500':
          description: Internal Server Error
          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
    servers:
    - url: https://login.ouropal.com
  /moments/v2:
    get:
      tags:
      - Moments
      operationId: ReadMomentsV2
      summary: Return all moments available to the authenticated user.
      security:
      - oauth2:
        - offline_access
      - api_key:
        - Session-Token
      parameters:
      - name: sort
        in: query
        description: 'A comma separated value specifying how a collection in the response body should be sorted, where each value is an attribute of the moment. When specifying multiple values, each value in the sequence determines the ordering precedence.



          Each moment in the collection will appear in ascending order, unless any of the enumerated values are prefixed with a minus "-" sign, in which case each moment will appear in descending order for the specified values.

          '
        required: false
        schema:
          type: string
          enum:
          - created_at
          - day_segment
          - scheduled_at
          - updated_at
      - name: fields
        in: query
        description: An object keyed by resource type, i.e. \"moment\" or a moment relationship, where each value is a CSV of attributes to include in the response.
        required: false
        schema:
          type: object
          properties:
            brand:
              type: string
            label:
              type: string
            moment:
              type: string
            privacy_group:
              type: string
            story:
              type: string
        style: deepObject
        explode: true
      - name: filter
        in: query
        description: 'Filters for limiting the results.

          All timestamp filters (`created_at`, `updated_at`, and `scheduled_at`), use syntax `filter[field_name][gt]=2020-01-01T00:00:00-07:00`


          Timestamps use iso8601 formatting, such as `YYYY-MM-DD` or `YYYY-MM-DDThh:mmTZD`.Timestamps of the form `YYYY-MM-DD` will be converted to `YYY-MM-DDT00:00:00` in the `America/Los_Angeles` timezone.


          If no operator is specified, `eq` will be assumed. For example, `filter[created_at]=2020-01-01` is equivalent to `filter[created_at][gteq]=2020-01-01`. `eq` will convert a date to a 24 hour range.Thus `filter[created_at][eq]=2020-01-01` is equivalent to `filter[created_at][gteq]=2020-01-01T00:00:00-08:00&filter[created_at][lteq]=2020-01-02T00:00:00-08:00`.

          '
        required: false
        schema:
          type: object
          properties:
            account_id:
              type: array
              description: Retrieve moments by the associated account IDs.
              items:
                type: integer
            brand_id:
              type: array
              description: 'The IDs of the workspaces to which results should be filtered.

                "Workspace ID" and "Brand ID" are synonymous.

                Comma separated list of IDs. If included, will only fetch resources associated with these brands. If not included, will return resources associated with all brands that the user belongs to. For example, `filter[brand_id]=1` will fetch all resources associated with brand 1, while `filter[brand_id]=1,2,3` will fetch any resources associated with brands 1, 2, or 3.

                '
              items:
                type: integer
            created_at:
              description: 'Filter by the moment created_at time. Uses syntax `filter[created_at][gt]=2020-01-01T00:00:00-07:00`.

                '
              type: string
              format: date-time
            id:
              type: array
              description: Retrieve moments by ID.
              items:
                type: integer
            end_date:
              type: string
              format: date
              deprecated: true
              description: Deprecated in favor of `filter[scheduled_at][lt]`
            include_duration_overlap:
              type: boolean
              description: 'When `true`, combined with `filter[start_date]`/`filter[end_date]`, returns moments whose scheduled duration overlaps the requested interval even if their `scheduled_at` falls outside it. Default is `false`, which matches only on `scheduled_at`.

                '
            label_id:
              type: array
              description: 'Comma separated list of label IDs. If included, will only fetch moments associated with these labels. For example, `filter[label_id]=1` will fetch all moments associated with label 1, while `filter[label_id]=1,2,3` will fetch any moment associated with labels 1, 2, or 3.

                '
              items:
                type: integer
            scheduled_at:
              allOf:
              - type: object
                properties:
                  eq:
                    type: string
                    description: 'Equal to filter. If no other filter is specified, `eq` will be assumed.

                      '
                  gt:
                    type: string
                    description: Greater than filter
                  gteq:
                    type: string
                    description: Greater than or equal to filter
                  lt:
                    type: string
                    description: Less than filter
                  lteq:
                    type: string
                    description: Less than or equal to filter
              - format: date
              description: 'Filter by the moment scheduled_at date. Uses syntax `filter[scheduled_at][gt]=2020-01-01`.

                '
            search:
              description: Retrieve moments matching search criteria.
              type: string
            service_id:
              type: array
              description: Retrieve moments by the associated service IDs.
              items:
                type: integer
            start_date:
              type: string
              format: date
              deprecated: true
              description: Deprecated in favor of `filter[scheduled_at][lt]`
            story_id:
              description: Retrieve moments by the associated story ID.
              type: integer
            updated_at:
              description: 'Filter by the moment updated_at time. Uses syntax `filter[updated_at][gt]=2020-01-01T00:00:00-07:00`.

                '
              type: string
              format: date-time
        style: deepObject
        explode: true
      - name: include
        in: query
        required: false
        description: A comma separated value of related objects to include.
        schema:
          type: array
          items:
            type: string
            enum:
            - asset_references
            - brand
            - labels
            - note
            - primary_asset_reference
            - primary_story
            - privacy_group
            - services
            - stories
        style: form
        explode: false
      - name: expose
        in: query
        required: false
        description: Expose response data that is only provided by request.
        schema:
          type: object
          properties:
            unscheduled_moments:
              type: boolean
              deprecated: true
              description: '**[INTERNAL-ONLY] [Unstable]** 🏴‍☠️👻🚷💣 This parameter can be used to expose Unscheduled Moments to the V2 Moment GET APIs. Opal developers are using this parameter as a migration tool. If you need Moments that are Unscheduled, please see the V3 Moment APIs that offer native support.

                This parameter should be considered [Unstable] and may be removed at any time without notice of deprecation. Using this parameter will also cause the Moments V2 GET response to deviate from the documented schema.

                '
      - name: page
        description: Specify an offset and limit for pagination
        in: query
        required: false
        schema:
          type: object
          properties:
            limit:
              type: integer
              default: 50
            offset:
              type: integer
        style: deepObject
        explode: true
      responses:
        '200':
          description: An array of moments.
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                properties:
                  data:
                    type: array
                    items:
                      title: moment
                      type: object
                      required:
                      - id
                      - type
                      - attributes
                      - relationships
                      additionalProperties: false
                      properties:
                        id:
                          type: string
                          pattern: ^[0-9]+$
                        type:
                          type: string
                          enum:
                          - moment
                        attributes:
                          type: object
                          required:
                          - uuid
                          - color
                          - content_count
                          - created_at
                          - day_segment
                          - is_ghost
                          - scheduled_at
                          - title
                          - updated_at
                          additionalProperties: false
                          properties:
                            uuid:
                              type: string
                              format: uuid
                              description: A unique identifier for the moment.
                            color:
                              type:
                              - string
                              - 'null'
                              description: Color used to visually identify a moment.
                            content_count:
                              type: integer
                              description: Number of content belonging to the given moment.
                              readOnly: true
                            day_segment:
                              type:
                              - string
                              - 'null'
                              description: The time of day th

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