# Loopio > Loopio is a response management platform for RFPs, RFIs, DDQs, security questionnaires and > sales proposals. Its public REST API — the Loopio Public API v2 — exposes the reusable > answer Library and the Projects that consume it, plus users, teams, files, webhooks and > CRM links. Base URL: https://api.loopio.com/data/v2. Auth: OAuth 2.0 client credentials. This file is generated by API Evangelist from Loopio's published OpenAPI and developer documentation. Loopio does not publish an llms.txt of its own. ## Facts an agent needs first - Base URL: https://api.loopio.com/data/v2 (North America). https://api.eu.loopio.com/data/v2 is declared in the contract but Loopio states the European API is not yet accessible. - Token: POST https://api.loopio.com/oauth2/access_token, grant_type=client_credentials, space-delimited scope, client_id + client_secret. Bearer token, expires_in 3600. - Discovery: /.well-known/oauth-authorization-server (RFC 8414) and /.well-known/oauth-protected-resource (RFC 9728) are both served on api.loopio.com. - Scopes are fixed when a Loopio Admin creates the App and cannot be edited afterwards. - Pagination: page + pageSize; responses are {totalItems, totalPages, items}. - Partial updates use RFC 6902 JSON Patch. Full replacements use PUT. - Errors: {name, message, debugId} as application/json. NOT RFC 9457. debugId is the only correlation handle, and it appears only on failures. - No idempotency keys. No 429, no rate-limit headers, no Retry-After anywhere in the contract. - Long-running writes return 202 + taskId, polled on /asyncTasks/{taskId}. No callback. - Deletes have no API-level reversal and no published retention window. - 4 webhook events, HMAC-signed with X-Loopio-Content-Signature and X-Loopio-Request-Timestamp. ## Documentation - [Getting Started with the Loopio API](https://developer.loopio.com/docs/loopio-api/c56ffe1fdae3e-getting-started-with-the-loopio-api): auth, scopes and the token request - [API reference](https://developer.loopio.com/docs/loopio-api/68a341c676710-loopio): all 96 operations - [Developer portal](https://developer.loopio.com/) - [Status page](https://www.loopiostatus.com/): Atlassian Statuspage, JSON at /api/v2/summary.json - [Help centre](https://support.loopio.com/hc/en-us) ## API surface (96 operations across 15 tags) ### Asynchronous - `GET /asyncTasks/mergeVariableDelete/{taskId}` — **getMegeVariableDeleteStatus**: Get the status of Merge Variable deletion request - `GET /asyncTasks/{taskId}` — **getAsyncStatus**: Get the status of a queued async request - `GET /asyncTasks/{taskId}/projectTemplateCopy` — **getProjectTemplateCopyAsyncStatus**: Get the status of a create project from template async task ### CRM - `GET /crm/{opportunityID}/projects` — **listCRMProjects**: Get the list of viewable Projects associated with a given CRM Opportunity ### Custom Project Fields - `GET /customProjectFields` — **listCustomProjectFields**: List defined Custom Project Fields - `POST /customProjectFields` — **createCustomProjectField**: Create a new Custom Project Field - `DELETE /customProjectFields/{id}` — **deleteCustomProjectField**: Delete a Custom Project Field - `GET /customProjectFields/{id}` — **getCustomProjectField**: Get a Custom Project Field - `PATCH /customProjectFields/{id}` — **updateCustomProjectField**: Update a Custom Project Field ### Customers - `GET /customers/{customerId}` — **getCustomer**: Get the id and guid for a given Customer - `GET /customers/{customerId}/activeLanguages` — **getCustomerActiveLanguages**: Get all the languages in use in a customer's collection of library entries ### Files - `DELETE /files/{fileId}` — **deleteFile**: Delete a file - `GET /files/{fileId}` — **showFile**: Show information about a file ### Library Entries - `GET /libraryEntries` — **listLibraryEntries**: List Library Entries you can interact with - `POST /libraryEntries` — **createLibraryEntry**: Create a Library Entry - `POST /libraryEntries/bulk` — **bulkCreateLibraryEntries**: Bulk create Library Entries - `DELETE /libraryEntries/{libraryEntryId}` — **deleteLibraryEntry** - `GET /libraryEntries/{libraryEntryId}` — **getLibraryEntry**: Get a Library Entry - `PATCH /libraryEntries/{libraryEntryId}` — **updateLibraryEntry**: Update core properties of a Library Entry - `GET /libraryEntries/{libraryEntryId}/attachments` — **getLibraryEntryFiles**: Get Library Entry's Attachments - `POST /libraryEntries/{libraryEntryId}/attachments/upload` — **uploadLibraryEntryAttachment**: Upload an attachment to a Library Entry - `DELETE /libraryEntries/{libraryEntryId}/attachments/{fileVersionId}` — **deleteLibraryEntryAttachment**: Delete an attachment from a Library Entry - `POST /libraryEntries/{libraryEntryId}/attachments/{fileVersionId}/replace` — **replaceLibraryEntryAttachment**: Replace an attachment on a Library Entry - `GET /libraryEntryHistories/{libraryEntryId}` — **getLibraryEntryHistories**: Get history of a Library Entry - `GET /libraryEntryHistories/{libraryEntryId}/{historyId}` — **getLibraryEntryHistory**: Get a specific history item of a Library Entry ### Merge Variables - `GET /mergeVariables` — **listMergeVariables**: List defined Merge Variables - `POST /mergeVariables` — **createMergeVariable**: Create a new Merge Variable - `DELETE /mergeVariables/{id}` — **deleteMergeVariable**: Delete a Merge Variable - `GET /mergeVariables/{id}` — **getMergeVariable**: Get a Merge Variable - `PATCH /mergeVariables/{id}` — **updateMergeVariable**: Update a Merge Variable - `GET /mergeVariables/{id}/history` — **getMergeVariableHistory**: Get a Merge Variable's history ### Project Templates - `GET /projectTemplates` — **listProjectTemplates**: Get a list of published project templates ### Projects - `GET /projectEntries` — **listProjectEntries**: List your Project Entries - `POST /projectEntries` — **createProjectEntry**: Create a new Project Entry - `GET /projectEntries/{entryId}/attachments` — **getProjectEntryAttachments**: List attachments for a Project Entry - `POST /projectEntries/{entryId}/attachments/upload` — **uploadProjectEntryAttachment**: Upload an attachment to a Project Entry - `DELETE /projectEntries/{entryId}/attachments/{fileVersionId}` — **deleteProjectEntryAttachment**: Delete an attachment from a Project Entry - `POST /projectEntries/{entryId}/attachments/{fileVersionId}/replace` — **replaceProjectEntryAttachment**: Replace an attachment on a Project Entry - `DELETE /projectEntries/{projectEntryId}` — **deleteProjectEntry**: Delete a specific Project Entry - `GET /projectEntries/{projectEntryId}` — **getProjectEntry**: Retrieve a specific Project Entry - `PUT /projectEntries/{projectEntryId}` — **updateProjectEntry**: Update a specific Project Entry - `POST /projectTemplates/{projectTemplateId}/projects` — **createProjectFromTemplate**: Create a project using a template (This creates an async task to execute this operation) - `GET /projects` — **listProjects**: List projects you can interact with - `POST /projects` — **createProject**: Create a project - `GET /projects/summary` — **getProjectSummaryList**: Get the status summary list of Projects filtered by date last synced - `DELETE /projects/{projectId}` — **deleteProject**: Delete a Project and its data - `GET /projects/{projectId}` — **getProject**: Get a Project's data - `PUT /projects/{projectId}` — **updateProject**: Update a Project's status - `GET /projects/{projectId}/complianceSets` — **getProjectComplianceSets**: Get the Compliance Sets for a Project - `POST /projects/{projectId}/complianceSets` — **createComplianceSet**: Create a Compliance Set for a Project - `DELETE /projects/{projectId}/complianceSets/{complianceSetId}` — **deleteProjectComplianceSet**: Delete a Compliance Set for a Project - `GET /projects/{projectId}/complianceSets/{complianceSetId}` — **getProjectComplianceSet**: Get a Compliance Set for a Project - `PUT /projects/{projectId}/complianceSets/{complianceSetId}` — **updateProjectComplianceSet**: Update a Compliance Set for a Project - `GET /projects/{projectId}/customProjectFields` — **getCustomProjectFieldValuesForProject**: Get Custom Project Field values for a given Project - `PATCH /projects/{projectId}/customProjectFields` — **setCustomProjectFieldValuesForProject**: Edit Custom Project Field values for a given Project - `GET /projects/{projectId}/mergeVariables` — **getMergeVariableValuesForProject**: Get Project Merge Variable values for a Project - `PATCH /projects/{projectId}/mergeVariables` — **setMergeVariableValuesForProject**: Edit the values of Project Merge Variables for a Project - `POST /projects/{projectId}/opportunityLink` — **createOpportunityLink**: Link a Loopio Project and CRM Opportunity - `GET /projects/{projectId}/participants` — **getProjectParticipants**: Get the participants for a Project - `PUT /projects/{projectId}/participants` — **updateProjectParticipants**: Update the participants for a Project - `GET /projects/{projectId}/sourceDocuments` — **listProjectSourceDocuments**: View basic information on a Project's source files - `POST /projects/{projectId}/sourceDocuments` — **addProjectSourceDocument**: Attach a source document to a Loopio Project - `GET /projects/{projectId}/summary` — **getProjectSummary**: Get the status summary of a Project - `GET /sections` — **listProjectSections**: List your Project sections - `POST /sections` — **createProjectSection**: Create a new Project section - `DELETE /sections/{sectionId}` — **deleteProjectSection**: Delete a Project section and its content - `GET /sections/{sectionId}` — **getProjectSection**: Retrieve a specific Project section - `PUT /sections/{sectionId}` — **updateProjectSection**: Update a specific Project section - `GET /subSections` — **listProjectSubSections**: List your Project subSections - `POST /subSections` — **createProjectSubSection**: Create a new Project subSection - `DELETE /subSections/{subSectionId}` — **deleteProjectSubSection**: Delete a Project subSection and its content - `GET /subSections/{subSectionId}` — **getProjectSubQuestion**: Retrieve a specific Project subSection - `PUT /subSections/{subSectionId}` — **updateProjectSubSection**: Update a specific Project subSection ### Roles - `GET /roles` — **listRoles**: List all user roles - `GET /roles/{roleId}` — **getRole**: Get a user role ### Stacks - `GET /stacks` — **listStacks**: List accessible stacks; View full Library structure ### Tags - `GET /tags` — **getTags**: List Available Tags ### Teams - `GET /teams` — **listTeams**: List all teams - `GET /teams/{teamId}` — **getTeam**: Get a team's data ### Users - `POST /businessUnitUsers/bulkAssign` — **bulkAssignBusinessUnitUsers**: bulk assign users to business units - `GET /identify/me` — **identifyUser**: Get a User's information from a JWT - `GET /users` — **listUsers**: List Users - `POST /users` — **createUser**: Create a User - `POST /users/bulk/accountAccessEmail` — **bulkResendActivationEmail**: Bulk resend activation email - `POST /users/bulk/assignRole` — **bulkAssignRole**: Bulk assign a Role to Users - `POST /users/bulk/assignToTeams` — **bulkAssignUsersToTeams**: Bulk assign Users to Teams - `POST /users/bulk/disableByEmail` — **bulkUserDisableByEmail**: Bulk disable Users by email - `POST /users/bulk/remove` — **bulkRemoveUsers**: Bulk remove Users - `GET /users/{userId}` — **getUser**: Get a User - `PUT /users/{userId}` — **updateUser**: Update a User ### Webhooks - `GET /webhookSubscriptions` — **listWebhookSubscriptions**: List your event subscriptions (webhooks) - `POST /webhookSubscriptions` — **createWebhookSubscription**: Create a new event subscription (new webhook) - `DELETE /webhookSubscriptions/{subscriptionId}` — **cancelWebhookSubscription**: Cancel an event subscription - `GET /webhookSubscriptions/{subscriptionId}` — **getWebhookSubscription**: Get event subscription details - `PUT /webhookSubscriptions/{subscriptionId}` — **updateWebhookSubscription**: Change event subscription details - `POST /webhookSubscriptions/{subscriptionId}/signingSecret` — **refreshWebhookSigningSecret**: Refresh a webhook's signing secret to a new value ## Artifacts in this profile - `openapi/loopio-openapi.yaml` — OpenAPI 3.0.1, harvested verbatim from Loopio's Stoplight project - `authentication/loopio-authentication.yml` — OAuth 2.0 profile, token request, credential lifecycle, regions - `scopes/loopio-scopes.yml` — 51 scopes advertised by the authorization server vs 22 in the OpenAPI - `conventions/loopio-conventions.yml` — pagination, JSON Patch, async tasks, error envelope, reversibility - `errors/loopio-problem-types.yml` — the 7-value error name enum and per-status catalog - `data-model/loopio-data-model.yml` — 72 entities and their relationships - `asyncapi/loopio-events-webhooks.yml` — the 4-event webhook catalog and signing scheme - `lifecycle/loopio-lifecycle.yml` — versioning, deprecation, status page - `conformance/loopio-conformance.yml` — standards conformance including the SCIM signal - `rate-limits/loopio-rate-limits.yml` — an honest zero — nothing published - `plans/loopio-plans-pricing.yml` — enterprise sales-led; no published prices - `packages/loopio-packages.yml` — no first-party SDKs in any registry - `mcp/loopio-mcp.yml` — MCP scopes advertised, no reachable endpoint found - `well-known/loopio-well-known.yml` — the two documents api.loopio.com actually serves - `security/loopio-domain-security.yml` — TLS/HSTS/SPF/DMARC/DNSSEC probe - `skills/_index.yml` — 4 packaged Agent Skills grounded in real operationIds - `overlays/loopio-openapi-overlay.yaml` — our annotations; the original spec is never mutated