Loopio Projects API

Create and manage Projects

Operations 42

GET /projects/{projectId}/complianceSets Get the Compliance Sets for a Project #
POST /projects/{projectId}/complianceSets Create a Compliance Set for a Project #
GET /projects/{projectId}/complianceSets/{complianceSetId} Get a Compliance Set for a Project #
PUT /projects/{projectId}/complianceSets/{complianceSetId} Update a Compliance Set for a Project #
DELETE /projects/{projectId}/complianceSets/{complianceSetId} Delete a Compliance Set for a Project #
GET /projects List projects you can interact with #
POST /projects Create a project #
GET /projects/{projectId} Get a Project's data #
PUT /projects/{projectId} Update a Project's status #
DELETE /projects/{projectId} Delete a Project and its data #
GET /projects/{projectId}/customProjectFields Get Custom Project Field values for a given Project #
PATCH /projects/{projectId}/customProjectFields Edit Custom Project Field values for a given Project #
GET /projects/{projectId}/mergeVariables Get Project Merge Variable values for a Project #
PATCH /projects/{projectId}/mergeVariables Edit the values of Project Merge Variables for a Project #
GET /projects/{projectId}/summary Get the status summary of a Project #
GET /projects/summary Get the status summary list of Projects filtered by date last synced #
POST /projects/{projectId}/sourceDocuments Attach a source document to a Loopio Project #
GET /projects/{projectId}/sourceDocuments View basic information on a Project's source files #
GET /projects/{projectId}/participants Get the participants for a Project #
PUT /projects/{projectId}/participants Update the participants for a Project #
POST /projectTemplates/{projectTemplateId}/projects Create a project using a template (This creates an async task to execute this operation) #
GET /projectEntries List your Project Entries #
POST /projectEntries Create a new Project Entry #
GET /projectEntries/{projectEntryId} Retrieve a specific Project Entry #
PUT /projectEntries/{projectEntryId} Update a specific Project Entry #
DELETE /projectEntries/{projectEntryId} Delete a specific Project Entry #
GET /projectEntries/{entryId}/attachments List attachments for a Project Entry #
POST /projectEntries/{entryId}/attachments/upload Upload an attachment to a Project Entry #
POST /projectEntries/{entryId}/attachments/{fileVersionId}/replace Replace an attachment on a Project Entry #
DELETE /projectEntries/{entryId}/attachments/{fileVersionId} Delete an attachment from a Project Entry #
GET /sections List your Project sections #
POST /sections Create a new Project section #
GET /sections/{sectionId} Retrieve a specific Project section #
PUT /sections/{sectionId} Update a specific Project section #
DELETE /sections/{sectionId} Delete a Project section and its content #
GET /subSections List your Project subSections #
POST /subSections Create a new Project subSection #
GET /subSections/{subSectionId} Retrieve a specific Project subSection #
PUT /subSections/{subSectionId} Update a specific Project subSection #
DELETE /subSections/{subSectionId} Delete a Project subSection and its content #
GET /asyncTasks/{taskId}/projectTemplateCopy Get the status of a create project from template async task #

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/loopio-projects-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

loopio-projects-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Loopio Projects API
  description: Loopio's Public API
  termsOfService: http://loopio.com/termsOfService
  contact:
    email: support@loopio.com
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  version: 1.0.0
servers:
- url: https://api.loopio.com/data/v2
  description: Production server for the American datacenter
- url: https://api.eu.loopio.com/data/v2
  description: Production server for the European datacenter
tags:
- name: Projects
  description: Create and manage Projects
paths:
  /projects/{projectId}/complianceSets:
    parameters:
    - name: projectId
      in: path
      required: true
      schema:
        type: integer
    get:
      tags:
      - Projects
      summary: Get the Compliance Sets for a Project
      description: "Note: Confidential projects are currently not supported via API.\n\n Note: We are making terminology updates in Loopio - Compliance Sets shall be referred to as Answer Sets. The API will be updated to reflect this change at a later time."
      operationId: getProjectComplianceSets
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ComplianceSet'
        '400':
          $ref: '#/components/responses/400'
        '403':
          $ref: '#/components/responses/403'
    post:
      tags:
      - Projects
      summary: Create a Compliance Set for a Project
      description: "Note: Confidential projects are currently not supported via API.\n\n Note: We are making terminology updates in Loopio - Compliance Sets shall be referred to as Answer Sets. The API will be updated to reflect this change at a later time."
      operationId: createComplianceSet
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                label:
                  type: string
                  maxLength: 255
                options:
                  description: The list of options must be unique. Option labels will have their whitespace trimmed.
                  type: array
                  items:
                    $ref: '#/components/schemas/ComplianceOption'
              required:
              - options
      responses:
        '201':
          description: CREATED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ComplianceSet'
        '400':
          $ref: '#/components/responses/400'
        '403':
          $ref: '#/components/responses/403'
  /projects/{projectId}/complianceSets/{complianceSetId}:
    parameters:
    - name: projectId
      in: path
      required: true
      schema:
        type: integer
    - name: complianceSetId
      in: path
      required: true
      schema:
        type: integer
    get:
      tags:
      - Projects
      summary: Get a Compliance Set for a Project
      description: "Note: Confidential projects are currently not supported via API.\n\n Note: We are making terminology updates in Loopio - Compliance Sets shall be referred to as Answer Sets.  The API will be updated to reflect this change at a later time."
      operationId: getProjectComplianceSet
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ComplianceSet'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
    put:
      tags:
      - Projects
      summary: Update a Compliance Set for a Project
      description: "Note: Confidential projects are currently not supported via API.\n\n Note: We are making terminology updates in Loopio - Compliance Sets shall be referred to as Answer Sets. The API will be updated to reflect this change at a later time."
      operationId: updateProjectComplianceSet
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                label:
                  type: string
                  maxLength: 255
                options:
                  description: The list of options must be unique. Option labels will have their whitespace trimmed.
                  type: array
                  minLength: 1
                  items:
                    $ref: '#/components/schemas/ComplianceOption'
              required:
              - label
              - options
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ComplianceSet'
        '400':
          $ref: '#/components/responses/400'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
    delete:
      tags:
      - Projects
      summary: Delete a Compliance Set for a Project
      description: "Note: Confidential projects are currently not supported via API.\n\n Note: We are making terminology updates in Loopio - Compliance Sets shall be referred to as Answer Sets. The API will be updated to reflect this change at a later time."
      operationId: deleteProjectComplianceSet
      responses:
        '204':
          $ref: '#/components/responses/204'
        '403':
          $ref: '#/components/responses/403'
  /projects:
    get:
      parameters:
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageSize'
      - $ref: '#/components/parameters/RfxTypes'
      - $ref: '#/components/parameters/Owners'
      tags:
      - Projects
      summary: List projects you can interact with
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: listProjects
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  totalItems:
                    type: integer
                  totalPages:
                    type: integer
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Project'
                required:
                - totalItems
                - totalPages
                - items
        '400':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                name: VALIDATION_ERROR
                message: Array has invalid values or Value is not an integer
                debugId: 0fas3
        '403':
          $ref: '#/components/responses/403'
      security:
      - loopio_auth:
        - project:read
    post:
      tags:
      - Projects
      summary: Create a project
      operationId: createProject
      requestBody:
        description: Project to create
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProjectRequestBody'
        required: true
      responses:
        '201':
          description: CREATED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '400':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                name: VALIDATION_ERROR
                message: You must provide a valid owner for the Project
                debugId: 0fas3
        '403':
          $ref: '#/components/responses/403'
      security:
      - loopio_auth:
        - project:write
  /projects/{projectId}:
    parameters:
    - name: projectId
      in: path
      required: true
      schema:
        type: integer
    get:
      tags:
      - Projects
      summary: Get a Project's data
      description: 'Note: Confidential projects are currently not supported via API.'
      parameters:
      - name: fields
        in: query
        required: false
        schema:
          type: string
          enum:
          - '@narrow'
          - '@wide'
          default: '@narrow'
      operationId: getProject
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/Project'
                - $ref: '#/components/schemas/ProjectWide'
              examples:
                '@narrow':
                  $ref: '#/components/examples/ProjectNarrow'
                '@wide':
                  $ref: '#/components/examples/ProjectWide'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '500':
          description: Fatal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - loopio_auth:
        - project:read
    put:
      tags:
      - Projects
      summary: Update a Project's status
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: updateProject
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                status:
                  type: string
                  enum:
                  - ACTIVE
                  - WON
                  - LOST
                  - DONE
                  - STOPPED
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
              example:
                value:
                  id: 9
                  name: Project
                  status: ACTIVE
                  companyName: Company
                  createdDate: '2020-01-01T00:00:00Z'
                  dueDate: '2020-01-01T00:00:00Z'
                  owner:
                    id: 100
                    name: John Doe
                  creator:
                    id: 101
                    name: Jane Doe
                  description: An example project
        '400':
          $ref: '#/components/responses/400'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
      security:
      - loopio_auth:
        - project:write
    delete:
      tags:
      - Projects
      summary: Delete a Project and its data
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: deleteProject
      responses:
        '204':
          description: No Content
        '400':
          $ref: '#/components/responses/400'
        '403':
          $ref: '#/components/responses/403'
      security:
      - loopio_auth:
        - project:delete
  /projects/{projectId}/customProjectFields:
    parameters:
    - name: projectId
      in: path
      required: true
      schema:
        type: integer
    get:
      tags:
      - Projects
      summary: Get Custom Project Field values for a given Project
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: getCustomProjectFieldValuesForProject
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomProjectFieldValuesMap'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
      security:
      - loopio_auth:
        - project:read
    patch:
      tags:
      - Projects
      summary: Edit Custom Project Field values for a given Project
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: setCustomProjectFieldValuesForProject
      requestBody:
        description: '**Notes:**

          - Unlike most PATCH operations in this API, this operation does not use the JSON-Patch format. The request body must take the form of a basic key-value update object, where key is the name of the Custom Project Field. The value of a Custom Project Field cannot be updated to null.

          - When setting a value for a date type Custom Project Field, the value is accepted as a string. To ensure consistent display and reporting, pass dates in ISO 8601 format (e.g., 2026-04-06T15:30:45+05:30). Format validation is not enforced at the API level.

          '
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomProjectFieldPatchValuesMap'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomProjectFieldValuesMap'
        '400':
          $ref: '#/components/responses/400'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/422'
      security:
      - loopio_auth:
        - project:write
  /projects/{projectId}/mergeVariables:
    parameters:
    - name: projectId
      in: path
      required: true
      schema:
        type: integer
    get:
      tags:
      - Projects
      summary: Get Project Merge Variable values for a Project
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: getMergeVariableValuesForProject
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MergeVariableProjectValuesMap'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
      security:
      - loopio_auth:
        - project:read
        - mergeVariable:read
    patch:
      tags:
      - Projects
      summary: Edit the values of Project Merge Variables for a Project
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: setMergeVariableValuesForProject
      requestBody:
        description: '**Note**: Unlike most PATCH operations in this API, this operation does not use the JSON-Patch format. The request body must take the form of a basic key-value update object'
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MergeVariableProjectValuesMap'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MergeVariableProjectValuesMap'
        '400':
          $ref: '#/components/responses/InvalidJSONPatchDocument'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/UnprocessableJSONPatchRequest'
      security:
      - loopio_auth:
        - project:write
        - mergeVariable:write
  /projects/{projectId}/summary:
    parameters:
    - name: projectId
      in: path
      required: true
      schema:
        type: integer
    get:
      tags:
      - Projects
      summary: Get the status summary of a Project
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: getProjectSummary
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectSummary'
        '403':
          $ref: '#/components/responses/403'
        '404':
          description: Resource not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                name: RESOURCE_NOT_FOUND
                message: Resource not found
                debugId: 0fas3
        '500':
          description: Fatal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - loopio_auth:
        - project:read
  /projects/summary:
    parameters:
    - name: lastUpdatedDateGt
      in: query
      required: true
      schema:
        type: string
    get:
      tags:
      - Projects
      summary: Get the status summary list of Projects filtered by date last synced
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: getProjectSummaryList
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  totalItems:
                    type: integer
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ProjectSummary'
        '400':
          $ref: '#/components/responses/400'
        '403':
          $ref: '#/components/responses/403'
        '500':
          description: Fatal Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - loopio_auth:
        - project:read
  /projects/{projectId}/sourceDocuments:
    parameters:
    - name: projectId
      in: path
      required: true
      schema:
        type: integer
    post:
      tags:
      - Projects
      summary: Attach a source document to a Loopio Project
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: addProjectSourceDocument
      requestBody:
        content:
          multipart/form-data:
            schema:
              properties:
                document:
                  type: string
                  description: The file to upload.
                  format: binary
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  fileId:
                    type: integer
                  resourceURI:
                    type: string
                    example: /data/v2/files/0
                required:
                - fileId
                - resourceURI
        '400':
          $ref: '#/components/responses/400'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '503':
          description: Could not save file
          content:
            application/json:
              schema:
                type: object
      security:
      - loopio_auth:
        - project:write
    get:
      tags:
      - Projects
      summary: View basic information on a Project's source files
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: listProjectSourceDocuments
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  totalItems:
                    type: integer
                  totalPages:
                    type: integer
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ProjectSourceFile'
                required:
                - totalItems
                - totalPages
                - items
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
      security:
      - loopio_auth:
        - project:read
  /projects/{projectId}/opportunityLink:
    parameters:
    - name: projectId
      in: path
      required: true
      schema:
        type: integer
    post:
      tags:
      - Projects
      summary: Link a Loopio Project and CRM Opportunity
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: createOpportunityLink
      requestBody:
        content:
          application/json:
            schema:
              required:
              - type
              - opportunityId
              type: object
              properties:
                opportunityId:
                  description: Accepts a 15 or 18 digit Salesforce ID or a Dynamics UUID
                  oneOf:
                  - type: string
                    pattern: '[a-zA-Z0-9]{18}|[a-zA-Z0-9]{15}'
                  - type: string
                    format: uuid
                  example:
                  - 123e4567-e89b-12d3-a456-426652340000
                  - 0063J000002e7A8QAI
                type:
                  type: string
                  enum:
                  - SALESFORCE
                  - MS_DYNAMICS
            examples:
              Salesforce:
                value:
                  type: SALESFORCE
                  opportunityId: 0063J000002e7A8QAI
                summary: Salesforce opportunity IDs are 15 or 18 character alphanumeric strings
              Dynamics:
                value:
                  type: MS_DYNAMICS
                  opportunityId: 123e4567-e89b-12d3-a456-426652340000
                summary: Microsoft Dynamics opportunity IDs use the UUID format
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  projectId:
                    type: integer
                  opportunityId:
                    type: string
              examples:
                Salesforce:
                  value:
                    projectId: 123
                    opportunityId: 0063J000002e7A8QAI
                Dynamics:
                  value:
                    projectId: 123
                    opportunityId: 123e4567-e89b-12d3-a456-426652340000
        '400':
          description: Invalid Opportunity
          content:
            application/json:
              schema:
                type: object
        '403':
          $ref: '#/components/responses/403'
        '422':
          $ref: '#/components/responses/422'
      security:
      - loopio_auth:
        - crm:write
  /projects/{projectId}/participants:
    parameters:
    - name: projectId
      in: path
      required: true
      schema:
        type: integer
    get:
      tags:
      - Projects
      summary: Get the participants for a Project
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: getProjectParticipants
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ParticipantReference'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
      security:
      - loopio_auth:
        - project.participant:read
    put:
      tags:
      - Projects
      summary: Update the participants for a Project
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: updateProjectParticipants
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/ParticipantReference'
      responses:
        '200':
          description: UPDATED
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ParticipantReference'
        '400':
          $ref: '#/components/responses/400'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
        '422':
          $ref: '#/components/responses/422'
      security:
      - loopio_auth:
        - project.participant:write
  /projectTemplates/{projectTemplateId}/projects:
    parameters:
    - name: projectTemplateId
      in: path
      required: true
      schema:
        type: integer
    post:
      tags:
      - Projects
      summary: Create a project using a template (This creates an async task to execute this operation)
      description: Returns a taskId and a projectId. Make a GET request to /asyncTasks/{taskId}/projectTemplateCopy to find the status of the task.
      operationId: createProjectFromTemplate
      requestBody:
        description: Project to create
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateProjectRequestBody'
        required: true
      responses:
        '202':
          description: 'ACCEPTED


            **Note**: Although **projectId** is provided in the response, any interaction with the project (e.g. attaching documents, adding entries, adding sections, and any other action that alters its structure or content) is not guaranteed to work properly until the task is completed. The status of the task can be verified [here.](https://developer.loopio.com/docs/loopio-api/704e4445340fc-get-the-status-of-a-create-project-from-template-async-task)'
          content:
            application/json:
              schema:
                type: object
                properties:
                  taskId:
                    type: integer
                  projectId:
                    type: integer
                required:
                - taskId
                - projectId
        '400':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                name: VALIDATION_ERROR
                message: You must provide a valid owner for the Project
                debugId: 0fas3
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
      security:
      - loopio_auth:
        - project:write
  /projectEntries:
    get:
      parameters:
      - $ref: '#/components/parameters/RequiredProjectId'
      - $ref: '#/components/parameters/QueryParamSectionId'
      - $ref: '#/components/parameters/QueryParamSubSectionId'
      - $ref: '#/components/parameters/QueryParamInlineOptions'
      - $ref: '#/components/parameters/Page'
      - $ref: '#/components/parameters/PageSize'
      tags:
      - Projects
      summary: List your Project Entries
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: listProjectEntries
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  totalItems:
                    type: integer
                    example: 100
                  totalPages:
                    type: integer
                    example: 10
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/Entry'
                required:
                - totalItems
                - totalPages
                - items
        '400':
          $ref: '#/components/responses/400'
        '403':
          $ref: '#/components/responses/403'
      security:
      - loopio_auth:
        - project:read
    post:
      tags:
      - Projects
      summary: Create a new Project Entry
      description: 'Create a new Project Entry.

        In addition to the projectId, one of either the sectionId or subSectionId must be provided, but not both. Note: Confidential projects are currently not supported via API.'
      operationId: createProjectEntry
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
              - type: object
                properties:
                  projectId:
                    type: integer
                    description: 'Project Id in which entry is created

                      '
                  question:
                    type:
                    - string
                    - 'null'
                  answer:
                    type: object
                    properties:
                      text:
                        type:
                        - string
                        - 'null'
                      complianceAnswers:
                        description: 'Project Compliance Sets are unique per project. Use the

                          /projects/{projectId}/complianceSets API to retrieve a list

                          of available Compliance Sets.


                          The complianceSetId must match one of the Compliance Sets in the

                          given Project, and option must match one of the option labels in

                          the given Compliance Set.


                          Note: we are making terminology updates in Loopio - Compliance Sets shall be referred to as Answer Sets. The API will be updated to reflect this change at a later time.

                          '
                        type: array
                        items:
                          type: object
                          properties:
                            complianceSetId:
                              type: integer
                            option:
                              type:
                              - string
                              - 'null'
                          required:
                          - complianceSetId
                          - option
                    required:
                    - text
                required:
                - projectId
                - question
                - answer
              - oneOf:
                - properties:
                    sectionId:
                      type: integer
                  required:
                  - sectionId
                - properties:
                    subSectionId:
                      type: integer
                  required:
                  - subSectionId
      responses:
        '201':
          description: CREATED
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Entry'
        '400':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                name: VALIDATION_ERROR
                message: Invalid sectionId
                debug: 0fas5
        '403':
          $ref: '#/components/responses/403'
      security:
      - loopio_auth:
        - project:write
  /projectEntries/{projectEntryId}:
    parameters:
    - $ref: '#/components/parameters/ProjectEntryId'
    - $ref: '#/components/parameters/QueryParamInlineOptions'
    get:
      tags:
      - Projects
      summary: Retrieve a specific Project Entry
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: getProjectEntry
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Entry'
        '403':
          $ref: '#/components/responses/403'
        '404':
          $ref: '#/components/responses/404'
      security:
      - loopio_auth:
        - project:read
    put:
      tags:
      - Projects
      summary: Update a specific Project Entry
      description: 'Note: Confidential projects are currently not supported via API.'
      operationId: updateProjectEntry
      requestBody:
        required: true
        content:
          application/json:
         

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