Uniform Project Map API

The Project Map API from Uniform — 2 operation(s) for project map.

OpenAPI Specification

uniform-project-map-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Uniform Platform Aggregates Project Map API
  version: '2.0'
tags:
- name: Project Map
paths:
  /api/v1/project-map-nodes:
    options:
      tags:
      - Project Map
      description: Handles preflight requests. This endpoint allows CORS
      responses:
        '204':
          description: OK
    get:
      description: Called to get a list of nodes belonging to a specific path or Id
      tags:
      - Project Map
      parameters:
      - in: query
        name: projectMapId
        description: The project map id that the desired nodes belong
        schema:
          type: string
          format: uuid
      - in: query
        name: projectId
        description: The project id that contains the project map tree that this node belongs to
        required: true
        schema:
          type: string
          format: uuid
      - in: query
        name: releaseId
        description: 'The ID of a release to fetch the composition data for.


          - When unspecified, composition data is fetched from base.

          - When specified, all content is returned as it would appear in the release if it was released now. This includes both content copied to the release and changed, as well as content that is not part of the release.


          Content copied to a release can be differentiated from base content by the `releaseId` property on the content. If the content is not copied to the release, this property will not be defined

          '
        schema:
          type: string
          format: uuid
      - in: query
        name: id
        description: The id of the node to retrieve, cannot have both this parameter and `path`
        required: false
        schema:
          type: string
          format: uuid
      - in: query
        name: path
        description: The path of the root node to retrieve, cannot have both this parameter and `id`
        required: false
        schema:
          type: string
          pattern: ^\/$|^(\/:?[^\/]+)+$
      - in: query
        name: compositionId
        description: Composition id to find associated project map node for
        required: false
        schema:
          type: string
          format: uuid
      - in: query
        name: limit
        description: Limit the number or records returned by a number
        required: false
        schema:
          type: integer
          default: 100000
      - in: query
        name: offset
        description: Number of records to skip before returning nodes
        required: false
        schema:
          type: integer
          default: 0
      - in: query
        name: depth
        description: Depth of the tree to fetch. This only applies when fetching by path
        required: false
        schema:
          type: integer
      - in: query
        name: state
        description: State of compositions to fetch. 0 = draft, 64 = published
        schema:
          type: number
          minimum: 0
          maximum: 64
      - in: query
        name: tree
        description: should the data be returned as a json tree object (or a flat array)
        required: false
        schema:
          type: boolean
      - in: query
        name: search
        description: text search filter
        required: false
        schema:
          type: string
      - in: query
        name: includeAncestors
        description: 'Modifies the results to include all ancestors of matched nodes, in addition to the nodes themselves.

          Results are sorted by path. If multiple nodes are selected, ancestors are not duplicated

          '
        required: false
        schema:
          type: boolean
      - in: query
        name: expanded
        description: include expanded helper computed properties, including `isLeaf`, `parentPath`, `pathSegment` etc
        schema:
          type: boolean
      - in: query
        name: withCompositionData
        description: include basic composition information.  ID, type, state, name, and definition id
        schema:
          type: boolean
      - in: query
        name: withCompositionUIStatus
        deprecated: true
        description: 'Returns the UI status string of the composition.

          This internal status is subject to change without notice and is thus marked deprecated to discourage the use of internal data

          '
        schema:
          type: boolean
          default: false
      - in: query
        name: withRedirectData
        description: Include basic redirect information
        schema:
          type: boolean
          default: false
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  nodes:
                    type: array
                    items:
                      $ref: '#/components/schemas/ProjectMapNodeDefinition'
                  tree:
                    $ref: '#/components/schemas/ProjectMapTreeNodeDefinition'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '429':
          $ref: '#/components/responses/RateLimitError'
        '500':
          $ref: '#/components/responses/InternalServerError'
    put:
      description: Called to insert or update a node or nodes
      tags:
      - Project Map
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - nodes
              - projectId
              properties:
                nodes:
                  description: An array of projectMap node objects to be updated or inserted
                  type: array
                  maxItems: 5
                  items:
                    type: object
                    required:
                    - node
                    properties:
                      node:
                        $ref: '#/components/schemas/ProjectMapNodeUpdate'
                      previousSibling:
                        description: The path of the node directly prior to the location where the current node is desired to go or undefined if there isn't one
                        type: string
                        maxLength: 2048
                      nextSibling:
                        description: The path of the node directly after the location where the current node is desired to go or undefined if there isn't one
                        type: string
                        maxLength: 2048
                projectId:
                  description: The project id of the project that the projectMap belongs to
                  type: string
                  format: uuid
                projectMapId:
                  description: The projectMap id that the changing or inserting nodes belong to
                  type: string
                  format: uuid
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '204':
          description: OK
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '429':
          $ref: '#/components/responses/RateLimitError'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      description: Called to delete a particular projectMap node by id or path
      tags:
      - Project Map
      requestBody:
        required: true
        content:
          application/json:
            schema:
              oneOf:
              - type: object
                required:
                - projectId
                - path
                properties:
                  nodeId:
                    description: Id of the projectMap node to delete
                    type: string
                    format: uuid
                  path:
                    description: Path to the projectMap node to delete
                    type: string
                    minLength: 1
                    maxLength: 2048
                  projectMapId:
                    description: Project map id that the node to delete belongs to
                    type: string
                    format: uuid
                  projectId:
                    description: Project id that the project map belongs to
                    type: string
                    format: uuid
              - type: object
                required:
                - projectId
                - nodeId
                properties:
                  nodeId:
                    description: Id of the projectMap node to delete
                    type: string
                    format: uuid
                  path:
                    description: Path to the projectMap node to delete
                    type: string
                    minLength: 1
                    maxLength: 2048
                  projectMapId:
                    description: Project map id that the node to delete belongs to
                    type: string
                    format: uuid
                  projectId:
                    description: Project id that the project map belongs to
                    type: string
                    format: uuid
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '204':
          description: OK
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '429':
          $ref: '#/components/responses/RateLimitError'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /api/v1/project-map:
    options:
      tags:
      - Project Map
      description: Handles preflight requests. This endpoint allows CORS
      responses:
        '204':
          description: OK
    get:
      description: Called to retrieve a list of project maps related to a project or a specific project map by id
      tags:
      - Project Map
      parameters:
      - in: query
        name: projectId
        description: The project to fetch project map for
        required: true
        schema:
          type: string
          format: uuid
      - in: query
        name: projectMapId
        description: The id of the project map to fetch
        required: false
        schema:
          type: string
          format: uuid
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - projectMaps
                properties:
                  projectMaps:
                    type: array
                    items:
                      $ref: '#/components/schemas/ProjectMapDefinition'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '429':
          $ref: '#/components/responses/RateLimitError'
        '500':
          $ref: '#/components/responses/InternalServerError'
    put:
      tags:
      - Project Map
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - projectId
              - projectMap
              properties:
                projectMap:
                  description: Project map object to insert
                  $ref: '#/components/schemas/ProjectMapDefinition'
                projectId:
                  description: Project id to insert the projectMap into
                  type: string
                  format: uuid
              additionalProperties: false
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                required:
                - projectMapId
                properties:
                  projectMapId:
                    type: string
                    format: uuid
                    description: Id of the projectMap
                additionalProperties: false
        '204':
          description: OK
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '429':
          $ref: '#/components/responses/RateLimitError'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      description: Called to delete a projectMap
      tags:
      - Project Map
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - projectId
              - projectMapId
              properties:
                projectId:
                  type: string
                  format: uuid
                  description: Id of the project that this projectMap belongs to
                projectMapId:
                  type: string
                  format: uuid
                  description: Id of the projectMap to delete
              additionalProperties: false
      security:
      - ApiKeyAuth: []
      - BearerAuth: []
      responses:
        '204':
          description: OK
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
        '429':
          $ref: '#/components/responses/RateLimitError'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  schemas:
    ProjectMapNodeLocale:
      type: object
      required:
      - pathSegment
      properties:
        name:
          description: Name of node in the locale
          type: string
        path:
          description: Full path to the current node in this locale, only included if requested with the expanded flag
          type: string
        pathSegment:
          description: Last segment of the url in this locale
          type: string
        inherited:
          description: 'When false, the node explicitly defines a locale-specific path segment.


            When true, an ancestor defines a locale-specific path segment,

            which makes its descendants resolvable using that segment.

            This node does not define a locale-specific path segment.


            Only included if requested with the expanded flag. Without the expanded flag, inherited locales are not included in the response

            '
          type: boolean
      additionalProperties: false
    ProjectMapDefinition:
      type: object
      required:
      - name
      properties:
        id:
          description: The id of the projectMap node
          type: string
          minLength: 1
        name:
          description: The name of the projectMap node
          type: string
          minLength: 1
        description:
          description: Description of the projectMap node
          type: string
          maxLength: 300
        baseUrl:
          pattern: ^http.?:\/\/.*$
          description: The prefix of the url generated by this projectMap
          type: string
          maxLength: 300
        default:
          type: boolean
        globalQueryStrings:
          description: Global query strings that are allowed on all nodes in this project map
          type: array
          maxItems: 50
          items:
            $ref: '#/components/schemas/ProjectMapNodeAllowedQueryString'
    ProjectMapNodeData:
      type: object
      properties:
        isSearchHit:
          description: While performing a search if a node is a hit, this property will return true.  If it's supporting structure, like a parent of a search hit, it will return false
          type: boolean
        queryStrings:
          description: Query strings that are allowed to be passed to the node
          type: array
          maxItems: 50
          items:
            $ref: '#/components/schemas/ProjectMapNodeAllowedQueryString'
        previewValue:
          description: 'For dynamic nodes, this is the preview value for the dynamic value.

            The preview value is used when editing a connected composition, and is the default

            dynamic node value unless the author has explicitly chosen a different value

            '
          type: string
          maxLength: 512
      additionalProperties: false
    ProjectMapNodeCompositionData:
      type: object
      required:
      - id
      - type
      - name
      - locales
      description: 'Basic information about the linked composition from the context of a project map node.

        If the linked composition has editions, the editions are included in the `editions` property.

        '
      properties:
        type:
          type: string
          description: Type of the linked composition (id of its definition)
          maxLength: 100
          minLength: 1
        id:
          type: string
          description: The UUID of the linked composition
          format: uuid
        editionId:
          type: string
          description: 'The edition UUID underneath the linked composition

            This is only present if the composition has not been published, but an edition has

            '
          format: uuid
        slug:
          type: string
          description: Slug pattern of the linked composition or edition
          nullable: true
          maxLength: 512
        name:
          type: string
          description: Friendly name of this composition or edition
          maxLength: 100
          minLength: 1
        uiStatus:
          type: string
          deprecated: true
          description: UI status value. Subject to change without notice; do not rely on this value. Only present when `withCompositionUIStatus` option is true
          enum:
          - Draft
          - Modified
          - Published
          - Orphan
        icon:
          type: string
          description: Icon name or URL for the composition definition (e.g. 'screen' or 'https://s3/my-component.jpg')
          default: screen
          maxLength: 2024
        typeName:
          type: string
          description: Friendly name of this Composition's Definition
          maxLength: 100
          minLength: 1
        locales:
          type: array
          description: 'List of locales that the composition _or any of its editions_ is available in.

            If empty, available in all locales.

            '
          items:
            type: string
        editionPriority:
          type: integer
          description: Priority of the composition relative to any editions
        editionName:
          type: string
          description: Friendly name of the edition
        editions:
          type: array
          description: 'List of editions available for this composition. The composition is included in the list, it is the edition

            where the editionID equals the node''s compositionID. NOTE: this is not sent if only one edition is available

            '
          items:
            $ref: '#/components/schemas/ProjectMapNodeCompositionEditionData'
        modified:
          type: string
          format: date-time
          description: 'Date and time the composition was last modified (or created if never modified).

            Uses ISO-8859-1 formatting and UTC timezone.

            IMPORTANT: if the composition has more than one edition, this is the modified date of the default edition. Each edition has its own modified date in the `editions` array.

            '
    ProjectMapSourceRedirectData:
      type: array
      items:
        type: object
        properties:
          id:
            description: The public UUID of the source redirect
            type: string
            format: uuid
    ProjectMapTargetRedirectData:
      type: array
      items:
        type: object
        properties:
          id:
            description: The public UUID of the target redirect
            type: string
            format: uuid
    ProjectMapNodeDefinition:
      type: object
      required:
      - id
      - name
      - path
      - type
      properties:
        id:
          description: The id of the projectMap entry
          type: string
          format: uuid
        path:
          description: Path representing the path to the current node
          type: string
        order:
          description: Ordering of the node, higher numbers go after lower numbers
          type: integer
        data:
          $ref: '#/components/schemas/ProjectMapNodeData'
        name:
          description: The name of the projectMap entry
          type: string
          minLength: 1
        type:
          description: The type of the projectMap entry
          type: string
          enum:
          - composition
          - placeholder
        compositionId:
          description: The composition id related to the projectMap entry
          type: string
          format: uuid
        description:
          description: Description of the projectMap node
          type: string
          maxLength: 300
        parentPath:
          description: Parent path of the current node, only included if requested with the expanded flag
          type: string
        pathSegment:
          description: Last segment of the url
          type: string
        isLeaf:
          description: returns true if the node is a leaf node, meaning having no children, only included if requested with the expanded flag
          type: boolean
        compositionData:
          $ref: '#/components/schemas/ProjectMapNodeCompositionData'
        sourceRedirects:
          $ref: '#/components/schemas/ProjectMapSourceRedirectData'
        targetRedirects:
          $ref: '#/components/schemas/ProjectMapTargetRedirectData'
        locales:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/ProjectMapNodeLocale'
      additionalProperties: false
    Error:
      type: object
      properties:
        errorMessage:
          description: Error message(s) that occurred while processing the request
          oneOf:
          - type: array
            items:
              type: string
          - type: string
    ProjectMapNodeUpdate:
      type: object
      required:
      - name
      - path
      - type
      properties:
        id:
          description: The id of the projectMap entry
          type: string
          format: uuid
        path:
          description: Path representing the path to the current node
          pattern: ^\/$|^(\/[^\/]+)+$
          type: string
        order:
          description: Ordering of the node, higher numbers go after lower numbers
          type: integer
        data:
          $ref: '#/components/schemas/ProjectMapNodeData'
        name:
          description: The name of the projectMap entry
          type: string
          minLength: 1
        type:
          description: The type of the projectMap entry
          type: string
          enum:
          - composition
          - placeholder
        compositionId:
          description: The composition id related to the projectMap entry
          type: string
          format: uuid
        description:
          description: Description of the projectMap node
          type: string
          maxLength: 300
        locales:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/ProjectMapNodeLocaleUpdate'
      additionalProperties: false
    ProjectMapNodeLocaleUpdate:
      required:
      - pathSegment
      properties:
        name:
          description: Name of node in the locale
          type: string
        pathSegment:
          description: Locale specific path segment for this node (not a full path)
          type: string
          minLength: 1
      additionalProperties: false
    ProjectMapNodeCompositionEditionData:
      type: object
      required:
      - id
      - type
      - name
      - locales
      description: Basic information about a composition edition from the context of a project map node
      properties:
        id:
          type: string
          description: The UUID of the linked composition
          format: uuid
        type:
          type: string
          description: Type of the edition instance (public_id of its definition)
          maxLength: 100
          minLength: 1
        editionId:
          type: string
          description: The edition UUID underneath the linked composition
          format: uuid
        slug:
          type: string
          description: Slug pattern of this edition
          nullable: true
        name:
          type: string
          description: Friendly name of the linked composition
        editionName:
          type: string
          description: Friendly name of the edition
        editionPriority:
          type: integer
          description: Priority of the edition
        uiStatus:
          type: string
          deprecated: true
          description: UI status value. Subject to change without notice; do not rely on this value. Only present when `withCompositionUIStatus` option is true
          enum:
          - Draft
          - Modified
          - Published
          - Orphan
        icon:
          type: string
          description: Icon name or URL for the composition edition (e.g. 'screen' or 'https://s3/my-component.jpg')
          default: screen
          maxLength: 2024
        typeName:
          type: string
          description: Friendly name of this edition's definition
          maxLength: 100
          minLength: 1
        locales:
          type: array
          description: List of locales that the edition is available in. If empty, available in all locales
          items:
            type: string
        modified:
          type: string
          format: date-time
          description: Date and time the edition was last modified (or created if never modified). Uses ISO-8859-1 formatting and UTC timezone.
    ProjectMapTreeNodeDefinition:
      allOf:
      - $ref: '#/components/schemas/ProjectMapNodeDefinition'
      type: object
      required:
      - name
      properties:
        children:
          description: Children of the node
          type: array
          items:
            $ref: '#/components/schemas/ProjectMapTreeNodeDefinition'
      additionalProperties: false
    ProjectMapNodeAllowedQueryString:
      type: object
      required:
      - name
      properties:
        name:
          description: The name of the query string parameter
          type: string
          minLength: 1
          maxLength: 50
        value:
          description: The default value of the query string if it is not provided by an incoming route path
          type: string
          minLength: 0
          maxLength: 2048
        helpText:
          description: Help text for authors who might be setting up a preview value for this query string
          type: string
          minLength: 0
          maxLength: 256
        optionsSource:
          description: Configuration for providing a list of allowed values for this query string
          type: object
          properties:
            source:
              type: string
              enum:
              - static
              description: The source type for the options
            options:
              type: array
              items:
                type: object
                required:
                - name
                - value
                properties:
                  name:
                    type: string
                    description: Display name for the option
                    pattern: ^[^<>]+$
                    minLength: 1
                    maxLength: 50
                  value:
                    type: string
                    description: The actual value to be used
                    pattern: ^[^<>]+$
                    minLength: 0
                    maxLength: 500
              minItems: 1
              maxItems: 100
          required:
          - source
          - options
      additionalProperties: false
  responses:
    ForbiddenError:
      description: Permission was denied
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    UnauthorizedError:
      description: API key or token was not valid
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequestError:
      description: Request input validation failed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimitError:
      description: Too many requests in allowed time period
    InternalServerError:
      description: Execution error occurred
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
    BearerAuth:
      type: http
      scheme: bearer