diff --git a/CLAUDE.md b/CLAUDE.md index 7f8244a58..9689b4cc4 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -41,13 +41,13 @@ Coverage enforcement: **100% lines/statements, 97% branches** per package (see e ## Architecture Overview -This is the **foundation library layer** for all SpaceCat Node.js services. It's an npm workspaces monorepo (no lerna/nx) containing 23 packages that provide data access, API clients, utilities, and auth used by `spacecat-api-service`, `spacecat-audit-worker`, `spacecat-import-worker`, and other platform services. +This is the **foundation library layer** for all SpaceCat Node.js services. It's an npm workspaces monorepo (no lerna/nx) whose packages provide data access, API clients, utilities, and auth used by `spacecat-api-service`, `spacecat-audit-worker`, `spacecat-import-worker`, and other platform services. ### Monorepo Structure ``` spacecat-shared/ -├── packages/ # 23 npm workspace packages +├── packages/ # npm workspace packages │ ├── spacecat-shared-data-access/ # Core data layer (PostgREST + Aurora PostgreSQL) │ ├── spacecat-shared-http-utils/ # HTTP response helpers + auth middleware │ ├── spacecat-shared-utils/ # General utilities (validation, S3, SQS, helpers) diff --git a/package-lock.json b/package-lock.json index 57d1ed9ac..42ca2c54f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -568,6 +568,10 @@ "resolved": "packages/spacecat-shared-tokowaka-client", "link": true }, + "node_modules/@adobe/spacecat-shared-user-manager-client": { + "resolved": "packages/spacecat-shared-user-manager-client", + "link": true + }, "node_modules/@adobe/spacecat-shared-utils": { "resolved": "packages/spacecat-shared-utils", "link": true @@ -37060,6 +37064,74 @@ "node": ">=20.18.1" } }, + "packages/spacecat-shared-user-manager-client": { + "name": "@adobe/spacecat-shared-user-manager-client", + "version": "1.0.0", + "license": "Apache-2.0", + "devDependencies": { + "c8": "11.0.0", + "chai": "6.2.2", + "counterfact": "2.14.0", + "js-yaml": "4.1.1", + "mocha": "11.7.6", + "mocha-multi-reporters": "1.5.1", + "openapi-typescript": "7.13.0", + "swagger2openapi": "7.0.8" + }, + "engines": { + "node": ">=22.0.0 <25.0.0", + "npm": ">=10.9.0 <12.0.0" + } + }, + "packages/spacecat-shared-user-manager-client/node_modules/openapi-typescript": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.13.0.tgz", + "integrity": "sha512-EFP392gcqXS7ntPvbhBzbF8TyBA+baIYEm791Hy5YkjDYKTnk/Tn5OQeKm5BIZvJihpp8Zzr4hzx0Irde1LNGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@redocly/openapi-core": "^1.34.6", + "ansi-colors": "^4.1.3", + "change-case": "^5.4.4", + "parse-json": "^8.3.0", + "supports-color": "^10.2.2", + "yargs-parser": "^21.1.1" + }, + "bin": { + "openapi-typescript": "bin/cli.js" + }, + "peerDependencies": { + "typescript": "^5.x" + } + }, + "packages/spacecat-shared-user-manager-client/node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "packages/spacecat-shared-user-manager-client/node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, "packages/spacecat-shared-utils": { "name": "@adobe/spacecat-shared-utils", "version": "1.120.1", diff --git a/packages/spacecat-shared-user-manager-client/.gitattributes b/packages/spacecat-shared-user-manager-client/.gitattributes new file mode 100644 index 000000000..96fe0c190 --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/.gitattributes @@ -0,0 +1,2 @@ +src/generated/** linguist-generated=true +python/serenity_user_manager/** linguist-generated=true diff --git a/packages/spacecat-shared-user-manager-client/.gitignore b/packages/spacecat-shared-user-manager-client/.gitignore new file mode 100644 index 000000000..dbdd061f7 --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/.gitignore @@ -0,0 +1,9 @@ +# Intermediate conversion artifact — regenerated by `npm run spec:convert`, never committed. +build/ + +# Counterfact scratch dir (mock handlers materialized at runtime). +.counterfact/ + +# The generated Python package is committed (model.py, __init__.py, plus any +# per-prefix modules); only the bytecode caches are ignored. +python/**/__pycache__/ diff --git a/packages/spacecat-shared-user-manager-client/.jsdoc.json b/packages/spacecat-shared-user-manager-client/.jsdoc.json new file mode 100644 index 000000000..5e15c5493 --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/.jsdoc.json @@ -0,0 +1,17 @@ +{ + "plugins": [], + "recurseDepth": 10, + "source": { + "includePattern": ".+\\.js(doc|x)?$", + "excludePattern": "(^|\\/|\\\\)_" + }, + "sourceType": "module", + "tags": { + "allowUnknownTags": true, + "dictionaries": ["jsdoc","closure"] + }, + "templates": { + "cleverLinks": false, + "monospaceLinks": false + } +} diff --git a/packages/spacecat-shared-user-manager-client/.mocha-multi.json b/packages/spacecat-shared-user-manager-client/.mocha-multi.json new file mode 100644 index 000000000..aa2be2a23 --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/.mocha-multi.json @@ -0,0 +1,6 @@ +{ + "reporterEnabled": "spec,xunit", + "xunitReporterOptions": { + "output": "junit/test-results.xml" + } +} diff --git a/packages/spacecat-shared-user-manager-client/.npmignore b/packages/spacecat-shared-user-manager-client/.npmignore new file mode 100644 index 000000000..f14c4b0a5 --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/.npmignore @@ -0,0 +1,12 @@ +coverage/ +node_modules/ +junit/ +test/ +docs/ +logs/ +build/ +python/ +.counterfact/ +test-results.xml +renovate.json +.* diff --git a/packages/spacecat-shared-user-manager-client/.npmrc b/packages/spacecat-shared-user-manager-client/.npmrc new file mode 100644 index 000000000..b6f27f135 --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/packages/spacecat-shared-user-manager-client/.nycrc.json b/packages/spacecat-shared-user-manager-client/.nycrc.json new file mode 100644 index 000000000..e4e991582 --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/.nycrc.json @@ -0,0 +1,17 @@ +{ + "reporter": [ + "lcov", + "text" + ], + "check-coverage": true, + "lines": 100, + "branches": 100, + "statements": 100, + "all": true, + "include": [ + "src/**/*.js" + ], + "exclude": [ + "src/generated/**" + ] +} diff --git a/packages/spacecat-shared-user-manager-client/.releaserc.cjs b/packages/spacecat-shared-user-manager-client/.releaserc.cjs new file mode 100644 index 000000000..90e3ee49d --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/.releaserc.cjs @@ -0,0 +1,21 @@ +module.exports = { + extends: "semantic-release-monorepo", + plugins: [ + ["@semantic-release/commit-analyzer", { + "preset": "conventionalcommits", + }], + ["@semantic-release/release-notes-generator", { + "preset": "conventionalcommits", + }], + ["@semantic-release/changelog", { + "changelogFile": "CHANGELOG.md", + }], + ...(process.env.SR_NO_NPM_AUTH === 'true' ? [] : ["@semantic-release/npm"]), + ["@semantic-release/git", { + "assets": ["package.json", "CHANGELOG.md"], + "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}" + }], + ["@semantic-release/github", {}], + ], + branches: ['main'], +}; diff --git a/packages/spacecat-shared-user-manager-client/CODE_OF_CONDUCT.md b/packages/spacecat-shared-user-manager-client/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..5405eda07 --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/CODE_OF_CONDUCT.md @@ -0,0 +1,74 @@ +# Adobe Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +nationality, personal appearance, race, religion, or sexual identity and +orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or +advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at Grp-opensourceoffice@adobe.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/packages/spacecat-shared-user-manager-client/CONTRIBUTING.md b/packages/spacecat-shared-user-manager-client/CONTRIBUTING.md new file mode 100644 index 000000000..4875f33b7 --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/CONTRIBUTING.md @@ -0,0 +1,74 @@ +# Contributing to Spacecat Shared + +This project (like almost all of Project Franklin) is an Open Development project and welcomes contributions from everyone who finds it useful or lacking. + +## Code Of Conduct + +This project adheres to the Adobe [code of conduct](CODE_OF_CONDUCT.md). By participating, you are expected to uphold this code. Please report unacceptable behavior to cstaub at adobe dot com. + +## Contributor License Agreement + +All third-party contributions to this project must be accompanied by a signed contributor license. This gives Adobe permission to redistribute your contributions as part of the project. [Sign our CLA](http://opensource.adobe.com/cla.html)! You only need to submit an Adobe CLA one time, so if you have submitted one previously, you are good to go! + +## Things to Keep in Mind + +This project uses a **commit then review** process, which means that for approved maintainers, changes can be merged immediately, but will be reviewed by others. + +For other contributors, a maintainer of the project has to approve the pull request. + +# Before You Contribute + +* Check that there is an existing issue in GitHub issues +* Check if there are other pull requests that might overlap or conflict with your intended contribution + +# How to Contribute + +1. Fork the repository +2. Make some changes on a branch on your fork +3. Create a pull request from your branch + +In your pull request, outline: + +* What the changes intend +* How they change the existing code +* If (and what) they breaks +* Start the pull request with the GitHub issue ID, e.g. #123 + +Lastly, please follow the [pull request template](.github/pull_request_template.md) when submitting a pull request! + +Each commit message that is not part of a pull request: + +* Should contain the issue ID like `#123` +* Can contain the tag `[trivial]` for trivial changes that don't relate to an issue + + + +## Coding Styleguides + +We enforce a coding styleguide using `eslint`. As part of your build, run `npm run lint` to check if your code is conforming to the style guide. We do the same for every PR in our CI, so PRs will get rejected if they don't follow the style guide. + +You can fix some of the issues automatically by running `npx eslint . --fix`. + +## Commit Message Format + +This project uses a structured commit changelog format that should be used for every commit. Use `npm run commit` instead of your usual `git commit` to generate commit messages using a wizard. + +```bash +# either add all changed files +$ git add -A +# or selectively add files +$ git add package.json +# then commit using the wizard +$ npm run commit +``` + +# How Contributions get Reviewed + +One of the maintainers will look at the pull request within one week. Feedback on the pull request will be given in writing, in GitHub. + +# Release Management + +The project's committers will release to the [Adobe organization on npmjs.org](https://www.npmjs.com/org/adobe). +Please contact the [Adobe Open Source Advisory Board](https://git.corp.adobe.com/OpenSourceAdvisoryBoard/discuss/issues) to get access to the npmjs organization. + +The release process is fully automated using `semantic-release`, increasing the version numbers, etc. based on the contents of the commit messages found. diff --git a/packages/spacecat-shared-user-manager-client/LICENSE.txt b/packages/spacecat-shared-user-manager-client/LICENSE.txt new file mode 100644 index 000000000..a09c4c0fc --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/LICENSE.txt @@ -0,0 +1,263 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions + of this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing + the origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +APACHE JACKRABBIT SUBCOMPONENTS + +Apache Jackrabbit includes parts with separate copyright notices and license +terms. Your use of these subcomponents is subject to the terms and conditions +of the following licenses: + + XPath 2.0/XQuery 1.0 Parser: + http://www.w3.org/2002/11/xquery-xpath-applets/xgrammar.zip + + Copyright (C) 2002 World Wide Web Consortium, (Massachusetts Institute of + Technology, European Research Consortium for Informatics and Mathematics, + Keio University). All Rights Reserved. + + This work is distributed under the W3C(R) Software License in the hope + that it will be useful, but WITHOUT ANY WARRANTY; without even the + implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + W3C(R) SOFTWARE NOTICE AND LICENSE + http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231 + + This work (and included software, documentation such as READMEs, or + other related items) is being provided by the copyright holders under + the following license. By obtaining, using and/or copying this work, + you (the licensee) agree that you have read, understood, and will comply + with the following terms and conditions. + + Permission to copy, modify, and distribute this software and its + documentation, with or without modification, for any purpose and + without fee or royalty is hereby granted, provided that you include + the following on ALL copies of the software and documentation or + portions thereof, including modifications: + + 1. The full text of this NOTICE in a location viewable to users + of the redistributed or derivative work. + + 2. Any pre-existing intellectual property disclaimers, notices, + or terms and conditions. If none exist, the W3C Software Short + Notice should be included (hypertext is preferred, text is + permitted) within the body of any redistributed or derivative code. + + 3. Notice of any changes or modifications to the files, including + the date changes were made. (We recommend you provide URIs to the + location from which the code is derived.) + + THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT + HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, + INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS + FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR + DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, + TRADEMARKS OR OTHER RIGHTS. + + COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL + OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR + DOCUMENTATION. + + The name and trademarks of copyright holders may NOT be used in + advertising or publicity pertaining to the software without specific, + written prior permission. Title to copyright in this software and + any associated documentation will at all times remain with + copyright holders. diff --git a/packages/spacecat-shared-user-manager-client/README.md b/packages/spacecat-shared-user-manager-client/README.md new file mode 100644 index 000000000..8bb824741 --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/README.md @@ -0,0 +1,110 @@ +# @adobe/spacecat-shared-user-manager-client + +Typed integration with the Semrush **User Manager API** (`/enterprise/users/api`): + +- generated **TypeScript** (`src/generated/types.ts`) and **Pydantic v2** (`python/serenity_user_manager/`) types, +- a generation-time **spec-correction overlay** (`spec/overlays/corrections.yaml`) that aligns the vendored swagger with the live API (see [Spec corrections](#spec-corrections)), +- a **Counterfact mock** for E2E tests and local dev (`npm run mock`). + +> **Not here yet:** the typed **client wrapper** and the stateful mock store are +> tracked follow-ups. This package mirrors the Project Engine foundation + overlay +> (LLMO-5461) applied to a second, larger API (see LLMO-5558). + +This package follows the `spacecat-shared` convention: **JS + ESM**, JSDoc-typed source, +`mocha` + `chai` + `c8` for tests, and `@adobe/eslint-config-helix` for lint. The scaffold's +TypeScript surface is ported to JS + JSDoc; the generated `types.ts` is a **type artifact only**, +consumed by the client via JSDoc `import(...)` and by `openapi-fetch` at type-check time. + +## Spec source + +The spec is a **vendored file** — `spec/usermanager_swagger.yaml` — kept under version +control. Semrush only provides the file (no endpoint access in the near term), and it's +**Swagger 2.0** (no v3/v3.1 on offer). It is large: ~234 paths / ~284 operations across +~30 tags (Admin, Users, Workspaces, Projects, Keywords, Limits, Service Units, +ActivationPanel, …), ~187 user-facing operations and ~97 admin/internal operations. + +The vendored file is **never edited**; where it diverges from the live API, a generation-time +overlay corrects the converted artifact instead (see [Spec corrections](#spec-corrections)). +Refresh is **manual**: drop in the newer file, re-run `npm run generate`, and review the diff. +There is no automated drift detection while endpoint access is restricted. + +## Pipeline + +``` +spec/usermanager_swagger.yaml (vendored, Swagger 2.0) + │ + ├── Counterfact ── reads v2 directly ──► mock (no conversion) [npm run mock] + │ + └── swagger2openapi (v2 → 3.x) ──► build/openapi3.json + │ + ├── apply-overlay (corrections) ──► build/openapi3.json (in place) + │ + ├── openapi-typescript ──► src/generated/types.ts + └── datamodel-code-generator ──► python/serenity_user_manager/ +``` + +The v2 → 3.x conversion exists **only** to feed the type generators (`openapi-typescript` +is v3-only, and 3.x yields cleaner TS/Pydantic); the overlay then corrects that converted +artifact before the generators run. **Counterfact reads the raw v2 file directly**, so the mock +path never touches the converted artifact (and so does not see the corrections — a known gap the +client wrapper's follow-up addresses). + +| Command | Does | +| --- | --- | +| `npm run spec:convert` | v2 → 3.x via `swagger2openapi --patch` → `build/openapi3.json` | +| `npm run spec:overlay` | apply `spec/overlays/corrections.yaml` to `build/openapi3.json` in place | +| `npm run generate:ts` | `openapi-typescript` → `src/generated/types.ts` | +| `npm run generate:pydantic` | `datamodel-code-generator` → `python/serenity_user_manager/` package | +| `npm run generate` | all of the above, in order | +| `npm run mock` | Counterfact mock on `:4010`, straight off the v2 spec | + +`datamodel-code-generator` is a **Python** tool, not an npm dependency. Install it once on +your `PATH` before running `generate:pydantic`: + +```bash +pip install datamodel-code-generator +``` + +## Spec corrections + +The vendored swagger diverges from the live API in two places. A small OpenAPI Overlay +(`spec/overlays/corrections.yaml`), applied to the converted OAS3 artifact at generation time by +`scripts/apply-overlay.mjs`, corrects them; the vendored `spec/usermanager_swagger.yaml` is never +touched. + +- **CR1 — auth.** The spec models a required `Auth-Data-Jwt` header on ~187 operations, but the + live API authenticates on `Authorization: Bearer ` only — Semrush accepts the IMS bearer + directly. The overlay removes `Auth-Data-Jwt` from every operation and adds an `imsBearer` + security scheme. (Verified rainer-friederich 2026-06-15: `Auth-Data-Jwt` alone → 401; both + headers → 401; `Authorization: Bearer` → 200.) +- **CR2 — workspace status shape.** `GET /v1/workspaces/{id}/status` is typed as an array of + `WorkspaceCheckResponse`, but the live API returns a single object + (`{ status: "not ready" | "created" | "error" }`) — the deployed api-service transport reads it + as `status.status === 'created'`. The overlay drops the array wrapper. + +Guard tests in `test/foundation.test.js` pin CR1 and CR2 against the generated surface, so a +future Semrush spec refresh that silently drops the overlay fails loudly instead of regressing the +generated types. `test/overlay.test.js` covers the overlay applier itself. + +## Committed vs generated + +- **Committed:** the vendored spec (`spec/usermanager_swagger.yaml`). +- **Generated, committed in its own commit** and marked `linguist-generated` (see + `.gitattributes`) so it's collapsed in review and excluded from diff counts: + `src/generated/**`, `python/serenity_user_manager/**`. + + `datamodel-code-generator` may emit a **package** (`model.py`, `__init__.py`, plus one + module per dotted schema-name prefix) rather than a single `models.py`, mirroring the + vendored spec's modular schema references. This is a tool-driven layout choice, not a + spec edit. +- **Gitignored intermediate:** `build/openapi3.json`, `.counterfact/`. + +## Notes + +- The package is `@adobe/spacecat-shared-*` and lives under the monorepo `packages/` layout. +- Pydantic v2 is the default target; switch the `--output-model-type` flag in + `generate:pydantic` if a consumer needs v1. +- The base host is shared with Project Engine (`SEMRUSH_PROJECTS_BASE_URL`, e.g. the dev + `https://adobe-hackathon.semrush.com`); only the basePath differs (`/enterprise/users/api` + vs `/enterprise/projects/api`). The live API authenticates on `Authorization: Bearer ` — + Semrush accepts the IMS bearer directly (see [Spec corrections](#spec-corrections)). diff --git a/packages/spacecat-shared-user-manager-client/package.json b/packages/spacecat-shared-user-manager-client/package.json new file mode 100644 index 000000000..bec293ead --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/package.json @@ -0,0 +1,53 @@ +{ + "name": "@adobe/spacecat-shared-user-manager-client", + "version": "1.0.0", + "description": "Shared modules of the Spacecat Services - Semrush User Manager client and generated types", + "type": "module", + "private": true, + "types": "./src/generated/types.ts", + "engines": { + "node": ">=22.0.0 <25.0.0", + "npm": ">=10.9.0 <12.0.0" + }, + "scripts": { + "test": "c8 mocha", + "lint": "eslint .", + "lint:fix": "eslint --fix .", + "clean": "rm -rf node_modules build .counterfact", + "spec:convert": "mkdir -p build && swagger2openapi spec/usermanager_swagger.yaml --patch --outfile build/openapi3.json", + "spec:overlay": "node scripts/apply-overlay.mjs", + "generate:ts": "openapi-typescript build/openapi3.json --output src/generated/types.ts", + "generate:pydantic": "command -v datamodel-codegen >/dev/null 2>&1 || { echo 'ERROR: datamodel-codegen not found on PATH. Install it first: pip install datamodel-code-generator'; exit 1; }; datamodel-codegen --input build/openapi3.json --input-file-type openapi --output python/serenity_user_manager/ --output-model-type pydantic_v2.BaseModel", + "generate": "npm run spec:convert && npm run spec:overlay && npm run generate:ts && npm run generate:pydantic", + "mock": "counterfact spec/usermanager_swagger.yaml .counterfact --port 4010" + }, + "mocha": { + "reporter": "mocha-multi-reporters", + "reporter-options": "configFile=.mocha-multi.json", + "spec": "test/**/*.test.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/adobe/spacecat-shared.git" + }, + "author": "", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/adobe/spacecat-shared/issues" + }, + "homepage": "https://github.com/adobe/spacecat-shared/packages/spacecat-shared-user-manager-client/#readme", + "publishConfig": { + "access": "public" + }, + "dependencies": {}, + "devDependencies": { + "c8": "11.0.0", + "chai": "6.2.2", + "counterfact": "2.14.0", + "js-yaml": "4.1.1", + "mocha": "11.7.6", + "mocha-multi-reporters": "1.5.1", + "openapi-typescript": "7.13.0", + "swagger2openapi": "7.0.8" + } +} diff --git a/packages/spacecat-shared-user-manager-client/python/serenity_user_manager/__init__.py b/packages/spacecat-shared-user-manager-client/python/serenity_user_manager/__init__.py new file mode 100644 index 000000000..586515f1d --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/python/serenity_user_manager/__init__.py @@ -0,0 +1,3 @@ +# generated by datamodel-codegen: +# filename: openapi3.json +# timestamp: 2026-06-15T17:23:07+00:00 diff --git a/packages/spacecat-shared-user-manager-client/python/serenity_user_manager/handlers.py b/packages/spacecat-shared-user-manager-client/python/serenity_user_manager/handlers.py new file mode 100644 index 000000000..a1b8978c7 --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/python/serenity_user_manager/handlers.py @@ -0,0 +1,2388 @@ +# generated by datamodel-codegen: +# filename: openapi3.json +# timestamp: 2026-06-15T17:23:07+00:00 + +from __future__ import annotations + +from datetime import date as date_aliased +from enum import Enum +from typing import Any + +from pydantic import BaseModel, Field, RootModel, conint, constr + +from . import page_engine_backend_internal_usermanager_core_domain, rbac + + +class APIUnitsResponse(BaseModel): + api_units: int | None = None + + +class ActivationPanelAdminActivity(BaseModel): + action: str | None = None + admin_email: str | None = None + admin_id: int | None = None + corporate_account_id: int | None = None + created_at: str | None = None + log_id: int | None = None + owner_id: int | None = None + section: str | None = None + subscription_id: int | None = None + user_email: str | None = None + workspace_id: str | None = None + + +class ActivationPanelAdminActivityResponse(BaseModel): + items: list[ActivationPanelAdminActivity] | None = None + limit: int | None = None + page: int | None = None + total: int | None = None + + +class ActivationPanelBillingStatusCoreAccountId(BaseModel): + corporate_account_id: int | None = None + subscription_id: int | None = None + + +class ActivationPanelOwner(BaseModel): + email: str | None = None + id: int | None = None + + +class ActivationPanelWorkspaceMetadata(BaseModel): + icon: str | None = Field(None, examples=['https://example.com/icon.png']) + id: str | None = Field(None, examples=['550e8400-e29b-41d4-a716-446655440000']) + parent_id: str | None = Field(None, examples=['']) + title: str | None = Field(None, examples=['My Workspace']) + + +class AdobeAnalyticsConnectionCreateSettings(BaseModel): + adobe_proxy_auth_id: str + dimension_date_range_day_name: str | None = None + dimension_entry_page_url_name: str + dimension_marketing_channel_detail_name: str + dimension_marketing_channel_name: str + global_company_id: str + metric_bounce_rate_name: str + metric_target_conversion_name: str + metric_visits_name: str + rs_name: str + rsid: str + + +class AdobeAnalyticsConnectionCreateSettingsV2(BaseModel): + credential_id: int + dimension_date_range_day_name: str | None = None + dimension_entry_page_url_name: str + dimension_marketing_channel_detail_name: str + dimension_marketing_channel_name: str + global_company_id: str + metric_bounce_rate_name: str + metric_target_conversion_name: str + metric_visits_name: str + rs_name: str + rsid: str + + +class AdobeAnalyticsConnectionSettings(BaseModel): + credential_id: int | None = None + dimension_date_range_day_name: str | None = None + dimension_entry_page_url_name: str | None = None + dimension_marketing_channel_detail_name: str | None = None + dimension_marketing_channel_name: str | None = None + global_company_id: str | None = None + metric_bounce_rate_name: str | None = None + metric_target_conversion_name: str | None = None + metric_visits_name: str | None = None + rs_name: str | None = None + rsid: str | None = None + + +class AdobeAnalyticsConnectionUpdateSettings(BaseModel): + adobe_proxy_auth_id: str + dimension_date_range_day_name: str | None = None + dimension_entry_page_url_name: str + dimension_marketing_channel_detail_name: str + dimension_marketing_channel_name: str + global_company_id: str + metric_bounce_rate_name: str + metric_target_conversion_name: str + metric_visits_name: str + rs_name: str + rsid: str + + +class AdobeAnalyticsConnectionUpdateSettingsV2(BaseModel): + credential_id: int + dimension_date_range_day_name: str | None = None + dimension_entry_page_url_name: str + dimension_marketing_channel_detail_name: str + dimension_marketing_channel_name: str + global_company_id: str + metric_bounce_rate_name: str + metric_target_conversion_name: str + metric_visits_name: str + rs_name: str + rsid: str + + +class AdobeAnalyticsValidateRequest(BaseModel): + dimension: str | None = None + metric: str + rsid: str + + +class AdobeAnalyticsValidateResponse(BaseModel): + message: str | None = None + valid: bool | None = None + + +class AdobeAnalyticsValidateV2Request(BaseModel): + credential_id: int + dimension: str | None = None + global_company_id: str + metric: str + rsid: str + + +class AdobeAnalyticsWorkspaceConnectionCreate(BaseModel): + project_ids: list[str] | None = None + settings: AdobeAnalyticsConnectionCreateSettings | None = None + + +class AdobeAnalyticsWorkspaceConnectionCreateV2(BaseModel): + project_ids: list[str] | None = None + settings: AdobeAnalyticsConnectionCreateSettingsV2 | None = None + + +class AdobeAnalyticsWorkspaceConnectionUpdate(BaseModel): + project_ids: list[str] | None = None + settings: AdobeAnalyticsConnectionUpdateSettings | None = None + + +class AdobeAnalyticsWorkspaceConnectionUpdateV2(BaseModel): + project_ids: list[str] | None = None + settings: AdobeAnalyticsConnectionUpdateSettingsV2 | None = None + + +class AdobeBulkStatusRequest(BaseModel): + adobe_proxy_auth_ids: list[str] = Field(..., min_length=1) + + +class AdobeCompanyInfo(BaseModel): + company_name: str | None = None + global_company_id: str | None = None + + +class AdobeCredentialCreatedResponse(BaseModel): + credential_id: int | None = None + + +class AdobeCredentialsCreateRequest(BaseModel): + client_id: str + client_secret: str + + +class AdobeCredentialsInfo(BaseModel): + adobe_proxy_auth_id: str | None = None + + +class AdobeOrganizationInfo(BaseModel): + companies: list[AdobeCompanyInfo] | None = None + organization_id: str | None = None + + +class BaseProject(BaseModel): + color: str | None = None + domain: str | None = None + is_draft: bool | None = None + title: str | None = None + total_invited_members: int | None = None + + +class BasicUserProfile(BaseModel): + email: str | None = None + id: int | None = None + name: str | None = None + profile_pic: str | None = None + + +class BasicWorkspaceMember(BaseModel): + email: str | None = None + id: int | None = None + name: str | None = None + profile_pic: str | None = None + + +class BatchDeleteReferenceRequest(BaseModel): + all: bool | None = None + cascade: bool | None = None + ids: list[str] | None = None + + +class ConsumedUnits(BaseModel): + users: int | None = None + + +class CopyAllSegmentsRequest(BaseModel): + source_project_id: str + + +class CopySegmentsRequest(BaseModel): + segment_ids: list[str] = Field(..., min_length=1) + target_project_ids: list[str] = Field(..., min_length=1) + + +class CoreUser(BaseModel): + activated: bool | None = None + company: str | None = None + email: str | None = None + id: int | None = None + locale: str | None = None + name: str | None = None + profession: str | None = None + timezone_new: str | None = None + + +class CoreUserWithAPIKey(BaseModel): + activated: bool | None = None + api_key: str | None = None + company: str | None = None + email: str | None = None + id: int | None = None + locale: str | None = None + name: str | None = None + profession: str | None = None + timezone_new: str | None = None + + +class Country(BaseModel): + code: str | None = None + name: str | None = None + + +class Dimension(BaseModel): + category: str | None = None + description: str | None = None + extra_title_info: str | None = None + id: str | None = None + name: str | None = None + pathable: bool | None = None + reportable: list[str] | None = None + segmentable: bool | None = None + support: list[str] | None = None + title: str | None = None + type: str | None = None + + +class Filter(BaseModel): + column_name: str | None = None + filters: list[Filter] | None = None + operator: str + value: Any + + +class GoogleAdsConnectionSettings(BaseModel): + customer_id: int + customer_title: str + gap_email: str + gap_user_id: str + mcc_id: int + + +class GoogleAdsWorkspaceConnectionCreate(BaseModel): + project_ids: list[str] | None = None + settings: GoogleAdsConnectionSettings | None = None + + +class GoogleAnalyticsConnectionSettings(BaseModel): + ga_account: str + ga_account_title: str + gap_email: str + gap_user_id: str + property: str + property_title: str + + +class GoogleAnalyticsWorkspaceConnectionCreate(BaseModel): + project_ids: list[str] | None = None + settings: GoogleAnalyticsConnectionSettings | None = None + + +class GoogleSearchConsoleConnectionSettings(BaseModel): + gap_email: str + gap_property: str + gap_user_id: str + + +class HasChildrenResponse(BaseModel): + has_children: bool | None = None + + +class IDsForm(BaseModel): + ids: list[str] = Field(..., min_length=1) + + +class InternalAdobeAnalyticsConnectionSettings(BaseModel): + adobe_proxy_auth_id: str | None = None + dimension_date_range_day_name: str | None = None + dimension_entry_page_url_name: str | None = None + dimension_marketing_channel_detail_name: str | None = None + dimension_marketing_channel_name: str | None = None + global_company_id: str | None = None + metric_bounce_rate_name: str | None = None + metric_target_conversion_name: str | None = None + metric_visits_name: str | None = None + rs_name: str | None = None + rsid: str | None = None + + +class InternalBenchmark(BaseModel): + benchmark_id: str | None = None + created_at: str | None = None + database: str | None = None + device: str | None = None + project_id: str | None = None + target_id: str | None = None + url: str | None = None + url_type: str | None = None + + +class InternalTarget(BaseModel): + campaign_id: str | None = None + created_at: str | None = None + database: str | None = None + device: str | None = None + domains: list[str] | None = None + project_domain: str | None = None + project_id: str | None = None + target_id: str | None = None + + +class KeywordCountResponse(BaseModel): + added_keyword_count: int | None = None + + +class KeywordID(BaseModel): + database: constr(max_length=2) = Field( + ..., + description='Database is the database of the keyword. Max 2 characters are allowed', + ) + phrase: constr(max_length=90) = Field( + ..., description='Phrase is the keyword name. Max 90 characters are allowed' + ) + + +class KeywordResponse(BaseModel): + click_potential: int | None = None + created_at: str | None = None + difficulty100: int | None = None + id: KeywordID + status: str | None = None + tags: list[str] | None = Field( + None, + description='Tags max 5 tags are allowed, each tag can have max 50 characters', + max_length=5, + ) + updated_at: str | None = None + volume: int | None = None + + +class KeywordsListCreateRequest(BaseModel): + name: constr(max_length=100) = Field( + ..., description='Name of the keywords-list. Max 100 characters are allowed' + ) + + +class KeywordsListCreateResponse(BaseModel): + basket_id: int | None = None + name: str | None = None + updated_at: str | None = None + + +class KeywordsListDatabasesResponse(BaseModel): + databases: list[str] | None = None + + +class KeywordsListDeleteRequest(BaseModel): + basket_ids: list[int] + + +class KeywordsListRenameRequest(BaseModel): + name: constr(max_length=100) = Field( + ..., description='Name of the keywords-list. Max 100 characters are allowed' + ) + + +class KeywordsListRenameResponse(BaseModel): + basket_id: int | None = None + name: str | None = None + updated_at: str | None = None + + +class KeywordsResponse(BaseModel): + keywords: list[KeywordResponse] | None = None + page: int | None = None + total: int | None = None + + +class KeywordsTagsRelationsDeleteForm(BaseModel): + relations: list[list[str]] = Field(..., min_length=1) + + +class KeywordsTagsRequest(BaseModel): + keyword_ids: list[KeywordID] + tags: list[str] = Field(..., max_length=5) + + +class KeywordsTagsUpdateRequest(BaseModel): + keyword_id: KeywordID + tags_create: list[str] | None = Field( + None, + description='TagsCreate max 5 tags are allowed, each tag can have max 50 characters', + max_length=5, + ) + tags_delete: list[str] | None = Field( + None, + description='TagsDelete max 5 tags are allowed, each tag can have max 50 characters', + max_length=5, + ) + + +class Language(BaseModel): + code: str | None = None + name: str | None = None + + +class Location(BaseModel): + id: int | None = None + name: str | None = None + + +class Type(Enum): + success = 'success' + error = 'error' + + +class LogFileAnalysisConnectorStatusPayload(BaseModel): + message: str | None = None + type: Type + + +class LogFileAnalysisFallbackValues(BaseModel): + hostname: str | None = None + protocolSchema: str | None = None + time: str | None = None + timezone: str | None = None + + +class LogFileAnalysisIngestField(BaseModel): + extracts: list[str] | None = None + key: str | None = None + position: int | None = None + template: str | None = None + + +class Delimiter(Enum): + space = 'space' + pipe = 'pipe' + tab = 'tab' + semicolum = 'semicolum' + comma = 'comma' + + +class TypeModel(Enum): + json = 'json' + jsonp = 'jsonp' + text = 'text' + + +class LogFileAnalysisPreProcessing(BaseModel): + type: str | None = None + + +class Metric(BaseModel): + allocation: bool | None = None + calculated: bool | None = None + category: str | None = None + description: str | None = None + id: str | None = None + name: str | None = None + precision: int | None = None + segmentable: bool | None = None + support: list[str] | None = None + title: str | None = None + type: str | None = None + + +class NamedKeywordsFindForm(BaseModel): + keywords: list[str] = Field(..., min_length=1) + + +class OptionsLimits(BaseModel): + total_keywords: int | None = None + total_pagespeed_urls: int | None = None + total_projects: int | None = None + total_service_units: int | None = None + total_users: int | None = None + used_service_units: int | None = None + + +class PreferredURLsUploadResponse(BaseModel): + updated_keywords: int | None = None + + +class ProjectConnectionResponse(BaseModel): + id: int | None = None + type: str | None = None + + +class ReferenceRequest(BaseModel): + id: str + references: list[str] = Field(..., min_length=1) + replace: bool | None = None + + +class ReportSuite(BaseModel): + calendar_type: str | None = None + collection_item_type: str | None = None + currency: str | None = None + name: str | None = None + parent_rsid: str | None = None + rsid: str | None = None + timezone_zoneinfo: str | None = None + virtual_report_suite: bool | None = None + + +class RequiredUserUnitsForm(BaseModel): + emails: list[str] = Field(..., min_length=1) + + +class RequiredUserUnitsResponse(BaseModel): + required_units: int | None = None + + +class LogicOperator(Enum): + and_ = 'and' + or_ = 'or' + + +class TargetLanguage(BaseModel): + id: int | None = None + name: str | None = None + + +class TargetMetadata(BaseModel): + database: str | None = None + device: str | None = None + id: str | None = None + language: TargetLanguage | None = None + location: Location | None = None + name: str | None = None + + +class TargetsStats(BaseModel): + draft_targets_count: int | None = None + target: TargetMetadata | None = None + targets_count: int | None = None + + +class Transaction(BaseModel): + balance_after: int | None = None + balance_before: int | None = None + date: str | None = None + id: str | None = None + iid: int | None = None + operation: str | None = None + owner_id: int | None = None + owner_name: str | None = None + receipt_id: int | None = None + receipt_name: str | None = None + reference_transaction_id: str | None = None + service_credits: int | None = None + service_id: str | None = None + service_type: str | None = None + title: str | None = None + workspace_id: str | None = None + + +class TransactionsCancelForm(BaseModel): + service_credits: conint(ge=1) + + +class TransactionsCreateForm(BaseModel): + owner_id: int + receipt_id: int | None = None + service_credits: conint(ge=1) + service_id: constr(max_length=255) + service_type: str + title: constr(max_length=255) | None = None + workspace_id: str + + +class TransactionsListForm(BaseModel): + end: str | None = Field( + None, description='Must have YYYY-MM-DD format', examples=['2023-10-24'] + ) + operations: list[str] | None = Field( + None, description='Must be debit or credit', examples=[['debit', 'credit']] + ) + owners: list[int] | None = Field(None, examples=[[123, 456]]) + receipts: list[int] | None = Field(None, examples=[[123, 456]]) + service_types: list[str] | None = Field( + None, + description='Must be seo_workflow, job_hourly, job_fixed or service_fee', + examples=[['seo_workflow', 'job_hourly', 'job_fixed', 'service_fee']], + ) + start: str | None = Field( + None, description='Must have YYYY-MM-DD format', examples=['2023-10-24'] + ) + title: constr(max_length=255) | None = Field(None, examples=['some title']) + workspaces: list[str] | None = Field( + None, + examples=[ + [ + 'eab40b25-ec97-4efb-91ea-dbcc6153a721', + 'eab40b25-ec97-4efb-91ea-dbcc6153a722', + ] + ], + ) + + +class TransactionsRefundForm(BaseModel): + amount: conint(ge=1) + + +class UsedLimit(BaseModel): + total: int | None = None + used: int | None = None + + +class UsedLimitWithDrafted(BaseModel): + drafted: int | None = None + total: int | None = None + used: int | None = None + + +class UserJob(BaseModel): + description: constr(max_length=1000) | None = None + end: str | None = None + id: str | None = None + name: constr(max_length=255) | None = None + start: str | None = None + + +class UserProject(BaseModel): + id: str | None = None + title: str | None = None + user_role: str | None = None + + +class UserWorkspace(BaseModel): + id: str | None = None + title: str | None = None + user_role: str | None = None + + +class WorkCategory(BaseModel): + name: str | None = None + skills: list[str] | None = None + + +class WorkspaceCheckResponse(BaseModel): + status: str | None = None + + +class WorkspaceConnectionOwner(BaseModel): + email: str | None = None + id: int | None = None + name: str | None = None + profile_pic: str | None = None + + +class WorkspaceConnectionProject(BaseModel): + id: str | None = None + name: str | None = None + + +class WorkspaceConnectionStatus(BaseModel): + message: str | None = None + type: str | None = None + + +class WorkspaceConnectionsAttachItem(BaseModel): + connection_ids: list[int] | None = None + project_id: str | None = None + + +class WorkspaceConnectionsDeleteRequest(BaseModel): + ids: list[int] | None = None + + +class WorkspaceMemberProject(BaseModel): + id: str | None = None + title: str | None = None + + +class WorkspaceMemberUpsertResponse(BaseModel): + consumed_units: ConsumedUnits | None = None + + +class WorkspaceResources(BaseModel): + api_units: conint(ge=0) | None = None + keywords: conint(ge=0) | None = None + pagespeed_urls: conint(ge=0) | None = None + projects: conint(ge=0) | None = None + service_credits: conint(ge=0) | None = None + users: conint(ge=0) | None = None + + +class PromptType(Enum): + daily = 'daily' + weekly = 'weekly' + + +class ActivationPanelPermission(Enum): + editWorkspaces = 'workspace.edit' + deleteWorkspaces = 'workspace.delete' + viewWorkspaces = 'workspace.view' + addWorkspaces = 'workspace.add' + + +class ActivationPanelSubscriptionForm(BaseModel): + workspace_id: str + + +class AdminSmbProjectMigrationForm(BaseModel): + account_ids: list[int] + + +class AdminWorkspaceCreateForm(BaseModel): + icon: str | None = None + owner_email: str | None = None + parent_id: str + resources: WorkspaceResources + title: str + + +class Ai(BaseModel): + prompts_count: int | None = None + published_projects_count: int | None = None + + +class AiProductResources(BaseModel): + projects: int | None = None + prompts: int | None = None + + +class BasicWorkspacesMembersResponse(BaseModel): + items: list[BasicWorkspaceMember] | None = None + + +class BatchWorkspaceMembersRequest(BaseModel): + include_parental_admins: bool | None = None + workspace_ids: list[str] = Field(..., min_length=1) + + +class BenchmarkBulkUpdateForm(BaseModel): + ids: list[str] = Field(..., min_length=1) + sync_enabled: bool | None = None + tags: list[str] | None = None + + +class BenchmarkCloneForm(BaseModel): + dst_target_id: str + src_target_id: str + + +class BenchmarkCreateForm(BaseModel): + color: str | None = None + sync_enabled: bool | None = None + tags: list[str] | None = None + url: str + + +class BenchmarkRemoveTagsForm(BaseModel): + benchmark_ids: list[str] = Field(..., min_length=1) + tag_ids: list[str] = Field(..., min_length=1) + + +class BenchmarkTags(RootModel[dict[str, list[str]]]): + root: dict[str, list[str]] + + +class BenchmarkUpdateForm(BaseModel): + color: str | None = None + sync_enabled: bool | None = None + tags: list[str] | None = None + url: str | None = None + + +class BenchmarksDeleteForm(BaseModel): + ids: list[str] = Field(..., min_length=1) + + +class BillingStatusResponse(BaseModel): + expire_date: str | None = None + has_product: bool | None = None + is_paid: bool | None = None + subscription_id: int | None = None + user_id: int | None = None + + +class Ci(BaseModel): + pages: int | None = None + published_projects_count: int | None = None + + +class GetServiceUnitsResponse(BaseModel): + available: int | None = None + total: int | None = None + units: int | None = Field( + None, + description='Deprecated: This is left here to ensure backward compatibility. Use Available field instead.', + ) + + +class GoalImportForm(BaseModel): + source_project_id: str + + +class GoalImportReponse(BaseModel): + total_imported_goals: int | None = None + + +class GoalsDeleteForm(BaseModel): + ids: list[str] | None = Field(None, min_length=1) + + +class GoalsMetric(BaseModel): + id: str | None = None + name: str | None = None + + +class Keyword(BaseModel): + id: str | None = None + name: str | None = None + position: int | None = None + preferred_url: str | None = None + volume: int | None = None + + +class KeywordListAddMembersForm(BaseModel): + members: list[str] + role: str + + +class KeywordWithTargetID(BaseModel): + id: str | None = None + name: str | None = None + position: int | None = None + preferred_url: str | None = None + target_id: str | None = None + volume: int | None = None + + +class KeywordsCloneForm(BaseModel): + dst_target_id: str + src_target_id: str + + +class KeywordsCreateForm(BaseModel): + keywords: list[str] = Field(..., min_length=1) + tag_ids: list[str] | None = None + + +class KeywordsCreateResponse(BaseModel): + duplicate_count: int | None = None + items: list[Keyword] | None = None + + +class KeywordsDeleteForm(BaseModel): + all: bool | None = None + ids: list[str] | None = Field(None, min_length=1) + + +class KeywordsListDeleteMembersForm(BaseModel): + members: list[str] + + +class KeywordsListMemberUpdateRoleForm(BaseModel): + member: str + role: str + + +class KeywordsListResponse(BaseModel): + items: list[Keyword] | None = None + page: int | None = None + total: int | None = None + + +class KeywordsRelatedTagsForm(BaseModel): + ids: list[str] = Field(..., min_length=1) + + +class KeywordsUpdateForm(BaseModel): + ids: list[str] = Field(..., min_length=1) + url: str | None = None + + +class KeywordsUpdateResponse(BaseModel): + ids: list[str] = Field(..., min_length=1) + url: str | None = None + + +class Member(BaseModel): + email: str | None = None + id: int | None = None + profile_pic: str | None = None + role: str | None = None + + +class PagespeedAddNamedKeywordsForm(BaseModel): + keywords: list[str] | None = None + target_id: str | None = None + + +class PagespeedAddNamedKeywordsResponse(BaseModel): + keywords: list[Keyword] | None = None + not_found: list[str] | None = None + + +class PagespeedCrawler(BaseModel): + crawler_type: str | None = None + device: str | None = None + id: str | None = None + interval: str | None = None + name: str | None = None + status: str | None = None + total_keywords: int | None = None + total_urls: int | None = None + + +class PagespeedCrawlerAddURLsForm(BaseModel): + urls: list[str] = Field(..., min_length=1) + + +class CrawlerType(Enum): + keywords = 'keywords' + urls = 'urls' + + +class Interval(Enum): + once = 'once' + daily = 'daily' + weekly = 'weekly' + week_days = 'week-days' + bi_weekly = 'bi-weekly' + monthly = 'monthly' + + +class PagespeedCrawlerUpdateForm(BaseModel): + interval: Interval | None = None + name: str + + +class PagespeedCrawlerVisibleForm(BaseModel): + device: str + interval: Interval | None = None + name: str + + +class PagespeedCrawlersListResponse(BaseModel): + items: list[PagespeedCrawler] | None = None + page: int | None = None + total: int | None = None + + +class PagespeedDeleteForm(BaseModel): + ids: list[str] = Field(..., min_length=1) + + +class PagespeedInternalCrawler(BaseModel): + crawler_type: str | None = None + device: str | None = None + id: str | None = None + interval: str | None = None + name: str | None = None + project_id: str | None = None + status: str | None = None + total_keywords: int | None = None + total_urls: int | None = None + + +class PagespeedInternalKeywordsListResponse(BaseModel): + items: list[KeywordWithTargetID] | None = None + page: int | None = None + total: int | None = None + + +class PagespeedKeywordsDeleteForm(BaseModel): + ids: list[str] = Field(..., min_length=1) + + +class PagespeedKeywordsForm(BaseModel): + ids: list[str] = Field(..., min_length=1) + target_id: str + + +class PagespeedKeywordsListResponse(BaseModel): + items: list[Keyword] | None = None + page: int | None = None + total: int | None = None + + +class PagespeedURL(BaseModel): + id: str | None = None + url: str | None = None + + +class PagespeedURLsDeleteForm(BaseModel): + ids: list[str] = Field(..., min_length=1) + + +class PagespeedURLsListResponse(BaseModel): + items: list[PagespeedURL] | None = None + page: int | None = None + total: int | None = None + + +class ProfileUpdate(BaseModel): + availability: str | None = None + company: constr(max_length=255) | None = None + country: Country | None = None + description: constr(max_length=255) | None = None + jobs: list[UserJob] | None = None + languages: list[str] | None = None + linked_in: str | None = None + name: constr(max_length=255) | None = None + phone: constr(max_length=20) | None = None + profession: constr(max_length=255) | None = None + profile_pic: str | None = None + skills: list[str] | None = None + time_zone: str | None = None + + +class ProjectCreateForm(BaseModel): + color: str | None = None + domain: str + title: str + + +class ProjectDeleteResponse(BaseModel): + id: str | None = None + + +class ProjectFavouriteSetForm(BaseModel): + favourite: bool | None = None + + +class ProjectItemBaseProject(BaseModel): + color: str | None = None + domain: str | None = None + is_draft: bool | None = None + title: str | None = None + + +class ProjectItemLanguage(BaseModel): + id: int | None = None + name: str | None = None + + +class ProjectItemLocation(BaseModel): + id: int | None = None + name: str | None = None + + +class ProjectItemTargetMetadata(BaseModel): + database: str | None = None + device: str | None = None + id: str | None = None + language: ProjectItemLanguage | None = None + location: ProjectItemLocation | None = None + name: str | None = None + + +class ProjectItemTargetsStats(BaseModel): + target: ProjectItemTargetMetadata | None = None + targets_count: int | None = None + + +class ProjectMembersResponse(BaseModel): + items: list[Member] | None = None + page: int | None = None + total: int | None = None + + +class ProjectUpdateForm(BaseModel): + color: str | None = None + title: str | None = None + + +class ProjectV2CreateForm(BaseModel): + color: str | None = None + domain: str | None = None + title: str + + +class ProjectV2UpdateForm(BaseModel): + color: str | None = None + domain: str | None = None + title: str | None = None + + +class Seo(BaseModel): + keywords_count: int | None = None + pagespeed_urls_count: int | None = None + published_projects_count: int | None = None + + +class SetServiceUnitsForm(BaseModel): + units: conint(ge=0) | None = None + + +class Si(BaseModel): + logfile: int | None = None + pages: int | None = None + projects: int | None = None + + +class Tag(BaseModel): + id: str | None = None + name: str | None = None + + +class TagItem(BaseModel): + children_count: int | None = None + id: str | None = None + keywords_count: int | None = None + name: str | None = None + + +class TagTreeItem(BaseModel): + children: list[TagTreeItem] | None = None + children_count: int | None = None + id: str | None = None + keywords_count: int | None = None + name: str | None = None + parent_id: str | None = None + + +class TagTreeItemV2(BaseModel): + children: list[TagTreeItemV2] | None = None + id: str | None = None + name: str | None = None + parent_id: str | None = None + + +class TagWithSearchResponse(BaseModel): + id: str | None = None + keywords_count: int | None = None + name: str | None = None + parent_id: str | None = None + + +class TaggedKeywordsCreateForm(BaseModel): + keywords: dict[str, list[str]] + + +class TagsCreateForm(BaseModel): + names: list[str] = Field(..., min_length=1) + parent_id: str | None = None + + +class TagsDeleteForm(BaseModel): + delete_keywords: bool | None = None + ids: list[str] + + +class TagsList(RootModel[dict[str, TagItem]]): + root: dict[str, TagItem] + + +class TagsListResponse(BaseModel): + items: TagsList | None = None + page: int | None = None + total: int | None = None + + +class TagsListWithSearchResponse(BaseModel): + items: list[TagWithSearchResponse] | None = None + page: int | None = None + total: int | None = None + + +class TagsUpdateForm(BaseModel): + name: str + parent_id: str | None = None + + +class VolumeType(Enum): + national = 'national' + regional = 'regional' + local = 'local' + + +class TargetForm(BaseModel): + device: str + language_id: int + location_id: int + name: str + volume_type: VolumeType | None = None + + +class TransactionsListResponse(BaseModel): + items: list[Transaction] | None = None + page: int | None = None + total: int | None = None + + +class UrlGroup(BaseModel): + id: str | None = None + name: str | None = None + url: str | None = None + + +class UrlGroupsDeleteForm(BaseModel): + ids: list[str] = Field(..., min_length=1) + + +class UrlGroupsListResponse(BaseModel): + items: list[UrlGroup] | None = None + page: int | None = None + total: int | None = None + + +class UrlGroupsUpsertForm(BaseModel): + name: str + url: str + + +class UserIDsRequest(BaseModel): + user_ids: list[int] = Field(..., min_length=1) + + +class WorkspaceAddMembersForm(BaseModel): + members: list[str] = Field(..., min_length=1) + role: str + + +class WorkspaceAddMembersResponse(BaseModel): + emails: list[str] | None = None + errors: dict[str, Any] | None = None + limit_exceeded: bool | None = None + message: str | None = None + + +class WorkspaceCheckMembershipInAncestryResponse(BaseModel): + page: int | None = None + total: int | None = None + user_has_membership: bool | None = None + + +class WorkspaceCheckRolesInAncestryResponse(BaseModel): + page: int | None = None + total: int | None = None + user_has_role: bool | None = None + + +class WorkspaceDeleteMembersForm(BaseModel): + members: list[str] = Field(..., min_length=1) + + +class WorkspaceDeleteResponse(BaseModel): + id: str | None = None + + +class WorkspaceIDsResponse(BaseModel): + workspace_ids: list[str] | None = None + + +class WorkspaceMemberUpdateRoleForm(BaseModel): + member: str + role: str + + +class WorkspaceOwnershipUser(BaseModel): + email: str | None = None + name: str | None = None + profile_pic: str | None = None + + +class WorkspaceSettings(BaseModel): + ai: Ai | None = None + ci: Ci | None = None + seo: Seo | None = None + si: Si | None = None + + +class WorkspaceUpdateIconForm(BaseModel): + url: str | None = None + + +class WorkspaceUpsertForm(BaseModel): + icon: str | None = None + title: str + + +class WorkspaceUserAPIKey(BaseModel): + api_key: str | None = None + + +class ActivationPanelPermissionsResponse(BaseModel): + permissions: list[ActivationPanelPermission] | None = None + + +class ActivationPanelWorkspace(BaseModel): + corporate_account_id: int | None = None + created_at: str | None = None + expiration_date: str | None = None + icon: str | None = None + id: str | None = None + last_updated_at: str | None = None + owner: ActivationPanelOwner | None = None + parent_id: str | None = None + partnership_enabled: bool | None = None + product_tiers: ( + list[ + page_engine_backend_internal_usermanager_core_domain.ProductTierWithTimestamps + ] + | None + ) = None + status: str | None = None + subscription_id: int | None = None + subscription_rank: int | None = None + title: str | None = None + + +class ActivationPanelWorkspaceListResponse(BaseModel): + items: list[ActivationPanelWorkspace] | None = None + page: int | None = None + total: int | None = None + + +class ActivationPanelWorkspaceWithLimits(BaseModel): + api_units: int | None = None + children: list[ActivationPanelWorkspaceWithLimits] | None = None + corporate_account_id: int | None = None + created_at: str | None = None + expiration_date: str | None = None + icon: str | None = None + id: str | None = None + keywords: int | None = None + last_updated_at: str | None = None + owner: ActivationPanelOwner | None = None + pagespeed_urls: int | None = None + parent_id: str | None = None + partnership_enabled: bool | None = None + product_tiers: ( + list[ + page_engine_backend_internal_usermanager_core_domain.ProductTierWithTimestamps + ] + | None + ) = None + projects: int | None = None + service_credits: int | None = None + status: str | None = None + subscription_id: int | None = None + subscription_rank: int | None = None + title: str | None = None + total_api_units: int | None = None + total_keywords: int | None = None + total_pagespeed_urls: int | None = None + total_projects: int | None = None + total_service_credits: int | None = None + total_users: int | None = None + users: int | None = None + + +class AdobeCredentialStatusInfo(BaseModel): + adobe_proxy_auth_id: str | None = None + organizations: list[AdobeOrganizationInfo] | None = None + status: str | None = None + + +class AdobeReportSuitesResponse(BaseModel): + content: list[ReportSuite] | None = None + page: int | None = None + size: int | None = None + totalElements: int | None = None + totalPages: int | None = None + + +class BasketResponse(BaseModel): + basket_id: int | None = Field( + None, description='BasketID is the id of the keywords-list' + ) + basket_type: str | None = Field( + None, description='BasketType is the type of the keywords-list' + ) + keywords_count: int | None = Field( + None, description='KeywordsCount is the count of keywords in the keywords-list' + ) + name: str | None = Field(None, description='Name is the name of the keywords-list') + owner_id: int | None = Field( + None, description='OwnerID is the id of the owner of the keywords-list' + ) + role: rbac.RoleName | None = Field( + None, + description='Role is the role of the user in the keywords-list. Namely, role/keywords_list/editor, role/keywords_list/viewer', + ) + shared_with: int | None = Field( + None, + description='SharedWith is the count of users with whom the keywords-list is shared', + ) + updated_at: str | None = Field( + None, description='UpdatedAt is the last update time of the keywords-list' + ) + user_id: int | None = Field( + None, description='UserID is the id of the user of the keywords-list' + ) + + +class BatchReferenceRequest(BaseModel): + items: list[ReferenceRequest] = Field(..., min_length=1) + + +class GoogleConsoleWorkspaceConnectionCreate(BaseModel): + project_ids: list[str] | None = None + settings: GoogleSearchConsoleConnectionSettings | None = None + + +class InternalESUsersList(BaseModel): + items: list[page_engine_backend_internal_usermanager_core_domain.User] | None = None + page: int | None = None + total: int | None = None + + +class InternalProfileUpdate(BaseModel): + availability: str | None = None + company: constr(max_length=255) | None = None + country: Country | None = None + description: constr(max_length=255) | None = None + es_type: str | None = None + jobs: list[UserJob] | None = None + languages: list[str] | None = None + linked_in: str | None = None + name: constr(max_length=255) | None = None + phone: constr(max_length=20) | None = None + profession: constr(max_length=255) | None = None + profile_pic: str | None = None + skills: list[str] | None = None + time_zone: str | None = None + + +class InternalProjectsList(BaseModel): + items: ( + list[page_engine_backend_internal_usermanager_core_domain.InternalProject] + | None + ) = None + page: int | None = None + total: int | None = None + + +class KeywordModel(BaseModel): + id: KeywordID + tags: list[str] | None = Field( + None, + description='Tags max 5 tags are allowed, each tag can have max 50 characters', + max_length=5, + ) + + +class KeywordAddRequest(BaseModel): + keywords: list[KeywordModel] + + +class KeywordDeleteRequest(BaseModel): + keyword_ids: list[KeywordID] + + +class KeywordDeleteResponse(BaseModel): + deleted_keyword_ids: list[KeywordID] | None = None + + +class KeywordsListResponseModel(BaseModel): + baskets: list[BasketResponse] | None = None + page: int | None = None + total: int | None = None + + +class KeywordsTagsResponse(BaseModel): + items: list[KeywordModel] | None = None + + +class Limits(BaseModel): + api_units: UsedLimit | None = None + keywords: UsedLimitWithDrafted | None = None + pagespeed_urls: UsedLimitWithDrafted | None = None + projects: UsedLimitWithDrafted | None = None + service_units: UsedLimit | None = None + users: UsedLimitWithDrafted | None = None + + +class LogFileAnalysisIngestParser(BaseModel): + delimiter: Delimiter | None = None + preProcessing: LogFileAnalysisPreProcessing | None = None + type: TypeModel + + +class LogFileAnalysisIngestSchema(BaseModel): + example: str | None = None + fields: list[LogFileAnalysisIngestField] + parser: LogFileAnalysisIngestParser + + +class NamedKeywordsFindResponse(BaseModel): + keywords: list[Keyword] | None = None + not_found: list[str] | None = None + + +class ProjectItemResponse(BaseModel): + color: str | None = None + core_conflicts: bool | None = None + domain: str | None = None + draft_keywords_count: int | None = None + draft_project: ProjectItemBaseProject | None = None + draft_segments_count: int | None = None + draft_updated: bool | None = None + favourite: bool | None = None + goals_count: int | None = None + id: str | None = None + is_draft: bool | None = None + is_out_of_sync: bool | None = None + keywords_count: int | None = None + pagespeed_urls_count: int | None = None + publish_status: ( + page_engine_backend_internal_usermanager_core_domain.ProjectStatus | None + ) = None + published_at: str | None = None + publishing_failed_reason: str | None = None + role: rbac.RoleName | None = None + segments_count: int | None = None + shared_with: int | None = None + targets_stats: ProjectItemTargetsStats | None = None + title: str | None = None + + +class TagsTreeResponse(BaseModel): + items: list[TagTreeItem] | None = None + + +class TagsTreeResponseV2(BaseModel): + items: list[TagTreeItemV2] | None = None + + +class Target(BaseModel): + benchmarks_count: int | None = None + campaign_id: str | None = None + created_at: str | None = None + database: str | None = None + device: str | None = None + domain: str | None = None + id: str | None = None + keywords_count: int | None = None + language: TargetLanguage | None = None + location: Location | None = None + name: str | None = None + volume_type: str | None = None + + +class TxProductLimit(BaseModel): + enterprise_limit_key: str | None = Field(None, examples=['pages']) + product_id: ( + page_engine_backend_internal_usermanager_core_domain.ProductID | None + ) = Field(None, examples=['si']) + + +class UserProfile(BaseModel): + availability: str | None = None + categories: list[str] | None = None + company: str | None = None + country: Country | None = None + description: str | None = None + email: str | None = None + es_type: str | None = None + id: int | None = None + jobs: list[UserJob] | None = None + languages: list[str] | None = None + linked_in: str | None = None + locale: str | None = None + name: str | None = None + phone: str | None = None + profession: str | None = None + profile_pic: str | None = None + projects: list[UserProject] | None = None + skills: list[str] | None = None + time_zone: str | None = None + workspaces: list[UserWorkspace] | None = None + + +class WorkspaceCreateChildForm(BaseModel): + icon: str | None = None + owner: str | None = None + resources: WorkspaceResources + title: str + + +class WorkspaceMember(BaseModel): + email: str | None = None + id: int | None = None + is_all_projects_access: bool | None = None + is_home_workspace: bool | None = None + membership_status: ( + page_engine_backend_internal_usermanager_core_domain.MembershipStatus | None + ) = None + profile_pic: str | None = None + projects: list[WorkspaceMemberProject] | None = None + role: str | None = None + + +class ActivationPanelAIOPromptSettingsForm(BaseModel): + prompt_type: PromptType + weekly_prompts_day_of_week: ( + page_engine_backend_internal_usermanager_core_domain.DayOfWeek | None + ) = None + + +class ActivationPanelAIOPromptSettingsGetForm(BaseModel): + prompt_type: str | None = None + weekly_prompts_day_of_week: ( + page_engine_backend_internal_usermanager_core_domain.DayOfWeek | None + ) = None + + +class ActivationPanelWorkspaceCreateForm(BaseModel): + email: str + icon: str | None = None + partnership_enabled: bool | None = False + product_tiers: ( + list[page_engine_backend_internal_usermanager_core_domain.ProductTierIDs] | None + ) = None + title: str + + +class AdminWorkspaceUpsertForm(BaseModel): + icon: str | None = None + partnership_enabled: bool | None = False + product_tiers: ( + list[page_engine_backend_internal_usermanager_core_domain.ProductTierIDs] | None + ) = None + title: str + user_id: int + + +class Benchmark(BaseModel): + color: str | None = None + id: str | None = None + sync_enabled: bool | None = None + tags: BenchmarkTags | None = None + url: str | None = None + + +class BenchmarksListResponse(BaseModel): + items: list[Benchmark] | None = None + page: int | None = None + total: int | None = None + + +class CreateWorkspaceV2Resources(BaseModel): + ai: AiProductResources | None = None + general: ( + page_engine_backend_internal_usermanager_core_domain.WorkspaceResourcesGlobal + | None + ) = None + product_resources: ( + list[ + page_engine_backend_internal_usermanager_core_domain.WorkspaceProductResources + ] + | None + ) = None + seo: ( + page_engine_backend_internal_usermanager_core_domain.WorkspaceResourcesSEO + | None + ) = None + + +class GoalMetricsResponse(BaseModel): + items: list[GoalsMetric] | None = None + total: int | None = None + + +class GoalUpsertReponse(BaseModel): + date_from: date_aliased | None = Field( + None, description='Is set when the goal is objective', examples=['2024-01-01'] + ) + date_to: date_aliased | None = Field( + None, description='Is set when the goal is objective', examples=['2024-02-01'] + ) + date_type: ( + page_engine_backend_internal_usermanager_core_domain.GoalDateType | None + ) = Field(None, description='We can have monthly goals now') + id: str = Field(..., description='ID is the goal ID in the system') + lower_value: float | None = Field( + None, description='May be null if we have only upper value in the threshold' + ) + metric_id: str + name: str + objective_value_type: ( + page_engine_backend_internal_usermanager_core_domain.GoalObjectiveValueType + | None + ) = Field( + None, + description='### Single objective value\n`value` is used for `single` `objective_value_type`\n### Multiple objective values\n`values` is used for `multiple` `objective_value_type`', + ) + type: page_engine_backend_internal_usermanager_core_domain.GoalType = Field( + ..., + description='### Threshold goal\n`upper_value` and `lower_value` are used for threshold goals\n### Objective goal\n`date_type`, `date_from`, `date_to`, `value`, `objective_value_type`, `values` are used for objective goals', + ) + upper_value: float | None = Field( + None, description='Is set when the goal is threshold' + ) + value: float | None = Field( + None, description='Set when the goal is single objective' + ) + values: ( + list[page_engine_backend_internal_usermanager_core_domain.GoalValue] | None + ) = Field(None, description='Set when the goal is multiple objective') + + +class GoalsUpsertForm(BaseModel): + date_from: date_aliased | None = Field( + None, description='Is set when the goal is objective', examples=['2024-01-01'] + ) + date_to: date_aliased | None = Field( + None, description='Is set when the goal is objective', examples=['2024-02-01'] + ) + date_type: ( + page_engine_backend_internal_usermanager_core_domain.GoalDateType | None + ) = Field(None, description='We can have monthly goals now') + lower_value: float | None = Field( + None, description='May be null if we have only upper value in the threshold' + ) + metric_id: str + name: str + objective_value_type: ( + page_engine_backend_internal_usermanager_core_domain.GoalObjectiveValueType + | None + ) = Field( + None, + description='### Single objective value\n`value` is used for `single` `objective_value_type`\n### Multiple objective values\n`values` is used for `multiple` `objective_value_type`', + ) + type: page_engine_backend_internal_usermanager_core_domain.GoalType = Field( + ..., + description='### Threshold goal\n`upper_value` and `lower_value` are used for threshold goals\n### Objective goal\n`date_type`, `date_from`, `date_to`, `value`, `objective_value_type`, `values` are used for objective goals', + ) + upper_value: float | None = Field( + None, description='Is set when the goal is threshold' + ) + value: float | None = Field( + None, description='Set when the goal is single objective' + ) + values: ( + list[page_engine_backend_internal_usermanager_core_domain.GoalValue] | None + ) = Field(None, description='Set when the goal is multiple objective') + + +class InternalGoal(BaseModel): + date: date_aliased | None = Field( + None, + description='Set when the goal is objective, will contain dates between date_from and date_to', + examples=['2024-01-01'], + ) + date_from: date_aliased | None = Field( + None, + description='Set when the goal is objective, may be set when the goal is threshold', + examples=['2024-01-01'], + ) + date_to: date_aliased | None = Field( + None, + description='Set when the goal is objective, may be set when the goal is threshold', + examples=['2024-02-01'], + ) + date_type: ( + page_engine_backend_internal_usermanager_core_domain.GoalDateType | None + ) = Field(None, description='We can have monthly goals now') + id: str + metric_id: str + metric_name: str + name: str + project_domain: str + type: page_engine_backend_internal_usermanager_core_domain.GoalType + value: float | None = Field( + None, + description='Is set to upper value when type is threshold and objective value when type is objective', + ) + + +class InternalGoalsListResponse(BaseModel): + items: list[InternalGoal] | None = None + page: int | None = None + total: int | None = None + + +class KeywordsListMembersResponse(BaseModel): + items: list[Member] | None = None + page: int | None = None + total: int | None = None + + +class PagespeedCrawlerAddKeywordsForm(BaseModel): + keywords: list[PagespeedKeywordsForm] + + +class PagespeedCrawlerCreateForm(BaseModel): + crawler_type: CrawlerType | None = None + device: str + interval: Interval | None = None + invisible: bool | None = None + keyword_names: list[str] | None = None + keywords: list[PagespeedKeywordsForm] | None = None + name: str + target_id: str | None = None + urls: list[str] | None = None + + +class PagespeedCrawlerCreateResponse(BaseModel): + crawler_type: str | None = None + device: str | None = None + id: str | None = None + interval: str | None = None + keywords: list[Keyword] | None = None + name: str | None = None + not_found_keywords: list[str] | None = None + status: str | None = None + total_keywords: int | None = None + total_urls: int | None = None + urls: list[PagespeedURL] | None = None + + +class PagespeedCrawlersInternalListResponse(BaseModel): + items: list[PagespeedInternalCrawler] | None = None + page: int | None = None + total: int | None = None + + +class ProductTiersGroup(BaseModel): + product: str | None = None + tiers: list[page_engine_backend_internal_usermanager_core_domain.Tier] | None = None + + +class ProjectAddMembersForm(BaseModel): + members: list[str] + product_id: ( + page_engine_backend_internal_usermanager_core_domain.ProductID | None + ) = Field( + None, + description='for backward compatibility no validate is required and assign SEO in case its empty', + ) + role: str + + +class ProjectDeleteMembersForm(BaseModel): + members: list[str] + product_id: ( + page_engine_backend_internal_usermanager_core_domain.ProductID | None + ) = Field( + None, + description='for backward compatibility no validate is required and assign SEO in case its empty', + ) + + +class ProjectItem(BaseModel): + color: str | None = None + core_conflicts: bool | None = None + domain: str | None = None + draft_keywords_count: int | None = None + draft_pagespeed_urls_count: int | None = None + draft_project: BaseProject | None = None + draft_segments_count: int | None = None + draft_updated: bool | None = None + favourite: bool | None = None + goals_count: int | None = None + id: str | None = None + is_draft: bool | None = None + is_out_of_sync: bool | None = None + keywords_count: int | None = None + pagespeed_urls_count: int | None = None + publish_status: ( + page_engine_backend_internal_usermanager_core_domain.ProjectStatus | None + ) = None + published_at: str | None = None + publishing_failed_reason: str | None = None + role: rbac.RoleName | None = None + segments_count: int | None = None + shared_with: int | None = None + targets_stats: TargetsStats | None = None + title: str | None = None + total_invited_members: int | None = None + + +class ProjectListResponse(BaseModel): + items: list[ProjectItem] | None = None + page: int | None = None + total: int | None = None + + +class ProjectListV2Response(BaseModel): + items: list[ProjectItemResponse] | None = None + page: int | None = None + total: int | None = None + + +class ProjectUpsertResponse(BaseModel): + color: str | None = None + domain: str | None = None + id: str | None = None + is_draft: bool | None = None + publish_status: ( + page_engine_backend_internal_usermanager_core_domain.ProjectStatus | None + ) = None + title: str | None = None + + +class ProjectsGetResponse(BaseModel): + benchmarks_count: int | None = None + color: str | None = None + core_id: int | None = None + crawlers_count: int | None = None + created_at: str | None = None + domain: str | None = None + draft_updated: bool | None = None + favourite: bool | None = None + goals_count: int | None = None + id: str | None = None + is_draft: bool | None = None + is_out_of_sync: bool | None = None + keywords_count: int | None = None + pagespeed_urls_count: int | None = None + preferred_urls_count: int | None = None + publish_status: ( + page_engine_backend_internal_usermanager_core_domain.ProjectStatus | None + ) = None + published_at: str | None = None + publishing_failed_reason: str | None = None + role: rbac.RoleName | None = None + segments_count: int | None = None + shared_with: int | None = None + targets_count: int | None = None + targets_stats: TargetsStats | None = None + title: str | None = None + + +class TargetCreateForm(BaseModel): + targets: list[TargetForm] = Field(..., min_length=1) + + +class TargetListResponse(BaseModel): + items: list[Target] | None = None + page: int | None = None + total: int | None = None + + +class TiersResponse(BaseModel): + products: list[ProductTiersGroup] | None = None + tiers: list[page_engine_backend_internal_usermanager_core_domain.Tier] | None = None + + +class TransferProductProject(BaseModel): + product_id: page_engine_backend_internal_usermanager_core_domain.ProductID + project_ids: list[str] = Field(..., min_length=1) + + +class UsersCreateForm(BaseModel): + email: str + es_type: str + workspace: ( + page_engine_backend_internal_usermanager_core_domain.WorkspaceUpsert | None + ) = None + + +class WorkspaceOwnershipEligibilityResponse(BaseModel): + user: WorkspaceOwnershipUser | None = None + valid: bool | None = None + + +class WorkspaceProduct(BaseModel): + id: page_engine_backend_internal_usermanager_core_domain.ProductID | None = None + is_transferable: bool | None = None + name: str | None = None + + +class WorkspaceUserRole(BaseModel): + role: rbac.RoleName | None = None + + +class WorkspacesMembersResponse(BaseModel): + items: list[WorkspaceMember] | None = None + page: int | None = None + total: int | None = None + + +class AdminProjectsResponse(BaseModel): + items: ( + list[page_engine_backend_internal_usermanager_core_domain.AdminProject] | None + ) = None + next_cursor: str | None = None + total: int | None = None + + +class AdobeBulkStatusResponse(BaseModel): + statuses: list[AdobeCredentialStatusInfo] | None = None + + +class GetLimitsResponse(BaseModel): + limits: Limits | None = None + + +class LogFileAnalysisConnectionSettings(BaseModel): + connectionName: str + deliveryType: str | None = None + fallbackValues: LogFileAnalysisFallbackValues | None = None + ingestSchema: LogFileAnalysisIngestSchema | None = None + + +class LogFileAnalysisWorkspaceConnectionPayload(BaseModel): + project_ids: list[str] + settings: LogFileAnalysisConnectionSettings + + +class TransactionsCreateFormV2(BaseModel): + amount: conint(ge=1) + global_limit_key: str | None = None + owner_id: int | None = None + product_limit: TxProductLimit | None = None + receipt_id: int | None = None + service_id: constr(max_length=255) + service_type: str + title: constr(max_length=255) | None = None + workspace_id: str + + +class WorkspaceConnectionSettings(BaseModel): + adobe_analytics: AdobeAnalyticsConnectionSettings | None = None + google_ads: GoogleAdsConnectionSettings | None = None + google_analytics: GoogleAnalyticsConnectionSettings | None = None + google_console: GoogleSearchConsoleConnectionSettings | None = None + log_file_analysis: LogFileAnalysisConnectionSettings | None = None + + +class WorkspaceListItem(BaseModel): + created_at: str | None = None + expires_at: str | None = None + icon: str | None = None + id: str | None = None + is_admin: bool | None = None + is_master: bool | None = None + keywords_count: int | None = None + last_updated_at: str | None = None + owner: str | None = None + pagespeed_urls_count: int | None = None + parent: ( + page_engine_backend_internal_usermanager_core_domain.WorkspaceParent | None + ) = None + parent_id: str | None = None + partnership_enabled: bool | None = None + product_tiers: ( + list[page_engine_backend_internal_usermanager_core_domain.ProductTier] | None + ) = None + products: ( + list[page_engine_backend_internal_usermanager_core_domain.ProductID] | None + ) = None + published_projects_count: int | None = None + resources: ( + dict[ + str, + dict[str, page_engine_backend_internal_usermanager_core_domain.EntityLimit], + ] + | None + ) = None + role: str | None = None + settings: WorkspaceSettings | None = None + shared_with: int | None = None + status: str | None = None + subscription_tier: ( + page_engine_backend_internal_usermanager_core_domain.Tier | None + ) = None + title: str | None = None + users: int | None = None + + +class WorkspaceResourcesTransferV2Form(BaseModel): + resources: CreateWorkspaceV2Resources | None = None + + +class AdminProjectTransferForm(BaseModel): + projects: list[TransferProductProject] = Field(..., min_length=1) + target_workspace_id: str + target_workspace_owner_id: int + + +class CreateWorkspaceV2Form(BaseModel): + icon: str | None = None + owner: str | None = None + parentID: str | None = None + resources: CreateWorkspaceV2Resources + title: str + userID: int | None = None + + +class GoalsListResponse(BaseModel): + items: list[page_engine_backend_internal_usermanager_core_domain.Goal] | None = None + page: int | None = None + total: int | None = None + + +class InternalWorkspace(BaseModel): + created_at: str | None = None + icon: str | None = None + id: str | None = None + is_master: bool | None = None + last_updated_at: str | None = None + parent: ( + page_engine_backend_internal_usermanager_core_domain.WorkspaceParent | None + ) = None + parent_id: str | None = None + partnership_enabled: bool | None = None + product_tiers: ( + list[page_engine_backend_internal_usermanager_core_domain.ProductTier] | None + ) = None + products: ( + list[page_engine_backend_internal_usermanager_core_domain.ProductID] | None + ) = None + status: str | None = None + subscription_tier: ( + page_engine_backend_internal_usermanager_core_domain.Tier | None + ) = None + title: str | None = None + + +class WorkspaceLightResponse(BaseModel): + icon: str | None = None + id: str | None = None + is_admin: bool | None = None + is_master: bool | None = None + parent: ( + page_engine_backend_internal_usermanager_core_domain.WorkspaceParent | None + ) = None + parent_id: str | None = None + partnership_enabled: bool | None = None + product_tiers: ( + list[page_engine_backend_internal_usermanager_core_domain.ProductTier] | None + ) = None + products: list[str] | None = None + role: str | None = None + shared_with: int | None = None + status: str | None = None + title: str | None = None + users: int | None = None + + +class WorkspaceResponse(BaseModel): + created_at: str | None = None + expires_at: str | None = None + icon: str | None = None + id: str | None = None + is_admin: bool | None = None + is_master: bool | None = None + keywords_count: int | None = None + last_updated_at: str | None = None + owner: str | None = None + pagespeed_urls_count: int | None = None + parent: ( + page_engine_backend_internal_usermanager_core_domain.WorkspaceParent | None + ) = None + parent_id: str | None = None + partnership_enabled: bool | None = None + product_tiers: ( + list[page_engine_backend_internal_usermanager_core_domain.ProductTier] | None + ) = None + products: ( + list[page_engine_backend_internal_usermanager_core_domain.ProductID] | None + ) = None + published_projects_count: int | None = None + role: str | None = None + status: str | None = None + subscription_tier: ( + page_engine_backend_internal_usermanager_core_domain.Tier | None + ) = None + title: str | None = None + users: int | None = None + + +class WorkspaceV2Response(BaseModel): + created_at: str | None = None + expires_at: str | None = None + icon: str | None = None + id: str | None = None + is_admin: bool | None = None + is_master: bool | None = None + keywords_count: int | None = None + last_updated_at: str | None = None + owner: str | None = None + pagespeed_urls_count: int | None = None + parent: ( + page_engine_backend_internal_usermanager_core_domain.WorkspaceParent | None + ) = None + parent_id: str | None = None + partnership_enabled: bool | None = None + product_tiers: ( + list[page_engine_backend_internal_usermanager_core_domain.ProductTier] | None + ) = None + products: ( + list[page_engine_backend_internal_usermanager_core_domain.ProductID] | None + ) = None + published_projects_count: int | None = None + resources: ( + dict[ + str, + dict[str, page_engine_backend_internal_usermanager_core_domain.EntityLimit], + ] + | None + ) = None + role: str | None = None + settings: WorkspaceSettings | None = None + shared_with: int | None = None + status: str | None = None + subscription_tier: ( + page_engine_backend_internal_usermanager_core_domain.Tier | None + ) = None + title: str | None = None + users: int | None = None + + +class WorkspacesListResponse(BaseModel): + items: list[WorkspaceListItem] | None = None + page: int | None = None + total: int | None = None + + +class InternalWorkspaceConnectionSettings(BaseModel): + adobe_analytics: InternalAdobeAnalyticsConnectionSettings | None = None + google_ads: GoogleAdsConnectionSettings | None = None + google_analytics: GoogleAnalyticsConnectionSettings | None = None + google_console: GoogleSearchConsoleConnectionSettings | None = None + log_file_analysis: LogFileAnalysisConnectionSettings | None = None + + +class WorkspaceConnection(BaseModel): + data_source: str | None = None + id: int | None = None + owner: WorkspaceConnectionOwner | None = None + projects: list[WorkspaceConnectionProject] | None = None + settings: WorkspaceConnectionSettings | None = None + status: WorkspaceConnectionStatus | None = None + updated_at: str | None = None + + +class WorkspaceConnectionDetails(BaseModel): + data_source: str | None = None + id: int | None = None + owner: WorkspaceConnectionOwner | None = None + project_ids: list[str] | None = None + settings: WorkspaceConnectionSettings | None = None + status: WorkspaceConnectionStatus | None = None + updated_at: str | None = None + + +class WorkspaceConnectionItem(BaseModel): + data_source: str | None = None + id: int | None = None + owner: WorkspaceConnectionOwner | None = None + projects: list[WorkspaceConnectionProject] | None = None + settings: WorkspaceConnectionSettings | None = None + status: WorkspaceConnectionStatus | None = None + updated_at: str | None = None + + +class WorkspaceConnectionsResponse(BaseModel): + items: list[WorkspaceConnectionItem] | None = None + page_number: int | None = None + total_items: int | None = None + + +class InternalWorkspaceConnectionDetails(BaseModel): + data_source: str | None = None + id: int | None = None + owner: WorkspaceConnectionOwner | None = None + project_ids: list[str] | None = None + settings: InternalWorkspaceConnectionSettings | None = None + status: WorkspaceConnectionStatus | None = None + updated_at: str | None = None + + +class Condition(BaseModel): + column_name: str + operator: str + sub_conditions: list[SubCondition] | None = None + value: str + values: list[str] = Field(..., max_length=5000) + + +class SegmentInternalResponse(BaseModel): + conditions: list[Condition] | None = None + created_at: str | None = None + filters: page_engine_backend_internal_usermanager_core_domain.Filter | None = None + id: str | None = None + name: str | None = None + updated_at: str | None = None + + +class SegmentListByWorkspaceResponse(BaseModel): + items: list[SegmentWithProjectResponse] | None = None + page: int | None = None + total: int | None = None + + +class SegmentListInternalResponse(BaseModel): + items: list[SegmentInternalResponse] | None = None + page: int | None = None + total: int | None = None + + +class SegmentListResponse(BaseModel): + items: list[SegmentResponse] | None = None + page: int | None = None + total: int | None = None + + +class SegmentResponse(BaseModel): + conditions: list[Condition] | None = None + created_at: str | None = None + filters: Filter | None = None + id: str | None = None + name: str | None = None + updated_at: str | None = None + + +class SegmentUpsertForm(BaseModel): + conditions: list[Condition] | None = None + filters: Filter | None = Field( + None, + description='todo: after conditions removed this field should be required.', + ) + name: str + + +class SegmentWithProjectResponse(BaseModel): + conditions: list[Condition] | None = None + created_at: str | None = None + filters: Filter | None = None + id: str | None = None + name: str | None = None + project_id: str | None = None + project_name: str | None = None + updated_at: str | None = None + + +class SubCondition(BaseModel): + condition: Condition + logic_operator: LogicOperator + + +Filter.model_rebuild() +TagTreeItem.model_rebuild() +TagTreeItemV2.model_rebuild() +ActivationPanelWorkspaceWithLimits.model_rebuild() +Condition.model_rebuild() +SegmentListByWorkspaceResponse.model_rebuild() +SegmentListResponse.model_rebuild() diff --git a/packages/spacecat-shared-user-manager-client/python/serenity_user_manager/http_server.py b/packages/spacecat-shared-user-manager-client/python/serenity_user_manager/http_server.py new file mode 100644 index 000000000..e86250b3d --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/python/serenity_user_manager/http_server.py @@ -0,0 +1,14 @@ +# generated by datamodel-codegen: +# filename: openapi3.json +# timestamp: 2026-06-15T17:23:07+00:00 + +from __future__ import annotations + +from typing import Any + +from pydantic import BaseModel + + +class BasicResponse(BaseModel): + errors: dict[str, Any] | None = None + message: str | None = None diff --git a/packages/spacecat-shared-user-manager-client/python/serenity_user_manager/page_engine_backend_internal_usermanager_core_domain.py b/packages/spacecat-shared-user-manager-client/python/serenity_user_manager/page_engine_backend_internal_usermanager_core_domain.py new file mode 100644 index 000000000..77ce301db --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/python/serenity_user_manager/page_engine_backend_internal_usermanager_core_domain.py @@ -0,0 +1,459 @@ +# generated by datamodel-codegen: +# filename: openapi3.json +# timestamp: 2026-06-15T17:23:07+00:00 + +from __future__ import annotations + +from datetime import date as date_aliased +from enum import Enum +from typing import Any + +from pydantic import BaseModel, Field, conint + +from . import rbac + + +class DayOfWeek(Enum): + DayOfWeekMonday = 'monday' + DayOfWeekTuesday = 'tuesday' + DayOfWeekWednesday = 'wednesday' + DayOfWeekThursday = 'thursday' + DayOfWeekFriday = 'friday' + DayOfWeekSaturday = 'saturday' + DayOfWeekSunday = 'sunday' + + +class EntityLimit(BaseModel): + drafted: int | None = None + live: int | None = None + remaining: int | None = None + total: int | None = None + + +class EsType(Enum): + Client = 'client' + Freelancer = 'freelancer' + ProServe = 'pro-serve' + CSM = 'csm' + Sales = 'sales' + + +class FilterOperator(Enum): + FilterLogicalOpAnd = 'and' + FilterLogicalOpOr = 'or' + FilterOpEqual = 'eq' + FilterOpNotEqual = 'neq' + FilterOpBegin = 'begins_with' + FilterOpNotBegin = 'not_begins_with' + FilterOpEnd = 'ends_with' + FilterOpNotEnd = 'not_ends_with' + FilterOpContain = 'contains' + FilterOpNotContain = 'not_contains' + FilterOpGreater = 'gt' + FilterOpLess = 'lt' + FilterOpGreaterEqual = 'gte' + FilterOpLessEqual = 'lte' + FilterOPInList = 'in' + + +class GlobalLimitType(Enum): + GlobalLimitTypeServiceUnits = 'service_units' + + +class GoalDateType(Enum): + MonthGoalDateType = 'month' + QuarterGoalDdateType = 'quarter' + + +class GoalObjectiveValueType(Enum): + SingleGoalObjectiveValueType = 'single' + MultipleGoalObjectiveValueType = 'multiple' + + +class GoalType(Enum): + ThresholdGoalType = 'threshold' + ObjectiveGoalType = 'objective' + + +class GoalValue(BaseModel): + date: date_aliased = Field(..., examples=['2024-01-01']) + value: float + + +class InternalProject(BaseModel): + benchmarks: int | None = None + core_id: int | None = None + crawlers: int | None = None + domain: str | None = None + id: str | None = None + keywords: int | None = None + preferred_urls: int | None = None + published_at: str | None = None + publishing_failed_reason: str | None = None + segments: int | None = None + tags: int | None = None + targets: int | None = None + title: str | None = None + + +class KeywordMetrics(BaseModel): + position: int | None = None + search_volume: int | None = None + traffic: float | None = None + + +class MembershipStatus(Enum): + MembershipStatusMember = 'member' + MembershipStatusGuest = 'guest' + MembershipStatusBasic = 'basic' + + +class MetricRangeFilter(BaseModel): + field: str | None = None + from_: float | None = Field(None, alias='from') + to: float | None = None + + +class ProductID(Enum): + ProductIDSEO = 'seo' + ProductIDAI = 'ai' + ProductIDSI = 'si' + ProductIDCI = 'ci' + + +class ProductTierIDs(BaseModel): + product_id: ProductID + tier_id: str + + +class ProductTierWithTimestamps(BaseModel): + created_at: str | None = None + last_updated_at: str | None = None + product_id: ProductID | None = None + tier_id: str | None = None + + +class ProjectOwner(BaseModel): + email: str | None = None + id: str | None = None + + +class ProjectStatus(Enum): + ProjectStatusDraft = 'draft' + ProjectStatusLive = 'live' + ProjectStatusPublishing = 'publishing' + ProjectStatusInitialPublishFailed = 'initial_publish_failed' + ProjectStatusLiveWithUnpublishedUpdates = 'live_with_unpublished_updates' + ProjectStatusSubsequentPublishFailed = 'subsequent_publish_failed' + + +class SOXProductActivation(BaseModel): + product_activation_date: str | None = None + product_name: str | None = None + + +class SOXWorkspace(BaseModel): + ownerID: int | None = None + products: list[SOXProductActivation] | None = None + status: str | None = None + subscription_activation_date: str | None = None + subscription_expiration_date: str | None = None + subscription_id: int | None = None + workspace_name: str | None = None + workspace_owner: str | None = None + + +class SegmentColumn(Enum): + ColUrl = 'url' + ColUrlList = 'url_list' + ColKeyword = 'keyword' + ColKeywordList = 'keyword_list' + ColTraffic = 'traffic' + ColPosition = 'position' + ColSearchVolume = 'search_volume' + ColKeywordIntent = 'keyword_intent' + ColCountry = 'country' + ColDevice = 'device' + ColClicks = 'clicks' + ColImpressions = 'impressions' + ColCtr = 'ctr' + ColGscPosition = 'gsc_position' + + +class TagWithSearch(BaseModel): + id: str | None = None + name: str | None = None + parent_id: str | None = None + + +class Tier(BaseModel): + id: str | None = None + name: str | None = None + rank: int | None = None + + +class TransactionOperation(Enum): + TransactionOperationDebit = 'debit' + TransactionOperationCredit = 'credit' + + +class TransactionServiceType(Enum): + TransactionServiceTypeJobHourly = 'job_hourly' + TransactionServiceTypeJobFixed = 'job_fixed' + TransactionServiceTypeSEOWorkflow = 'seo_workflow' + TransactionServiceTypeServiceFee = 'service_fee' + TransactionServiceTypeSICrawler = 'si_crawler' + TransactionServiceTypeAIInsights = 'ai_insights' + + +class TxProductLimit(BaseModel): + enterprise_limit_key: str | None = Field(None, examples=['pages']) + product_id: ProductID | None = Field(None, examples=['si']) + + +class UsedLimit(BaseModel): + drafted: int | None = None + total: int | None = None + used: int | None = None + + +class User(BaseModel): + e_mail: str | None = None + es_type: EsType | None = None + id: int | None = None + invite_accepted: bool | None = None + + +class WorkspaceExpiration(BaseModel): + expires_at: str | None = None + + +class WorkspaceParent(BaseModel): + id: str | None = None + title: str | None = None + + +class WorkspacePartnership(BaseModel): + is_partnered: bool | None = None + + +class WorkspaceProductResources(BaseModel): + product_id: ProductID | None = Field(None, examples=['si']) + resources: dict[str, int] | None = None + + +class WorkspaceResourcesGlobal(BaseModel): + api_units: conint(ge=0) | None = None + logfile_analysis_mb_used: conint(ge=0) | None = None + service_credits: conint(ge=0) | None = None + service_units: conint(ge=0) | None = None + users: conint(ge=0) | None = None + + +class WorkspaceResourcesSEO(BaseModel): + keywords: conint(ge=0) | None = None + pagespeed_urls: conint(ge=0) | None = None + projects: conint(ge=0) | None = None + + +class WorkspaceResourcesV2(BaseModel): + general: WorkspaceResourcesGlobal | None = None + product_resources: list[WorkspaceProductResources] | None = None + seo: WorkspaceResourcesSEO | None = None + + +class WorkspaceTotalLimits(BaseModel): + general: WorkspaceResourcesGlobal | None = None + seo: WorkspaceResourcesSEO | None = None + + +class WorkspaceUpsert(BaseModel): + icon: str | None = None + partnership_enabled: bool | None = False + product_tiers: list[ProductTierIDs] | None = None + title: str + + +class AdminProject(BaseModel): + created_at: str | None = None + domain: str | None = None + id: str | None = None + is_transferable: bool | None = None + keywords: int | None = None + last_updated_at: str | None = None + max_pages_per_crawler: int | None = None + owner: ProjectOwner | None = None + pages: int | None = None + pagespeed_urls: int | None = None + product_type: ProductID | None = None + prompts: int | None = None + status: ProjectStatus | None = None + title: str | None = None + + +class Filter(BaseModel): + col: SegmentColumn | None = None + filters: list[Filter] | None = None + op: FilterOperator | None = None + value: Any | None = None + + +class GeneralResources(BaseModel): + api_units: UsedLimit | None = None + service_credits: UsedLimit | None = None + service_units: UsedLimit | None = None + users: UsedLimit | None = None + + +class Goal(BaseModel): + date_from: date_aliased | None = Field( + None, description='Is set when the goal is objective', examples=['2024-01-01'] + ) + date_to: date_aliased | None = Field( + None, description='Is set when the goal is objective', examples=['2024-02-01'] + ) + date_type: GoalDateType | None = Field( + None, description='We can have monthly goals now' + ) + id: str = Field(..., description='ID is the goal ID in the system') + lower_value: float | None = Field( + None, description='May be null if we have only upper value in the threshold' + ) + metric_id: str + name: str + objective_value_type: GoalObjectiveValueType | None = Field( + None, + description='### Single objective value\n`value` is used for `single` `objective_value_type`\n### Multiple objective values\n`values` is used for `multiple` `objective_value_type`', + ) + type: GoalType = Field( + ..., + description='### Threshold goal\n`upper_value` and `lower_value` are used for threshold goals\n### Objective goal\n`date_type`, `date_from`, `date_to`, `value`, `objective_value_type`, `values` are used for objective goals', + ) + upper_value: float | None = Field( + None, description='Is set when the goal is threshold' + ) + value: float | None = Field( + None, description='Set when the goal is single objective' + ) + values: list[GoalValue] | None = Field( + None, description='Set when the goal is multiple objective' + ) + + +class InternalProjectV2(BaseModel): + core_id: int | None = None + domain: str | None = None + id: str | None = None + published_at: str | None = None + role: rbac.RoleName | None = None + title: str | None = None + workspace_id: str | None = None + + +class InternalProjectV2List(BaseModel): + projects: list[InternalProjectV2] | None = None + total: int | None = None + + +class KeywordTags(BaseModel): + items: list[TagWithSearch] | None = None + total: int | None = None + + +class KeywordWithMetrics(BaseModel): + id: str | None = None + name: str | None = None + position: int | None = None + search_volume: int | None = None + tags: KeywordTags | None = None + traffic: float | None = None + url: str | None = None + + +class KeywordsWithMetricsResponse(BaseModel): + all_total: int | None = None + items: list[KeywordWithMetrics] | None = None + page: int | None = None + total: int | None = None + unassigned: int | None = None + + +class KeywordsWithTagsRequestAndTagID(BaseModel): + draft: bool | None = None + filters: list[MetricRangeFilter] | None = None + limit: int | None = None + page: int | None = None + search: str | None = None + sort: str | None = None + sort_dir: str | None = None + tag_id: str | None = None + unassigned_only: bool | None = None + with_hierarchy: bool | None = None + + +class KeywordsWithTagsRequestAndTagIDs(BaseModel): + draft: bool | None = None + filters: list[MetricRangeFilter] | None = None + limit: int | None = None + page: int | None = None + search: str | None = None + sort: str | None = None + sort_dir: str | None = None + tag_ids: list[str] | None = None + unassigned_only: bool | None = None + with_hierarchy: bool | None = None + + +class Product(BaseModel): + id: ProductID | None = None + limits_enabled: bool | None = None + name: str | None = None + + +class ProductProjectMetadata(BaseModel): + id: str | None = None + role: rbac.RoleName | None = None + shared_with: int | None = None + + +class ProductResources(BaseModel): + resources: dict[str, UsedLimit] | None = None + tier: Tier | None = None + + +class ProductTier(BaseModel): + product: Product | None = None + tier: Tier | None = None + + +class Transaction(BaseModel): + amount: int | None = None + balance_after: int | None = None + balance_before: int | None = None + date: str | None = None + global_limit_key: GlobalLimitType | None = None + id: str | None = None + iid: int | None = None + operation: TransactionOperation | None = None + owner_id: int | None = None + owner_name: str | None = None + product_limit: TxProductLimit | None = None + receipt_id: int | None = None + receipt_name: str | None = None + reference_transaction_id: str | None = None + service_id: str | None = None + service_type: TransactionServiceType | None = None + title: str | None = None + workspace_id: str | None = None + + +class General(BaseModel): + resources: GeneralResources | None = None + + +class NewWorkspaceResources(BaseModel): + general: General | None = None + product_resources: dict[str, ProductResources] | None = None + + +Filter.model_rebuild() diff --git a/packages/spacecat-shared-user-manager-client/python/serenity_user_manager/rbac.py b/packages/spacecat-shared-user-manager-client/python/serenity_user_manager/rbac.py new file mode 100644 index 000000000..20e26bc8e --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/python/serenity_user_manager/rbac.py @@ -0,0 +1,20 @@ +# generated by datamodel-codegen: +# filename: openapi3.json +# timestamp: 2026-06-15T17:23:07+00:00 + +from __future__ import annotations + +from enum import Enum + + +class RoleName(Enum): + RoleWorkspaceOwner = 'role/workspace/owner' + RoleWorkspaceAdmin = 'role/workspace/admin' + RoleWorkspaceEditor = 'role/workspace/editor' + RoleWorkspaceViewer = 'role/workspace/viewer' + RoleWorkspaceCollaborator = 'role/workspace/collaborator' + RoleWorkspaceContentWriter = 'role/workspace/content-writer' + RoleProjectEditor = 'role/project/editor' + RoleProjectViewer = 'role/project/viewer' + RoleKeywordListEditor = 'role/keywords_list/editor' + RoleKeywordListViewer = 'role/keywords_list/viewer' diff --git a/packages/spacecat-shared-user-manager-client/scripts/apply-overlay.mjs b/packages/spacecat-shared-user-manager-client/scripts/apply-overlay.mjs new file mode 100644 index 000000000..437ab26ab --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/scripts/apply-overlay.mjs @@ -0,0 +1,240 @@ +/* + * Copyright 2026 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +/** + * Applies the OpenAPI Overlay in spec/overlays/corrections.yaml to the + * swagger2openapi output build/openapi3.json, in place. The overlay is the single + * source of truth for the corrections that align the vendored swagger with the + * live API's actual behaviour (see that file for CR1-CR2); this script just + * executes it. The vendored spec/usermanager_swagger.yaml is never modified. + * + * It implements the subset of the Overlay spec the overlay uses — `update` + * (deep-merge into the targeted node) and `remove` (delete the targeted node) — + * with a small JSONPath dialect: + * - `$` root + * - `.key` / ['key'] property access + * - `.*` / [*] wildcard over an object's values or an array's items + * - [?(@.field == 'value')] filter array items by a string field + */ + +import { readFileSync, writeFileSync } from 'node:fs'; +import { fileURLToPath, pathToFileURL } from 'node:url'; +import { dirname, resolve } from 'node:path'; +import process from 'node:process'; +// js-yaml is a build-time devDependency (this script only runs in `npm run generate`, +// and the published package ships src/ only), so the production-import rule doesn't apply. +// eslint-disable-next-line import/no-extraneous-dependencies +import yaml from 'js-yaml'; + +const SEGMENT_MATCHERS = [ + // [?(@.name == 'Auth-Data-Jwt')] + [/^\[\?\(@\.([A-Za-z0-9_]+)\s*==\s*'([^']*)'\)\]/, (m) => ({ type: 'filter', key: m[1], value: m[2] })], + [/^\[\*\]/, () => ({ type: 'wild' })], + [/^\.\*/, () => ({ type: 'wild' })], + // ['/v2/.../projects'] or ["x"] + [/^\['([^']*)'\]/, (m) => ({ type: 'key', key: m[1] })], + [/^\["([^"]*)"\]/, (m) => ({ type: 'key', key: m[1] })], + [/^\.([^.[]+)/, (m) => ({ type: 'key', key: m[1] })], +]; + +/** Consumes one leading segment of `rest`, returning `{ step, rest }` or null if none matches. */ +function nextSegment(rest) { + for (const [re, make] of SEGMENT_MATCHERS) { + const m = rest.match(re); + if (m) { + return { step: make(m), rest: rest.slice(m[0].length) }; + } + } + return null; +} + +/** Tokenises a supported JSONPath into a list of steps. */ +export function parsePath(path) { + if (!path.startsWith('$')) { + throw new Error(`Overlay target must start with '$': ${path}`); + } + const steps = []; + let rest = path.slice(1); + while (rest.length > 0) { + const parsed = nextSegment(rest); + if (!parsed) { + throw new Error(`Unsupported JSONPath segment near: ${rest}`); + } + steps.push(parsed.step); + rest = parsed.rest; + } + return steps; +} + +/** Expands one step against one node into the next `{ container, key }` refs. */ +function stepRefs(step, node, refs) { + if (step.type === 'key') { + refs.push({ container: node, key: step.key }); + return; + } + if (step.type === 'wild') { + if (Array.isArray(node)) { + node.forEach((_, i) => refs.push({ container: node, key: i })); + } else if (node && typeof node === 'object') { + Object.keys(node).forEach((k) => refs.push({ container: node, key: k })); + } + return; + } + if (step.type === 'filter' && Array.isArray(node)) { + node.forEach((el, i) => { + if (el && el[step.key] === step.value) { + refs.push({ container: node, key: i }); + } + }); + } +} + +/** + * Resolves a JSONPath to a list of `{ container, key }` references, so both `update` + * (mutate `container[key]`) and `remove` (delete `container[key]`) can act on the result. + */ +export function select(doc, path) { + let refs = [{ container: { $root: doc }, key: '$root' }]; + for (const step of parsePath(path)) { + const next = []; + for (const ref of refs) { + const node = ref.container[ref.key]; + if (node !== null && node !== undefined) { + stepRefs(step, node, next); + } + } + refs = next; + } + return refs; +} + +const isObject = (v) => v !== null && typeof v === 'object' && !Array.isArray(v); + +// Keys that would let a hand-edited overlay reach Object.prototype through deepMerge. No +// legitimate OpenAPI node key is one of these, so they are skipped defensively. +const PROTO_POLLUTION_KEYS = new Set(['__proto__', 'constructor', 'prototype']); + +/** Deep-merges `src` into `target` (objects recurse; arrays and scalars overwrite). */ +export function deepMerge(target, src) { + for (const [k, v] of Object.entries(src)) { + if (!PROTO_POLLUTION_KEYS.has(k)) { + if (isObject(v) && isObject(target[k])) { + deepMerge(target[k], v); + } else { + // eslint-disable-next-line no-param-reassign + target[k] = v; + } + } + } + return target; +} + +/** Removes matched refs: array items spliced high-to-low per container; object keys deleted. */ +export function removeRefs(refs) { + const byContainer = new Map(); + for (const ref of refs) { + if (typeof ref.key === 'number') { + const indices = byContainer.get(ref.container) || []; + indices.push(ref.key); + byContainer.set(ref.container, indices); + } else { + delete ref.container[ref.key]; + } + } + for (const [container, indices] of byContainer) { + indices.sort((a, b) => b - a).forEach((i) => container.splice(i, 1)); + } +} + +export function applyAction(doc, action) { + const refs = select(doc, action.target); + if (action.remove) { + removeRefs(refs); + return refs.length; + } + if (action.update !== undefined) { + if (refs.length === 0) { + throw new Error(`Overlay update matched no node: ${action.target}`); + } + for (const ref of refs) { + if (!isObject(ref.container[ref.key])) { + ref.container[ref.key] = {}; + } + deepMerge(ref.container[ref.key], action.update); + } + return refs.length; + } + throw new Error(`Overlay action must have 'update' or 'remove': ${action.target}`); +} + +/** + * @typedef {object} OverlayActionResult + * @property {string} target the action's JSONPath target + * @property {boolean} remove whether the action was a remove (vs an update) + * @property {number} hits how many nodes the action touched + * @property {boolean} staleRemove true when a `remove` matched 0 nodes (the correction is now a + * no-op — a valid future state once the upstream spec drops the node, but worth pruning) + */ + +/** + * Applies every action of an overlay document to `spec` in place and returns a structured result + * per action — it prints NOTHING, so a programmatic caller gets no stray stdout; user-facing + * logging is the CLI {@link main}'s job. A 0-match `remove` is surfaced via `staleRemove` rather + * than passing silently; a 0-match `update` DOES throw (see {@link applyAction}), since updating a + * node that has moved is a genuine miss. + * @param {object} spec the OAS3 document to mutate in place + * @param {{ actions?: Array }} overlay + * @returns {{ total: number, results: OverlayActionResult[] }} + */ +export function applyOverlay(spec, overlay) { + if (!Array.isArray(overlay?.actions) || overlay.actions.length === 0) { + throw new Error('Overlay has no actions'); + } + const results = []; + let total = 0; + for (const action of overlay.actions) { + const hits = applyAction(spec, action); + total += hits; + const remove = Boolean(action.remove); + results.push({ + target: action.target, remove, hits, staleRemove: remove && hits === 0, + }); + } + return { total, results }; +} + +/** CLI entry: read the converted spec + the overlay, apply in place, log, write back. */ +function main() { + const here = dirname(fileURLToPath(import.meta.url)); + const pkgRoot = resolve(here, '..'); + const specPath = resolve(pkgRoot, 'build/openapi3.json'); + const overlayPath = resolve(pkgRoot, 'spec/overlays/corrections.yaml'); + const spec = JSON.parse(readFileSync(specPath, 'utf-8')); + const overlay = yaml.load(readFileSync(overlayPath, 'utf-8')); + const { results } = applyOverlay(spec, overlay); + for (const r of results) { + // eslint-disable-next-line no-console + console.log(`overlay: ${r.remove ? 'remove' : 'update'} ${r.target} -> ${r.hits} node(s)`); + if (r.staleRemove) { + // eslint-disable-next-line no-console + console.warn(`overlay: WARNING remove matched 0 nodes (stale correction?): ${r.target}`); + } + } + writeFileSync(specPath, JSON.stringify(spec, null, 2), 'utf-8'); + // eslint-disable-next-line no-console + console.log(`✔ overlay applied (${results.length} actions) → ${specPath}`); +} + +// Run only when executed directly (`node scripts/apply-overlay.mjs`), not when imported by tests. +if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) { + main(); +} diff --git a/packages/spacecat-shared-user-manager-client/spec/overlays/corrections.yaml b/packages/spacecat-shared-user-manager-client/spec/overlays/corrections.yaml new file mode 100644 index 000000000..cfd6e8a6d --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/spec/overlays/corrections.yaml @@ -0,0 +1,55 @@ +overlay: 1.0.0 +info: + title: User Manager spec corrections — align the vendored swagger with the live API + version: 1.0.0 +# The single source of truth for our corrections to the vendored Semrush User +# Manager spec. scripts/apply-overlay.mjs reads THIS file and applies the actions +# to the swagger2openapi output (build/openapi3.json); the vendored +# spec/usermanager_swagger.yaml is never modified. +# +# CR1 Express Authorization: Bearer as the auth scheme; remove Auth-Data-Jwt. +# The spec models Auth-Data-Jwt as a required header on ~187 operations, but +# the live API authenticates on Authorization: Bearer only (Semrush +# accepts the IMS bearer directly). Remove when Semrush fixes the spec upstream. +# CR2 Correct GET /v1/workspaces/{id}/status — the spec types the 200 body as an +# array of WorkspaceCheckResponse, but the live API returns a single +# WorkspaceCheckResponse object ({ status: "not ready" | "created" | "error" }). +# The api-service transport reads it as an object (status.status === 'created'), +# so the typed surface must match. Remove when Semrush fixes the spec upstream. +actions: + # ── CR1: Express Authorization: Bearer, remove Auth-Data-Jwt ───────────── + # Live API: Authorization: Bearer -> 200; Auth-Data-Jwt -> 401. + - target: "$.components.securitySchemes" + description: "CR1: add the imsBearer security scheme" + update: + imsBearer: + type: http + scheme: bearer + description: "IMS user bearer token, accepted directly by the Semrush User Manager API." + + - target: "$" + description: "CR1: apply imsBearer as the global security requirement" + update: + security: + - imsBearer: [] + + - target: "$.paths.*.*.parameters[?(@.name == 'Auth-Data-Jwt')]" + description: "CR1: remove the Auth-Data-Jwt header param from every operation" + remove: true + + # ── CR2: GET /v1/workspaces/{id}/status returns an object, not an array ─── + # Upstream types the 200 as `type: array, items: WorkspaceCheckResponse`; the + # live API returns the bare object `{ status: "created" }`. Drop the array + # wrapper (remove the old schema, then point it at the object schema). + # ORDER MATTERS: the remove must run before the update — `update` deep-merges, + # so updating first would leave `type: array`/`items` alongside the new `$ref` + # (an invalid mixed schema). Do not reorder these two actions. + - target: "$.paths['/v1/workspaces/{id}/status'].get.responses['200'].content['application/json'].schema" + description: "CR2: drop the array wrapper on the status 200 schema" + remove: true + + - target: "$.paths['/v1/workspaces/{id}/status'].get.responses['200'].content['application/json']" + description: "CR2: status returns a single WorkspaceCheckResponse object" + update: + schema: + $ref: "#/components/schemas/handlers.WorkspaceCheckResponse" diff --git a/packages/spacecat-shared-user-manager-client/spec/usermanager_swagger.yaml b/packages/spacecat-shared-user-manager-client/spec/usermanager_swagger.yaml new file mode 100644 index 000000000..cff9156c2 --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/spec/usermanager_swagger.yaml @@ -0,0 +1,19390 @@ +basePath: /enterprise/users/api +definitions: + handlers.APIUnitsResponse: + properties: + api_units: + type: integer + type: object + handlers.ActivationPanelAdminActivity: + properties: + action: + type: string + admin_email: + type: string + admin_id: + type: integer + corporate_account_id: + type: integer + created_at: + type: string + log_id: + type: integer + owner_id: + type: integer + section: + type: string + subscription_id: + type: integer + user_email: + type: string + workspace_id: + type: string + type: object + handlers.ActivationPanelAdminActivityResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.ActivationPanelAdminActivity' + type: array + limit: + type: integer + page: + type: integer + total: + type: integer + type: object + handlers.ActivationPanelBillingStatusCoreAccountId: + properties: + corporate_account_id: + type: integer + subscription_id: + type: integer + type: object + handlers.ActivationPanelOwner: + properties: + email: + type: string + id: + type: integer + type: object + handlers.ActivationPanelPermissionsResponse: + properties: + permissions: + items: + $ref: '#/definitions/handlers.activationPanelPermission' + type: array + type: object + handlers.ActivationPanelWorkspace: + properties: + corporate_account_id: + type: integer + created_at: + type: string + expiration_date: + type: string + icon: + type: string + id: + type: string + last_updated_at: + type: string + owner: + $ref: '#/definitions/handlers.ActivationPanelOwner' + parent_id: + type: string + partnership_enabled: + type: boolean + product_tiers: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductTierWithTimestamps' + type: array + status: + type: string + subscription_id: + type: integer + subscription_rank: + type: integer + title: + type: string + type: object + handlers.ActivationPanelWorkspaceListResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.ActivationPanelWorkspace' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.ActivationPanelWorkspaceMetadata: + properties: + icon: + example: https://example.com/icon.png + type: string + id: + example: 550e8400-e29b-41d4-a716-446655440000 + type: string + parent_id: + example: "" + type: string + title: + example: My Workspace + type: string + type: object + handlers.ActivationPanelWorkspaceWithLimits: + properties: + api_units: + type: integer + children: + items: + $ref: '#/definitions/handlers.ActivationPanelWorkspaceWithLimits' + type: array + corporate_account_id: + type: integer + created_at: + type: string + expiration_date: + type: string + icon: + type: string + id: + type: string + keywords: + type: integer + last_updated_at: + type: string + owner: + $ref: '#/definitions/handlers.ActivationPanelOwner' + pagespeed_urls: + type: integer + parent_id: + type: string + partnership_enabled: + type: boolean + product_tiers: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductTierWithTimestamps' + type: array + projects: + type: integer + service_credits: + type: integer + status: + type: string + subscription_id: + type: integer + subscription_rank: + type: integer + title: + type: string + total_api_units: + type: integer + total_keywords: + type: integer + total_pagespeed_urls: + type: integer + total_projects: + type: integer + total_service_credits: + type: integer + total_users: + type: integer + users: + type: integer + type: object + handlers.AdminProjectsResponse: + properties: + items: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.AdminProject' + type: array + next_cursor: + type: string + total: + type: integer + type: object + handlers.AdobeAnalyticsConnectionCreateSettings: + description: Adobe Analytics connection settings + properties: + adobe_proxy_auth_id: + type: string + dimension_date_range_day_name: + type: string + dimension_entry_page_url_name: + type: string + dimension_marketing_channel_detail_name: + type: string + dimension_marketing_channel_name: + type: string + global_company_id: + type: string + metric_bounce_rate_name: + type: string + metric_target_conversion_name: + type: string + metric_visits_name: + type: string + rs_name: + type: string + rsid: + type: string + required: + - adobe_proxy_auth_id + - dimension_entry_page_url_name + - dimension_marketing_channel_detail_name + - dimension_marketing_channel_name + - global_company_id + - metric_bounce_rate_name + - metric_target_conversion_name + - metric_visits_name + - rs_name + - rsid + type: object + handlers.AdobeAnalyticsConnectionCreateSettingsV2: + description: Adobe Analytics connection settings (v2) with credential_id instead + of adobe_proxy_auth_id + properties: + credential_id: + type: integer + dimension_date_range_day_name: + type: string + dimension_entry_page_url_name: + type: string + dimension_marketing_channel_detail_name: + type: string + dimension_marketing_channel_name: + type: string + global_company_id: + type: string + metric_bounce_rate_name: + type: string + metric_target_conversion_name: + type: string + metric_visits_name: + type: string + rs_name: + type: string + rsid: + type: string + required: + - credential_id + - dimension_entry_page_url_name + - dimension_marketing_channel_detail_name + - dimension_marketing_channel_name + - global_company_id + - metric_bounce_rate_name + - metric_target_conversion_name + - metric_visits_name + - rs_name + - rsid + type: object + handlers.AdobeAnalyticsConnectionSettings: + description: Adobe Analytics connection settings (public, uses credential_id) + properties: + credential_id: + type: integer + dimension_date_range_day_name: + type: string + dimension_entry_page_url_name: + type: string + dimension_marketing_channel_detail_name: + type: string + dimension_marketing_channel_name: + type: string + global_company_id: + type: string + metric_bounce_rate_name: + type: string + metric_target_conversion_name: + type: string + metric_visits_name: + type: string + rs_name: + type: string + rsid: + type: string + type: object + handlers.AdobeAnalyticsConnectionUpdateSettings: + description: Adobe Analytics connection settings for update request + properties: + adobe_proxy_auth_id: + type: string + dimension_date_range_day_name: + type: string + dimension_entry_page_url_name: + type: string + dimension_marketing_channel_detail_name: + type: string + dimension_marketing_channel_name: + type: string + global_company_id: + type: string + metric_bounce_rate_name: + type: string + metric_target_conversion_name: + type: string + metric_visits_name: + type: string + rs_name: + type: string + rsid: + type: string + required: + - adobe_proxy_auth_id + - dimension_entry_page_url_name + - dimension_marketing_channel_detail_name + - dimension_marketing_channel_name + - global_company_id + - metric_bounce_rate_name + - metric_target_conversion_name + - metric_visits_name + - rs_name + - rsid + type: object + handlers.AdobeAnalyticsConnectionUpdateSettingsV2: + description: Adobe Analytics connection settings for update (v2) with credential_id + properties: + credential_id: + type: integer + dimension_date_range_day_name: + type: string + dimension_entry_page_url_name: + type: string + dimension_marketing_channel_detail_name: + type: string + dimension_marketing_channel_name: + type: string + global_company_id: + type: string + metric_bounce_rate_name: + type: string + metric_target_conversion_name: + type: string + metric_visits_name: + type: string + rs_name: + type: string + rsid: + type: string + required: + - credential_id + - dimension_entry_page_url_name + - dimension_marketing_channel_detail_name + - dimension_marketing_channel_name + - global_company_id + - metric_bounce_rate_name + - metric_target_conversion_name + - metric_visits_name + - rs_name + - rsid + type: object + handlers.AdobeAnalyticsValidateRequest: + description: Request body for validating Adobe Analytics metrics and dimensions + properties: + dimension: + type: string + metric: + type: string + rsid: + type: string + required: + - metric + - rsid + type: object + handlers.AdobeAnalyticsValidateResponse: + description: Response for Adobe Analytics validation + properties: + message: + type: string + valid: + type: boolean + type: object + handlers.AdobeAnalyticsValidateV2Request: + description: V2 request body for validating Adobe Analytics metrics and dimensions + properties: + credential_id: + type: integer + dimension: + type: string + global_company_id: + type: string + metric: + type: string + rsid: + type: string + required: + - credential_id + - global_company_id + - metric + - rsid + type: object + handlers.AdobeAnalyticsWorkspaceConnectionCreate: + properties: + project_ids: + items: + type: string + type: array + settings: + $ref: '#/definitions/handlers.AdobeAnalyticsConnectionCreateSettings' + type: object + handlers.AdobeAnalyticsWorkspaceConnectionCreateV2: + description: V2 request body for creating Adobe Analytics workspace connection + (uses credential_id) + properties: + project_ids: + items: + type: string + type: array + settings: + $ref: '#/definitions/handlers.AdobeAnalyticsConnectionCreateSettingsV2' + type: object + handlers.AdobeAnalyticsWorkspaceConnectionUpdate: + properties: + project_ids: + items: + type: string + type: array + settings: + $ref: '#/definitions/handlers.AdobeAnalyticsConnectionUpdateSettings' + type: object + handlers.AdobeAnalyticsWorkspaceConnectionUpdateV2: + description: V2 request body for updating Adobe Analytics workspace connection + (uses credential_id) + properties: + project_ids: + items: + type: string + type: array + settings: + $ref: '#/definitions/handlers.AdobeAnalyticsConnectionUpdateSettingsV2' + type: object + handlers.AdobeBulkStatusRequest: + properties: + adobe_proxy_auth_ids: + items: + type: string + minItems: 1 + type: array + required: + - adobe_proxy_auth_ids + type: object + handlers.AdobeBulkStatusResponse: + properties: + statuses: + items: + $ref: '#/definitions/handlers.AdobeCredentialStatusInfo' + type: array + type: object + handlers.AdobeCompanyInfo: + properties: + company_name: + type: string + global_company_id: + type: string + type: object + handlers.AdobeCredentialCreatedResponse: + description: V2 credential creation response returning internal credential_id + properties: + credential_id: + type: integer + type: object + handlers.AdobeCredentialStatusInfo: + properties: + adobe_proxy_auth_id: + type: string + organizations: + items: + $ref: '#/definitions/handlers.AdobeOrganizationInfo' + type: array + status: + type: string + type: object + handlers.AdobeCredentialsCreateRequest: + properties: + client_id: + type: string + client_secret: + type: string + required: + - client_id + - client_secret + type: object + handlers.AdobeCredentialsInfo: + properties: + adobe_proxy_auth_id: + type: string + type: object + handlers.AdobeOrganizationInfo: + properties: + companies: + items: + $ref: '#/definitions/handlers.AdobeCompanyInfo' + type: array + organization_id: + type: string + type: object + handlers.AdobeReportSuitesResponse: + properties: + content: + items: + $ref: '#/definitions/handlers.ReportSuite' + type: array + page: + type: integer + size: + type: integer + totalElements: + type: integer + totalPages: + type: integer + type: object + handlers.BaseProject: + properties: + color: + type: string + domain: + type: string + is_draft: + type: boolean + title: + type: string + total_invited_members: + type: integer + type: object + handlers.BasicUserProfile: + properties: + email: + type: string + id: + type: integer + name: + type: string + profile_pic: + type: string + type: object + handlers.BasicWorkspaceMember: + properties: + email: + type: string + id: + type: integer + name: + type: string + profile_pic: + type: string + type: object + handlers.BasketResponse: + properties: + basket_id: + description: BasketID is the id of the keywords-list + type: integer + basket_type: + description: BasketType is the type of the keywords-list + type: string + keywords_count: + description: KeywordsCount is the count of keywords in the keywords-list + type: integer + name: + description: Name is the name of the keywords-list + type: string + owner_id: + description: OwnerID is the id of the owner of the keywords-list + type: integer + role: + allOf: + - $ref: '#/definitions/rbac.RoleName' + description: Role is the role of the user in the keywords-list. Namely, role/keywords_list/editor, + role/keywords_list/viewer + shared_with: + description: SharedWith is the count of users with whom the keywords-list + is shared + type: integer + updated_at: + description: UpdatedAt is the last update time of the keywords-list + type: string + user_id: + description: UserID is the id of the user of the keywords-list + type: integer + type: object + handlers.BatchDeleteReferenceRequest: + properties: + all: + type: boolean + cascade: + type: boolean + ids: + items: + type: string + type: array + type: object + handlers.BatchReferenceRequest: + properties: + items: + items: + $ref: '#/definitions/handlers.ReferenceRequest' + minItems: 1 + type: array + required: + - items + type: object + handlers.Condition: + properties: + column_name: + type: string + operator: + type: string + sub_conditions: + items: + $ref: '#/definitions/handlers.SubCondition' + type: array + value: + type: string + values: + items: + type: string + maxItems: 5000 + type: array + required: + - column_name + - operator + - value + - values + type: object + handlers.ConsumedUnits: + properties: + users: + type: integer + type: object + handlers.CopyAllSegmentsRequest: + properties: + source_project_id: + type: string + required: + - source_project_id + type: object + handlers.CopySegmentsRequest: + properties: + segment_ids: + items: + type: string + minItems: 1 + type: array + target_project_ids: + items: + type: string + minItems: 1 + type: array + required: + - segment_ids + - target_project_ids + type: object + handlers.CoreUser: + properties: + activated: + type: boolean + company: + type: string + email: + type: string + id: + type: integer + locale: + type: string + name: + type: string + profession: + type: string + timezone_new: + type: string + type: object + handlers.CoreUserWithAPIKey: + properties: + activated: + type: boolean + api_key: + type: string + company: + type: string + email: + type: string + id: + type: integer + locale: + type: string + name: + type: string + profession: + type: string + timezone_new: + type: string + type: object + handlers.Country: + properties: + code: + type: string + name: + type: string + type: object + handlers.Dimension: + properties: + category: + type: string + description: + type: string + extra_title_info: + type: string + id: + type: string + name: + type: string + pathable: + type: boolean + reportable: + items: + type: string + type: array + segmentable: + type: boolean + support: + items: + type: string + type: array + title: + type: string + type: + type: string + type: object + handlers.Filter: + properties: + column_name: + type: string + filters: + items: + $ref: '#/definitions/handlers.Filter' + type: array + operator: + type: string + value: {} + required: + - operator + - value + type: object + handlers.GetLimitsResponse: + properties: + limits: + $ref: '#/definitions/handlers.Limits' + type: object + handlers.GoogleAdsConnectionSettings: + description: Google Ads connection settings + properties: + customer_id: + type: integer + customer_title: + type: string + gap_email: + type: string + gap_user_id: + type: string + mcc_id: + type: integer + required: + - customer_id + - customer_title + - gap_email + - gap_user_id + - mcc_id + type: object + handlers.GoogleAdsWorkspaceConnectionCreate: + properties: + project_ids: + items: + type: string + type: array + settings: + $ref: '#/definitions/handlers.GoogleAdsConnectionSettings' + type: object + handlers.GoogleAnalyticsConnectionSettings: + description: Google Analytics connection settings + properties: + ga_account: + type: string + ga_account_title: + type: string + gap_email: + type: string + gap_user_id: + type: string + property: + type: string + property_title: + type: string + required: + - ga_account + - ga_account_title + - gap_email + - gap_user_id + - property + - property_title + type: object + handlers.GoogleAnalyticsWorkspaceConnectionCreate: + properties: + project_ids: + items: + type: string + type: array + settings: + $ref: '#/definitions/handlers.GoogleAnalyticsConnectionSettings' + type: object + handlers.GoogleConsoleWorkspaceConnectionCreate: + properties: + project_ids: + items: + type: string + type: array + settings: + $ref: '#/definitions/handlers.GoogleSearchConsoleConnectionSettings' + type: object + handlers.GoogleSearchConsoleConnectionSettings: + description: Google Console connection settings + properties: + gap_email: + type: string + gap_property: + type: string + gap_user_id: + type: string + required: + - gap_email + - gap_property + - gap_user_id + type: object + handlers.HasChildrenResponse: + properties: + has_children: + type: boolean + type: object + handlers.IDsForm: + properties: + ids: + items: + type: string + minItems: 1 + type: array + required: + - ids + type: object + handlers.InternalAdobeAnalyticsConnectionSettings: + description: Adobe Analytics connection settings (internal, uses adobe_proxy_auth_id) + properties: + adobe_proxy_auth_id: + type: string + dimension_date_range_day_name: + type: string + dimension_entry_page_url_name: + type: string + dimension_marketing_channel_detail_name: + type: string + dimension_marketing_channel_name: + type: string + global_company_id: + type: string + metric_bounce_rate_name: + type: string + metric_target_conversion_name: + type: string + metric_visits_name: + type: string + rs_name: + type: string + rsid: + type: string + type: object + handlers.InternalBenchmark: + properties: + benchmark_id: + type: string + created_at: + type: string + database: + type: string + device: + type: string + project_id: + type: string + target_id: + type: string + url: + type: string + url_type: + type: string + type: object + handlers.InternalESUsersList: + properties: + items: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.User' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.InternalProfileUpdate: + properties: + availability: + type: string + company: + maxLength: 255 + type: string + country: + $ref: '#/definitions/handlers.Country' + description: + maxLength: 255 + type: string + es_type: + type: string + jobs: + items: + $ref: '#/definitions/handlers.UserJob' + type: array + languages: + items: + type: string + type: array + linked_in: + type: string + name: + maxLength: 255 + type: string + phone: + maxLength: 20 + type: string + profession: + maxLength: 255 + type: string + profile_pic: + type: string + skills: + items: + type: string + type: array + time_zone: + type: string + type: object + handlers.InternalProjectsList: + properties: + items: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.InternalProject' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.InternalTarget: + properties: + campaign_id: + type: string + created_at: + type: string + database: + type: string + device: + type: string + domains: + items: + type: string + type: array + project_domain: + type: string + project_id: + type: string + target_id: + type: string + type: object + handlers.InternalWorkspaceConnectionDetails: + description: A connection for a particular workspace (internal) + properties: + data_source: + type: string + id: + type: integer + owner: + $ref: '#/definitions/handlers.WorkspaceConnectionOwner' + project_ids: + items: + type: string + type: array + settings: + $ref: '#/definitions/handlers.InternalWorkspaceConnectionSettings' + status: + $ref: '#/definitions/handlers.WorkspaceConnectionStatus' + updated_at: + type: string + type: object + handlers.InternalWorkspaceConnectionSettings: + description: Connection settings for internal use (adobe analytics returns adobe_proxy_auth_id) + properties: + adobe_analytics: + $ref: '#/definitions/handlers.InternalAdobeAnalyticsConnectionSettings' + google_ads: + $ref: '#/definitions/handlers.GoogleAdsConnectionSettings' + google_analytics: + $ref: '#/definitions/handlers.GoogleAnalyticsConnectionSettings' + google_console: + $ref: '#/definitions/handlers.GoogleSearchConsoleConnectionSettings' + log_file_analysis: + $ref: '#/definitions/handlers.LogFileAnalysisConnectionSettings' + type: object + handlers.Keyword: + properties: + id: + $ref: '#/definitions/handlers.KeywordID' + tags: + description: Tags max 5 tags are allowed, each tag can have max 50 characters + items: + type: string + maxItems: 5 + type: array + required: + - id + type: object + handlers.KeywordAddRequest: + properties: + keywords: + items: + $ref: '#/definitions/handlers.Keyword' + type: array + required: + - keywords + type: object + handlers.KeywordCountResponse: + properties: + added_keyword_count: + type: integer + type: object + handlers.KeywordDeleteRequest: + properties: + keyword_ids: + items: + $ref: '#/definitions/handlers.KeywordID' + type: array + required: + - keyword_ids + type: object + handlers.KeywordDeleteResponse: + properties: + deleted_keyword_ids: + items: + $ref: '#/definitions/handlers.KeywordID' + type: array + type: object + handlers.KeywordID: + properties: + database: + description: Database is the database of the keyword. Max 2 characters are + allowed + maxLength: 2 + type: string + phrase: + description: Phrase is the keyword name. Max 90 characters are allowed + maxLength: 90 + type: string + required: + - database + - phrase + type: object + handlers.KeywordResponse: + properties: + click_potential: + type: integer + created_at: + type: string + difficulty100: + type: integer + id: + $ref: '#/definitions/handlers.KeywordID' + status: + type: string + tags: + description: Tags max 5 tags are allowed, each tag can have max 50 characters + items: + type: string + maxItems: 5 + type: array + updated_at: + type: string + volume: + type: integer + required: + - id + type: object + handlers.KeywordsListCreateRequest: + properties: + name: + description: Name of the keywords-list. Max 100 characters are allowed + maxLength: 100 + type: string + required: + - name + type: object + handlers.KeywordsListCreateResponse: + properties: + basket_id: + type: integer + name: + type: string + updated_at: + type: string + type: object + handlers.KeywordsListDatabasesResponse: + properties: + databases: + items: + type: string + type: array + type: object + handlers.KeywordsListDeleteRequest: + properties: + basket_ids: + items: + type: integer + type: array + required: + - basket_ids + type: object + handlers.KeywordsListRenameRequest: + properties: + name: + description: Name of the keywords-list. Max 100 characters are allowed + maxLength: 100 + type: string + required: + - name + type: object + handlers.KeywordsListRenameResponse: + properties: + basket_id: + type: integer + name: + type: string + updated_at: + type: string + type: object + handlers.KeywordsListResponse: + properties: + baskets: + items: + $ref: '#/definitions/handlers.BasketResponse' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.KeywordsResponse: + properties: + keywords: + items: + $ref: '#/definitions/handlers.KeywordResponse' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.KeywordsTagsRelationsDeleteForm: + properties: + relations: + items: + items: + type: string + type: array + minItems: 1 + type: array + required: + - relations + type: object + handlers.KeywordsTagsRequest: + properties: + keyword_ids: + items: + $ref: '#/definitions/handlers.KeywordID' + type: array + tags: + items: + type: string + maxItems: 5 + type: array + required: + - keyword_ids + - tags + type: object + handlers.KeywordsTagsResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.Keyword' + type: array + type: object + handlers.KeywordsTagsUpdateRequest: + properties: + keyword_id: + $ref: '#/definitions/handlers.KeywordID' + tags_create: + description: TagsCreate max 5 tags are allowed, each tag can have max 50 characters + items: + type: string + maxItems: 5 + type: array + tags_delete: + description: TagsDelete max 5 tags are allowed, each tag can have max 50 characters + items: + type: string + maxItems: 5 + type: array + required: + - keyword_id + type: object + handlers.Language: + properties: + code: + type: string + name: + type: string + type: object + handlers.Limits: + properties: + api_units: + $ref: '#/definitions/handlers.UsedLimit' + keywords: + $ref: '#/definitions/handlers.UsedLimitWithDrafted' + pagespeed_urls: + $ref: '#/definitions/handlers.UsedLimitWithDrafted' + projects: + $ref: '#/definitions/handlers.UsedLimitWithDrafted' + service_units: + $ref: '#/definitions/handlers.UsedLimit' + users: + $ref: '#/definitions/handlers.UsedLimitWithDrafted' + type: object + handlers.Location: + properties: + id: + type: integer + name: + type: string + type: object + handlers.LogFileAnalysisConnectionSettings: + description: Log file analysis connection settings + properties: + connectionName: + type: string + deliveryType: + type: string + fallbackValues: + $ref: '#/definitions/handlers.LogFileAnalysisFallbackValues' + ingestSchema: + $ref: '#/definitions/handlers.LogFileAnalysisIngestSchema' + required: + - connectionName + type: object + handlers.LogFileAnalysisConnectorStatusPayload: + description: Connector-reported status for a log file analysis connection (internal) + properties: + message: + type: string + type: + enum: + - success + - error + type: string + required: + - type + type: object + handlers.LogFileAnalysisFallbackValues: + properties: + hostname: + type: string + protocolSchema: + type: string + time: + type: string + timezone: + type: string + type: object + handlers.LogFileAnalysisIngestField: + properties: + extracts: + items: + type: string + type: array + key: + type: string + position: + type: integer + template: + type: string + type: object + handlers.LogFileAnalysisIngestParser: + properties: + delimiter: + enum: + - space + - pipe + - tab + - semicolum + - comma + type: string + preProcessing: + $ref: '#/definitions/handlers.LogFileAnalysisPreProcessing' + type: + enum: + - json + - jsonp + - text + type: string + required: + - type + type: object + handlers.LogFileAnalysisIngestSchema: + properties: + example: + type: string + fields: + items: + $ref: '#/definitions/handlers.LogFileAnalysisIngestField' + type: array + parser: + $ref: '#/definitions/handlers.LogFileAnalysisIngestParser' + required: + - fields + - parser + type: object + handlers.LogFileAnalysisPreProcessing: + properties: + type: + type: string + type: object + handlers.LogFileAnalysisWorkspaceConnectionPayload: + properties: + project_ids: + items: + type: string + type: array + settings: + $ref: '#/definitions/handlers.LogFileAnalysisConnectionSettings' + required: + - project_ids + - settings + type: object + handlers.Metric: + properties: + allocation: + type: boolean + calculated: + type: boolean + category: + type: string + description: + type: string + id: + type: string + name: + type: string + precision: + type: integer + segmentable: + type: boolean + support: + items: + type: string + type: array + title: + type: string + type: + type: string + type: object + handlers.NamedKeywordsFindForm: + properties: + keywords: + items: + type: string + minItems: 1 + type: array + required: + - keywords + type: object + handlers.NamedKeywordsFindResponse: + properties: + keywords: + items: + $ref: '#/definitions/handlers.keyword' + type: array + not_found: + items: + type: string + type: array + type: object + handlers.OptionsLimits: + properties: + total_keywords: + type: integer + total_pagespeed_urls: + type: integer + total_projects: + type: integer + total_service_units: + type: integer + total_users: + type: integer + used_service_units: + type: integer + type: object + handlers.PreferredURLsUploadResponse: + properties: + updated_keywords: + type: integer + type: object + handlers.ProjectConnectionResponse: + properties: + id: + type: integer + type: + type: string + type: object + handlers.ProjectItemResponse: + properties: + color: + type: string + core_conflicts: + type: boolean + domain: + type: string + draft_keywords_count: + type: integer + draft_project: + $ref: '#/definitions/handlers.projectItemBaseProject' + draft_segments_count: + type: integer + draft_updated: + type: boolean + favourite: + type: boolean + goals_count: + type: integer + id: + type: string + is_draft: + type: boolean + is_out_of_sync: + type: boolean + keywords_count: + type: integer + pagespeed_urls_count: + type: integer + publish_status: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProjectStatus' + published_at: + type: string + publishing_failed_reason: + type: string + role: + $ref: '#/definitions/rbac.RoleName' + segments_count: + type: integer + shared_with: + type: integer + targets_stats: + $ref: '#/definitions/handlers.projectItemTargetsStats' + title: + type: string + type: object + handlers.ReferenceRequest: + properties: + id: + type: string + references: + items: + type: string + minItems: 1 + type: array + replace: + type: boolean + required: + - id + - references + type: object + handlers.ReportSuite: + properties: + calendar_type: + type: string + collection_item_type: + type: string + currency: + type: string + name: + type: string + parent_rsid: + type: string + rsid: + type: string + timezone_zoneinfo: + type: string + virtual_report_suite: + type: boolean + type: object + handlers.RequiredUserUnitsForm: + properties: + emails: + items: + type: string + minItems: 1 + type: array + required: + - emails + type: object + handlers.RequiredUserUnitsResponse: + properties: + required_units: + type: integer + type: object + handlers.SegmentInternalResponse: + properties: + conditions: + items: + $ref: '#/definitions/handlers.Condition' + type: array + created_at: + type: string + filters: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.Filter' + id: + type: string + name: + type: string + updated_at: + type: string + type: object + handlers.SegmentListByWorkspaceResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.SegmentWithProjectResponse' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.SegmentListInternalResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.SegmentInternalResponse' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.SegmentListResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.SegmentResponse' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.SegmentResponse: + properties: + conditions: + items: + $ref: '#/definitions/handlers.Condition' + type: array + created_at: + type: string + filters: + $ref: '#/definitions/handlers.Filter' + id: + type: string + name: + type: string + updated_at: + type: string + type: object + handlers.SegmentUpsertForm: + properties: + conditions: + items: + $ref: '#/definitions/handlers.Condition' + type: array + filters: + allOf: + - $ref: '#/definitions/handlers.Filter' + description: 'todo: after conditions removed this field should be required.' + name: + type: string + required: + - name + type: object + handlers.SegmentWithProjectResponse: + properties: + conditions: + items: + $ref: '#/definitions/handlers.Condition' + type: array + created_at: + type: string + filters: + $ref: '#/definitions/handlers.Filter' + id: + type: string + name: + type: string + project_id: + type: string + project_name: + type: string + updated_at: + type: string + type: object + handlers.SubCondition: + properties: + condition: + $ref: '#/definitions/handlers.Condition' + logic_operator: + enum: + - and + - or + type: string + required: + - condition + - logic_operator + type: object + handlers.TagsTreeResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.tagTreeItem' + type: array + type: object + handlers.TagsTreeResponseV2: + properties: + items: + items: + $ref: '#/definitions/handlers.tagTreeItemV2' + type: array + type: object + handlers.Target: + properties: + benchmarks_count: + type: integer + campaign_id: + type: string + created_at: + type: string + database: + type: string + device: + type: string + domain: + type: string + id: + type: string + keywords_count: + type: integer + language: + $ref: '#/definitions/handlers.TargetLanguage' + location: + $ref: '#/definitions/handlers.Location' + name: + type: string + volume_type: + type: string + type: object + handlers.TargetLanguage: + properties: + id: + type: integer + name: + type: string + type: object + handlers.TargetMetadata: + properties: + database: + type: string + device: + type: string + id: + type: string + language: + $ref: '#/definitions/handlers.TargetLanguage' + location: + $ref: '#/definitions/handlers.Location' + name: + type: string + type: object + handlers.TargetsStats: + properties: + draft_targets_count: + type: integer + target: + $ref: '#/definitions/handlers.TargetMetadata' + targets_count: + type: integer + type: object + handlers.Transaction: + properties: + balance_after: + type: integer + balance_before: + type: integer + date: + type: string + id: + type: string + iid: + type: integer + operation: + type: string + owner_id: + type: integer + owner_name: + type: string + receipt_id: + type: integer + receipt_name: + type: string + reference_transaction_id: + type: string + service_credits: + type: integer + service_id: + type: string + service_type: + type: string + title: + type: string + workspace_id: + type: string + type: object + handlers.TransactionsCancelForm: + properties: + service_credits: + minimum: 1 + type: integer + required: + - service_credits + type: object + handlers.TransactionsCreateForm: + properties: + owner_id: + type: integer + receipt_id: + type: integer + service_credits: + minimum: 1 + type: integer + service_id: + maxLength: 255 + type: string + service_type: + type: string + title: + maxLength: 255 + type: string + workspace_id: + type: string + required: + - owner_id + - service_credits + - service_id + - service_type + - workspace_id + type: object + handlers.TransactionsCreateFormV2: + properties: + amount: + minimum: 1 + type: integer + global_limit_key: + type: string + owner_id: + type: integer + product_limit: + $ref: '#/definitions/handlers.TxProductLimit' + receipt_id: + type: integer + service_id: + maxLength: 255 + type: string + service_type: + type: string + title: + maxLength: 255 + type: string + workspace_id: + type: string + required: + - amount + - service_id + - service_type + - workspace_id + type: object + handlers.TransactionsListForm: + properties: + end: + description: Must have YYYY-MM-DD format + example: "2023-10-24" + type: string + operations: + description: Must be debit or credit + example: + - debit + - credit + items: + type: string + type: array + owners: + example: + - 123 + - 456 + items: + type: integer + type: array + receipts: + example: + - 123 + - 456 + items: + type: integer + type: array + service_types: + description: Must be seo_workflow, job_hourly, job_fixed or service_fee + example: + - seo_workflow + - job_hourly + - job_fixed + - service_fee + items: + type: string + type: array + start: + description: Must have YYYY-MM-DD format + example: "2023-10-24" + type: string + title: + example: some title + maxLength: 255 + type: string + workspaces: + example: + - eab40b25-ec97-4efb-91ea-dbcc6153a721 + - eab40b25-ec97-4efb-91ea-dbcc6153a722 + items: + type: string + type: array + type: object + handlers.TransactionsRefundForm: + properties: + amount: + minimum: 1 + type: integer + required: + - amount + type: object + handlers.TxProductLimit: + properties: + enterprise_limit_key: + example: pages + type: string + product_id: + allOf: + - $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductID' + example: si + type: object + handlers.UsedLimit: + properties: + total: + type: integer + used: + type: integer + type: object + handlers.UsedLimitWithDrafted: + properties: + drafted: + type: integer + total: + type: integer + used: + type: integer + type: object + handlers.UserJob: + properties: + description: + maxLength: 1000 + type: string + end: + type: string + id: + type: string + name: + maxLength: 255 + type: string + start: + type: string + type: object + handlers.UserProfile: + properties: + availability: + type: string + categories: + items: + type: string + type: array + company: + type: string + country: + $ref: '#/definitions/handlers.Country' + description: + type: string + email: + type: string + es_type: + type: string + id: + type: integer + jobs: + items: + $ref: '#/definitions/handlers.UserJob' + type: array + languages: + items: + type: string + type: array + linked_in: + type: string + locale: + type: string + name: + type: string + phone: + type: string + profession: + type: string + profile_pic: + type: string + projects: + items: + $ref: '#/definitions/handlers.UserProject' + type: array + skills: + items: + type: string + type: array + time_zone: + type: string + workspaces: + items: + $ref: '#/definitions/handlers.UserWorkspace' + type: array + type: object + handlers.UserProject: + properties: + id: + type: string + title: + type: string + user_role: + type: string + type: object + handlers.UserWorkspace: + properties: + id: + type: string + title: + type: string + user_role: + type: string + type: object + handlers.WorkCategory: + properties: + name: + type: string + skills: + items: + type: string + type: array + type: object + handlers.WorkspaceCheckResponse: + properties: + status: + type: string + type: object + handlers.WorkspaceConnection: + description: A connection for a particular workspace + properties: + data_source: + type: string + id: + type: integer + owner: + $ref: '#/definitions/handlers.WorkspaceConnectionOwner' + projects: + items: + $ref: '#/definitions/handlers.WorkspaceConnectionProject' + type: array + settings: + $ref: '#/definitions/handlers.WorkspaceConnectionSettings' + status: + $ref: '#/definitions/handlers.WorkspaceConnectionStatus' + updated_at: + type: string + type: object + handlers.WorkspaceConnectionDetails: + description: A connection for a particular workspace + properties: + data_source: + type: string + id: + type: integer + owner: + $ref: '#/definitions/handlers.WorkspaceConnectionOwner' + project_ids: + items: + type: string + type: array + settings: + $ref: '#/definitions/handlers.WorkspaceConnectionSettings' + status: + $ref: '#/definitions/handlers.WorkspaceConnectionStatus' + updated_at: + type: string + type: object + handlers.WorkspaceConnectionItem: + description: A connection for a particular workspace item in the connection list + properties: + data_source: + type: string + id: + type: integer + owner: + $ref: '#/definitions/handlers.WorkspaceConnectionOwner' + projects: + items: + $ref: '#/definitions/handlers.WorkspaceConnectionProject' + type: array + settings: + $ref: '#/definitions/handlers.WorkspaceConnectionSettings' + status: + $ref: '#/definitions/handlers.WorkspaceConnectionStatus' + updated_at: + type: string + type: object + handlers.WorkspaceConnectionOwner: + description: Workspace connection owner information + properties: + email: + type: string + id: + type: integer + name: + type: string + profile_pic: + type: string + type: object + handlers.WorkspaceConnectionProject: + properties: + id: + type: string + name: + type: string + type: object + handlers.WorkspaceConnectionSettings: + properties: + adobe_analytics: + $ref: '#/definitions/handlers.AdobeAnalyticsConnectionSettings' + google_ads: + $ref: '#/definitions/handlers.GoogleAdsConnectionSettings' + google_analytics: + $ref: '#/definitions/handlers.GoogleAnalyticsConnectionSettings' + google_console: + $ref: '#/definitions/handlers.GoogleSearchConsoleConnectionSettings' + log_file_analysis: + $ref: '#/definitions/handlers.LogFileAnalysisConnectionSettings' + type: object + handlers.WorkspaceConnectionStatus: + properties: + message: + type: string + type: + type: string + type: object + handlers.WorkspaceConnectionsAttachItem: + properties: + connection_ids: + items: + type: integer + type: array + project_id: + type: string + type: object + handlers.WorkspaceConnectionsDeleteRequest: + description: Request body for workspace connections delete endpoint + properties: + ids: + items: + type: integer + type: array + type: object + handlers.WorkspaceConnectionsResponse: + description: Response for workspace connections + properties: + items: + items: + $ref: '#/definitions/handlers.WorkspaceConnectionItem' + type: array + page_number: + type: integer + total_items: + type: integer + type: object + handlers.WorkspaceCreateChildForm: + properties: + icon: + type: string + owner: + type: string + resources: + $ref: '#/definitions/handlers.WorkspaceResources' + title: + type: string + required: + - resources + - title + type: object + handlers.WorkspaceListItem: + properties: + created_at: + type: string + expires_at: + type: string + icon: + type: string + id: + type: string + is_admin: + type: boolean + is_master: + type: boolean + keywords_count: + type: integer + last_updated_at: + type: string + owner: + type: string + pagespeed_urls_count: + type: integer + parent: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceParent' + parent_id: + type: string + partnership_enabled: + type: boolean + product_tiers: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductTier' + type: array + products: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductID' + type: array + published_projects_count: + type: integer + resources: + additionalProperties: + additionalProperties: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.EntityLimit' + type: object + type: object + role: + type: string + settings: + $ref: '#/definitions/handlers.workspaceSettings' + shared_with: + type: integer + status: + type: string + subscription_tier: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.Tier' + title: + type: string + users: + type: integer + type: object + handlers.WorkspaceMember: + properties: + email: + type: string + id: + type: integer + is_all_projects_access: + type: boolean + is_home_workspace: + type: boolean + membership_status: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.MembershipStatus' + profile_pic: + type: string + projects: + items: + $ref: '#/definitions/handlers.WorkspaceMemberProject' + type: array + role: + type: string + type: object + handlers.WorkspaceMemberProject: + properties: + id: + type: string + title: + type: string + type: object + handlers.WorkspaceMemberUpsertResponse: + properties: + consumed_units: + $ref: '#/definitions/handlers.ConsumedUnits' + type: object + handlers.WorkspaceResources: + properties: + api_units: + minimum: 0 + type: integer + keywords: + minimum: 0 + type: integer + pagespeed_urls: + minimum: 0 + type: integer + projects: + minimum: 0 + type: integer + service_credits: + minimum: 0 + type: integer + users: + minimum: 0 + type: integer + type: object + handlers.WorkspaceResourcesTransferV2Form: + properties: + resources: + $ref: '#/definitions/handlers.createWorkspaceV2Resources' + type: object + handlers.activationPanelAIOPromptSettingsForm: + properties: + prompt_type: + enum: + - daily + - weekly + type: string + weekly_prompts_day_of_week: + allOf: + - $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.DayOfWeek' + enum: + - monday + - tuesday + - wednesday + - thursday + - friday + - saturday + - sunday + required: + - prompt_type + type: object + handlers.activationPanelAIOPromptSettingsGetForm: + properties: + prompt_type: + type: string + weekly_prompts_day_of_week: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.DayOfWeek' + type: object + handlers.activationPanelPermission: + enum: + - workspace.edit + - workspace.delete + - workspace.view + - workspace.add + type: string + x-enum-varnames: + - editWorkspaces + - deleteWorkspaces + - viewWorkspaces + - addWorkspaces + handlers.activationPanelSubscriptionForm: + properties: + workspace_id: + type: string + required: + - workspace_id + type: object + handlers.activationPanelWorkspaceCreateForm: + properties: + email: + type: string + icon: + type: string + partnership_enabled: + default: false + type: boolean + product_tiers: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductTierIDs' + type: array + title: + type: string + required: + - email + - title + type: object + handlers.adminProjectTransferForm: + properties: + projects: + items: + $ref: '#/definitions/handlers.transferProductProject' + minItems: 1 + type: array + target_workspace_id: + type: string + target_workspace_owner_id: + type: integer + required: + - projects + - target_workspace_id + - target_workspace_owner_id + type: object + handlers.adminSmbProjectMigrationForm: + properties: + account_ids: + items: + type: integer + type: array + required: + - account_ids + type: object + handlers.adminWorkspaceCreateForm: + properties: + icon: + type: string + owner_email: + type: string + parent_id: + type: string + resources: + $ref: '#/definitions/handlers.WorkspaceResources' + title: + type: string + required: + - parent_id + - resources + - title + type: object + handlers.adminWorkspaceUpsertForm: + properties: + icon: + type: string + partnership_enabled: + default: false + type: boolean + product_tiers: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductTierIDs' + type: array + title: + type: string + user_id: + type: integer + required: + - title + - user_id + type: object + handlers.ai: + properties: + prompts_count: + type: integer + published_projects_count: + type: integer + type: object + handlers.aiProductResources: + properties: + projects: + type: integer + prompts: + type: integer + type: object + handlers.basicWorkspacesMembersResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.BasicWorkspaceMember' + type: array + type: object + handlers.batchWorkspaceMembersRequest: + properties: + include_parental_admins: + type: boolean + workspace_ids: + items: + type: string + minItems: 1 + type: array + required: + - workspace_ids + type: object + handlers.benchmark: + properties: + color: + type: string + id: + type: string + sync_enabled: + type: boolean + tags: + $ref: '#/definitions/handlers.benchmarkTags' + url: + type: string + type: object + handlers.benchmarkBulkUpdateForm: + properties: + ids: + items: + type: string + minItems: 1 + type: array + sync_enabled: + type: boolean + tags: + items: + type: string + type: array + required: + - ids + type: object + handlers.benchmarkCloneForm: + properties: + dst_target_id: + type: string + src_target_id: + type: string + required: + - dst_target_id + - src_target_id + type: object + handlers.benchmarkCreateForm: + properties: + color: + type: string + sync_enabled: + type: boolean + tags: + items: + type: string + type: array + url: + type: string + required: + - url + type: object + handlers.benchmarkRemoveTagsForm: + properties: + benchmark_ids: + items: + type: string + minItems: 1 + type: array + tag_ids: + items: + type: string + minItems: 1 + type: array + required: + - benchmark_ids + - tag_ids + type: object + handlers.benchmarkTags: + additionalProperties: + items: + type: string + type: array + type: object + handlers.benchmarkUpdateForm: + properties: + color: + type: string + sync_enabled: + type: boolean + tags: + items: + type: string + type: array + url: + type: string + type: object + handlers.benchmarksDeleteForm: + properties: + ids: + items: + type: string + minItems: 1 + type: array + required: + - ids + type: object + handlers.benchmarksListResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.benchmark' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.billingStatusResponse: + properties: + expire_date: + type: string + has_product: + type: boolean + is_paid: + type: boolean + subscription_id: + type: integer + user_id: + type: integer + type: object + handlers.ci: + properties: + pages: + type: integer + published_projects_count: + type: integer + type: object + handlers.createWorkspaceV2Form: + properties: + icon: + type: string + owner: + type: string + parentID: + type: string + resources: + $ref: '#/definitions/handlers.createWorkspaceV2Resources' + title: + type: string + userID: + type: integer + required: + - resources + - title + type: object + handlers.createWorkspaceV2Resources: + properties: + ai: + $ref: '#/definitions/handlers.aiProductResources' + general: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesGlobal' + product_resources: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceProductResources' + type: array + seo: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesSEO' + type: object + handlers.getServiceUnitsResponse: + properties: + available: + type: integer + total: + type: integer + units: + description: 'Deprecated: This is left here to ensure backward compatibility. + Use Available field instead.' + type: integer + type: object + handlers.goalImportForm: + properties: + source_project_id: + type: string + required: + - source_project_id + type: object + handlers.goalImportReponse: + properties: + total_imported_goals: + type: integer + type: object + handlers.goalMetricsResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.goalsMetric' + type: array + total: + type: integer + type: object + handlers.goalUpsertReponse: + properties: + date_from: + description: Is set when the goal is objective + example: "2024-01-01" + format: date + type: string + date_to: + description: Is set when the goal is objective + example: "2024-02-01" + format: date + type: string + date_type: + allOf: + - $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.GoalDateType' + description: We can have monthly goals now + id: + description: ID is the goal ID in the system + type: string + lower_value: + description: May be null if we have only upper value in the threshold + type: number + metric_id: + type: string + name: + type: string + objective_value_type: + allOf: + - $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.GoalObjectiveValueType' + description: |- + ### Single objective value + `value` is used for `single` `objective_value_type` + ### Multiple objective values + `values` is used for `multiple` `objective_value_type` + type: + allOf: + - $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.GoalType' + description: |- + ### Threshold goal + `upper_value` and `lower_value` are used for threshold goals + ### Objective goal + `date_type`, `date_from`, `date_to`, `value`, `objective_value_type`, `values` are used for objective goals + upper_value: + description: Is set when the goal is threshold + type: number + value: + description: Set when the goal is single objective + type: number + values: + description: Set when the goal is multiple objective + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.GoalValue' + type: array + required: + - id + - metric_id + - name + - type + type: object + handlers.goalsDeleteForm: + properties: + ids: + items: + type: string + minItems: 1 + type: array + type: object + handlers.goalsListResponse: + properties: + items: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.Goal' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.goalsMetric: + properties: + id: + type: string + name: + type: string + type: object + handlers.goalsUpsertForm: + properties: + date_from: + description: Is set when the goal is objective + example: "2024-01-01" + format: date + type: string + date_to: + description: Is set when the goal is objective + example: "2024-02-01" + format: date + type: string + date_type: + allOf: + - $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.GoalDateType' + description: We can have monthly goals now + lower_value: + description: May be null if we have only upper value in the threshold + type: number + metric_id: + type: string + name: + type: string + objective_value_type: + allOf: + - $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.GoalObjectiveValueType' + description: |- + ### Single objective value + `value` is used for `single` `objective_value_type` + ### Multiple objective values + `values` is used for `multiple` `objective_value_type` + type: + allOf: + - $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.GoalType' + description: |- + ### Threshold goal + `upper_value` and `lower_value` are used for threshold goals + ### Objective goal + `date_type`, `date_from`, `date_to`, `value`, `objective_value_type`, `values` are used for objective goals + upper_value: + description: Is set when the goal is threshold + type: number + value: + description: Set when the goal is single objective + type: number + values: + description: Set when the goal is multiple objective + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.GoalValue' + type: array + required: + - metric_id + - name + - type + type: object + handlers.internalGoal: + properties: + date: + description: Set when the goal is objective, will contain dates between date_from + and date_to + example: "2024-01-01" + format: date + type: string + date_from: + description: Set when the goal is objective, may be set when the goal is threshold + example: "2024-01-01" + format: date + type: string + date_to: + description: Set when the goal is objective, may be set when the goal is threshold + example: "2024-02-01" + format: date + type: string + date_type: + allOf: + - $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.GoalDateType' + description: We can have monthly goals now + id: + type: string + metric_id: + type: string + metric_name: + type: string + name: + type: string + project_domain: + type: string + type: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.GoalType' + value: + description: Is set to upper value when type is threshold and objective value + when type is objective + type: number + required: + - id + - metric_id + - metric_name + - name + - project_domain + - type + type: object + handlers.internalGoalsListResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.internalGoal' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.internalWorkspace: + properties: + created_at: + type: string + icon: + type: string + id: + type: string + is_master: + type: boolean + last_updated_at: + type: string + parent: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceParent' + parent_id: + type: string + partnership_enabled: + type: boolean + product_tiers: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductTier' + type: array + products: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductID' + type: array + status: + type: string + subscription_tier: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.Tier' + title: + type: string + type: object + handlers.keyword: + properties: + id: + type: string + name: + type: string + position: + type: integer + preferred_url: + type: string + volume: + type: integer + type: object + handlers.keywordListAddMembersForm: + properties: + members: + items: + type: string + type: array + role: + type: string + required: + - members + - role + type: object + handlers.keywordWithTargetID: + properties: + id: + type: string + name: + type: string + position: + type: integer + preferred_url: + type: string + target_id: + type: string + volume: + type: integer + type: object + handlers.keywordsCloneForm: + properties: + dst_target_id: + type: string + src_target_id: + type: string + required: + - dst_target_id + - src_target_id + type: object + handlers.keywordsCreateForm: + properties: + keywords: + items: + type: string + minItems: 1 + type: array + tag_ids: + items: + type: string + type: array + required: + - keywords + type: object + handlers.keywordsCreateResponse: + properties: + duplicate_count: + type: integer + items: + items: + $ref: '#/definitions/handlers.keyword' + type: array + type: object + handlers.keywordsDeleteForm: + properties: + all: + type: boolean + ids: + items: + type: string + minItems: 1 + type: array + type: object + handlers.keywordsListDeleteMembersForm: + properties: + members: + items: + type: string + type: array + required: + - members + type: object + handlers.keywordsListMemberUpdateRoleForm: + properties: + member: + type: string + role: + type: string + required: + - member + - role + type: object + handlers.keywordsListMembersResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.member' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.keywordsListResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.keyword' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.keywordsRelatedTagsForm: + properties: + ids: + items: + type: string + minItems: 1 + type: array + required: + - ids + type: object + handlers.keywordsUpdateForm: + properties: + ids: + items: + type: string + minItems: 1 + type: array + url: + type: string + required: + - ids + type: object + handlers.keywordsUpdateResponse: + properties: + ids: + items: + type: string + minItems: 1 + type: array + url: + type: string + required: + - ids + type: object + handlers.member: + properties: + email: + type: string + id: + type: integer + profile_pic: + type: string + role: + type: string + type: object + handlers.pagespeedAddNamedKeywordsForm: + properties: + keywords: + items: + type: string + type: array + target_id: + type: string + type: object + handlers.pagespeedAddNamedKeywordsResponse: + properties: + keywords: + items: + $ref: '#/definitions/handlers.keyword' + type: array + not_found: + items: + type: string + type: array + type: object + handlers.pagespeedCrawler: + properties: + crawler_type: + type: string + device: + type: string + id: + type: string + interval: + type: string + name: + type: string + status: + type: string + total_keywords: + type: integer + total_urls: + type: integer + type: object + handlers.pagespeedCrawlerAddKeywordsForm: + properties: + keywords: + items: + $ref: '#/definitions/handlers.pagespeedKeywordsForm' + type: array + required: + - keywords + type: object + handlers.pagespeedCrawlerAddURLsForm: + properties: + urls: + items: + type: string + minItems: 1 + type: array + required: + - urls + type: object + handlers.pagespeedCrawlerCreateForm: + properties: + crawler_type: + enum: + - keywords + - urls + type: string + device: + type: string + interval: + enum: + - once + - daily + - weekly + - week-days + - bi-weekly + - monthly + type: string + invisible: + type: boolean + keyword_names: + items: + type: string + type: array + keywords: + items: + $ref: '#/definitions/handlers.pagespeedKeywordsForm' + type: array + name: + type: string + target_id: + type: string + urls: + items: + type: string + type: array + required: + - device + - name + type: object + handlers.pagespeedCrawlerCreateResponse: + properties: + crawler_type: + type: string + device: + type: string + id: + type: string + interval: + type: string + keywords: + items: + $ref: '#/definitions/handlers.keyword' + type: array + name: + type: string + not_found_keywords: + items: + type: string + type: array + status: + type: string + total_keywords: + type: integer + total_urls: + type: integer + urls: + items: + $ref: '#/definitions/handlers.pagespeedURL' + type: array + type: object + handlers.pagespeedCrawlerUpdateForm: + properties: + interval: + enum: + - once + - daily + - weekly + - week-days + - bi-weekly + - monthly + type: string + name: + type: string + required: + - name + type: object + handlers.pagespeedCrawlerVisibleForm: + properties: + device: + type: string + interval: + enum: + - once + - daily + - weekly + - week-days + - bi-weekly + - monthly + type: string + name: + type: string + required: + - device + - name + type: object + handlers.pagespeedCrawlersInternalListResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.pagespeedInternalCrawler' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.pagespeedCrawlersListResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.pagespeedCrawler' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.pagespeedDeleteForm: + properties: + ids: + items: + type: string + minItems: 1 + type: array + required: + - ids + type: object + handlers.pagespeedInternalCrawler: + properties: + crawler_type: + type: string + device: + type: string + id: + type: string + interval: + type: string + name: + type: string + project_id: + type: string + status: + type: string + total_keywords: + type: integer + total_urls: + type: integer + type: object + handlers.pagespeedInternalKeywordsListResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.keywordWithTargetID' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.pagespeedKeywordsDeleteForm: + properties: + ids: + items: + type: string + minItems: 1 + type: array + required: + - ids + type: object + handlers.pagespeedKeywordsForm: + properties: + ids: + items: + type: string + minItems: 1 + type: array + target_id: + type: string + required: + - ids + - target_id + type: object + handlers.pagespeedKeywordsListResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.keyword' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.pagespeedURL: + properties: + id: + type: string + url: + type: string + type: object + handlers.pagespeedURLsDeleteForm: + properties: + ids: + items: + type: string + minItems: 1 + type: array + required: + - ids + type: object + handlers.pagespeedURLsListResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.pagespeedURL' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.productTiersGroup: + properties: + product: + type: string + tiers: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.Tier' + type: array + type: object + handlers.profileUpdate: + properties: + availability: + type: string + company: + maxLength: 255 + type: string + country: + $ref: '#/definitions/handlers.Country' + description: + maxLength: 255 + type: string + jobs: + items: + $ref: '#/definitions/handlers.UserJob' + type: array + languages: + items: + type: string + type: array + linked_in: + type: string + name: + maxLength: 255 + type: string + phone: + maxLength: 20 + type: string + profession: + maxLength: 255 + type: string + profile_pic: + type: string + skills: + items: + type: string + type: array + time_zone: + type: string + type: object + handlers.projectAddMembersForm: + properties: + members: + items: + type: string + type: array + product_id: + allOf: + - $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductID' + description: for backward compatibility no validate is required and assign + SEO in case its empty + role: + type: string + required: + - members + - role + type: object + handlers.projectCreateForm: + properties: + color: + type: string + domain: + type: string + title: + type: string + required: + - domain + - title + type: object + handlers.projectDeleteMembersForm: + properties: + members: + items: + type: string + type: array + product_id: + allOf: + - $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductID' + description: for backward compatibility no validate is required and assign + SEO in case its empty + required: + - members + type: object + handlers.projectDeleteResponse: + properties: + id: + type: string + type: object + handlers.projectFavouriteSetForm: + properties: + favourite: + type: boolean + type: object + handlers.projectItem: + properties: + color: + type: string + core_conflicts: + type: boolean + domain: + type: string + draft_keywords_count: + type: integer + draft_pagespeed_urls_count: + type: integer + draft_project: + $ref: '#/definitions/handlers.BaseProject' + draft_segments_count: + type: integer + draft_updated: + type: boolean + favourite: + type: boolean + goals_count: + type: integer + id: + type: string + is_draft: + type: boolean + is_out_of_sync: + type: boolean + keywords_count: + type: integer + pagespeed_urls_count: + type: integer + publish_status: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProjectStatus' + published_at: + type: string + publishing_failed_reason: + type: string + role: + $ref: '#/definitions/rbac.RoleName' + segments_count: + type: integer + shared_with: + type: integer + targets_stats: + $ref: '#/definitions/handlers.TargetsStats' + title: + type: string + total_invited_members: + type: integer + type: object + handlers.projectItemBaseProject: + properties: + color: + type: string + domain: + type: string + is_draft: + type: boolean + title: + type: string + type: object + handlers.projectItemLanguage: + properties: + id: + type: integer + name: + type: string + type: object + handlers.projectItemLocation: + properties: + id: + type: integer + name: + type: string + type: object + handlers.projectItemTargetMetadata: + properties: + database: + type: string + device: + type: string + id: + type: string + language: + $ref: '#/definitions/handlers.projectItemLanguage' + location: + $ref: '#/definitions/handlers.projectItemLocation' + name: + type: string + type: object + handlers.projectItemTargetsStats: + properties: + target: + $ref: '#/definitions/handlers.projectItemTargetMetadata' + targets_count: + type: integer + type: object + handlers.projectListResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.projectItem' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.projectListV2Response: + properties: + items: + items: + $ref: '#/definitions/handlers.ProjectItemResponse' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.projectMembersResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.member' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.projectUpdateForm: + properties: + color: + type: string + title: + type: string + type: object + handlers.projectUpsertResponse: + properties: + color: + type: string + domain: + type: string + id: + type: string + is_draft: + type: boolean + publish_status: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProjectStatus' + title: + type: string + type: object + handlers.projectV2CreateForm: + properties: + color: + type: string + domain: + type: string + title: + type: string + required: + - title + type: object + handlers.projectV2UpdateForm: + properties: + color: + type: string + domain: + type: string + title: + type: string + type: object + handlers.projectsGetResponse: + properties: + benchmarks_count: + type: integer + color: + type: string + core_id: + type: integer + crawlers_count: + type: integer + created_at: + type: string + domain: + type: string + draft_updated: + type: boolean + favourite: + type: boolean + goals_count: + type: integer + id: + type: string + is_draft: + type: boolean + is_out_of_sync: + type: boolean + keywords_count: + type: integer + pagespeed_urls_count: + type: integer + preferred_urls_count: + type: integer + publish_status: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProjectStatus' + published_at: + type: string + publishing_failed_reason: + type: string + role: + $ref: '#/definitions/rbac.RoleName' + segments_count: + type: integer + shared_with: + type: integer + targets_count: + type: integer + targets_stats: + $ref: '#/definitions/handlers.TargetsStats' + title: + type: string + type: object + handlers.seo: + properties: + keywords_count: + type: integer + pagespeed_urls_count: + type: integer + published_projects_count: + type: integer + type: object + handlers.setServiceUnitsForm: + properties: + units: + minimum: 0 + type: integer + type: object + handlers.si: + properties: + logfile: + type: integer + pages: + type: integer + projects: + type: integer + type: object + handlers.tag: + properties: + id: + type: string + name: + type: string + type: object + handlers.tagItem: + properties: + children_count: + type: integer + id: + type: string + keywords_count: + type: integer + name: + type: string + type: object + handlers.tagTreeItem: + properties: + children: + items: + $ref: '#/definitions/handlers.tagTreeItem' + type: array + children_count: + type: integer + id: + type: string + keywords_count: + type: integer + name: + type: string + parent_id: + type: string + type: object + handlers.tagTreeItemV2: + properties: + children: + items: + $ref: '#/definitions/handlers.tagTreeItemV2' + type: array + id: + type: string + name: + type: string + parent_id: + type: string + type: object + handlers.tagWithSearchResponse: + properties: + id: + type: string + keywords_count: + type: integer + name: + type: string + parent_id: + type: string + type: object + handlers.taggedKeywordsCreateForm: + properties: + keywords: + additionalProperties: + items: + type: string + type: array + type: object + required: + - keywords + type: object + handlers.tagsCreateForm: + properties: + names: + items: + type: string + minItems: 1 + type: array + uniqueItems: true + parent_id: + type: string + required: + - names + type: object + handlers.tagsDeleteForm: + properties: + delete_keywords: + type: boolean + ids: + items: + type: string + type: array + required: + - ids + type: object + handlers.tagsList: + additionalProperties: + $ref: '#/definitions/handlers.tagItem' + type: object + handlers.tagsListResponse: + properties: + items: + $ref: '#/definitions/handlers.tagsList' + page: + type: integer + total: + type: integer + type: object + handlers.tagsListWithSearchResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.tagWithSearchResponse' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.tagsUpdateForm: + properties: + name: + type: string + parent_id: + type: string + required: + - name + type: object + handlers.targetCreateForm: + properties: + targets: + items: + $ref: '#/definitions/handlers.targetForm' + minItems: 1 + type: array + required: + - targets + type: object + handlers.targetForm: + properties: + device: + type: string + language_id: + type: integer + location_id: + type: integer + name: + type: string + volume_type: + enum: + - national + - regional + - local + type: string + required: + - device + - language_id + - location_id + - name + type: object + handlers.targetListResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.Target' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.tiersResponse: + properties: + products: + items: + $ref: '#/definitions/handlers.productTiersGroup' + type: array + tiers: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.Tier' + type: array + type: object + handlers.transactionsListResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.Transaction' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.transferProductProject: + properties: + product_id: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductID' + project_ids: + items: + type: string + minItems: 1 + type: array + required: + - product_id + - project_ids + type: object + handlers.urlGroup: + properties: + id: + type: string + name: + type: string + url: + type: string + type: object + handlers.urlGroupsDeleteForm: + properties: + ids: + items: + type: string + minItems: 1 + type: array + required: + - ids + type: object + handlers.urlGroupsListResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.urlGroup' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.urlGroupsUpsertForm: + properties: + name: + type: string + url: + type: string + required: + - name + - url + type: object + handlers.userIDsRequest: + properties: + user_ids: + items: + type: integer + minItems: 1 + type: array + required: + - user_ids + type: object + handlers.usersCreateForm: + properties: + email: + type: string + es_type: + type: string + workspace: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceUpsert' + required: + - email + - es_type + type: object + handlers.workspaceAddMembersForm: + properties: + members: + items: + type: string + minItems: 1 + type: array + role: + type: string + required: + - members + - role + type: object + handlers.workspaceAddMembersResponse: + properties: + emails: + items: + type: string + type: array + errors: + additionalProperties: true + type: object + limit_exceeded: + type: boolean + message: + type: string + type: object + handlers.workspaceCheckMembershipInAncestryResponse: + properties: + page: + type: integer + total: + type: integer + user_has_membership: + type: boolean + type: object + handlers.workspaceCheckRolesInAncestryResponse: + properties: + page: + type: integer + total: + type: integer + user_has_role: + type: boolean + type: object + handlers.workspaceDeleteMembersForm: + properties: + members: + items: + type: string + minItems: 1 + type: array + required: + - members + type: object + handlers.workspaceDeleteResponse: + properties: + id: + type: string + type: object + handlers.workspaceIDsResponse: + properties: + workspace_ids: + items: + type: string + type: array + type: object + handlers.workspaceLightResponse: + properties: + icon: + type: string + id: + type: string + is_admin: + type: boolean + is_master: + type: boolean + parent: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceParent' + parent_id: + type: string + partnership_enabled: + type: boolean + product_tiers: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductTier' + type: array + products: + items: + type: string + type: array + role: + type: string + shared_with: + type: integer + status: + type: string + title: + type: string + users: + type: integer + type: object + handlers.workspaceMemberUpdateRoleForm: + properties: + member: + type: string + role: + type: string + required: + - member + - role + type: object + handlers.workspaceOwnershipEligibilityResponse: + properties: + user: + $ref: '#/definitions/handlers.workspaceOwnershipUser' + valid: + type: boolean + type: object + handlers.workspaceOwnershipUser: + properties: + email: + type: string + name: + type: string + profile_pic: + type: string + type: object + handlers.workspaceProduct: + properties: + id: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductID' + is_transferable: + type: boolean + name: + type: string + type: object + handlers.workspaceResponse: + properties: + created_at: + type: string + expires_at: + type: string + icon: + type: string + id: + type: string + is_admin: + type: boolean + is_master: + type: boolean + keywords_count: + type: integer + last_updated_at: + type: string + owner: + type: string + pagespeed_urls_count: + type: integer + parent: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceParent' + parent_id: + type: string + partnership_enabled: + type: boolean + product_tiers: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductTier' + type: array + products: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductID' + type: array + published_projects_count: + type: integer + role: + type: string + status: + type: string + subscription_tier: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.Tier' + title: + type: string + users: + type: integer + type: object + handlers.workspaceSettings: + properties: + ai: + $ref: '#/definitions/handlers.ai' + ci: + $ref: '#/definitions/handlers.ci' + seo: + $ref: '#/definitions/handlers.seo' + si: + $ref: '#/definitions/handlers.si' + type: object + handlers.workspaceUpdateIconForm: + properties: + url: + type: string + type: object + handlers.workspaceUpsertForm: + properties: + icon: + type: string + title: + type: string + required: + - title + type: object + handlers.workspaceUserAPIKey: + properties: + api_key: + type: string + type: object + handlers.workspaceUserRole: + properties: + role: + $ref: '#/definitions/rbac.RoleName' + type: object + handlers.workspaceV2Response: + properties: + created_at: + type: string + expires_at: + type: string + icon: + type: string + id: + type: string + is_admin: + type: boolean + is_master: + type: boolean + keywords_count: + type: integer + last_updated_at: + type: string + owner: + type: string + pagespeed_urls_count: + type: integer + parent: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceParent' + parent_id: + type: string + partnership_enabled: + type: boolean + product_tiers: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductTier' + type: array + products: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductID' + type: array + published_projects_count: + type: integer + resources: + additionalProperties: + additionalProperties: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.EntityLimit' + type: object + type: object + role: + type: string + settings: + $ref: '#/definitions/handlers.workspaceSettings' + shared_with: + type: integer + status: + type: string + subscription_tier: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.Tier' + title: + type: string + users: + type: integer + type: object + handlers.workspacesListResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.WorkspaceListItem' + type: array + page: + type: integer + total: + type: integer + type: object + handlers.workspacesMembersResponse: + properties: + items: + items: + $ref: '#/definitions/handlers.WorkspaceMember' + type: array + page: + type: integer + total: + type: integer + type: object + http_server.BasicResponse: + properties: + errors: + additionalProperties: true + type: object + message: + type: string + type: object + page-engine-backend_internal_usermanager_core_domain.AdminProject: + properties: + created_at: + type: string + domain: + type: string + id: + type: string + is_transferable: + type: boolean + keywords: + type: integer + last_updated_at: + type: string + max_pages_per_crawler: + type: integer + owner: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProjectOwner' + pages: + type: integer + pagespeed_urls: + type: integer + product_type: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductID' + prompts: + type: integer + status: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProjectStatus' + title: + type: string + type: object + page-engine-backend_internal_usermanager_core_domain.DayOfWeek: + enum: + - monday + - tuesday + - wednesday + - thursday + - friday + - saturday + - sunday + type: string + x-enum-varnames: + - DayOfWeekMonday + - DayOfWeekTuesday + - DayOfWeekWednesday + - DayOfWeekThursday + - DayOfWeekFriday + - DayOfWeekSaturday + - DayOfWeekSunday + page-engine-backend_internal_usermanager_core_domain.EntityLimit: + properties: + drafted: + type: integer + live: + type: integer + remaining: + type: integer + total: + type: integer + type: object + page-engine-backend_internal_usermanager_core_domain.EsType: + enum: + - client + - freelancer + - pro-serve + - csm + - sales + type: string + x-enum-varnames: + - Client + - Freelancer + - ProServe + - CSM + - Sales + page-engine-backend_internal_usermanager_core_domain.Filter: + properties: + col: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.SegmentColumn' + filters: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.Filter' + type: array + op: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.FilterOperator' + value: {} + type: object + page-engine-backend_internal_usermanager_core_domain.FilterOperator: + enum: + - and + - or + - eq + - neq + - begins_with + - not_begins_with + - ends_with + - not_ends_with + - contains + - not_contains + - gt + - lt + - gte + - lte + - in + type: string + x-enum-varnames: + - FilterLogicalOpAnd + - FilterLogicalOpOr + - FilterOpEqual + - FilterOpNotEqual + - FilterOpBegin + - FilterOpNotBegin + - FilterOpEnd + - FilterOpNotEnd + - FilterOpContain + - FilterOpNotContain + - FilterOpGreater + - FilterOpLess + - FilterOpGreaterEqual + - FilterOpLessEqual + - FilterOPInList + page-engine-backend_internal_usermanager_core_domain.General: + properties: + resources: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.GeneralResources' + type: object + page-engine-backend_internal_usermanager_core_domain.GeneralResources: + properties: + api_units: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.UsedLimit' + service_credits: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.UsedLimit' + service_units: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.UsedLimit' + users: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.UsedLimit' + type: object + page-engine-backend_internal_usermanager_core_domain.GlobalLimitType: + enum: + - service_units + type: string + x-enum-varnames: + - GlobalLimitTypeServiceUnits + page-engine-backend_internal_usermanager_core_domain.Goal: + properties: + date_from: + description: Is set when the goal is objective + example: "2024-01-01" + format: date + type: string + date_to: + description: Is set when the goal is objective + example: "2024-02-01" + format: date + type: string + date_type: + allOf: + - $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.GoalDateType' + description: We can have monthly goals now + id: + description: ID is the goal ID in the system + type: string + lower_value: + description: May be null if we have only upper value in the threshold + type: number + metric_id: + type: string + name: + type: string + objective_value_type: + allOf: + - $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.GoalObjectiveValueType' + description: |- + ### Single objective value + `value` is used for `single` `objective_value_type` + ### Multiple objective values + `values` is used for `multiple` `objective_value_type` + type: + allOf: + - $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.GoalType' + description: |- + ### Threshold goal + `upper_value` and `lower_value` are used for threshold goals + ### Objective goal + `date_type`, `date_from`, `date_to`, `value`, `objective_value_type`, `values` are used for objective goals + upper_value: + description: Is set when the goal is threshold + type: number + value: + description: Set when the goal is single objective + type: number + values: + description: Set when the goal is multiple objective + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.GoalValue' + type: array + required: + - id + - metric_id + - name + - type + type: object + page-engine-backend_internal_usermanager_core_domain.GoalDateType: + enum: + - month + - quarter + type: string + x-enum-varnames: + - MonthGoalDateType + - QuarterGoalDdateType + page-engine-backend_internal_usermanager_core_domain.GoalObjectiveValueType: + enum: + - single + - multiple + type: string + x-enum-varnames: + - SingleGoalObjectiveValueType + - MultipleGoalObjectiveValueType + page-engine-backend_internal_usermanager_core_domain.GoalType: + enum: + - threshold + - objective + type: string + x-enum-varnames: + - ThresholdGoalType + - ObjectiveGoalType + page-engine-backend_internal_usermanager_core_domain.GoalValue: + properties: + date: + example: "2024-01-01" + format: date + type: string + value: + type: number + required: + - date + - value + type: object + page-engine-backend_internal_usermanager_core_domain.InternalProject: + properties: + benchmarks: + type: integer + core_id: + type: integer + crawlers: + type: integer + domain: + type: string + id: + type: string + keywords: + type: integer + preferred_urls: + type: integer + published_at: + type: string + publishing_failed_reason: + type: string + segments: + type: integer + tags: + type: integer + targets: + type: integer + title: + type: string + type: object + page-engine-backend_internal_usermanager_core_domain.InternalProjectV2: + properties: + core_id: + type: integer + domain: + type: string + id: + type: string + published_at: + type: string + role: + $ref: '#/definitions/rbac.RoleName' + title: + type: string + workspace_id: + type: string + type: object + page-engine-backend_internal_usermanager_core_domain.InternalProjectV2List: + properties: + projects: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.InternalProjectV2' + type: array + total: + type: integer + type: object + page-engine-backend_internal_usermanager_core_domain.KeywordMetrics: + properties: + position: + type: integer + search_volume: + type: integer + traffic: + type: number + type: object + page-engine-backend_internal_usermanager_core_domain.KeywordTags: + properties: + items: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.TagWithSearch' + type: array + total: + type: integer + type: object + page-engine-backend_internal_usermanager_core_domain.KeywordWithMetrics: + properties: + id: + type: string + name: + type: string + position: + type: integer + search_volume: + type: integer + tags: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.KeywordTags' + traffic: + type: number + url: + type: string + type: object + page-engine-backend_internal_usermanager_core_domain.KeywordsWithMetricsResponse: + properties: + all_total: + type: integer + items: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.KeywordWithMetrics' + type: array + page: + type: integer + total: + type: integer + unassigned: + type: integer + type: object + page-engine-backend_internal_usermanager_core_domain.KeywordsWithTagsRequestAndTagID: + properties: + draft: + type: boolean + filters: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.MetricRangeFilter' + type: array + limit: + type: integer + page: + type: integer + search: + type: string + sort: + type: string + sort_dir: + type: string + tag_id: + type: string + unassigned_only: + type: boolean + with_hierarchy: + type: boolean + type: object + page-engine-backend_internal_usermanager_core_domain.KeywordsWithTagsRequestAndTagIDs: + properties: + draft: + type: boolean + filters: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.MetricRangeFilter' + type: array + limit: + type: integer + page: + type: integer + search: + type: string + sort: + type: string + sort_dir: + type: string + tag_ids: + items: + type: string + type: array + unassigned_only: + type: boolean + with_hierarchy: + type: boolean + type: object + page-engine-backend_internal_usermanager_core_domain.MembershipStatus: + enum: + - member + - guest + - basic + type: string + x-enum-varnames: + - MembershipStatusMember + - MembershipStatusGuest + - MembershipStatusBasic + page-engine-backend_internal_usermanager_core_domain.MetricRangeFilter: + properties: + field: + type: string + from: + type: number + to: + type: number + type: object + page-engine-backend_internal_usermanager_core_domain.NewWorkspaceResources: + properties: + general: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.General' + product_resources: + additionalProperties: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductResources' + type: object + type: object + page-engine-backend_internal_usermanager_core_domain.Product: + properties: + id: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductID' + limits_enabled: + type: boolean + name: + type: string + type: object + page-engine-backend_internal_usermanager_core_domain.ProductID: + enum: + - seo + - ai + - si + - ci + type: string + x-enum-varnames: + - ProductIDSEO + - ProductIDAI + - ProductIDSI + - ProductIDCI + page-engine-backend_internal_usermanager_core_domain.ProductProjectMetadata: + properties: + id: + type: string + role: + $ref: '#/definitions/rbac.RoleName' + shared_with: + type: integer + type: object + page-engine-backend_internal_usermanager_core_domain.ProductResources: + properties: + resources: + additionalProperties: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.UsedLimit' + type: object + tier: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.Tier' + type: object + page-engine-backend_internal_usermanager_core_domain.ProductTier: + properties: + product: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.Product' + tier: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.Tier' + type: object + page-engine-backend_internal_usermanager_core_domain.ProductTierIDs: + properties: + product_id: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductID' + tier_id: + type: string + required: + - product_id + - tier_id + type: object + page-engine-backend_internal_usermanager_core_domain.ProductTierWithTimestamps: + properties: + created_at: + type: string + last_updated_at: + type: string + product_id: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductID' + tier_id: + type: string + type: object + page-engine-backend_internal_usermanager_core_domain.ProjectOwner: + properties: + email: + type: string + id: + type: string + type: object + page-engine-backend_internal_usermanager_core_domain.ProjectStatus: + enum: + - draft + - live + - publishing + - initial_publish_failed + - live_with_unpublished_updates + - subsequent_publish_failed + type: string + x-enum-varnames: + - ProjectStatusDraft + - ProjectStatusLive + - ProjectStatusPublishing + - ProjectStatusInitialPublishFailed + - ProjectStatusLiveWithUnpublishedUpdates + - ProjectStatusSubsequentPublishFailed + page-engine-backend_internal_usermanager_core_domain.SOXProductActivation: + properties: + product_activation_date: + type: string + product_name: + type: string + type: object + page-engine-backend_internal_usermanager_core_domain.SOXWorkspace: + properties: + ownerID: + type: integer + products: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.SOXProductActivation' + type: array + status: + type: string + subscription_activation_date: + type: string + subscription_expiration_date: + type: string + subscription_id: + type: integer + workspace_name: + type: string + workspace_owner: + type: string + type: object + page-engine-backend_internal_usermanager_core_domain.SegmentColumn: + enum: + - url + - url_list + - keyword + - keyword_list + - traffic + - position + - search_volume + - keyword_intent + - country + - device + - clicks + - impressions + - ctr + - gsc_position + type: string + x-enum-varnames: + - ColUrl + - ColUrlList + - ColKeyword + - ColKeywordList + - ColTraffic + - ColPosition + - ColSearchVolume + - ColKeywordIntent + - ColCountry + - ColDevice + - ColClicks + - ColImpressions + - ColCtr + - ColGscPosition + page-engine-backend_internal_usermanager_core_domain.TagWithSearch: + properties: + id: + type: string + name: + type: string + parent_id: + type: string + type: object + page-engine-backend_internal_usermanager_core_domain.Tier: + properties: + id: + type: string + name: + type: string + rank: + type: integer + type: object + page-engine-backend_internal_usermanager_core_domain.Transaction: + properties: + amount: + type: integer + balance_after: + type: integer + balance_before: + type: integer + date: + type: string + global_limit_key: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.GlobalLimitType' + id: + type: string + iid: + type: integer + operation: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.TransactionOperation' + owner_id: + type: integer + owner_name: + type: string + product_limit: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.TxProductLimit' + receipt_id: + type: integer + receipt_name: + type: string + reference_transaction_id: + type: string + service_id: + type: string + service_type: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.TransactionServiceType' + title: + type: string + workspace_id: + type: string + type: object + page-engine-backend_internal_usermanager_core_domain.TransactionOperation: + enum: + - debit + - credit + type: string + x-enum-varnames: + - TransactionOperationDebit + - TransactionOperationCredit + page-engine-backend_internal_usermanager_core_domain.TransactionServiceType: + enum: + - job_hourly + - job_fixed + - seo_workflow + - service_fee + - si_crawler + - ai_insights + type: string + x-enum-varnames: + - TransactionServiceTypeJobHourly + - TransactionServiceTypeJobFixed + - TransactionServiceTypeSEOWorkflow + - TransactionServiceTypeServiceFee + - TransactionServiceTypeSICrawler + - TransactionServiceTypeAIInsights + page-engine-backend_internal_usermanager_core_domain.TxProductLimit: + properties: + enterprise_limit_key: + example: pages + type: string + product_id: + allOf: + - $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductID' + example: si + type: object + page-engine-backend_internal_usermanager_core_domain.UsedLimit: + properties: + drafted: + type: integer + total: + type: integer + used: + type: integer + type: object + page-engine-backend_internal_usermanager_core_domain.User: + properties: + e_mail: + type: string + es_type: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.EsType' + id: + type: integer + invite_accepted: + type: boolean + type: object + page-engine-backend_internal_usermanager_core_domain.WorkspaceExpiration: + properties: + expires_at: + type: string + type: object + page-engine-backend_internal_usermanager_core_domain.WorkspaceParent: + properties: + id: + type: string + title: + type: string + type: object + page-engine-backend_internal_usermanager_core_domain.WorkspacePartnership: + properties: + is_partnered: + type: boolean + type: object + page-engine-backend_internal_usermanager_core_domain.WorkspaceProductResources: + properties: + product_id: + allOf: + - $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductID' + example: si + resources: + additionalProperties: + type: integer + type: object + type: object + page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesGlobal: + properties: + api_units: + minimum: 0 + type: integer + logfile_analysis_mb_used: + minimum: 0 + type: integer + service_credits: + minimum: 0 + type: integer + service_units: + minimum: 0 + type: integer + users: + minimum: 0 + type: integer + type: object + page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesSEO: + properties: + keywords: + minimum: 0 + type: integer + pagespeed_urls: + minimum: 0 + type: integer + projects: + minimum: 0 + type: integer + type: object + page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesV2: + properties: + general: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesGlobal' + product_resources: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceProductResources' + type: array + seo: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesSEO' + type: object + page-engine-backend_internal_usermanager_core_domain.WorkspaceTotalLimits: + properties: + general: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesGlobal' + seo: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesSEO' + type: object + page-engine-backend_internal_usermanager_core_domain.WorkspaceUpsert: + properties: + icon: + type: string + partnership_enabled: + default: false + type: boolean + product_tiers: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductTierIDs' + type: array + title: + type: string + required: + - title + type: object + rbac.RoleName: + enum: + - role/workspace/owner + - role/workspace/admin + - role/workspace/editor + - role/workspace/viewer + - role/workspace/collaborator + - role/workspace/content-writer + - role/project/editor + - role/project/viewer + - role/keywords_list/editor + - role/keywords_list/viewer + type: string + x-enum-varnames: + - RoleWorkspaceOwner + - RoleWorkspaceAdmin + - RoleWorkspaceEditor + - RoleWorkspaceViewer + - RoleWorkspaceCollaborator + - RoleWorkspaceContentWriter + - RoleProjectEditor + - RoleProjectViewer + - RoleKeywordListEditor + - RoleKeywordListViewer +info: + contact: {} + description: This is the Semrush Enterprise Solutions (ES) User Manager API. The + User Manager handles everything around + title: User Manager API + version: "1.0" +paths: + /v1/admin/core-users: + get: + consumes: + - application/json + description: gets core users with ids + operationId: admin-core-users-list + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - collectionFormat: csv + description: user id + format: multi + in: query + items: + type: string + name: user_id + type: array + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.CoreUserWithAPIKey' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets core users by ids + tags: + - Admin + /v1/admin/users: + post: + consumes: + - application/json + description: |- + Creates a new enterprise user based on an existing Semrush user and workspace if provided. + Leave workspace as null to create user w/o workspace. + operationId: users-create + parameters: + - description: Admin API key + in: header + name: API-Key + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.usersCreateForm' + produces: + - application/json + responses: + "201": + description: Created + "403": + description: Forbidden + "422": + description: Unprocessable Entity + "500": + description: Internal Server Error + summary: Create a new user and master workspace + tags: + - Admin + /v1/admin/users/billing-status: + post: + consumes: + - application/json + description: Returns billing status for multiple users by user IDs + operationId: admin-get-user-billing-statuses + parameters: + - description: Admin API key + in: header + name: API-Key + required: true + type: string + - description: List of user IDs + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.userIDsRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.billingStatusResponse' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Get billing status for users + tags: + - Admin + /v1/admin/users/expired: + get: + consumes: + - application/json + operationId: expired-subscription-users + parameters: + - description: Admin API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.CoreUser' + type: array + "403": + description: Forbidden + "422": + description: Unprocessable Entity + "500": + description: Internal Server Error + summary: Gets a list of users which have expired subscriptions + tags: + - Admin + /v1/admin/workspaces: + post: + consumes: + - application/json + description: creates a child workspace + operationId: admin-workspace-child-create + parameters: + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.adminWorkspaceCreateForm' + - description: Admin API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: creates a child workspace + tags: + - Admin + /v1/admin/workspaces/{id}/partnership: + patch: + description: This API updates the partnership flag for a workspace. + operationId: admin-workspace-update-partnership + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: Workspace ID (UUID) + in: path + name: id + required: true + type: string + - description: Request body containing partnership flag + in: body + name: request + required: true + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspacePartnership' + responses: + "204": + description: No Content + "400": + description: Bad request, invalid input parameters + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized, invalid or missing API key + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden, insufficient permissions + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal server error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Update partnership for master workspace and its children + tags: + - Admin + /v1/admin/workspaces/{id}/products: + patch: + description: |- + This API updates a product and its tier in a workspace. If the product already exists, the API updates the tier. + Changes to the product and tier are automatically propagated to the child workspaces. + If the update is for a root workspace, the product and its tier will only be updated for the root workspace and will not propagate to all workspaces in the system. + This API only applies to master workspaces and cannot be used for non-master workspaces. + operationId: admin-workspace-product-update + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: Workspace ID (UUID) + in: path + name: id + required: true + type: string + - description: Request body containing product and tier details + in: body + name: request + required: true + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductTierIDs' + produces: + - application/json + responses: + "204": + description: No Content + "400": + description: Bad request, invalid input parameters + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized, invalid or missing API key + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden, insufficient permissions + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal server error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Update a product and its tier in a master workspace and propagate changes + to child workspaces + tags: + - Admin + post: + description: |- + This API allows adding a product and its tier to the master workspace. + If the product already exists, the tier will be updated for the workspace. + For root workspaces, the product is added or updated only in the root workspace. + Note: This API cannot be used to add products and tiers to non-master workspaces. + operationId: admin-workspace-product-create + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: Workspace ID (UUID) + in: path + name: id + required: true + type: string + - description: Request body containing product and tier details + in: body + name: request + required: true + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductTierIDs' + produces: + - application/json + responses: + "204": + description: No Content + "400": + description: Bad request, invalid input parameters + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized, invalid or missing API key + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden, insufficient permissions + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal server error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Add a product and its tier to master workspace and propagate changes + to its child workspaces + tags: + - Admin + /v1/admin/workspaces/{id}/products/{product_id}: + delete: + description: |- + This API deletes a product and its tier from a master workspace. If the product is removed from the root workspace, it will only be deleted from the root workspace and not from all workspaces in the system. + For non-root workspaces, the product and its tier are automatically deleted from the workspace and its child workspaces. + Note: This API can only be used to delete products from master workspaces. Non-master workspaces' products cannot be deleted using this API. + operationId: admin-workspace-product-delete + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: Workspace ID (UUID) + in: path + name: id + required: true + type: string + - description: Product ID (UUID) + in: path + name: product_id + required: true + type: string + responses: + "204": + description: No Content + "400": + description: Bad request, invalid input parameters + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized, invalid or missing API key + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden, insufficient permissions + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal server error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Delete a product and its tier from a master workspace and propagate + changes to child workspaces + tags: + - Admin + /v1/admin/workspaces/{id}/projects/{project_id}: + delete: + consumes: + - application/json + description: deletes an ES project which is already deleted from core + operationId: admin-es-project-delete + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.projectDeleteResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: deletes an ES project which is already deleted from core + tags: + - Admin + /v1/admin/workspaces/activation-panel/app: + get: + description: Gets you index.html of an spa that is hosted for Admin + operationId: activation-panel-spa + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + produces: + - text/html + responses: + "200": + description: OK + schema: {} + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Are you 100% sure you really want to get the whole html page via swagger? + tags: + - ActivationPanel + /v1/admin/workspaces/api/{id}/expire-subscription: + patch: + description: This API updates the expiration date for a partnership workspace. + operationId: admin-workspace-update-expiration + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: Workspace ID (UUID) + in: path + name: id + required: true + type: string + - description: Request body containing expiration date + in: body + name: request + required: true + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceExpiration' + responses: + "204": + description: No Content + "400": + description: Bad request, invalid input parameters + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized, invalid or missing API key + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Workspace not found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable entity, not a master or partnership workspace + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal server error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Update expiration date for master workspace + tags: + - ActivationPanel + /v1/admin/workspaces/api/create: + post: + consumes: + - application/json + description: creates a master workspace (made for Activation Panel) + operationId: activation-panel-workspace-create-master + parameters: + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.activationPanelWorkspaceCreateForm' + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "201": + description: Created + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "409": + description: Conflict + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: creates a master workspace (made for Activation Panel) + tags: + - ActivationPanel + /v1/admin/workspaces/api/list: + get: + description: returns all first-level workspaces (children of the root) including + their limits as well as the full hierarchy of their descendant workspaces + with limits + operationId: activation-panel-get-all-workspaces + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.ActivationPanelWorkspace' + type: array + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: lists all workspaces with limits and hierarchy for Activation Panel + tags: + - ActivationPanel + /v1/admin/workspaces/api/logs: + get: + description: lists all admin activity logs for Activation Panel + operationId: activation-panel-get-all-admin-activities + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + - description: filter by admin user ID + in: query + name: admin_id + type: string + - description: filter by workspace ID (UUID format) + in: query + name: workspace_id + type: string + - description: filter by action name + in: query + name: action + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.ActivationPanelAdminActivityResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: lists all admin activity logs for Activation Panel + tags: + - ActivationPanel + /v1/admin/workspaces/api/organization/{id}: + get: + description: Returns a single workspace (by id) with all the data necessary + for Activation Panel, including limits and child workspaces. + operationId: activation-panel-get-workspace + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.ActivationPanelWorkspaceWithLimits' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: get a single workspace with all the data necessary for Activation Panel + tags: + - ActivationPanel + /v1/admin/workspaces/api/organization/{id}/users-report: + get: + description: This API lists all users associated with a specific workspace and + its child workspaces and returns a CSV file. + operationId: activation-panel-users-report + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + - description: Workspace ID (UUID) + in: path + name: id + required: true + type: string + produces: + - text/csv + responses: + "200": + description: CSV file containing workspace users report + schema: + type: string + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: lists workspace and its children report of users + tags: + - Admin + /v1/admin/workspaces/api/organizations: + get: + description: lists all organizations workspaces required for Activation Panel. + Only first-level workspaces are returned without their limits and children + – kept for backward compatibility with organization route. + operationId: activation-panel-get-all-organizations + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.ActivationPanelWorkspaceListResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: lists all organizations workspaces (only first-level, without limits) + tags: + - ActivationPanel + /v1/admin/workspaces/api/permissions: + get: + consumes: + - application/json + description: creates a master workspace (made for Activation Panel) + operationId: activation-panel-workspace-permissions + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.ActivationPanelPermissionsResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: creates a master workspace (made for Activation Panel) + tags: + - ActivationPanel + /v1/admin/workspaces/api/subscriptions/update: + put: + consumes: + - application/json + description: updates subscription details for a workspace and its children + operationId: activation-panel-subscription-update + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.activationPanelSubscriptionForm' + responses: + "204": + description: No Content + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: updates subscription details for a workspace and its children + tags: + - ActivationPanel + /v1/admin/workspaces/api/update/{id}: + put: + consumes: + - application/json + description: updates a workspace matching with id (made for Activation Panel). + Title and icon can be updated for any workspace (including child workspaces). + Icon can be set to empty string. Product tiers can only be updated for master + workspaces (direct children of root workspace). + operationId: activation-panel-workspace-update + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceUpsert' + produces: + - application/json + responses: + "204": + description: No Content + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: updates a workspace (made for Activation Panel) + tags: + - ActivationPanel + /v1/admin/workspaces/api/users/{email}: + get: + consumes: + - application/json + description: checks if customer can be activated + operationId: activation-panel-check-owner-email + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + - description: customer's email + in: path + name: email + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.ActivationPanelBillingStatusCoreAccountId' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: checks if customer can be activated + tags: + - ActivationPanel + /v1/admin/workspaces/api/workspaces: + get: + consumes: + - application/json + description: 'retrieves all workspaces with basic metadata fields: ID, Title, + Icon, and ParentID (made for Activation Panel)' + operationId: activation-panel-all-workspaces-find + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.ActivationPanelWorkspaceMetadata' + type: array + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: retrieves all workspaces metadata (made for Activation Panel) + tags: + - ActivationPanel + /v1/admin/workspaces/api/workspaces/{id}/aio/prompt-settings: + get: + consumes: + - application/json + description: Endpoint to get daily or weekly (with day of week) prompt settings + for AIO product. + operationId: activation-panel-aio-settings-get + parameters: + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.activationPanelAIOPromptSettingsForm' + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.activationPanelAIOPromptSettingsGetForm' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "409": + description: Conflict + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: get daily or weekly (with day of week) prompt settings + tags: + - ActivationPanel + put: + consumes: + - application/json + description: Endpoint to create or update daily or weekly (with day of week) + prompt settings for AIO product. + operationId: activation-panel-aio-settings-upsert + parameters: + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.activationPanelAIOPromptSettingsForm' + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "204": + description: No Content + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "409": + description: Conflict + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: create or update daily or weekly (with day of week) prompt settings + tags: + - ActivationPanel + /v1/admin/workspaces/api/workspaces/{id}/products: + get: + description: Returns a list of products (with ID and name) that are enabled + for a specific workspace + operationId: activation-panel-workspace-products-get + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.workspaceProduct' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets workspace products for Activation Panel + tags: + - ActivationPanel + /v1/admin/workspaces/api/workspaces/{id}/projects: + get: + description: Returns a paginated list of projects for a specific workspace with + support for search, sorting, and status filtering using cursor-based pagination. + If next_cursor is not provided, results are returned from the start. Use the + next_cursor value from the response to fetch subsequent pages. + operationId: activation-panel-projects-find + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + - description: Workspace ID (UUID) + in: path + name: id + required: true + type: string + - description: Search term for filtering projects + in: query + name: search + type: string + - description: 'Sort direction (ASC/DESC, default: DESC)' + enum: + - ASC + - DESC + in: query + name: sort_direction + type: string + - description: Field to sort by (created_at/last_updated_at) + enum: + - created_at + - last_updated_at + in: query + name: sort_field + type: string + - description: Filter by project status + enum: + - draft + - live + - publishing + - initial_publish_failed + - live_with_unpublished_updates + - subsequent_publish_failed + in: query + name: status + type: string + - description: Filter by product + enum: + - seo + - ai + - si + - ci + in: query + name: product + type: string + - description: Cursor for pagination (obtain from previous response's next_cursor + field). If omitted, starts from the beginning. Cursors are signed and validated + to ensure query consistency. + in: query + name: next_cursor + type: string + - description: Page size (max 50) + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.AdminProjectsResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: lists projects for a workspace with filtering and pagination + tags: + - ActivationPanel + /v1/admin/workspaces/api/workspaces/{id}/projects/transfer: + post: + consumes: + - application/json + description: Transfers a list of projects from a source workspace to a target + workspace. Only AI projects with transferable status can be moved. SEO and + SI projects will be marked as failed. The endpoint validates target workspace + product enablement, available resource limits (projects, keywords, pages, + prompts, pagespeed URLs), and RBAC roles. Users with explicit project roles + or workspace roles in the source workspace will be granted appropriate roles + in the target workspace. Returns a map of failed project IDs with failure + reasons (empty map indicates all projects transferred successfully). + operationId: activation-panel-projects-transfer + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + - description: Source Workspace ID (UUID) + in: path + name: id + required: true + type: string + - description: Transfer request containing project IDs and target workspace + ID + in: body + name: body + required: true + schema: + $ref: '#/definitions/handlers.adminProjectTransferForm' + produces: + - application/json + responses: + "200": + description: "Map of failed project IDs to error reasons. Empty map means + all projects transferred successfully. Example: {\\\"proj-uuid-1\\\": + \\\"project\tis\tnot\ttransferable\\\", \\\"proj-uuid-2\\\": \\\"project\tnot\tfound\\\"}" + schema: + additionalProperties: + type: string + type: object + "401": + description: Unauthorized - Invalid or missing authentication + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden - Missing editWorkspaces permission + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable Entity - Invalid workspace ID, project IDs, or + request body validation errors + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: 'Internal Server Error - Possible errors: workspace not found, + workspace product not enabled, insufficient SEO projects, insufficient + AI projects, insufficient AI prompts, insufficient SI crawl budget, insufficient + keywords, insufficient pagespeed URLs' + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: transfers projects from one workspace to another + tags: + - ActivationPanel + /v1/admin/workspaces/api/workspaces/{id}/resources: + get: + description: Returns workspace resources including general resources (users, + service credits, API units) and product-specific resources (SEO, AI, SI) for + a specific workspace + operationId: activation-panel-workspace-resources + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.NewWorkspaceResources' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets workspace resources for Activation Panel + tags: + - ActivationPanel + /v1/admin/workspaces/api/workspaces/{id}/smb-migration: + post: + consumes: + - application/json + description: Migrate SMB projects from list of corporate owners to target workspace + operationId: activation-panel-projects-migration + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + - description: Target Workspace ID (UUID) + in: path + name: id + required: true + type: string + - description: Transfer request containing account IDs + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.adminSmbProjectMigrationForm' + produces: + - application/json + responses: + "204": + description: No Content + "400": + description: Bad request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized - Invalid or missing authentication + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden - Missing editWorkspaces permission + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Migrate SMB projects + tags: + - ActivationPanel + /v1/admin/workspaces/api/workspaces/{id}/smb-migration-report: + get: + consumes: + - application/json + description: Get report for SMB projects migration for given workspaceID as + comma separated csv + operationId: activation-panel-projects-migration-report + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + - description: Target Workspace ID (UUID) + in: path + name: id + required: true + type: string + produces: + - text/csv + responses: + "200": + description: OK + "400": + description: Bad request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized - Invalid or missing authentication + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden - Missing editWorkspaces permission + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: SMB projects migration report + tags: + - ActivationPanel + /v1/admin/workspaces/managers: + post: + consumes: + - multipart/form-data + description: imports workspace managers from CSV data where each row contains + a workspace ID and its manager user IDs + operationId: workspace-manager-import + parameters: + - description: CSV file containing workspace IDs and user IDs + in: formData + name: file + required: true + type: file + - description: Admin API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: imports workspace managers from CSV + tags: + - Admin + /v1/admin/workspaces/master: + post: + consumes: + - application/json + description: creates a master workspace + operationId: admin-workspace-create-master + parameters: + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.adminWorkspaceUpsertForm' + - description: Admin API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: creates a master workspace + tags: + - Admin + /v1/admin/workspaces/tiers: + get: + consumes: + - application/json + description: this API returns list of available tiers + operationId: activation-panel-tiers-list + parameters: + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.tiersResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: return list of tiers + tags: + - ActivationPanel + /v1/adobe-analytics/{adobe_proxy_auth_id}/{global_company_id}/dimensions: + get: + consumes: + - application/json + deprecated: true + description: 'Deprecated: use GET /v2/adobe-analytics/dimensions with credential_id, + global_company_id, rsid in query instead.' + operationId: adobe-analytics-get-dimensions + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: adobe_proxy_auth_id identifier + in: path + name: adobe_proxy_auth_id + required: true + type: string + - description: Adobe global company ID + in: path + name: global_company_id + required: true + type: string + - description: Report Suite ID + in: query + name: rsid + required: true + type: string + produces: + - application/json + responses: + "200": + description: dimensions retrieved successfully + schema: + items: + $ref: '#/definitions/handlers.Dimension' + type: array + "400": + description: Bad Request + "401": + description: Unauthorized + "500": + description: Internal Server Error + summary: '[DEPRECATED] Gets Adobe dimensions' + tags: + - Adobe Analytics + /v1/adobe-analytics/{adobe_proxy_auth_id}/{global_company_id}/metrics: + get: + consumes: + - application/json + deprecated: true + description: 'Deprecated: use GET /v2/adobe-analytics/metrics with credential_id, + global_company_id, rsid in query instead.' + operationId: adobe-analytics-get-metrics + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: adobe_proxy_auth_id identifier + in: path + name: adobe_proxy_auth_id + required: true + type: string + - description: Adobe global company ID + in: path + name: global_company_id + required: true + type: string + - description: Report Suite ID + in: query + name: rsid + required: true + type: string + produces: + - application/json + responses: + "200": + description: metrics retrieved successfully + schema: + items: + $ref: '#/definitions/handlers.Metric' + type: array + "400": + description: Bad Request + "401": + description: Unauthorized + "500": + description: Internal Server Error + summary: '[DEPRECATED] Gets Adobe metrics' + tags: + - Adobe Analytics + /v1/adobe-analytics/{adobe_proxy_auth_id}/{global_company_id}/metrics-dimensions/validation: + post: + consumes: + - application/json + deprecated: true + description: 'Deprecated: use POST /v2/adobe-analytics/credentials/metrics-dimensions/validation + with credential_id in body instead.' + operationId: adobe-analytics-validate + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: Adobe Proxy Auth ID + in: path + name: adobe_proxy_auth_id + required: true + type: string + - description: Global Company ID + in: path + name: global_company_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.AdobeAnalyticsValidateRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.AdobeAnalyticsValidateResponse' + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "429": + description: Too Many Requests + "500": + description: Internal Server Error + summary: '[DEPRECATED] Validate Adobe Analytics metrics and dimensions' + tags: + - Adobe Analytics + /v1/adobe-analytics/{adobe_proxy_auth_id}/{global_company_id}/reportsuites: + get: + consumes: + - application/json + deprecated: true + description: 'Deprecated: use GET /v2/adobe-analytics/reportsuites with credential_id + and global_company_id in query instead.' + operationId: adobe-analytics-get-report-suites + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: adobe_proxy_auth_id identifier + in: path + name: adobe_proxy_auth_id + required: true + type: string + - description: Adobe global company ID + in: path + name: global_company_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: report suites retrieved successfully + schema: + items: + $ref: '#/definitions/handlers.ReportSuite' + type: array + "400": + description: Bad Request + "401": + description: Unauthorized + "500": + description: Internal Server Error + summary: '[DEPRECATED] Gets Adobe report suites' + tags: + - Adobe Analytics + /v1/adobe-analytics/{adobe_proxy_auth_id}/{global_company_id}/reportsuites/paginated: + get: + consumes: + - application/json + deprecated: true + description: 'Deprecated: use GET /v2/adobe-analytics/reportsuites/paginated + with credential_id and global_company_id in query instead.' + operationId: adobe-analytics-get-report-suites-paginated + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: adobe_proxy_auth_id identifier + in: path + name: adobe_proxy_auth_id + required: true + type: string + - description: Adobe global company ID + in: path + name: global_company_id + required: true + type: string + - default: 10 + description: Number of items per page + in: query + name: size + type: integer + - default: 1 + description: Page number (1-indexed) + in: query + name: page + type: integer + produces: + - application/json + responses: + "200": + description: report suites with pagination retrieved successfully + schema: + $ref: '#/definitions/handlers.AdobeReportSuitesResponse' + "400": + description: Bad Request + "401": + description: Unauthorized + "500": + description: Internal Server Error + summary: '[DEPRECATED] Gets Adobe report suites with pagination' + tags: + - Adobe Analytics + /v1/adobe-analytics/{adobe_proxy_auth_id}/status: + get: + consumes: + - application/json + deprecated: true + description: 'Deprecated: use GET /v2/adobe-analytics/status with credential_id + in query instead. Gets Adobe credentials status by adobe_proxy_auth_id.' + operationId: adobe-analytics-get-status + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: adobe_proxy_auth_id identifier + in: path + name: adobe_proxy_auth_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: status retrieved successfully + schema: + $ref: '#/definitions/handlers.AdobeCredentialStatusInfo' + "400": + description: Bad Request + "401": + description: Unauthorized + "500": + description: Internal Server Error + summary: '[DEPRECATED] Gets Adobe credentials status' + tags: + - Adobe Analytics + /v1/adobe-analytics/credentials: + post: + consumes: + - application/json + deprecated: true + description: 'Deprecated: use POST /v2/adobe-analytics/credentials instead (returns + credential_id, not adobe_proxy_auth_id).' + operationId: adobe-analytics-create-credentials + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: Credentials creation request + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.AdobeCredentialsCreateRequest' + produces: + - application/json + responses: + "201": + description: credentials created successfully + schema: + $ref: '#/definitions/handlers.AdobeCredentialsInfo' + "400": + description: Bad Request + "401": + description: Unauthorized + "500": + description: Internal Server Error + summary: '[DEPRECATED] Creates Adobe Analytics credentials' + tags: + - Adobe Analytics + /v1/adobe-analytics/status/bulk: + post: + consumes: + - application/json + deprecated: true + description: 'Deprecated: will be removed without replacement. Use GET /v2/adobe-analytics/status + per credential_id instead.' + operationId: adobe-analytics-get-bulk-status + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: Bulk status request with list of adobe_proxy_auth_ids + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.AdobeBulkStatusRequest' + produces: + - application/json + responses: + "200": + description: statuses retrieved successfully + schema: + $ref: '#/definitions/handlers.AdobeBulkStatusResponse' + "400": + description: Bad Request + "401": + description: Unauthorized + "500": + description: Internal Server Error + summary: '[DEPRECATED] Gets multiple Adobe credentials statuses' + tags: + - Adobe Analytics + /v1/countries: + get: + consumes: + - application/json + description: gets a list of countries + operationId: countries + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.Country' + type: array + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of countries + tags: + - Geo + /v1/goals/metrics: + get: + consumes: + - application/json + description: this API returns list of goals metrics + operationId: goals-metrics-list + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.goalMetricsResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: returns goals metrics + tags: + - Goals + /v1/internal/core-users: + get: + consumes: + - application/json + description: gets core users with ids + operationId: internal-core-users-list + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - collectionFormat: csv + description: user id + format: multi + in: query + items: + type: string + name: user_id + type: array + - collectionFormat: csv + description: comma separated user ids + format: multi + in: query + items: + type: string + name: user_ids + type: array + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.CoreUser' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets core users by ids + tags: + - Internal + /v1/internal/projects/all: + get: + description: gets a list of live & published projects from all workspaces + operationId: internal-project-all-list + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - default: 1 + description: page number + in: query + name: page + type: integer + - default: 25 + description: page size + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.InternalProjectsList' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of live & published projects from all workspaces + tags: + - Internal + /v1/internal/projects/restore: + post: + description: restore deleted project on enterprise + operationId: internal-restore-project + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + responses: + "204": + description: No Content + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Restore project + tags: + - Internal + /v1/internal/targets/all: + get: + description: gets all live targets + operationId: internal-all-live-targets + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: {} + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets all live targets + tags: + - Internal + /v1/internal/transactions: + post: + consumes: + - application/json + description: Creates a service credits transaction, + operationId: transaction-create + parameters: + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.TransactionsCreateForm' + - description: API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.Transaction' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Creates a service credits transaction, + tags: + - Internal + /v1/internal/transactions/{transaction_id}: + get: + consumes: + - application/json + description: Gets a service credits transaction + operationId: service-credits-internal-transaction-get + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: transaction id + in: path + name: transaction_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.Transaction' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Gets a service credits transaction + tags: + - Internal + /v1/internal/transactions/{transaction_id}/cancel: + post: + consumes: + - application/json + description: Cancel a service credits transaction + operationId: transaction-cancel + parameters: + - description: transaction id + in: path + name: transaction_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.TransactionsCancelForm' + - description: API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.Transaction' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Cancel a service credits transaction + tags: + - Internal + /v1/internal/transactions/list: + post: + consumes: + - application/json + description: Gets a list of service credits transactions + operationId: service-credits-internal-transactions-list + parameters: + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.TransactionsListForm' + - description: API key + in: header + name: API-Key + required: true + type: string + - description: sorting direction + in: query + name: direction + type: string + - description: sorting field + in: query + name: field + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.transactionsListResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Gets a list of service credits transactions + tags: + - Internal + /v1/internal/users: + get: + consumes: + - application/json + description: |- + gets profiles of users by ids filtered by es_type + profiles include all workspaces where users have access + operationId: profiles-list + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - collectionFormat: csv + description: user id + format: multi + in: query + items: + type: string + name: user_id + type: array + - description: user id + format: string + in: query + name: es_type + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.UserProfile' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets complete profiles of users by ids + tags: + - Internal + /v1/internal/users/{user_id}: + put: + consumes: + - application/json + description: This is an internal API to update a user's profile which is intended + to be used by other ES services. + operationId: user-profile-update-internal + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: user id + in: path + name: user_id + required: true + type: integer + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.InternalProfileUpdate' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.UserProfile' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: An internal API to update a user's profile + tags: + - Internal + /v1/internal/users/all: + get: + operationId: internal-all-es-users + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - default: 1 + description: page number + in: query + name: page + type: integer + - default: 25 + description: page size + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.InternalESUsersList' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: An internal API to find all ES users + tags: + - Internal + /v1/internal/users/api-key/{api_key}: + get: + consumes: + - application/json + description: This is an internal API to fetch user data of the owner of the + API key. + operationId: user-by-api-key-get-internal + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.BasicUserProfile' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Internal API to retrieve user data using an API key + tags: + - Internal + /v1/internal/users/basic: + get: + consumes: + - application/json + description: |- + gets profiles of users by ids + basic profile data + operationId: basic-profiles-list + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - collectionFormat: csv + description: user id + format: multi + in: query + items: + type: string + name: user_id + type: array + - description: user ES type + format: string + in: query + name: es_type + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.BasicUserProfile' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets basic profiles of users by ids + tags: + - Internal + /v1/internal/workspaces/{id}: + get: + description: internal API to get workspace by id. + operationId: internal-workspace-get + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.internalWorkspace' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: internal API to get workspace by id + tags: + - Internal + /v1/internal/workspaces/{id}/ancestors: + get: + description: |- + an internal API to get ancestor(parents/grandparents) of a workspace. + Ancestors list does not include current workspace. + operationId: internal-workspaces-ancestor + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.workspaceResponse' + type: array + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: an internal API to get ancestor(parents/grandparents) of a workspace + tags: + - Internal + /v1/internal/workspaces/{id}/api-key: + get: + consumes: + - application/json + description: |- + This API gets workspace's owner API key, this API can be used by admin/owner of workspace + other users can't get admin's API + 400 is returned if user email is not passed in query + operationId: internal-workspace-owner-api-key-get + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceUserAPIKey' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets workspace owner's API key + tags: + - Internal + /v1/internal/workspaces/{id}/family: + get: + description: an admin API to get a list of all children, grand children workspaces + operationId: internal-workspaces-family + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.workspaceResponse' + type: array + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: an internal API to get a list of workspace children + tags: + - Internal + /v1/internal/workspaces/{id}/managers: + get: + description: gets a list of all managers for a specific workspace + operationId: workspace-managers-get + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.basicWorkspacesMembersResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets workspace managers + tags: + - Internal + /v1/internal/workspaces/{id}/members: + get: + description: gets a workspace's members + operationId: internal-workspaces-members + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + - description: asc/desc + in: query + name: direction + type: string + - description: search by email + in: query + name: search + type: string + - description: search by role name + in: query + name: role + type: string + - description: search by membership status + in: query + name: membership_status + type: string + - description: include parental admins + in: query + name: include_parental_admins + type: boolean + - description: include parent workspace + in: query + name: include_parent_workspace + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspacesMembersResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: get workspace members + tags: + - Internal + post: + consumes: + - application/json + description: |- + internal API to add members to a workspace and assigns them a specific role + in response it returns number of user units consumed + -ve value means workspace user units are consumed and users are invited to corporate account. + 0 values mean user units are not changed and corporate account remains unaffected. + **Note**: External users (without @semrsuh.com email) cannot be invited to Semrush workspaces. + operationId: internal-workspace-add-members + parameters: + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.workspaceAddMembersForm' + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.WorkspaceMemberUpsertResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/handlers.workspaceAddMembersResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/handlers.workspaceAddMembersResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/handlers.workspaceAddMembersResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/handlers.workspaceAddMembersResponse' + summary: internal API to add members to a workspace + tags: + - Internal + /v1/internal/workspaces/{id}/members/{user_id}/roles/status: + get: + description: checks whether user has one of the provided workspace roles in + the current workspace or ancestors + operationId: workspaces-check-roles-in-ancestry + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: user id + in: path + name: user_id + required: true + type: integer + - collectionFormat: csv + description: roles + in: query + items: + type: string + name: roles + required: true + type: array + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceCheckRolesInAncestryResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: check role status in hierarchy + tags: + - Workspaces + /v1/internal/workspaces/{id}/members/{user_id}/status: + get: + description: |- + Checks whether the user has membership in the workspace hierarchy (current workspace + descendants). + If the optional `membership` query parameter is provided, only those statuses are treated as valid. + Valid values: `member`, `guest`, `basic`. + If `membership` is omitted, the default behavior is backward compatible: membership is checked by subscription match + (`user.SubscriptionID == desc.SubscriptionID`), not by membership status. + operationId: workspaces-check-membership-in-ancestry + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: userId + required: true + type: integer + - collectionFormat: csv + description: 'Filter by membership status. If provided, only these statuses + are considered valid. Allowed: member, guest, basic.' + in: query + items: + type: string + name: membership + type: array + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceCheckMembershipInAncestryResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: check membership status + tags: + - Workspaces + /v1/internal/workspaces/{id}/pagespeed-crawlers: + get: + consumes: + - application/json + description: gets a list pagespeed crawlers that belong to a workspace + operationId: pagespeed-internal-list + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: results offset + in: query + name: offset + type: integer + - description: page size + in: query + name: limit + type: integer + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.pagespeedCrawlersInternalListResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list pagespeed crawlers of a workspace + tags: + - Internal + /v1/internal/workspaces/{id}/pagespeed-crawlers/{crawler_id}/keywords: + get: + consumes: + - application/json + description: gets a list of keywords of pagespeed crawler by its id. + operationId: pagespeed-internal-keywords-list + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: pagespeed crawler id + in: path + name: crawler_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: results offset + in: query + name: offset + type: integer + - description: page size + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.pagespeedInternalKeywordsListResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of keywords of pagespeed crawlers + tags: + - Internal + /v1/internal/workspaces/{id}/pagespeed-crawlers/{crawler_id}/urls: + get: + consumes: + - application/json + description: gets a list of urls of pagespeed crawler by its id. + operationId: pagespeed-internal-urls-list + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: pagespeed crawler id + in: path + name: crawler_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: results offset + in: query + name: offset + type: integer + - description: page size + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.pagespeedURLsListResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of urls of pagespeed crawlers + tags: + - Internal + /v1/internal/workspaces/{id}/projects: + get: + description: gets a list of all projects that belong to a workspace. + operationId: project-list-get + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.projectListResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of projects belongs to a workspace + tags: + - Internal + /v1/internal/workspaces/{id}/projects/{project_id}/goals: + get: + consumes: + - application/json + description: this API returns a list of normalized goals for a live project + operationId: internal-goals-list + parameters: + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: limit number + in: query + name: limit + type: integer + - description: API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.internalGoalsListResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: list of normalised goals + tags: + - Internal + /v1/internal/workspaces/{id}/projects/{project_id}/public/segments: + get: + consumes: + - application/json + description: |- + This is a proxy internal API to public API **Segment** */workspaces/{id}/projects/{project_id}/segments [get]* + which gets a list of segments that belong to a project. + For description of response fields like conditions and filters, + see segment create under **Segment** */workspaces/{id}/projects/{project_id}/segments [post]* + operationId: internal-public-project-segment-list-get + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + - description: search by segment name + in: query + name: search + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.SegmentListResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: This is a proxy internal API which gets a list of public segments of + a project. + tags: + - Internal + /v1/internal/workspaces/{id}/projects/{project_id}/segments: + get: + consumes: + - application/json + description: |- + gets a list of segments that belong to a project. + *filters* here is the exact representation of the filters in the pagemanager. + **filters representations:** + `col` is one of *url, keyword*. Note: *url_list* is represented as *url* in pagemanager. + `op` is one of *and, or, eq, neq, begins_with, not_begins_with, ends_with, not_ends_with, contains, + not_contains, gt, lt, gte, lte, in*. + `value` is string type. It becomes array of string in case of *in* operator as an exceptional case. + *Notes*: + * *url_list* always has *in* operator. Only zero or one url_list contains in the whole filters object. + * *filters* logical operators *and, or* will not have *col, value* and will have nested *filters*. + * *filters* logical operators *and, or* will have maximum depth up to 5 levels from the root. + * *filters* non-logical operators will have *col, value* and will not have nested *filters*. + * *filters* non-logical operators will have maximum 20 leaves in a single filter object. + operationId: internal-project-segment-list-get + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.SegmentListInternalResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of segments of a project with pagemanager representation + of filters + tags: + - Internal + /v1/internal/workspaces/{id}/projects/{project_id}/segments/{segment_id}: + get: + consumes: + - application/json + description: |- + For description of response fields like conditions and filters, + see segment create under **Segment** */workspaces/{id}/projects/{project_id}/segments [post]* + operationId: internal-project-segments-get + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: segment id + in: path + name: segment_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.SegmentListResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: This is a proxy internal API which gets a segment of a project. + tags: + - Internal + /v1/internal/workspaces/{id}/projects/{project_id}/targets: + get: + consumes: + - application/json + description: gets a list of targets that belong to a project + operationId: project-target-list-get-internal + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.targetListResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of targets of a project + tags: + - Internal + /v1/internal/workspaces/{id}/projects/{project_id}/targets/{target_id}: + get: + consumes: + - application/json + description: gets target details + operationId: internal-project-target-details + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.Target' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets target details + tags: + - Internal + /v1/internal/workspaces/{id}/projects/{project_id}/targets/{target_id}/benchmarks/input: + get: + consumes: + - application/json + description: this API lists internal benchmarks of a project + operationId: internal-benchmarks-input + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: benchmark ids + in: query + name: ids + required: true + type: string + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.InternalBenchmark' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: finds a list of internal benchmarks of a project + tags: + - Internal + /v1/internal/workspaces/{id}/projects/{project_id}/targets/{target_id}/input: + get: + consumes: + - application/json + description: gets internal target details + operationId: internal-project-target-input-details + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.InternalTarget' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets internal target details + tags: + - Internal + /v1/internal/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/tagged: + get: + consumes: + - application/json + description: this API gets tagged keywords with the underscore (__) syntax. + operationId: project-get-tagged-keywords + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: live + in: query + name: live + type: boolean + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.taggedKeywordsCreateForm' + produces: + - application/json + responses: + "201": + description: Created + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets tagged keywords + tags: + - Keywords + /v1/internal/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags/search: + get: + operationId: project-internal-search-list-tags + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + - description: search + in: query + name: search + type: string + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.tagsListResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: internal API to search tags list by name + tags: + - Internal + /v1/internal/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags/tree: + get: + consumes: + - application/json + description: |- + this API returns all ancestors of tag upto root level, this API does not return children of tags. + API does not return full tree. + operationId: project-internal-tags-tree + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: tag id + in: query + name: tag_id + required: true + type: integer + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.TagsTreeResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: internal API to find tags parents upto top level + tags: + - Internal + /v1/internal/workspaces/{id}/projects/targets: + get: + consumes: + - application/json + description: gets a list of targets of all live projects by workspace id + operationId: internal-live-projects-target-list-get + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - default: 19193849-51bf-413d-9ed9-45a63e649887 + description: workspace id + in: path + name: id + required: true + type: string + - description: user id + in: query + name: user_id + required: true + type: integer + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.targetListResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of targets of all live projects by workspace id + tags: + - Internal + /v1/internal/workspaces/{id}/resources: + get: + description: Returns workspace resources including general resources (users, + service credits, API units) and product-specific resources (SEO, AI, SI) for + a specific workspace + operationId: internal-workspace-resources + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.NewWorkspaceResources' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + security: + - ApiKeyAuth: [] + summary: gets workspace resources + tags: + - Internal + /v1/internal/workspaces/{id}/service-units: + get: + description: gets service units + operationId: service-units-get + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.getServiceUnitsResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets service units + tags: + - Internal + put: + description: sets service units + operationId: service-units-set + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.setServiceUnitsForm' + produces: + - application/json + responses: + "204": + description: No Content + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: sets service units + tags: + - Internal + /v1/internal/workspaces/{id}/service-units/used: + put: + description: sets used service units + operationId: service-units-used-set + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.setServiceUnitsForm' + produces: + - application/json + responses: + "204": + description: No Content + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: sets used service units + tags: + - Internal + /v1/internal/workspaces/{workspace_id}/connections: + get: + consumes: + - application/json + description: Returns a paginated list of workspace connections for service-to-service + use (e.g. LFA connector status updater). Same query parameters as the user-facing + list endpoint. + operationId: internal-workspace-connections-list + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: Number of page + in: query + name: page + type: integer + - description: 'Number of items per page (default: 10)' + in: query + name: limit + type: integer + - description: 'Connection type filter: google-ads, google-analytics, google-console, + adobe-analytics, log-file-connector' + in: query + name: type + type: string + - description: Owner filter + in: query + name: owner_id + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.WorkspaceConnectionsResponse' + "400": + description: Bad Request + "401": + description: Unauthorized + "404": + description: Not Found + "500": + description: Internal Server Error + summary: List workspace connections (internal) + tags: + - Internal + /v1/internal/workspaces/{workspace_id}/connections/{connection_id}: + get: + consumes: + - application/json + description: Retrieves the details of workspace connection. Returns adobe_proxy_auth_id + instead of credential_id for adobe analytics connections. + operationId: internal-workspace-connection-byid + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: connection id + in: path + name: connection_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.InternalWorkspaceConnectionDetails' + "400": + description: Bad Request + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Get workspace connection by connection ID (internal) + tags: + - Internal + /v1/internal/workspaces/{workspace_id}/connections/log-file-analysis/{connection_id}: + put: + consumes: + - application/json + description: Updates an existing Log File Analysis connection using internal + API key authentication (e.g. LFA connector status updater). The connection + must belong to the workspace and be of type log-file-connector. + operationId: internal-log-file-analysis-connection-update + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: connection id + in: path + name: connection_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.LogFileAnalysisWorkspaceConnectionPayload' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.WorkspaceConnection' + "400": + description: Bad Request + "401": + description: Unauthorized + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Update Log File Analysis connection (internal) + tags: + - Internal + /v1/internal/workspaces/{workspace_id}/connections/log-file-analysis/{connection_id}/status: + patch: + consumes: + - application/json + description: Persists connector-reported success or error status. Returned on + all workspace connection GET endpoints for this connection. + operationId: internal-log-file-analysis-connection-status-patch + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: connection id + in: path + name: connection_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.LogFileAnalysisConnectorStatusPayload' + produces: + - application/json + responses: + "204": + description: No Content + "400": + description: Bad Request + "401": + description: Unauthorized + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Update Log File Analysis connector status (internal) + tags: + - Internal + /v1/internal/workspaces/{workspace_id}/projects/{project_id}/connections: + get: + consumes: + - application/json + description: Retrieves a list of connection IDs attached to a specific project. + operationId: internal-workspace-project-connections + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: Array of connection IDs + schema: + items: + $ref: '#/definitions/handlers.ProjectConnectionResponse' + type: array + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Get connections for a specific project + tags: + - Internal + /v1/internal/workspaces/all: + get: + description: gets a list of all workspaces + operationId: internal-workspaces-all-list + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.workspaceResponse' + type: array + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: workspaces list + tags: + - Internal + /v1/internal/workspaces/limits: + get: + description: gets limits for all workspaces + operationId: internal-workspaces-limits + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + additionalProperties: + $ref: '#/definitions/handlers.OptionsLimits' + type: object + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: get limits for all workspaces + tags: + - Internal + /v1/internal/workspaces/members/batch: + post: + description: gets batch workspace members + operationId: internal-batch-workspaces-members + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.batchWorkspaceMembersRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.basicWorkspacesMembersResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: get batch workspace members + tags: + - Internal + /v1/internal/workspaces/root: + get: + description: gets a root workspace + operationId: internal-workspace-get-root + parameters: + - description: Admin API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a root workspace + tags: + - Internal + /v1/internal/workspaces/sox: + get: + description: gets the list of all workspaces for SOX compliance + operationId: internal-workspaces-sox-list + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.SOXWorkspace' + type: array + type: array + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: workspaces list (SOX compliance) + tags: + - Internal + /v1/internal/workspaces/tiers: + get: + consumes: + - application/json + description: this API returns list of available tiers + operationId: internal-tiers-list + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.tiersResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: return list of tiers + tags: + - Internal + /v1/languages: + get: + consumes: + - application/json + description: gets a list of languages + operationId: languages + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.Language' + type: array + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of languages + tags: + - Geo + /v1/locations: + get: + consumes: + - application/json + description: |- + this API gets locations from core /get_locations api and pass them in response + get_locations api docs can be here(https://kb.semrush.net/display/BlueTeam/locations+get_ + operationId: locations + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: location name(deprecated use q) + in: query + name: location + type: string + - description: filter by location, alias for location + in: query + name: q + type: string + - description: location id + in: query + name: id + type: integer + - description: filter by search engine(bing) + in: query + name: filter_engine + type: string + produces: + - application/json + responses: + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: proxy request for getting locations + tags: + - Core APIs + /v1/profile: + get: + consumes: + - application/json + description: gets user's own profile + operationId: user-profile + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.UserProfile' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "409": + description: Conflict + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets user's own profile + tags: + - Users + post: + consumes: + - application/json + description: updates user's own profile + operationId: user-profile-update + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.profileUpdate' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.UserProfile' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: updates user's own profile + tags: + - Users + /v1/users/required-units: + post: + operationId: users-required-units + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.RequiredUserUnitsForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.RequiredUserUnitsResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: An API that returns number of users required to invite them on workspace + tags: + - Users + /v1/users/workspace-ownership-eligibility: + get: + consumes: + - application/json + description: |- + API validates if user can become owner of children workspace + by validating user exists on core and does not have subscription. + 404 is returned if user does not exist on core + 422 is returned if user already has core subscription + 400 is returned if user email is not passed in query + operationId: user-ownership-eligibility + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: user id + format: string + in: query + name: email + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceOwnershipEligibilityResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: validates if user can become owner of a children workspace + tags: + - Users + /v1/work-categories: + get: + consumes: + - application/json + description: gets a list of work categories + operationId: work-categories + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.WorkCategory' + type: array + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of work categories + tags: + - Work Categories + /v1/workspaces: + get: + description: gets a list of workspaces owned by the user + operationId: workspaces-list + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspacesListResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: workspaces list + tags: + - Workspaces + /v1/workspaces/{id}: + delete: + description: |- + deletes workspace matching with id. + In order to delete a workspace make sure workspace does not have any children otherwise + API will fail to process + operationId: workspace-delete + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceDeleteResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: deletes a workspace + tags: + - Workspaces + get: + description: gets workspace details matching with id + operationId: workspace-details + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets workspace details + tags: + - Workspaces + put: + consumes: + - application/json + description: updates a workspace matching with id + operationId: workspace-update + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.workspaceUpsertForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: updates a workspace + tags: + - Workspaces + /v1/workspaces/{id}/api_units: + get: + operationId: workspace-api-units-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.APIUnitsResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets API units of a workspace + tags: + - Workspaces + /v1/workspaces/{id}/campaigns/{campaign_id}/keywords: + get: + description: gets keywords that belong to a campaign. + operationId: workspaces-campaign-keywords-list + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: campaign id + in: path + name: campaign_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.keywordsListResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets keywords + tags: + - Keywords + /v1/workspaces/{id}/child: + post: + consumes: + - application/json + description: |- + Creates a child workspace. If field owner is provided, + then the existing user will be the owner of the child workspace, + otherwise the virtual owner of this workspace will be created. + operationId: workspace-child-create + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: Signed upload receipt token + in: header + name: X-Upload-Receipt + required: true + type: string + - description: parent workspace id + in: path + name: id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.WorkspaceCreateChildForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: creates a child workspace + tags: + - Workspaces + /v1/workspaces/{id}/family: + get: + description: an API to get a list of all children, grand children workspaces + which belong to a workspace + operationId: workspaces-family + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.workspaceResponse' + type: array + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: an API to get a list of workspaces family + tags: + - Workspaces + /v1/workspaces/{id}/has_children: + get: + operationId: workspaces-has-children + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.HasChildrenResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: API to returns true/false if workspace has or does not have children + tags: + - Workspaces + /v1/workspaces/{id}/icon: + put: + consumes: + - application/json + description: Validates the Ed25519-signed receipt from the upload service, then + stores the icon URL. + operationId: workspace-update-icon + parameters: + - description: Workspace UUID + in: path + name: id + required: true + type: string + - description: Signed upload receipt token + in: header + name: X-Upload-Receipt + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.workspaceUpdateIconForm' + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + responses: + "204": + description: No Content + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Updates workspace icon using a signed upload receipt + tags: + - Workspaces + /v1/workspaces/{id}/keywordslists: + delete: + consumes: + - application/json + description: delete keywords-lists of a workspace by basket ids + operationId: keywordslists-delete + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.KeywordsListDeleteRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/http_server.BasicResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: delete keywords-lists of a workspace by basket ids + tags: + - KeywordsLists + get: + consumes: + - application/json + description: Gets list of keywords-lists for the workspace. Pagination is not + supported for now. + operationId: keywordslists-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: 'field default: name' + enum: + - name + - updated_at + in: query + name: field + type: string + - description: sort direction, default:asc + enum: + - asc + - desc + in: query + name: direction + type: string + - description: search by keyword list name + in: query + name: search + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.KeywordsListResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Gets list of keywords-lists for the workspace + tags: + - KeywordsLists + post: + consumes: + - application/json + description: Create a keywords-list for the workspace + operationId: keywordslists-post + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.KeywordsListCreateRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.KeywordsListCreateResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Create a keywords-list for the workspace + tags: + - KeywordsLists + /v1/workspaces/{id}/keywordslists/{basket_id}: + put: + consumes: + - application/json + description: Rename the name of a keywords-list of the workspace + operationId: keywordslists-rename + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: id of the keywords-list + in: path + name: basket_id + required: true + type: integer + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.KeywordsListRenameRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.KeywordsListRenameResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Rename the name of a keywords-list of the workspace + tags: + - KeywordsLists + /v1/workspaces/{id}/keywordslists/{basket_id}/keywords: + delete: + consumes: + - application/json + description: Delete a list of keywords in a keywords-list from a workspace. + operationId: keywordslists-keywords-delete + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: id of the keywords-list + in: path + name: basket_id + required: true + type: integer + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.KeywordDeleteRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.KeywordDeleteResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Delete a list of keywords in a keywords-list + tags: + - KeywordsLists + get: + consumes: + - application/json + description: |- + Gets list of keywords from the keywords-list in a workspace. + Pagination is supported. Default page is 1 and default limit is 25 when any of page or limit params provided. + Even wrong values are set as defaults. If page and limit are not provided, all keywords are returned. + operationId: keywordslists-keywords-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: id of the keywords-list + in: path + name: basket_id + required: true + type: integer + - description: page number + in: query + name: page + type: integer + - description: page limit + in: query + name: limit + type: integer + - description: sort direction, default:asc + enum: + - asc + - desc + in: query + name: direction + type: string + - description: search by keyword name + in: query + name: search + type: string + - description: sort direction, default:containing + enum: + - eq + - containing + - begins_with + - ends_with + - word_matching_separator + - exact_matching + - phrase_matching + - broad_matching + in: query + name: operation + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.KeywordsResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Gets list of keywords from the keywords-list + tags: + - KeywordsLists + post: + consumes: + - application/json + description: |- + Create a list of keywords in a keywords-list of a workspace + Each keyword phrase can have upto 90 characters. A keyword can have upto 5 tags. + operationId: keywordslists-keywords-post + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: id of the keywords-list + in: path + name: basket_id + required: true + type: integer + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.KeywordAddRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.KeywordCountResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Create a list of keywords in a keywords-list + tags: + - KeywordsLists + /v1/workspaces/{id}/keywordslists/{basket_id}/keywords/tags: + delete: + consumes: + - application/json + description: Deletes a list of tags to a list of keywords in a keywords-list + of the workspace. + operationId: keywordslists-keywords-tags-delete + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: id of the keywords-list + in: path + name: basket_id + required: true + type: integer + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.KeywordsTagsRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.KeywordsTagsResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Deletes a list of tags to a list of keywords in a keywords-list + tags: + - KeywordsLists + patch: + consumes: + - application/json + description: Add and delete list of tags to a list of keywords in a keywords-list + of the workspace. + operationId: keywordslists-keywords-tags-patch + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: id of the keywords-list + in: path + name: basket_id + required: true + type: integer + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.KeywordsTagsUpdateRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.KeywordsTagsResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Add and delete list of tags to a list of keywords in a keywords-list + tags: + - KeywordsLists + post: + consumes: + - application/json + description: Add a list of tags to a list of keywords in a keywords-list of + the workspace. + operationId: keywordslists-keywords-tags-add + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: id of the keywords-list + in: path + name: basket_id + required: true + type: integer + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.KeywordsTagsRequest' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.KeywordsTagsResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Add a list of tags to a list of keywords in a keywords-list + tags: + - KeywordsLists + /v1/workspaces/{id}/keywordslists/{basket_id}/keywords/upload: + post: + consumes: + - multipart/form-data + description: |- + Create a list of keywords in a keywords-list by uploading a csv/xlsx file in a workspace + 1st element is supposed to be keyword name. 2nd element is supposed to be database. + Whereas 3rd element is supposed to be list of tags, other elements are ignored. + Tagged are expected to be separated by __ notion. + Example of a csv row (Similarly for xlsx): + *keyword name, database, tag1, tag2__tag3, tag4__tag5* + Total keywords allowed is 100. A keyword can have up to 5 tags.Total tags allowed is 50. + operationId: keywordslists-keywords-post-upload + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: id of the keywords-list + in: path + name: basket_id + required: true + type: integer + - description: The file to upload + in: formData + name: file + required: true + type: file + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.KeywordCountResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Create a list of keywords in a keywords-list by uploading a csv/xlsx + file + tags: + - KeywordsLists + /v1/workspaces/{id}/keywordslists/{basket_id}/members: + delete: + consumes: + - application/json + description: |- + deletes members of a keywords-list + Note: External users on Semrush workspace keywords lists are not allowed to be invited + operationId: keywords-list-delete-members + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: basket id + in: path + name: basket_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.keywordsListDeleteMembersForm' + responses: + "204": + description: No Content + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: delete members of a keywords-list + tags: + - KeywordsLists + get: + description: gets a keywords list members + operationId: keywords-list-members + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: basket id + in: path + name: basket_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.keywordsListMembersResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: get keywords list members + tags: + - KeywordsLists + patch: + consumes: + - application/json + description: |- + update keywords-list members role + Note: External users on Semrush workspace keywords lists are not allowed to be invited + operationId: keywords-list-update-members-role + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: basket id + in: path + name: basket_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.keywordsListMemberUpdateRoleForm' + responses: + "204": + description: No Content + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: update keywords-list members role + tags: + - KeywordsLists + post: + consumes: + - application/json + description: |- + adds members to a keywords list and assigns them a specific role + **Note**: External users (without @semrsuh.com email) cannot be invited to keywords lists of Semrush workspaces. + operationId: keywords-list-add-members + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: basket id + in: path + name: basket_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.keywordListAddMembersForm' + responses: + "201": + description: Created + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: adds members to a keywords list + tags: + - KeywordsLists + /v1/workspaces/{id}/keywordslists/databases: + get: + consumes: + - application/json + description: Gets list of databases of keywords + operationId: keywordslists-databases-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.KeywordsListDatabasesResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Gets list of databases of keywords + tags: + - KeywordsLists + /v1/workspaces/{id}/light: + get: + description: gets lightweight workspace details matching with id + operationId: workspace-light-details + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceLightResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets lightweight workspace details + tags: + - Workspaces + /v1/workspaces/{id}/limits: + get: + deprecated: true + description: '[DEPRECATED] use /v1/workspaces/{id}/resources instead' + operationId: limits-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: set true if you want the master workspace's limits + in: query + name: master + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.GetLimitsResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: '[DEPRECATED] use /v1/workspaces/{id}/resources instead' + tags: + - Workspaces + /v1/workspaces/{id}/members: + delete: + consumes: + - application/json + description: |- + deletes members of a workspace + in response it returns number of user units freed, + +ve value means workspace user units are credited back and users are removed from corporate account. + 0 values mean user units are not changed and corporate account remains unaffected. + operationId: workspace-delete-members + parameters: + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.workspaceDeleteMembersForm' + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.WorkspaceMemberUpsertResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: delete members of a workspace + tags: + - Workspaces + get: + description: |- + gets a workspace's members + **Note:** Users with roles *Collaborator* or *Content Writer* will receive **no members** in the response (an empty list), regardless of workspace membership. + operationId: workspaces-members + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + - description: asc/desc + in: query + name: direction + type: string + - description: search by email + in: query + name: search + type: string + - description: search by role name + in: query + name: role + type: string + - description: search by membership status + in: query + name: membership_status + type: string + - description: include parental admins + in: query + name: include_parental_admins + type: boolean + - description: include parent workspace + in: query + name: include_parent_workspace + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspacesMembersResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: get workspace members + tags: + - Workspaces + patch: + consumes: + - application/json + description: |- + Updates a member's role in workspaces by promoting/demoting user in the workspace. + in response it returns number of user units consumed/freed, + +ve value means workspace user units are credited back and user is removed from corporate account. + -ve value means workspace user units are consumed and user is invited to corporate account. + 0 values mean user units are not changed and corporate account remains unaffected. + operationId: workspaces-members-update + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.workspaceMemberUpdateRoleForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.WorkspaceMemberUpsertResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: updates a member's role in workspace + tags: + - Workspaces + post: + consumes: + - application/json + description: |- + adds members to a workspace and assigns them a specific role + in response it returns number of user units consumed + -ve value means workspace user units are consumed and users are invited to corporate account. + 0 values mean user units are not changed and corporate account remains unaffected. + **Note**: External users (without @semrsuh.com email) cannot be invited to Semrush workspaces. + operationId: workspace-add-members + parameters: + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.workspaceAddMembersForm' + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.WorkspaceMemberUpsertResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/handlers.workspaceAddMembersResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/handlers.workspaceAddMembersResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/handlers.workspaceAddMembersResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/handlers.workspaceAddMembersResponse' + summary: adds members to a workspace + tags: + - Workspaces + /v1/workspaces/{id}/parent: + get: + description: gets workspace's parent details matching with id + operationId: workspace-details-parent + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets workspace's parent details + tags: + - Workspaces + /v1/workspaces/{id}/parent/resources: + get: + description: gets workspace's master workspace resources resources matching + with id + operationId: workspace-resources-master + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.NewWorkspaceResources' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets workspace's master workspace resources + tags: + - Limits + /v1/workspaces/{id}/projects: + get: + description: gets a list of all projects that belong to a workspace. + operationId: project-list-get-for-user + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.projectListResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of projects belongs to a workspace + tags: + - Projects + post: + consumes: + - application/json + description: creates a drafted project in a workspace with name and domain + operationId: project-create + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.projectCreateForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.projectUpsertResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "409": + description: Conflict + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: creates a project as drafted + tags: + - Projects + /v1/workspaces/{id}/projects/{project_id}: + delete: + consumes: + - application/json + description: deletes a project and attached entities + operationId: project-delete + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.projectDeleteResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: deletes a project + tags: + - Projects + get: + description: gets details of a specific project. + operationId: project-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.projectsGetResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a project + tags: + - Projects + put: + consumes: + - application/json + description: updates a project's color and title + operationId: project-update + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.projectUpdateForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.projectUpsertResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "409": + description: Conflict + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: updates a project + tags: + - Projects + /v1/workspaces/{id}/projects/{project_id}/benchmarks/clone: + post: + description: clone benchmarks / tags from target to another + operationId: workspaces-clone-benchmarks-tags + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.benchmarkCloneForm' + produces: + - application/json + responses: + "200": + description: OK + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: clone benchmarks / tags from target to another + tags: + - Benchmarks + /v1/workspaces/{id}/projects/{project_id}/discard_draft: + post: + consumes: + - application/json + description: discards draft projects and copies back live version + operationId: discard-draft-project + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: discards a draft version of a project + tags: + - Projects + /v1/workspaces/{id}/projects/{project_id}/favourite: + post: + consumes: + - application/json + description: API to set project as favourite + operationId: set-project-favourite + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.projectFavouriteSetForm' + produces: + - application/json + responses: + "200": + description: OK + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: sets a project as favourite + tags: + - Projects + /v1/workspaces/{id}/projects/{project_id}/goals: + delete: + consumes: + - application/json + description: this API deletes multiple goals for a project + operationId: goals-delete + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.goalsDeleteForm' + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + type: string + type: array + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: delete multiple goals + tags: + - Goals + get: + consumes: + - application/json + description: this API returns list of goals for a project + operationId: goals-list + parameters: + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: live + in: query + name: live + type: boolean + - description: page number + in: query + name: page + type: integer + - description: limit number + in: query + name: limit + type: integer + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.goalsListResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: list goals + tags: + - Goals + post: + consumes: + - application/json + description: this API creates a goal for a project + operationId: goal-create + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.goalsUpsertForm' + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.goalUpsertReponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: create a goal + tags: + - Goals + /v1/workspaces/{id}/projects/{project_id}/goals/{goal_id}: + put: + consumes: + - application/json + description: this API creates a goal for a project + operationId: goal-update + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.goalsUpsertForm' + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: goal id + in: path + name: goal_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.goalUpsertReponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: update a goal + tags: + - Goals + /v1/workspaces/{id}/projects/{project_id}/goals/import: + post: + consumes: + - application/json + description: this API imports goals from a project to another + operationId: goal-simport + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.goalImportForm' + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.goalImportReponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: import goals from a project to another + tags: + - Goals + /v1/workspaces/{id}/projects/{project_id}/limits: + get: + description: gets resource limits by project + operationId: project-limits-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.GetLimitsResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets resource limits by project + tags: + - Projects + /v1/workspaces/{id}/projects/{project_id}/members: + delete: + consumes: + - application/json + description: deletes members of a project + operationId: project-delete-members + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.projectDeleteMembersForm' + produces: + - application/json + responses: + "204": + description: No Content + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: delete members of a project + tags: + - Projects + get: + description: gets a project's members + operationId: project-members + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.projectMembersResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: get project members + tags: + - Projects + patch: + consumes: + - application/json + description: update project members role + operationId: project-update-members-role + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.projectAddMembersForm' + produces: + - application/json + responses: + "204": + description: No Content + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: update project members role + tags: + - Projects + post: + consumes: + - application/json + description: |- + adds members to a projects and assigns them a specific role + **Note**: External users (without @semrsuh.com email) cannot be invited to projects of Semrush workspaces. + operationId: project-add-members + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.projectAddMembersForm' + produces: + - application/json + responses: + "201": + description: Created + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: adds members to a project + tags: + - Projects + /v1/workspaces/{id}/projects/{project_id}/pagespeed-crawlers: + delete: + consumes: + - application/json + description: deletes pagespeed crawlers that belong to a project + operationId: pagespeed-delete + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.pagespeedDeleteForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + type: string + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: deletes pagespeed crawlers of a project + tags: + - Pagespeed Crawlers + get: + consumes: + - application/json + description: gets a list pagespeed crawlers that belong to a project + operationId: pagespeed-list + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: results offset + in: query + name: offset + type: integer + - description: page size + in: query + name: limit + type: integer + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.pagespeedCrawlersListResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list pagespeed crawlers of a project + tags: + - Pagespeed Crawlers + post: + consumes: + - application/json + description: creates a pagespeed crawler that belong to a project + operationId: pagespeed-create + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.pagespeedCrawlerCreateForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.pagespeedCrawlerCreateResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: creates a pagespeed crawler of a project + tags: + - Pagespeed Crawlers + /v1/workspaces/{id}/projects/{project_id}/pagespeed-crawlers/{crawler_id}: + patch: + consumes: + - application/json + description: updates a pagespeed crawler that belong to a project + operationId: pagespeed-update + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: pagespeed crawler id + in: path + name: crawler_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.pagespeedCrawlerUpdateForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.pagespeedCrawler' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: updates a pagespeed crawler of a project + tags: + - Pagespeed Crawlers + /v1/workspaces/{id}/projects/{project_id}/pagespeed-crawlers/{crawler_id}/keywords: + delete: + consumes: + - application/json + description: deletes a list of keywords from pagespeed crawlers + operationId: pagespeed-delete-keywords + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: pagespeed crawler id + in: path + name: crawler_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.pagespeedKeywordsDeleteForm' + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + type: string + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: deletes a list of keywords from pagespeed crawlers + tags: + - Pagespeed Crawlers Keywords + get: + consumes: + - application/json + description: gets a list of keywords of pagespeed crawler that belong to a project + operationId: pagespeed-keywords-list + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: pagespeed crawler id + in: path + name: crawler_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: results offset + in: query + name: offset + type: integer + - description: page size + in: query + name: limit + type: integer + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.pagespeedKeywordsListResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of keywords of pagespeed crawlers + tags: + - Pagespeed Crawlers Keywords + post: + consumes: + - application/json + description: adds keywords to pagespeed crawlers + operationId: pagespeed-add-keywords + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: pagespeed crawler id + in: path + name: crawler_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.pagespeedCrawlerAddKeywordsForm' + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.keyword' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: adds keywords to pagespeed crawlers + tags: + - Pagespeed Crawlers Keywords + /v1/workspaces/{id}/projects/{project_id}/pagespeed-crawlers/{crawler_id}/keywords/custom: + post: + consumes: + - application/json + description: |- + adds keywords by name to pagespeed crawler. + A project should have these keywords otherwise keywords are not added to a pagespeed crawler. + operationId: pagespeed-add-named-keywords + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: pagespeed crawler id + in: path + name: crawler_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.pagespeedAddNamedKeywordsForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.pagespeedAddNamedKeywordsResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: adds keywords by name to a pagespeed crawler. + tags: + - Pagespeed Crawlers Keywords + /v1/workspaces/{id}/projects/{project_id}/pagespeed-crawlers/{crawler_id}/limits: + get: + description: gets resource limits by pagespeed crawler + operationId: crawler-limits-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: pagespeed crawler id + in: path + name: crawler_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.GetLimitsResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets resource limits by pagespeed crawler + tags: + - Projects + /v1/workspaces/{id}/projects/{project_id}/pagespeed-crawlers/{crawler_id}/urls: + delete: + consumes: + - application/json + description: deletes a list of urls from pagespeed crawlers that belong to a + project + operationId: pagespeed-delete-urls + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: pagespeed crawler id + in: path + name: crawler_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.pagespeedURLsDeleteForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + type: string + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: deletes a list of urls from pagespeed crawlers of a project + tags: + - Pagespeed Crawlers URLs + get: + consumes: + - application/json + description: gets a list of urls of pagespeed crawler that belong to a project + operationId: pagespeed-urls-list + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: pagespeed crawler id + in: path + name: crawler_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: results offset + in: query + name: offset + type: integer + - description: page size + in: query + name: limit + type: integer + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.pagespeedURLsListResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of urls of pagespeed crawlers + tags: + - Pagespeed Crawlers URLs + post: + consumes: + - application/json + description: adds a list of urls to pagespeed crawlers that belong to a project + operationId: pagespeed-add-urls + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: pagespeed crawler id + in: path + name: crawler_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.pagespeedCrawlerAddURLsForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.pagespeedURL' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: adds a list of urls in pagespeed crawlers of a project + tags: + - Pagespeed Crawlers URLs + /v1/workspaces/{id}/projects/{project_id}/pagespeed-crawlers/{crawler_id}/visible: + patch: + consumes: + - application/json + description: makes a pagespeed crawler of a project is visible + operationId: pagespeed-visible + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: pagespeed crawler id + in: path + name: crawler_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.pagespeedCrawlerVisibleForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + type: string + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: makes a pagespeed crawler of a project is visible + tags: + - Pagespeed Crawlers + /v1/workspaces/{id}/projects/{project_id}/publish/async: + post: + consumes: + - application/json + description: asynchronously publishes a project + operationId: project-publish-async + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: publishes a project + tags: + - Projects + /v1/workspaces/{id}/projects/{project_id}/segments: + delete: + consumes: + - application/json + description: delete a segment for a project by id + operationId: project-segment-delete + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: segments ids + in: body + name: segment_ids + required: true + schema: + $ref: '#/definitions/handlers.IDsForm' + produces: + - application/json + responses: + "204": + description: No Content + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: delete a segment for a project by id + tags: + - Segments + get: + consumes: + - application/json + description: |- + Gets a list of segments that belong to a project. + For description of response fields like conditions and filters, + see segment create under **Segment** */workspaces/{id}/projects/{project_id}/segments [post]* + operationId: project-segment-list-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + - description: sort by segment field + enum: + - name + - created_at + - updated_at + in: query + name: sort + type: string + - description: sort direction + enum: + - asc + - desc + in: query + name: direction + type: string + - description: search by segment name + in: query + name: search + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.SegmentListResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Gets a list of segments of a project + tags: + - Segments + /v1/workspaces/{id}/projects/{project_id}/segments/{segment_id}: + get: + consumes: + - application/json + description: |- + Gets a segment of a project by id. For description of response fields like conditions and filters, + see segment create under **Segment** */workspaces/{id}/projects/{project_id}/segments [post]* + operationId: project-segments-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: segment id + in: path + name: segment_id + required: true + type: string + - description: whether to show only for live projects + enum: + - "true" + - "false" + in: query + name: live + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.SegmentResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Gets a segment of a project by id (public) + tags: + - Segments + put: + consumes: + - application/json + description: |- + update segment for a project BY id, see segment create for valid conditions and filters fields + column_name, operator and value validations. + operationId: project-segment-update + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: segment id + in: path + name: segment_id + required: true + type: string + - description: segment details + in: body + name: SegmentUpsertForm + required: true + schema: + $ref: '#/definitions/handlers.SegmentUpsertForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.SegmentResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: update segment for a project BY id + tags: + - Segments + /v1/workspaces/{id}/projects/{project_id}/targets: + delete: + consumes: + - application/json + description: deletes a target + operationId: project-target-delete + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: {} + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: delete a target + tags: + - Targets + get: + consumes: + - application/json + description: gets a list of targets that belong to a project + operationId: project-target-list-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - default: 19193849-51bf-413d-9ed9-45a63e649887 + description: workspace id + in: path + name: id + required: true + type: string + - default: 95cb3f7d-d932-4d8d-ba81-639731d39c08 + description: project id + in: path + name: project_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.targetListResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of targets of a project + tags: + - Targets + post: + consumes: + - application/json + description: creates target of the project + operationId: project-add-target + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - default: 19193849-51bf-413d-9ed9-45a63e649887 + description: workspace id + in: path + name: id + required: true + type: string + - default: 95cb3f7d-d932-4d8d-ba81-639731d39c08 + description: project id + in: path + name: project_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.targetCreateForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.Target' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: adds target to a project + tags: + - Targets + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}: + get: + consumes: + - application/json + description: gets target details + operationId: project-target-details + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.Target' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets target details + tags: + - Targets + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/benchmarks: + delete: + consumes: + - application/json + description: this API lets client delete benchmarks of a project + operationId: project-delete-benchmarks + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.benchmarksDeleteForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + type: string + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: delete benchmarks of a project + tags: + - Benchmarks + get: + consumes: + - application/json + description: this API lists benchmarks of a project + operationId: benchmarks-list + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.benchmarksListResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: finds a list of benchmarks of a project + tags: + - Benchmarks + post: + consumes: + - application/json + description: this API lets client create benchmark of a project, max 20 benchmarks + are allowed + operationId: project-add-benchmarks + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.benchmarkCreateForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.benchmark' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: creates a benchmark of a project + tags: + - Benchmarks + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/benchmarks/{benchmark_id}: + put: + consumes: + - application/json + description: this API lets client updates a benchmark of a project + operationId: project-update-benchmarks + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: benchmark id + in: path + name: benchmark_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.benchmarkUpdateForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.benchmark' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: updates a benchmark of a project + tags: + - Benchmarks + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/benchmarks/bulk: + put: + consumes: + - application/json + description: this API lets client bulk update benchmarks of a project + operationId: project-bulk-update-benchmarks + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.benchmarkBulkUpdateForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.benchmark' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: bulk update benchmarks of a project + tags: + - Benchmarks + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/benchmarks/download: + get: + description: |- + This API download benchmarks. + First element is supposed to be URL + whereas second element is supposed to be color. + operationId: project-download-benchmarks + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: live + in: query + name: live + type: boolean + produces: + - text/csv + responses: + "200": + description: OK + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: downloads benchmarks + tags: + - Keywords + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/benchmarks/remove-tags: + delete: + consumes: + - application/json + description: remove tags from benchmarks + operationId: project-remove-tags-benchmarks + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.benchmarkRemoveTagsForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.benchmark' + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: remove tags from benchmarks + tags: + - Benchmarks + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/benchmarks/upload: + post: + consumes: + - multipart/form-data + description: |- + this API uploads benchmarks of a project from csv/xlsx file. + First element is supposed to be URL + whereas second element is supposed to be color, other elements are ignored. + operationId: project-upload-benchmarks + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: The file to upload + in: formData + name: up_file + required: true + type: file + produces: + - application/json + responses: + "200": + description: OK + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: uploads benchmarks + tags: + - Benchmarks + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords: + delete: + consumes: + - application/json + description: deletes keywords that belong to a target + operationId: project-delete-keywords + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.keywordsDeleteForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + type: string + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: deletes keywords + tags: + - Keywords + get: + description: gets list of keywords that belong to a target. + operationId: project-get-keywords + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: tag id(to get keywords of a tag) + in: query + name: tag_id + type: string + - description: live + in: query + name: live + type: boolean + - description: with_hierarchy + in: query + name: with_hierarchy + type: boolean + - description: keyword name(to filter keywords by name) + in: query + name: name + type: string + - description: preferred url(to filter keywords by preferred_url) + in: query + name: preferred_url + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.keywordsListResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: list of keywords + tags: + - Keywords + post: + consumes: + - application/json + description: creates keywords that belong to a target + operationId: project-add-keywords + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.keywordsCreateForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.keywordsCreateResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: creates keywords + tags: + - Keywords + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/names: + post: + consumes: + - application/json + description: finds a taregt's keywords by names. + operationId: targets-keywords-by-names + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.NamedKeywordsFindForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.NamedKeywordsFindResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: finds a taregt's keywords by names. + tags: + - Keywords + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/preferred-url: + patch: + description: this API can be used to update keywords' preferred url. + operationId: project-update-keywords + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.keywordsUpdateForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.keywordsUpdateResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: updates keyword's preferred url + tags: + - Keywords + post: + consumes: + - multipart/form-data + description: |- + an API to update keywords preferred urls via csv/xlsx file, file content must be of text/csv. + each row represents 1 keywords and its preferred url and values are expected to be comma + separated for csv file. first element is supposed to be keyword name + whereas second element is supposed to be preferred urls, other elements are ignored + operationId: keywords-preferred-urls-upload + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: The file to upload + in: formData + name: up_file + required: true + type: file + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.PreferredURLsUploadResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: an API to update keywords preferred urls in bulk + tags: + - Keywords + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/preferred-url/download: + get: + description: |- + This API download keywords along with preferred urls associated with keywords. + each row represents one keyword and its preferred url and values are expected to be comma + separated for csv file. first element is supposed to be keyword name + whereas second element is supposed to be preferred urls. + operationId: keywords-preferred-urls-download + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: live + in: query + name: live + type: boolean + produces: + - text/csv + responses: + "200": + description: OK + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: downloads keywords with preferred-urls + tags: + - Keywords + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/related-tags-ids: + post: + description: |- + This API fetches related tag IDs for the provided keywords. + Response has keyword_id mapped to tag ids {"id1":["tag1", "tag2"]} + operationId: keywords-related-tag-ids-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.keywordsRelatedTagsForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + additionalProperties: + items: + type: string + type: array + type: object + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets related tag IDs for keywords + tags: + - Keywords + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/relations: + delete: + consumes: + - application/json + description: |- + API deletes relantionships of keywords with tags, + it can also delete relations of keywords with children and grandchildren of tags if parent id passed + expected format of request {"relations": [["keyword_id", "tag_id"]]} + operationId: keywords-tags-relations-delete + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.KeywordsTagsRelationsDeleteForm' + produces: + - application/json + responses: + "204": + description: No Content + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: an API to delete relationships of keywords with tags + tags: + - Keywords + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/stats: + get: + description: gets metrics of keywords, data is fetched from elements data source + operationId: keywords-metrics + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + additionalProperties: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.KeywordMetrics' + type: object + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets metrics of keywords + tags: + - Keywords + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/tagged: + post: + consumes: + - application/json + description: |- + this API creates tagged keywords by building tags hierarchy and + assigning tags to keywords. tagged are expected to be separated by __ notion + operationId: project-add-tagged-keywords + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.taggedKeywordsCreateForm' + produces: + - application/json + responses: + "201": + description: Created + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: creates tagged keywords + tags: + - Keywords + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/tagged/download: + get: + description: |- + This API download keywords along with preferred URLs and tags associated with keywords. + First element is supposed to be keyword name + Second element is supposed to be preferred URL + Third and subsequent elements are supposed to be list of tags. + Tags are expected to be separated by __ notion. + All tags are packaged in a quoted-field. + Example of a csv row: keyword name, preferred_url, "tag1__tag2__tag3,tag4__tag5__tag6" + operationId: project-download-tagged-keywords + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: live + in: query + name: live + type: boolean + produces: + - text/csv + responses: + "200": + description: OK + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: downloads tagged keywords + tags: + - Keywords + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/tagged/upload: + post: + consumes: + - multipart/form-data + description: |- + this API uploads tagged keywords by building tags hierarchy and + assigning tags to keywords through csv/xlsx file. + First element is supposed to be keyword name + Second element is supposed to be preferred URL (optional) + Third and subsequent elements are supposed to be list of tags. + Tagged are expected to be separated by __ notion. + All tags must be packaged in a quoted-field for csv file, this is not necessary for xlsx. + Example of a csv row: keyword name,preferred_url,"tag1__tag2__tag3" + operationId: project-upload-tagged-keywords + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: The file to upload + in: formData + name: up_file + required: true + type: file + produces: + - application/json + responses: + "200": + description: OK + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: uploads tagged keywords + tags: + - Keywords + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags: + delete: + consumes: + - application/json + description: |- + deletes tags that belong to a target, this API also deletes keywords associated to tags + use `delete_keywords` flag to delete keywords along with tags + operationId: project-delete-tags + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.tagsDeleteForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + type: string + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: deletes tags of a target + tags: + - Tags + get: + description: |- + API to return list of tags that belong to a target + parent_id param can be used to get immediate children of a tag + live flag can be used get live/draft target's tags + use limit, page for paginated result + operationId: project-get-tags + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + - description: parent id + in: query + name: parent_id + type: string + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.tagsListResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of tags of a target + tags: + - Tags + post: + consumes: + - application/json + description: this API creates tags and parent_id in request body can be used + to build parent children relantions + operationId: project-add-tags + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.tagsCreateForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.tagsList' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: adds tags to a target + tags: + - Tags + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags/{tag_id}: + put: + consumes: + - application/json + description: this API can be used to change a tag's name and its parent + operationId: project-update-tag + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: tag id + in: path + name: tag_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.tagsUpdateForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.tag' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: updates a tag's name and parent + tags: + - Tags + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags/all: + get: + consumes: + - application/json + description: |- + This API returns all tags as a flat list without building tree structure for performance optimization. + Frontend can build the tree structure if needed using parent_id relationships. + operationId: project-tags-all + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.TagsTreeResponseV2' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: get all tags as flat list + tags: + - Tags + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags/search: + get: + deprecated: true + operationId: project-search-list-tags + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + - description: search + in: query + name: search + type: string + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.tagsListResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: searches tags by name and returns matching tags' without their children + or parents + tags: + - Tags + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags/tree: + get: + consumes: + - application/json + description: |- + this API returns all ancestors of tag upto root level, this API does not return children of tags. + API does not return full tree. + operationId: project-tags-tree + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: tag id + in: query + name: tag_id + required: true + type: integer + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.TagsTreeResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: find tags parents upto top level + tags: + - Tags + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags/tree/path: + get: + description: |- + This API searches tags and returns ancestors tree structure of matched tags. + Consider a tree `foo -> bar -> baz -> quack` and searched for `foo__bar__baz` + then the returned result would be `foo -> bar -> baz` and the neighbors of children tags, if they exist. + To find children of baz use list tags API. + operationId: project-find-tags-path + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: path + in: query + name: path + type: string + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.TagsTreeResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: searches tags by path and returns ancestors tree of matched tags + tags: + - Tags + /v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags/tree/search: + get: + description: |- + This API searches tags and returns ancestors tree structure of matched tags. + Consider a tree `foo -> bar -> baz -> quack` and searched for `az` + then return result would be `foo -> bar -> baz`, to find children of baz use list tags API. + operationId: project-search-tree-tags + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: search + in: query + name: search + type: string + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.TagsTreeResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: searches tags by name and returns ancestors tree of matched tags + tags: + - Tags + /v1/workspaces/{id}/projects/{project_id}/targets/keywords_clone: + post: + description: clone keywords / tags from target to another + operationId: workspaces-clone-keywords-tags + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.keywordsCloneForm' + produces: + - application/json + responses: + "200": + description: OK + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: clone keywords / tags from target to another + tags: + - Keywords + /v1/workspaces/{id}/projects/{project_id}/url-groups: + delete: + consumes: + - application/json + description: deletes an url groups that belong to a project + operationId: url-groups-delete + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.urlGroupsDeleteForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + type: string + type: array + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: deletes an url group of project + tags: + - URL Groups + get: + consumes: + - application/json + description: gets a list of url groups that belong to a project + operationId: url-groups-list + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.urlGroupsListResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of url groups of project + tags: + - URL Groups + post: + consumes: + - application/json + description: creates url groups that belong to a project + operationId: url-groups-create + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.urlGroupsUpsertForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.urlGroup' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: creates url groups of a project + tags: + - URL Groups + /v1/workspaces/{id}/projects/{project_id}/url-groups/{url_group_id}: + put: + consumes: + - application/json + description: updates an url groups that belong to a project + operationId: url-groups-update + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: url group id + in: path + name: url_group_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.urlGroupsUpsertForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.urlGroup' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: updates an url group of project + tags: + - URL Groups + /v1/workspaces/{id}/projects/targets: + get: + consumes: + - application/json + description: gets a list of targets of all live projects by workspace id + operationId: live-projects-target-list-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - default: 19193849-51bf-413d-9ed9-45a63e649887 + description: workspace id + in: path + name: id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.targetListResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of targets of all live projects by workspace id + tags: + - Targets + /v1/workspaces/{id}/resources: + get: + description: gets workspace resources matching with id + operationId: workspace-resources + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.NewWorkspaceResources' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets workspace resources + tags: + - Limits + /v1/workspaces/{id}/resources/transfer: + post: + consumes: + - application/json + description: transfer resources between a child workspace and its parent. + operationId: workspace-transfer-resources + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.WorkspaceResources' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: transfer resources between a child workspace and its parent + tags: + - Workspaces + /v1/workspaces/{id}/role: + get: + description: |- + gets user's role in workspace, also if user is admin/owner in parent it will return parent's role + user_id is extracted from jwt token + operationId: user-workspace-role + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceUserRole' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets user's role in workspace + tags: + - Workspaces + /v1/workspaces/{id}/segments: + get: + consumes: + - application/json + description: |- + Gets a list of segments that belong to any project of given workspace. + For description of response fields like conditions and filters, + see segment create under **Segment** */workspaces/{id}/projects/{project_id}/segments [post]* + operationId: workspace-segment-list-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + - description: whether to show only for live projects + enum: + - "true" + - "false" + in: query + name: live + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.SegmentListByWorkspaceResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Gets a list of segments of a workspace + tags: + - Segments + /v1/workspaces/{id}/service-units/balance: + get: + description: gets service units balance + operationId: service-units-balance-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.getServiceUnitsResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets service units balance + tags: + - Service Units + /v1/workspaces/{id}/service-units/transactions: + post: + consumes: + - application/json + description: Gets a list of service credits transactions + operationId: service-credits-transactions-list + parameters: + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.TransactionsListForm' + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: sorting direction + in: query + name: direction + type: string + - description: sorting field + in: query + name: field + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.transactionsListResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Gets a list of service credits transactions + tags: + - Service Units + /v1/workspaces/{id}/service-units/transactions/{transaction_id}: + get: + consumes: + - application/json + description: Gets a service credits transaction + operationId: service-credits-transaction-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: transaction id + in: path + name: transaction_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.Transaction' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Gets a service credits transaction + tags: + - Service Units + /v1/workspaces/{id}/status: + get: + description: THe status must be "not ready", "created" or "error" + operationId: workspaces-status-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.WorkspaceCheckResponse' + type: array + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a workspace status + tags: + - Workspaces + /v1/workspaces/{workspace_id}/connections: + delete: + consumes: + - application/json + description: Deletes multiple workspace connections by their IDs. + operationId: workspace-connections-delete + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.WorkspaceConnectionsDeleteRequest' + produces: + - application/json + responses: + "200": + description: OK + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Delete workspace connections + tags: + - Workspace Connections + get: + consumes: + - application/json + description: Retrieves a paginated list of workspace connections. + operationId: workspace-connections + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: Number of page + in: query + name: page + type: integer + - description: 'Number of items per page (default: 10)' + in: query + name: limit + type: integer + - description: 'Connection type filter: google-ads, google-analytics, google-console, + adobe-analytics' + in: query + name: type + type: string + - description: Owner type filter + in: query + name: owner_id + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.WorkspaceConnectionsResponse' + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Get workpsace connections + tags: + - Workspace Connections + /v1/workspaces/{workspace_id}/connections/{connection_id}: + get: + consumes: + - application/json + description: Retrieves the details of workspace connection. + operationId: workspace-connections-byid + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: connection id + in: path + name: connection_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.WorkspaceConnectionDetails' + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Get workpsace connection by connection ID + tags: + - Workspace Connections + /v1/workspaces/{workspace_id}/connections/{connection_id}/projects/{project_id}: + delete: + consumes: + - application/json + description: Detaches a specific project from a specific connection. + operationId: workspace-connection-detach-project + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: connection id + in: path + name: connection_id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Detach a project from a connection + tags: + - Workspace Connections + post: + consumes: + - application/json + description: Attaches a specific project to a specific connection. + operationId: workspace-connection-attach-project + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: connection id + in: path + name: connection_id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Attach a project to a connection + tags: + - Workspace Connections + /v1/workspaces/{workspace_id}/connections/adobe-analytics: + post: + consumes: + - application/json + deprecated: true + description: 'Deprecated: use POST /v2/workspaces/{workspace_id}/connections/adobe-analytics + with credential_id in body instead.' + operationId: adobe-analytics-connection-create + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.AdobeAnalyticsWorkspaceConnectionCreate' + produces: + - application/json + responses: + "201": + description: Created + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: '[DEPRECATED] Create Adobe Analytics connection' + tags: + - Workspace Connections + /v1/workspaces/{workspace_id}/connections/adobe-analytics/{connection_id}: + put: + consumes: + - application/json + deprecated: true + description: 'Deprecated: use PUT /v2/workspaces/{workspace_id}/connections/adobe-analytics/{connection_id} + with credential_id in body instead.' + operationId: adobe-analytics-connection-update + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: connection id + in: path + name: connection_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.AdobeAnalyticsWorkspaceConnectionUpdate' + produces: + - application/json + responses: + "200": + description: OK + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: '[DEPRECATED] Update Adobe Analytics connection' + tags: + - Workspace Connections + /v1/workspaces/{workspace_id}/connections/attach-projects: + post: + consumes: + - application/json + description: Attaches multiple connections to multiple projects in a single + transaction. + operationId: workspace-connections-merge + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + items: + $ref: '#/definitions/handlers.WorkspaceConnectionsAttachItem' + type: array + produces: + - application/json + responses: + "200": + description: OK + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Merge connections with projects + tags: + - Workspace Connections + /v1/workspaces/{workspace_id}/connections/google-ads: + post: + consumes: + - application/json + description: Creates a new Google Ads connection. + operationId: ads-connection-create + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.GoogleAdsWorkspaceConnectionCreate' + produces: + - application/json + responses: + "201": + description: Created + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Create Google Ads connection + tags: + - Workspace Connections + /v1/workspaces/{workspace_id}/connections/google-ads/{connection_id}: + put: + consumes: + - application/json + description: Updates an existing Google Ads connection. + operationId: ads-connection-update + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: connection id + in: path + name: connection_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.GoogleAdsWorkspaceConnectionCreate' + produces: + - application/json + responses: + "200": + description: OK + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Update Google Ads connection + tags: + - Workspace Connections + /v1/workspaces/{workspace_id}/connections/google-analytics: + post: + consumes: + - application/json + description: Creates a new Google Analytics connection. + operationId: analytics-connection-create + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.GoogleAnalyticsWorkspaceConnectionCreate' + produces: + - application/json + responses: + "201": + description: Created + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Create Google Analytics connection + tags: + - Workspace Connections + /v1/workspaces/{workspace_id}/connections/google-analytics/{connection_id}: + put: + consumes: + - application/json + description: Updates an existing Google Analytics connection. + operationId: analytics-connection-update + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: connection id + in: path + name: connection_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.GoogleAnalyticsWorkspaceConnectionCreate' + produces: + - application/json + responses: + "200": + description: OK + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Update Google Analytics connection + tags: + - Workspace Connections + /v1/workspaces/{workspace_id}/connections/google-console: + post: + consumes: + - application/json + description: Creates a new Google Console connection. + operationId: console-connection-create + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.GoogleConsoleWorkspaceConnectionCreate' + produces: + - application/json + responses: + "201": + description: Created + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Create Google Console connection + tags: + - Workspace Connections + /v1/workspaces/{workspace_id}/connections/google-console/{connection_id}: + put: + consumes: + - application/json + description: Updates an existing Google Console connection. + operationId: console-connection-update + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: connection id + in: path + name: connection_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.GoogleConsoleWorkspaceConnectionCreate' + produces: + - application/json + responses: + "200": + description: OK + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Update Google Console connection + tags: + - Workspace Connections + /v1/workspaces/{workspace_id}/connections/log-file-analysis: + post: + consumes: + - application/json + description: Creates a new Log File Analysis connection. + operationId: log-file-analysis-connection-create + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.LogFileAnalysisWorkspaceConnectionPayload' + produces: + - application/json + responses: + "201": + description: Created + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Create Log File Analysis connection + tags: + - Workspace Connections + /v1/workspaces/{workspace_id}/connections/log-file-analysis/{connection_id}: + put: + consumes: + - application/json + description: Updates an existing Log File Analysis connection. + operationId: log-file-analysis-connection-update + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: connection id + in: path + name: connection_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.LogFileAnalysisWorkspaceConnectionPayload' + produces: + - application/json + responses: + "200": + description: OK + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Update Log File Analysis connection + tags: + - Workspace Connections + /v1/workspaces/{workspace_id}/connections/owners: + get: + consumes: + - application/json + description: Retrieves a list of all users who own workspace connections. + operationId: workspace-connection-owners + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.WorkspaceConnectionOwner' + type: array + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "500": + description: Internal Server Error + summary: Get workspace connection owners + tags: + - Workspace Connections + /v1/workspaces/{workspace_id}/projects/{project_id}/connections: + get: + consumes: + - application/json + description: Retrieves a list of connection IDs attached to a specific project. + operationId: workspace-project-connections + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: Array of connection IDs + schema: + items: + $ref: '#/definitions/handlers.ProjectConnectionResponse' + type: array + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Get connections for a specific project + tags: + - Workspace Connections + /v1/workspaces/light: + get: + description: gets a lightweight list of workspaces owned by the user + operationId: workspaces-light-list + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.workspaceLightResponse' + type: array + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: lightweight workspaces list + tags: + - Workspaces + /v1/workspaces/limits: + get: + deprecated: true + description: '[DEPRECATED] use /v1/workspaces/resources instead' + operationId: total-limits-find + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + additionalProperties: + $ref: '#/definitions/handlers.OptionsLimits' + type: object + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: '[DEPRECATED] use /v1/workspaces/resources instead' + tags: + - Workspaces + /v1/workspaces/resources: + get: + description: gets workspace total resources in a cool new way + operationId: workspace-resources-find-all + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + additionalProperties: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceTotalLimits' + type: object + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets workspace total resources + tags: + - Limits + /v1/workspaces/tiers: + get: + consumes: + - application/json + description: this API returns list of available tiers + operationId: tiers-list + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.tiersResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: return list of tiers + tags: + - Workspaces + /v2/admin/workspaces/api/create: + post: + consumes: + - application/json + description: creates a master workspace along with products and tiers (made + for Activation Panel) + operationId: activation-panel-workspace-create-master-v2 + parameters: + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.activationPanelWorkspaceCreateForm' + - description: Semrush-admin Remote-User (UserId) + in: header + name: Remote-User + required: true + type: string + - description: Admin API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "201": + description: Created + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "409": + description: Conflict + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: creates a master workspace along with products and tiers (made for + Activation Panel) + tags: + - ActivationPanel V2 + /v2/adobe-analytics/credentials: + post: + consumes: + - application/json + description: Creates new Adobe Analytics credentials and returns an internal + credential_id. The adobe_proxy_auth_id is never exposed to the client. + operationId: adobe-analytics-create-credentials-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: Credentials creation request + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.AdobeCredentialsCreateRequest' + produces: + - application/json + responses: + "201": + description: credentials created successfully + schema: + $ref: '#/definitions/handlers.AdobeCredentialCreatedResponse' + "400": + description: Bad Request + "401": + description: Unauthorized + "500": + description: Internal Server Error + summary: Creates Adobe Analytics credentials (v2) + tags: + - Adobe Analytics V2 + /v2/adobe-analytics/credentials/dimensions: + get: + consumes: + - application/json + description: Gets Adobe dimensions by internal credential_id with ownership + check. + operationId: adobe-analytics-get-dimensions-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: Internal credential ID + in: query + name: credential_id + required: true + type: integer + - description: Adobe global company ID + in: query + name: global_company_id + required: true + type: string + - description: Report Suite ID + in: query + name: rsid + required: true + type: string + produces: + - application/json + responses: + "200": + description: dimensions retrieved successfully + schema: + items: + $ref: '#/definitions/handlers.Dimension' + type: array + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Gets Adobe dimensions (v2) + tags: + - Adobe Analytics V2 + /v2/adobe-analytics/credentials/metrics: + get: + consumes: + - application/json + description: Gets Adobe metrics by internal credential_id with ownership check. + operationId: adobe-analytics-get-metrics-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: Internal credential ID + in: query + name: credential_id + required: true + type: integer + - description: Adobe global company ID + in: query + name: global_company_id + required: true + type: string + - description: Report Suite ID + in: query + name: rsid + required: true + type: string + produces: + - application/json + responses: + "200": + description: metrics retrieved successfully + schema: + items: + $ref: '#/definitions/handlers.Metric' + type: array + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Gets Adobe metrics (v2) + tags: + - Adobe Analytics V2 + /v2/adobe-analytics/credentials/metrics-dimensions/validation: + post: + consumes: + - application/json + description: Validates metric and dimension by internal credential_id with ownership + check. + operationId: adobe-analytics-validate-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.AdobeAnalyticsValidateV2Request' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.AdobeAnalyticsValidateResponse' + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "429": + description: Too Many Requests + "500": + description: Internal Server Error + summary: Validate Adobe Analytics metrics and dimensions (v2) + tags: + - Adobe Analytics V2 + /v2/adobe-analytics/credentials/reportsuites: + get: + consumes: + - application/json + description: Gets Adobe report suites by internal credential_id with ownership + check. + operationId: adobe-analytics-get-report-suites-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: Internal credential ID + in: query + name: credential_id + required: true + type: integer + - description: Adobe global company ID + in: query + name: global_company_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: report suites retrieved successfully + schema: + items: + $ref: '#/definitions/handlers.ReportSuite' + type: array + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Gets Adobe report suites (v2) + tags: + - Adobe Analytics V2 + /v2/adobe-analytics/credentials/reportsuites/paginated: + get: + consumes: + - application/json + description: Gets Adobe report suites by internal credential_id with ownership + check and pagination. + operationId: adobe-analytics-get-report-suites-paginated-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: Internal credential ID + in: query + name: credential_id + required: true + type: integer + - description: Adobe global company ID + in: query + name: global_company_id + required: true + type: string + - default: 10 + description: Number of items per page + in: query + name: size + type: integer + - default: 1 + description: Page number (1-indexed) + in: query + name: page + type: integer + produces: + - application/json + responses: + "200": + description: report suites with pagination retrieved successfully + schema: + $ref: '#/definitions/handlers.AdobeReportSuitesResponse' + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Gets Adobe report suites with pagination (v2) + tags: + - Adobe Analytics V2 + /v2/adobe-analytics/credentials/status: + get: + consumes: + - application/json + description: Gets Adobe credentials status by internal credential_id with ownership + check. + operationId: adobe-analytics-get-status-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: Internal credential ID + in: query + name: credential_id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: status retrieved successfully + schema: + $ref: '#/definitions/handlers.AdobeCredentialStatusInfo' + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Gets Adobe credentials status (v2) + tags: + - Adobe Analytics V2 + /v2/internal/products/{product_id}/workspaces: + get: + description: internal API to get workspace IDs that have the specified product. + operationId: internal-product-workspaces-get + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: product id (ai, si, ci, seo) + in: path + name: product_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceIDsResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: internal API to get workspace IDs by product + tags: + - Internal + /v2/internal/transactions: + post: + consumes: + - application/json + description: |- + Creates a transaction for service credits and other transacting product limits such as pages of + SI product. In order to create service credits transactions set `global_limit_key` to `service_units`, + and leave `product_limit` empty. + In oder to create pages and other limits' transaction set `product_limit` and leave `global_limit_key` empty + otherwise it will not accept the inputs. + `owner_id` is required when `global_limit_key` is set to `service_units`. + `receipt_id` is also not required when `product_limit` is set. + operationId: transaction-create-v2 + parameters: + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.TransactionsCreateFormV2' + - description: API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.Transaction' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Creates a transaction for service credits and other transacting product + limits + tags: + - Internal V2 + /v2/internal/transactions/{transaction_id}/refund: + post: + consumes: + - application/json + description: Cancel a transaction and refund the amount + operationId: transaction-refund-v2 + parameters: + - description: transaction id + in: path + name: transaction_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.TransactionsRefundForm' + - description: API key + in: header + name: API-Key + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.Transaction' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Cancels a transaction and refund the amount + tags: + - Internal V2 + /v2/internal/workspaces/{id}/ancestors: + get: + description: |- + an internal API to get ancestor(parents/grandparents) of a workspace. + Ancestors list does not include current workspace. + operationId: internal-workspaces-ancestor-v2 + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.workspaceResponse' + type: array + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + security: + - ApiKeyAuth: [] + summary: an internal API to get ancestor(parents/grandparents) of a workspace + tags: + - Internal + /v2/internal/workspaces/{id}/family: + get: + description: an admin API to get a list of all children, grand children workspaces + of a given workspace + operationId: internal-workspaces-family-v2 + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.workspaceResponse' + type: array + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + security: + - ApiKeyAuth: [] + summary: an internal API to get a list of workspace children + tags: + - Internal + /v2/internal/workspaces/{id}/products/{product_id}/limits: + get: + description: |- + This endpoint retrieves the limits of entities associated with a specific workspace and product. + It fetches the limits based on the product configuration and returns a map of entity limits + defined for the specified workspace and product. + operationId: internal-workspace-product-limits + parameters: + - description: API Key required for authentication + in: header + name: API-Key + required: true + type: string + - description: Unique identifier for the workspace + in: path + name: id + required: true + type: string + - description: 'Unique identifier for the product [enum: seo, aio]' + in: path + name: product_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: Successful operation + schema: + additionalProperties: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.EntityLimit' + type: object + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Retrieve Workspace Product Limits + tags: + - Internal V2 + /v2/internal/workspaces/{id}/products/{product_id}/projects: + get: + description: |- + Retrieves a list of projects associated with a product and workspace the user has access to. + Requires the `user_id` query parameter to determine the user identity. + If the user is not a valid enterprise user, the project list will be empty. + operationId: internal-product-projects-find + parameters: + - description: API key for authentication + in: header + name: API-Key + required: true + type: string + - description: Unique identifier for the workspace + in: path + name: id + required: true + type: string + - description: 'Unique identifier for the product [possible values: seo, aio]' + in: path + name: product_id + required: true + type: string + - description: Unique identifier for the user + in: query + name: user_id + required: true + type: integer + produces: + - application/json + responses: + "200": + description: OK - List of product projects successfully retrieved + schema: + items: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.ProductProjectMetadata' + type: array + "401": + description: Unauthorized - Invalid or missing API key + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden - Access denied for the user + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found - Workspace or Product not found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error - Unexpected system error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Retrieve product projects for a specific workspace accessible by the + user. + tags: + - Internal V2 + /v2/internal/workspaces/{id}/products/{product_id}/projects/{project_id}/limits: + get: + description: |- + This endpoint retrieves limits of specific entities in a workspace and product with respect to a project. + It considers project-level constraints, with the draft count for all entities adjusted to align with the project. + This enables assessment of how many entities can be added to the project. + operationId: internal-workspace-product-limits-by-project + parameters: + - description: API Key required for authentication + in: header + name: API-Key + required: true + type: string + - description: Unique identifier for the workspace + in: path + name: id + required: true + type: string + - description: 'Unique identifier for the product [enums: seo, aio]' + in: path + name: product_id + required: true + type: string + - description: Unique identifier for the project + in: path + name: project_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: Successful operation + schema: + additionalProperties: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.EntityLimit' + type: object + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Retrieve Workspace Product Limits by Project + tags: + - Internal V2 + /v2/internal/workspaces/{id}/projects: + get: + description: |- + This endpoint retrieves a list of projects available in a specific workspace. + It allows filtering of projects based on user access roles or permissions. + Only those projects are returned where the user has access. + User roles and permissions are determined by the following rules: + - Workspace Owners, Admins, and Editors have editor-level access to all projects in the workspace. + - Workspace Viewers are granted view-level access to all projects in the workspace. + - Specific roles, such as collaborators or content writers, control project-level access. + Use query parameters to refine the results, including user ID and pagination options. + operationId: internal-projects-list-v2 + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: user id + in: query + name: user_id + type: integer + - description: search by project name + in: query + name: search + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.InternalProjectV2List' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of projects in workspace, where user has access if provided + in query params + tags: + - Internal V2 + /v2/internal/workspaces/{id}/projects/{project_id}: + get: + description: |- + This endpoint retrieves a project by its ID within the workspace, provided the user has access. + If the user ID is included in the query parameters, the following rules are applied to evaluate access: + - Workspace Owners, Admins, and Editors have editor-level access to all projects in the workspace. + - Workspace Viewers are granted view-level access to all projects in the workspace. + - Specific access roles for collaborators or content writers apply at the project level. + If the user does not have an applicable role in the project or workspace, the project will return as not found. + operationId: internal-project-by-id-v2 + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: user id + in: query + name: user_id + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.InternalProjectV2' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a project by ID in a workspace where the user has access, if provided + in query params + tags: + - Internal V2 + /v2/internal/workspaces/all: + get: + description: Gets a list of all workspaces based on product filter. + operationId: internal-workspaces-all-list-v2 + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: Comma-separated list of product identifiers (e.g., ci,si) + in: query + name: products + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/handlers.workspaceResponse' + type: array + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + security: + - ApiKeyAuth: [] + summary: Get all workspaces + tags: + - Internal + /v2/internal/workspaces/projects/all: + get: + description: |- + This endpoint retrieves a list of all published projects across all workspaces. + It supports filtering and pagination to refine the results. + operationId: internal-projects-all-v2-list + parameters: + - description: API key + in: header + name: API-Key + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.InternalProjectV2List' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of all published projects across all workspaces + tags: + - Internal V2 + /v2/workspaces/{id}: + get: + description: gets workspace details matching with id including settings and + resource limits + operationId: workspace-details-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceV2Response' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets workspace details with settings and resources (v2) + tags: + - Workspaces + /v2/workspaces/{id}/child: + post: + consumes: + - application/json + description: |- + Creates a child workspace. If field owner is provided, + then the existing user will be the owner of the child workspace, + otherwise the virtual owner of this workspace will be created. + operationId: workspace-child-create-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: parent workspace id + in: path + name: id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.createWorkspaceV2Form' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: version 2 of creates a child workspace + tags: + - Workspaces + /v2/workspaces/{id}/projects: + get: + description: |- + List published projects for workspace with given ID. This is a lightweight V2 version suitable for selectors. + Returns only published (live) projects. Maximum limit is 100 items per page. + Supports product-specific default sorting and custom sorting via query parameters. + operationId: projects-list-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: publish statuses filter + in: query + name: publish_status + type: array + - description: search by project name or domain + in: query + name: search + type: string + - description: sort field (name, target, keywords, pagespeedurls, favourite) + in: query + name: sort_field + type: string + - description: sort direction (ASC or DESC) + in: query + name: sort_direction + type: string + - description: page number + in: query + name: page + type: integer + - description: page size (max 100) + in: query + name: limit + type: integer + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.projectListV2Response' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: List published projects for workspace (V2 lightweight for selectors) + tags: + - Public V2 + post: + consumes: + - application/json + description: creates a drafted project in a workspace with name and optional + domain + operationId: project-create-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.projectV2CreateForm' + produces: + - application/json + responses: + "201": + description: Created + schema: + $ref: '#/definitions/handlers.projectUpsertResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "409": + description: Conflict + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: creates a project as drafted + tags: + - Projects + /v2/workspaces/{id}/projects/{product_id}/{project_id}/limits: + get: + description: gets resource limits by project + operationId: project-limits-get-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: product id + in: path + name: product_id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.GetLimitsResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets resource limits by project + tags: + - Projects + /v2/workspaces/{id}/projects/{project_id}: + put: + consumes: + - application/json + description: updates color and title for draft/live projects, updates domain + only for draft + operationId: project-update-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.projectV2UpdateForm' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.projectUpsertResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "409": + description: Conflict + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: updates a project + tags: + - Projects + /v2/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords: + post: + consumes: + - application/json + description: gets list of keywords that belong to a target with traffic, volume, + position metrics and tags. + operationId: project-get-keywords-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.KeywordsWithTagsRequestAndTagID' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.KeywordsWithMetricsResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: list of keywords with metrics and tags + tags: + - Keywords + /v2/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/tags: + delete: + consumes: + - application/json + description: deletes tags from keywords in workspace, project and target with + given IDs. This endpoint allows batch operations for removing tag associations + from multiple keywords. + operationId: project-delete-keyword-tags-batch-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.BatchReferenceRequest' + produces: + - application/json + responses: + "204": + description: No Content + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: deletes tags from keywords in batch + tags: + - Tags + put: + consumes: + - application/json + description: |- + updates tags in keywords in workspace, project and target with given IDs. This endpoint allows + batch operations for updating tag associations with multiple keywords. + operationId: project-update-keyword-tags-batch-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.BatchReferenceRequest' + produces: + - application/json + responses: + "204": + description: No Content + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: updates tags in keywords in batch + tags: + - Tags + /v2/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags: + delete: + consumes: + - application/json + description: deletes tags from target in workspace, project with given IDs. + This endpoint allows batch operations for removing tag. + operationId: project-delete-tags-batch-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.BatchDeleteReferenceRequest' + produces: + - application/json + responses: + "204": + description: No Content + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: deletes tags from target in batch + tags: + - Tags + get: + description: |- + API to return list of all tags that belong to a target + parent_id param can be used to get tags with specific parent + query param can be used to filter tags by name + live flag can be used get live/draft target's tags + use limit, page for paginated result + operationId: project-get-tags-with-search + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: page number + in: query + name: page + type: integer + - description: page size + in: query + name: limit + type: integer + - description: parent id + in: query + name: parent_id + type: string + - description: search query + in: query + name: query + type: string + - description: live + in: query + name: live + type: boolean + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.tagsListWithSearchResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets a list of all tags of a target with search and filter capabilities + tags: + - Tags + /v2/workspaces/{id}/resources/transfer: + post: + consumes: + - application/json + description: version 2 transfer resources between a child workspace and its + parent. + operationId: workspace-transfer-resources-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.WorkspaceResourcesTransferV2Form' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesV2' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: version 2 transfer resources between a child workspace and its parent + tags: + - Workspaces + /v2/workspaces/{workspace_id}/connections/adobe-analytics: + post: + consumes: + - application/json + description: Creates a new Adobe Analytics connection. Uses credential_id in + body; ownership is checked by backend. + operationId: adobe-analytics-connection-create-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.AdobeAnalyticsWorkspaceConnectionCreateV2' + produces: + - application/json + responses: + "201": + description: Created + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Create Adobe Analytics connection (v2) + tags: + - Workspace Connections V2 + /v2/workspaces/{workspace_id}/connections/adobe-analytics/{connection_id}: + put: + consumes: + - application/json + description: Updates an existing Adobe Analytics connection. Uses credential_id + in body; ownership is checked by backend. + operationId: adobe-analytics-connection-update-v2 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: workspace_id + required: true + type: string + - description: connection id + in: path + name: connection_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.AdobeAnalyticsWorkspaceConnectionUpdateV2' + produces: + - application/json + responses: + "200": + description: OK + "400": + description: Bad Request + "401": + description: Unauthorized + "403": + description: Forbidden + "404": + description: Not Found + "500": + description: Internal Server Error + summary: Update Adobe Analytics connection (v2) + tags: + - Workspace Connections V2 + /v3/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords: + post: + consumes: + - application/json + description: |- + gets list of keywords that belong to a target with traffic, volume, position metrics and tags, + filter by multiple tags + operationId: project-get-keywords-v3 + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: target id + in: path + name: target_id + required: true + type: string + - description: request body + in: body + name: request + required: true + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.KeywordsWithTagsRequestAndTagIDs' + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/page-engine-backend_internal_usermanager_core_domain.KeywordsWithMetricsResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: list of keywords with metrics and tags and filter by multiple tags + tags: + - Keywords + /workspaces/{id}/api-key: + get: + consumes: + - application/json + description: |- + This API gets workspace's owner API key, this API can be used by admin/owner of workspace + other users can't get admin's API + 400 is returned if user email is not passed in query + operationId: workspace-owner-api-key-get + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + $ref: '#/definitions/handlers.workspaceUserAPIKey' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "404": + description: Not Found + schema: + $ref: '#/definitions/http_server.BasicResponse' + "422": + description: Unprocessable Entity + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: gets workspace owner's API key + tags: + - Workspaces + /workspaces/{id}/projects/{project_id}/segments: + post: + consumes: + - application/json + description: |- + creates a new segment in a specified project + **conditions :** + `column_name` is one of *url, url_list, keyword, keyword_list, traffic, position, search_volume, + keyword_intent, country, device, clicks, impressions, ctr, gsc_position* + `operator` is one of *equal, not_equal, begin, not_begin, end, not_end, contain, + not_contain, greater, less, greater_equal, less_equal, between, one_of, in_list* + *url_list* only can be used with *in_list* operator. Only zero or one url_list is allowed in the whole conditions array. + *keyword_list* only can be used with *in_list* operator. + **filters :** + `column_name` is one of *url, url_list, keyword, keyword_list, traffic, position, search_volume, + keyword_intent, country, device, clicks, impressions, ctr, gsc_position*. + `operator` is one of *and, or, equal, not_equal, begin, not_begin, end, not_end, contain, + not_contain, greater, less, greater_equal, less_equal, in_list*. + `value` is string type. It becomes array of string in case of *in_list* operator as an exceptional case. + *Notes*: + * *url_list* only can be used with *in_list* operator. Only zero or one url_list is allowed in the whole filters array. + * *keyword_list* only can be used with *in_list* operator. + * *filters* logical operators *and, or* don't have *column_name, value* and must have nested *filters*. + * *filters* logical operators *and, or* can have maximum depth up to 5 levels from the root. + * *filters* non-logical operators must have *column_name, value* and must not have nested *filters*. + * *filters* non-logical operators can have maximum 20 leaves in a single filter object. + operationId: project-segment-create + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: workspace id + in: path + name: id + required: true + type: string + - description: project id + in: path + name: project_id + required: true + type: string + - description: segment details + in: body + name: SegmentUpsertForm + required: true + schema: + $ref: '#/definitions/handlers.SegmentUpsertForm' + produces: + - application/json + responses: + "201": + description: Created + schema: + $ref: '#/definitions/handlers.SegmentResponse' + "400": + description: Bad Request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal Server Error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: creates a new segment for a project + tags: + - Segments + /workspaces/{id}/projects/{project_id}/segments/copy: + post: + consumes: + - application/json + description: Copy specified segments from current project to other projects + within the same workspace + operationId: segments-copy-to-projects + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: Workspace ID + in: path + name: id + required: true + type: string + - description: Source Project ID + in: path + name: project_id + required: true + type: string + - description: Copy segments request + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.CopySegmentsRequest' + produces: + - application/json + responses: + "200": + description: Copy result with copied count + schema: + additionalProperties: true + type: object + "400": + description: Bad request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal server error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Copy segments to other projects + tags: + - Segments + /workspaces/{id}/projects/{project_id}/segments/copy-all-from: + post: + consumes: + - application/json + description: Copy all segments from a source project to the current project + within the same workspace + parameters: + - description: Workspace ID + in: path + name: id + required: true + type: string + - description: Target Project ID + in: path + name: project_id + required: true + type: string + - description: Copy all segments request + in: body + name: request + required: true + schema: + $ref: '#/definitions/handlers.CopyAllSegmentsRequest' + produces: + - application/json + responses: + "200": + description: Success response with copied count + schema: + additionalProperties: true + type: object + "400": + description: Bad request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal server error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Copy all segments from source project to current project + tags: + - Segments + /workspaces/{id}/projects/{project_id}/segments/export: + get: + description: Export segments to a CSV or XLSX file containing segment names + and logical expressions + operationId: segments-export + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: Workspace ID + in: path + name: id + required: true + type: string + - description: Project ID + in: path + name: project_id + required: true + type: string + - default: csv + description: 'Export format: csv or xlsx' + in: query + name: format + type: string + produces: + - text/csv + - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet + responses: + "200": + description: CSV or XLSX file with segments data + schema: + type: file + "400": + description: Bad request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal server error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Export segments to CSV or XLSX file + tags: + - Segments + /workspaces/{id}/projects/{project_id}/segments/import: + post: + consumes: + - multipart/form-data + description: Import segments from a CSV or XLSX file containing segment names + and logical expressions. Format is automatically detected. + operationId: segments-import + parameters: + - description: JWT Token + in: header + name: Auth-Data-Jwt + required: true + type: string + - description: Workspace ID + in: path + name: id + required: true + type: string + - description: Project ID + in: path + name: project_id + required: true + type: string + - description: CSV or XLSX file with segments data + in: formData + name: file + required: true + type: file + produces: + - application/json + responses: + "200": + description: Import result with imported count + schema: + additionalProperties: true + type: object + "400": + description: Bad request + schema: + $ref: '#/definitions/http_server.BasicResponse' + "401": + description: Unauthorized + schema: + $ref: '#/definitions/http_server.BasicResponse' + "403": + description: Forbidden + schema: + $ref: '#/definitions/http_server.BasicResponse' + "500": + description: Internal server error + schema: + $ref: '#/definitions/http_server.BasicResponse' + summary: Import segments from CSV or XLSX file + tags: + - Segments +swagger: "2.0" \ No newline at end of file diff --git a/packages/spacecat-shared-user-manager-client/src/generated/types.ts b/packages/spacecat-shared-user-manager-client/src/generated/types.ts new file mode 100644 index 000000000..ecbc3a07d --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/src/generated/types.ts @@ -0,0 +1,24910 @@ +/** + * This file was auto-generated by openapi-typescript. + * Do not make direct changes to the file. + */ + +export interface paths { + "/v1/admin/core-users": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets core users by ids + * @description gets core users with ids + */ + get: operations["admin-core-users-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/users": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create a new user and master workspace + * @description Creates a new enterprise user based on an existing Semrush user and workspace if provided. + * Leave workspace as null to create user w/o workspace. + */ + post: operations["users-create"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/users/billing-status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Get billing status for users + * @description Returns billing status for multiple users by user IDs + */ + post: operations["admin-get-user-billing-statuses"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/users/expired": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** Gets a list of users which have expired subscriptions */ + get: operations["expired-subscription-users"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * creates a child workspace + * @description creates a child workspace + */ + post: operations["admin-workspace-child-create"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/{id}/partnership": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Update partnership for master workspace and its children + * @description This API updates the partnership flag for a workspace. + */ + patch: operations["admin-workspace-update-partnership"]; + trace?: never; + }; + "/v1/admin/workspaces/{id}/products": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add a product and its tier to master workspace and propagate changes to its child workspaces + * @description This API allows adding a product and its tier to the master workspace. + * If the product already exists, the tier will be updated for the workspace. + * For root workspaces, the product is added or updated only in the root workspace. + * Note: This API cannot be used to add products and tiers to non-master workspaces. + */ + post: operations["admin-workspace-product-create"]; + delete?: never; + options?: never; + head?: never; + /** + * Update a product and its tier in a master workspace and propagate changes to child workspaces + * @description This API updates a product and its tier in a workspace. If the product already exists, the API updates the tier. + * Changes to the product and tier are automatically propagated to the child workspaces. + * If the update is for a root workspace, the product and its tier will only be updated for the root workspace and will not propagate to all workspaces in the system. + * This API only applies to master workspaces and cannot be used for non-master workspaces. + */ + patch: operations["admin-workspace-product-update"]; + trace?: never; + }; + "/v1/admin/workspaces/{id}/products/{product_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * Delete a product and its tier from a master workspace and propagate changes to child workspaces + * @description This API deletes a product and its tier from a master workspace. If the product is removed from the root workspace, it will only be deleted from the root workspace and not from all workspaces in the system. + * For non-root workspaces, the product and its tier are automatically deleted from the workspace and its child workspaces. + * Note: This API can only be used to delete products from master workspaces. Non-master workspaces' products cannot be deleted using this API. + */ + delete: operations["admin-workspace-product-delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/{id}/projects/{project_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * deletes an ES project which is already deleted from core + * @description deletes an ES project which is already deleted from core + */ + delete: operations["admin-es-project-delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/activation-panel/app": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Are you 100% sure you really want to get the whole html page via swagger? + * @description Gets you index.html of an spa that is hosted for Admin + */ + get: operations["activation-panel-spa"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/{id}/expire-subscription": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Update expiration date for master workspace + * @description This API updates the expiration date for a partnership workspace. + */ + patch: operations["admin-workspace-update-expiration"]; + trace?: never; + }; + "/v1/admin/workspaces/api/create": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * creates a master workspace (made for Activation Panel) + * @description creates a master workspace (made for Activation Panel) + */ + post: operations["activation-panel-workspace-create-master"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/list": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * lists all workspaces with limits and hierarchy for Activation Panel + * @description returns all first-level workspaces (children of the root) including their limits as well as the full hierarchy of their descendant workspaces with limits + */ + get: operations["activation-panel-get-all-workspaces"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/logs": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * lists all admin activity logs for Activation Panel + * @description lists all admin activity logs for Activation Panel + */ + get: operations["activation-panel-get-all-admin-activities"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/organization/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * get a single workspace with all the data necessary for Activation Panel + * @description Returns a single workspace (by id) with all the data necessary for Activation Panel, including limits and child workspaces. + */ + get: operations["activation-panel-get-workspace"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/organization/{id}/users-report": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * lists workspace and its children report of users + * @description This API lists all users associated with a specific workspace and its child workspaces and returns a CSV file. + */ + get: operations["activation-panel-users-report"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/organizations": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * lists all organizations workspaces (only first-level, without limits) + * @description lists all organizations workspaces required for Activation Panel. Only first-level workspaces are returned without their limits and children – kept for backward compatibility with organization route. + */ + get: operations["activation-panel-get-all-organizations"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/permissions": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * creates a master workspace (made for Activation Panel) + * @description creates a master workspace (made for Activation Panel) + */ + get: operations["activation-panel-workspace-permissions"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/subscriptions/update": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * updates subscription details for a workspace and its children + * @description updates subscription details for a workspace and its children + */ + put: operations["activation-panel-subscription-update"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/update/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * updates a workspace (made for Activation Panel) + * @description updates a workspace matching with id (made for Activation Panel). Title and icon can be updated for any workspace (including child workspaces). Icon can be set to empty string. Product tiers can only be updated for master workspaces (direct children of root workspace). + */ + put: operations["activation-panel-workspace-update"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/users/{email}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * checks if customer can be activated + * @description checks if customer can be activated + */ + get: operations["activation-panel-check-owner-email"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/workspaces": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * retrieves all workspaces metadata (made for Activation Panel) + * @description retrieves all workspaces with basic metadata fields: ID, Title, Icon, and ParentID (made for Activation Panel) + */ + get: operations["activation-panel-all-workspaces-find"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/workspaces/{id}/aio/prompt-settings": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * get daily or weekly (with day of week) prompt settings + * @description Endpoint to get daily or weekly (with day of week) prompt settings for AIO product. + */ + get: operations["activation-panel-aio-settings-get"]; + /** + * create or update daily or weekly (with day of week) prompt settings + * @description Endpoint to create or update daily or weekly (with day of week) prompt settings for AIO product. + */ + put: operations["activation-panel-aio-settings-upsert"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/workspaces/{id}/products": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets workspace products for Activation Panel + * @description Returns a list of products (with ID and name) that are enabled for a specific workspace + */ + get: operations["activation-panel-workspace-products-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/workspaces/{id}/projects": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * lists projects for a workspace with filtering and pagination + * @description Returns a paginated list of projects for a specific workspace with support for search, sorting, and status filtering using cursor-based pagination. If next_cursor is not provided, results are returned from the start. Use the next_cursor value from the response to fetch subsequent pages. + */ + get: operations["activation-panel-projects-find"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/workspaces/{id}/projects/transfer": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * transfers projects from one workspace to another + * @description Transfers a list of projects from a source workspace to a target workspace. Only AI projects with transferable status can be moved. SEO and SI projects will be marked as failed. The endpoint validates target workspace product enablement, available resource limits (projects, keywords, pages, prompts, pagespeed URLs), and RBAC roles. Users with explicit project roles or workspace roles in the source workspace will be granted appropriate roles in the target workspace. Returns a map of failed project IDs with failure reasons (empty map indicates all projects transferred successfully). + */ + post: operations["activation-panel-projects-transfer"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/workspaces/{id}/resources": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets workspace resources for Activation Panel + * @description Returns workspace resources including general resources (users, service credits, API units) and product-specific resources (SEO, AI, SI) for a specific workspace + */ + get: operations["activation-panel-workspace-resources"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/workspaces/{id}/smb-migration": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Migrate SMB projects + * @description Migrate SMB projects from list of corporate owners to target workspace + */ + post: operations["activation-panel-projects-migration"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/api/workspaces/{id}/smb-migration-report": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * SMB projects migration report + * @description Get report for SMB projects migration for given workspaceID as comma separated csv + */ + get: operations["activation-panel-projects-migration-report"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/managers": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * imports workspace managers from CSV + * @description imports workspace managers from CSV data where each row contains a workspace ID and its manager user IDs + */ + post: operations["workspace-manager-import"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/master": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * creates a master workspace + * @description creates a master workspace + */ + post: operations["admin-workspace-create-master"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/admin/workspaces/tiers": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * return list of tiers + * @description this API returns list of available tiers + */ + get: operations["activation-panel-tiers-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/adobe-analytics/{adobe_proxy_auth_id}/{global_company_id}/dimensions": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * [DEPRECATED] Gets Adobe dimensions + * @deprecated + * @description Deprecated: use GET /v2/adobe-analytics/dimensions with credential_id, global_company_id, rsid in query instead. + */ + get: operations["adobe-analytics-get-dimensions"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/adobe-analytics/{adobe_proxy_auth_id}/{global_company_id}/metrics": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * [DEPRECATED] Gets Adobe metrics + * @deprecated + * @description Deprecated: use GET /v2/adobe-analytics/metrics with credential_id, global_company_id, rsid in query instead. + */ + get: operations["adobe-analytics-get-metrics"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/adobe-analytics/{adobe_proxy_auth_id}/{global_company_id}/metrics-dimensions/validation": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * [DEPRECATED] Validate Adobe Analytics metrics and dimensions + * @deprecated + * @description Deprecated: use POST /v2/adobe-analytics/credentials/metrics-dimensions/validation with credential_id in body instead. + */ + post: operations["adobe-analytics-validate"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/adobe-analytics/{adobe_proxy_auth_id}/{global_company_id}/reportsuites": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * [DEPRECATED] Gets Adobe report suites + * @deprecated + * @description Deprecated: use GET /v2/adobe-analytics/reportsuites with credential_id and global_company_id in query instead. + */ + get: operations["adobe-analytics-get-report-suites"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/adobe-analytics/{adobe_proxy_auth_id}/{global_company_id}/reportsuites/paginated": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * [DEPRECATED] Gets Adobe report suites with pagination + * @deprecated + * @description Deprecated: use GET /v2/adobe-analytics/reportsuites/paginated with credential_id and global_company_id in query instead. + */ + get: operations["adobe-analytics-get-report-suites-paginated"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/adobe-analytics/{adobe_proxy_auth_id}/status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * [DEPRECATED] Gets Adobe credentials status + * @deprecated + * @description Deprecated: use GET /v2/adobe-analytics/status with credential_id in query instead. Gets Adobe credentials status by adobe_proxy_auth_id. + */ + get: operations["adobe-analytics-get-status"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/adobe-analytics/credentials": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * [DEPRECATED] Creates Adobe Analytics credentials + * @deprecated + * @description Deprecated: use POST /v2/adobe-analytics/credentials instead (returns credential_id, not adobe_proxy_auth_id). + */ + post: operations["adobe-analytics-create-credentials"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/adobe-analytics/status/bulk": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * [DEPRECATED] Gets multiple Adobe credentials statuses + * @deprecated + * @description Deprecated: will be removed without replacement. Use GET /v2/adobe-analytics/status per credential_id instead. + */ + post: operations["adobe-analytics-get-bulk-status"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/countries": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of countries + * @description gets a list of countries + */ + get: operations["countries"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/goals/metrics": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * returns goals metrics + * @description this API returns list of goals metrics + */ + get: operations["goals-metrics-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/core-users": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets core users by ids + * @description gets core users with ids + */ + get: operations["internal-core-users-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/projects/all": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of live & published projects from all workspaces + * @description gets a list of live & published projects from all workspaces + */ + get: operations["internal-project-all-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/projects/restore": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Restore project + * @description restore deleted project on enterprise + */ + post: operations["internal-restore-project"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/targets/all": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets all live targets + * @description gets all live targets + */ + get: operations["internal-all-live-targets"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/transactions": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Creates a service credits transaction, + * @description Creates a service credits transaction, + */ + post: operations["transaction-create"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/transactions/{transaction_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Gets a service credits transaction + * @description Gets a service credits transaction + */ + get: operations["service-credits-internal-transaction-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/transactions/{transaction_id}/cancel": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Cancel a service credits transaction + * @description Cancel a service credits transaction + */ + post: operations["transaction-cancel"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/transactions/list": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Gets a list of service credits transactions + * @description Gets a list of service credits transactions + */ + post: operations["service-credits-internal-transactions-list"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/users": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets complete profiles of users by ids + * @description gets profiles of users by ids filtered by es_type + * profiles include all workspaces where users have access + */ + get: operations["profiles-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/users/{user_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * An internal API to update a user's profile + * @description This is an internal API to update a user's profile which is intended to be used by other ES services. + */ + put: operations["user-profile-update-internal"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/users/all": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** An internal API to find all ES users */ + get: operations["internal-all-es-users"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/users/api-key/{api_key}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Internal API to retrieve user data using an API key + * @description This is an internal API to fetch user data of the owner of the API key. + */ + get: operations["user-by-api-key-get-internal"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/users/basic": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets basic profiles of users by ids + * @description gets profiles of users by ids + * basic profile data + */ + get: operations["basic-profiles-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * internal API to get workspace by id + * @description internal API to get workspace by id. + */ + get: operations["internal-workspace-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/ancestors": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * an internal API to get ancestor(parents/grandparents) of a workspace + * @description an internal API to get ancestor(parents/grandparents) of a workspace. + * Ancestors list does not include current workspace. + */ + get: operations["internal-workspaces-ancestor"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/api-key": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets workspace owner's API key + * @description This API gets workspace's owner API key, this API can be used by admin/owner of workspace + * other users can't get admin's API + * 400 is returned if user email is not passed in query + */ + get: operations["internal-workspace-owner-api-key-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/family": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * an internal API to get a list of workspace children + * @description an admin API to get a list of all children, grand children workspaces + */ + get: operations["internal-workspaces-family"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/managers": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets workspace managers + * @description gets a list of all managers for a specific workspace + */ + get: operations["workspace-managers-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/members": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * get workspace members + * @description gets a workspace's members + */ + get: operations["internal-workspaces-members"]; + put?: never; + /** + * internal API to add members to a workspace + * @description internal API to add members to a workspace and assigns them a specific role + * in response it returns number of user units consumed + * -ve value means workspace user units are consumed and users are invited to corporate account. + * 0 values mean user units are not changed and corporate account remains unaffected. + * **Note**: External users (without @semrsuh.com email) cannot be invited to Semrush workspaces. + */ + post: operations["internal-workspace-add-members"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/members/{user_id}/roles/status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * check role status in hierarchy + * @description checks whether user has one of the provided workspace roles in the current workspace or ancestors + */ + get: operations["workspaces-check-roles-in-ancestry"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/members/{user_id}/status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * check membership status + * @description Checks whether the user has membership in the workspace hierarchy (current workspace + descendants). + * If the optional `membership` query parameter is provided, only those statuses are treated as valid. + * Valid values: `member`, `guest`, `basic`. + * If `membership` is omitted, the default behavior is backward compatible: membership is checked by subscription match + * (`user.SubscriptionID == desc.SubscriptionID`), not by membership status. + */ + get: operations["workspaces-check-membership-in-ancestry"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/pagespeed-crawlers": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list pagespeed crawlers of a workspace + * @description gets a list pagespeed crawlers that belong to a workspace + */ + get: operations["pagespeed-internal-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/pagespeed-crawlers/{crawler_id}/keywords": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of keywords of pagespeed crawlers + * @description gets a list of keywords of pagespeed crawler by its id. + */ + get: operations["pagespeed-internal-keywords-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/pagespeed-crawlers/{crawler_id}/urls": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of urls of pagespeed crawlers + * @description gets a list of urls of pagespeed crawler by its id. + */ + get: operations["pagespeed-internal-urls-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/projects": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of projects belongs to a workspace + * @description gets a list of all projects that belong to a workspace. + */ + get: operations["project-list-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/projects/{project_id}/goals": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * list of normalised goals + * @description this API returns a list of normalized goals for a live project + */ + get: operations["internal-goals-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/projects/{project_id}/public/segments": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * This is a proxy internal API which gets a list of public segments of a project. + * @description This is a proxy internal API to public API **Segment** *\/workspaces/{id}/projects/{project_id}/segments [get]* + * which gets a list of segments that belong to a project. + * For description of response fields like conditions and filters, + * see segment create under **Segment** *\/workspaces/{id}/projects/{project_id}/segments [post]* + */ + get: operations["internal-public-project-segment-list-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/projects/{project_id}/segments": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of segments of a project with pagemanager representation of filters + * @description gets a list of segments that belong to a project. + * *filters* here is the exact representation of the filters in the pagemanager. + * **filters representations:** + * `col` is one of *url, keyword*. Note: *url_list* is represented as *url* in pagemanager. + * `op` is one of *and, or, eq, neq, begins_with, not_begins_with, ends_with, not_ends_with, contains, + * not_contains, gt, lt, gte, lte, in*. + * `value` is string type. It becomes array of string in case of *in* operator as an exceptional case. + * *Notes*: + * * *url_list* always has *in* operator. Only zero or one url_list contains in the whole filters object. + * * *filters* logical operators *and, or* will not have *col, value* and will have nested *filters*. + * * *filters* logical operators *and, or* will have maximum depth up to 5 levels from the root. + * * *filters* non-logical operators will have *col, value* and will not have nested *filters*. + * * *filters* non-logical operators will have maximum 20 leaves in a single filter object. + */ + get: operations["internal-project-segment-list-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/projects/{project_id}/segments/{segment_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * This is a proxy internal API which gets a segment of a project. + * @description For description of response fields like conditions and filters, + * see segment create under **Segment** *\/workspaces/{id}/projects/{project_id}/segments [post]* + */ + get: operations["internal-project-segments-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/projects/{project_id}/targets": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of targets of a project + * @description gets a list of targets that belong to a project + */ + get: operations["project-target-list-get-internal"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/projects/{project_id}/targets/{target_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets target details + * @description gets target details + */ + get: operations["internal-project-target-details"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/projects/{project_id}/targets/{target_id}/benchmarks/input": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * finds a list of internal benchmarks of a project + * @description this API lists internal benchmarks of a project + */ + get: operations["internal-benchmarks-input"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/projects/{project_id}/targets/{target_id}/input": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets internal target details + * @description gets internal target details + */ + get: operations["internal-project-target-input-details"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/tagged": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets tagged keywords + * @description this API gets tagged keywords with the underscore (__) syntax. + */ + get: operations["project-get-tagged-keywords"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags/search": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** internal API to search tags list by name */ + get: operations["project-internal-search-list-tags"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags/tree": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * internal API to find tags parents upto top level + * @description this API returns all ancestors of tag upto root level, this API does not return children of tags. + * API does not return full tree. + */ + get: operations["project-internal-tags-tree"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/projects/targets": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of targets of all live projects by workspace id + * @description gets a list of targets of all live projects by workspace id + */ + get: operations["internal-live-projects-target-list-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/resources": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets workspace resources + * @description Returns workspace resources including general resources (users, service credits, API units) and product-specific resources (SEO, AI, SI) for a specific workspace + */ + get: operations["internal-workspace-resources"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/service-units": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets service units + * @description gets service units + */ + get: operations["service-units-get"]; + /** + * sets service units + * @description sets service units + */ + put: operations["service-units-set"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{id}/service-units/used": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * sets used service units + * @description sets used service units + */ + put: operations["service-units-used-set"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{workspace_id}/connections": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List workspace connections (internal) + * @description Returns a paginated list of workspace connections for service-to-service use (e.g. LFA connector status updater). Same query parameters as the user-facing list endpoint. + */ + get: operations["internal-workspace-connections-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{workspace_id}/connections/{connection_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get workspace connection by connection ID (internal) + * @description Retrieves the details of workspace connection. Returns adobe_proxy_auth_id instead of credential_id for adobe analytics connections. + */ + get: operations["internal-workspace-connection-byid"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{workspace_id}/connections/log-file-analysis/{connection_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Update Log File Analysis connection (internal) + * @description Updates an existing Log File Analysis connection using internal API key authentication (e.g. LFA connector status updater). The connection must belong to the workspace and be of type log-file-connector. + */ + put: operations["internal-log-file-analysis-connection-update"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/{workspace_id}/connections/log-file-analysis/{connection_id}/status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * Update Log File Analysis connector status (internal) + * @description Persists connector-reported success or error status. Returned on all workspace connection GET endpoints for this connection. + */ + patch: operations["internal-log-file-analysis-connection-status-patch"]; + trace?: never; + }; + "/v1/internal/workspaces/{workspace_id}/projects/{project_id}/connections": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get connections for a specific project + * @description Retrieves a list of connection IDs attached to a specific project. + */ + get: operations["internal-workspace-project-connections"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/all": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * workspaces list + * @description gets a list of all workspaces + */ + get: operations["internal-workspaces-all-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/limits": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * get limits for all workspaces + * @description gets limits for all workspaces + */ + get: operations["internal-workspaces-limits"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/members/batch": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * get batch workspace members + * @description gets batch workspace members + */ + post: operations["internal-batch-workspaces-members"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/root": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a root workspace + * @description gets a root workspace + */ + get: operations["internal-workspace-get-root"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/sox": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * workspaces list (SOX compliance) + * @description gets the list of all workspaces for SOX compliance + */ + get: operations["internal-workspaces-sox-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/internal/workspaces/tiers": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * return list of tiers + * @description this API returns list of available tiers + */ + get: operations["internal-tiers-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/languages": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of languages + * @description gets a list of languages + */ + get: operations["languages"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/locations": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * proxy request for getting locations + * @description this API gets locations from core /get_locations api and pass them in response + * get_locations api docs can be here(https://kb.semrush.net/display/BlueTeam/locations+get_ + */ + get: operations["locations"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/profile": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets user's own profile + * @description gets user's own profile + */ + get: operations["user-profile"]; + put?: never; + /** + * updates user's own profile + * @description updates user's own profile + */ + post: operations["user-profile-update"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/users/required-units": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** An API that returns number of users required to invite them on workspace */ + post: operations["users-required-units"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/users/workspace-ownership-eligibility": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * validates if user can become owner of a children workspace + * @description API validates if user can become owner of children workspace + * by validating user exists on core and does not have subscription. + * 404 is returned if user does not exist on core + * 422 is returned if user already has core subscription + * 400 is returned if user email is not passed in query + */ + get: operations["user-ownership-eligibility"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/work-categories": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of work categories + * @description gets a list of work categories + */ + get: operations["work-categories"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * workspaces list + * @description gets a list of workspaces owned by the user + */ + get: operations["workspaces-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets workspace details + * @description gets workspace details matching with id + */ + get: operations["workspace-details"]; + /** + * updates a workspace + * @description updates a workspace matching with id + */ + put: operations["workspace-update"]; + post?: never; + /** + * deletes a workspace + * @description deletes workspace matching with id. + * In order to delete a workspace make sure workspace does not have any children otherwise + * API will fail to process + */ + delete: operations["workspace-delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/api_units": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** gets API units of a workspace */ + get: operations["workspace-api-units-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/campaigns/{campaign_id}/keywords": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets keywords + * @description gets keywords that belong to a campaign. + */ + get: operations["workspaces-campaign-keywords-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/child": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * creates a child workspace + * @description Creates a child workspace. If field owner is provided, + * then the existing user will be the owner of the child workspace, + * otherwise the virtual owner of this workspace will be created. + */ + post: operations["workspace-child-create"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/family": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * an API to get a list of workspaces family + * @description an API to get a list of all children, grand children workspaces which belong to a workspace + */ + get: operations["workspaces-family"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/has_children": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** API to returns true/false if workspace has or does not have children */ + get: operations["workspaces-has-children"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/icon": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Updates workspace icon using a signed upload receipt + * @description Validates the Ed25519-signed receipt from the upload service, then stores the icon URL. + */ + put: operations["workspace-update-icon"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/keywordslists": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Gets list of keywords-lists for the workspace + * @description Gets list of keywords-lists for the workspace. Pagination is not supported for now. + */ + get: operations["keywordslists-get"]; + put?: never; + /** + * Create a keywords-list for the workspace + * @description Create a keywords-list for the workspace + */ + post: operations["keywordslists-post"]; + /** + * delete keywords-lists of a workspace by basket ids + * @description delete keywords-lists of a workspace by basket ids + */ + delete: operations["keywordslists-delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/keywordslists/{basket_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Rename the name of a keywords-list of the workspace + * @description Rename the name of a keywords-list of the workspace + */ + put: operations["keywordslists-rename"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/keywordslists/{basket_id}/keywords": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Gets list of keywords from the keywords-list + * @description Gets list of keywords from the keywords-list in a workspace. + * Pagination is supported. Default page is 1 and default limit is 25 when any of page or limit params provided. + * Even wrong values are set as defaults. If page and limit are not provided, all keywords are returned. + */ + get: operations["keywordslists-keywords-get"]; + put?: never; + /** + * Create a list of keywords in a keywords-list + * @description Create a list of keywords in a keywords-list of a workspace + * Each keyword phrase can have upto 90 characters. A keyword can have upto 5 tags. + */ + post: operations["keywordslists-keywords-post"]; + /** + * Delete a list of keywords in a keywords-list + * @description Delete a list of keywords in a keywords-list from a workspace. + */ + delete: operations["keywordslists-keywords-delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/keywordslists/{basket_id}/keywords/tags": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Add a list of tags to a list of keywords in a keywords-list + * @description Add a list of tags to a list of keywords in a keywords-list of the workspace. + */ + post: operations["keywordslists-keywords-tags-add"]; + /** + * Deletes a list of tags to a list of keywords in a keywords-list + * @description Deletes a list of tags to a list of keywords in a keywords-list of the workspace. + */ + delete: operations["keywordslists-keywords-tags-delete"]; + options?: never; + head?: never; + /** + * Add and delete list of tags to a list of keywords in a keywords-list + * @description Add and delete list of tags to a list of keywords in a keywords-list of the workspace. + */ + patch: operations["keywordslists-keywords-tags-patch"]; + trace?: never; + }; + "/v1/workspaces/{id}/keywordslists/{basket_id}/keywords/upload": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create a list of keywords in a keywords-list by uploading a csv/xlsx file + * @description Create a list of keywords in a keywords-list by uploading a csv/xlsx file in a workspace + * 1st element is supposed to be keyword name. 2nd element is supposed to be database. + * Whereas 3rd element is supposed to be list of tags, other elements are ignored. + * Tagged are expected to be separated by __ notion. + * Example of a csv row (Similarly for xlsx): + * *keyword name, database, tag1, tag2__tag3, tag4__tag5* + * Total keywords allowed is 100. A keyword can have up to 5 tags.Total tags allowed is 50. + */ + post: operations["keywordslists-keywords-post-upload"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/keywordslists/{basket_id}/members": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * get keywords list members + * @description gets a keywords list members + */ + get: operations["keywords-list-members"]; + put?: never; + /** + * adds members to a keywords list + * @description adds members to a keywords list and assigns them a specific role + * **Note**: External users (without @semrsuh.com email) cannot be invited to keywords lists of Semrush workspaces. + */ + post: operations["keywords-list-add-members"]; + /** + * delete members of a keywords-list + * @description deletes members of a keywords-list + * Note: External users on Semrush workspace keywords lists are not allowed to be invited + */ + delete: operations["keywords-list-delete-members"]; + options?: never; + head?: never; + /** + * update keywords-list members role + * @description update keywords-list members role + * Note: External users on Semrush workspace keywords lists are not allowed to be invited + */ + patch: operations["keywords-list-update-members-role"]; + trace?: never; + }; + "/v1/workspaces/{id}/keywordslists/databases": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Gets list of databases of keywords + * @description Gets list of databases of keywords + */ + get: operations["keywordslists-databases-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/light": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets lightweight workspace details + * @description gets lightweight workspace details matching with id + */ + get: operations["workspace-light-details"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/limits": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * [DEPRECATED] use /v1/workspaces/{id}/resources instead + * @deprecated + * @description [DEPRECATED] use /v1/workspaces/{id}/resources instead + */ + get: operations["limits-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/members": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * get workspace members + * @description gets a workspace's members + * **Note:** Users with roles *Collaborator* or *Content Writer* will receive **no members** in the response (an empty list), regardless of workspace membership. + */ + get: operations["workspaces-members"]; + put?: never; + /** + * adds members to a workspace + * @description adds members to a workspace and assigns them a specific role + * in response it returns number of user units consumed + * -ve value means workspace user units are consumed and users are invited to corporate account. + * 0 values mean user units are not changed and corporate account remains unaffected. + * **Note**: External users (without @semrsuh.com email) cannot be invited to Semrush workspaces. + */ + post: operations["workspace-add-members"]; + /** + * delete members of a workspace + * @description deletes members of a workspace + * in response it returns number of user units freed, + * +ve value means workspace user units are credited back and users are removed from corporate account. + * 0 values mean user units are not changed and corporate account remains unaffected. + */ + delete: operations["workspace-delete-members"]; + options?: never; + head?: never; + /** + * updates a member's role in workspace + * @description Updates a member's role in workspaces by promoting/demoting user in the workspace. + * in response it returns number of user units consumed/freed, + * +ve value means workspace user units are credited back and user is removed from corporate account. + * -ve value means workspace user units are consumed and user is invited to corporate account. + * 0 values mean user units are not changed and corporate account remains unaffected. + */ + patch: operations["workspaces-members-update"]; + trace?: never; + }; + "/v1/workspaces/{id}/parent": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets workspace's parent details + * @description gets workspace's parent details matching with id + */ + get: operations["workspace-details-parent"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/parent/resources": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets workspace's master workspace resources + * @description gets workspace's master workspace resources resources matching with id + */ + get: operations["workspace-resources-master"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of projects belongs to a workspace + * @description gets a list of all projects that belong to a workspace. + */ + get: operations["project-list-get-for-user"]; + put?: never; + /** + * creates a project as drafted + * @description creates a drafted project in a workspace with name and domain + */ + post: operations["project-create"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a project + * @description gets details of a specific project. + */ + get: operations["project-get"]; + /** + * updates a project + * @description updates a project's color and title + */ + put: operations["project-update"]; + post?: never; + /** + * deletes a project + * @description deletes a project and attached entities + */ + delete: operations["project-delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/benchmarks/clone": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * clone benchmarks / tags from target to another + * @description clone benchmarks / tags from target to another + */ + post: operations["workspaces-clone-benchmarks-tags"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/discard_draft": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * discards a draft version of a project + * @description discards draft projects and copies back live version + */ + post: operations["discard-draft-project"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/favourite": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * sets a project as favourite + * @description API to set project as favourite + */ + post: operations["set-project-favourite"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/goals": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * list goals + * @description this API returns list of goals for a project + */ + get: operations["goals-list"]; + put?: never; + /** + * create a goal + * @description this API creates a goal for a project + */ + post: operations["goal-create"]; + /** + * delete multiple goals + * @description this API deletes multiple goals for a project + */ + delete: operations["goals-delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/goals/{goal_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * update a goal + * @description this API creates a goal for a project + */ + put: operations["goal-update"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/goals/import": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * import goals from a project to another + * @description this API imports goals from a project to another + */ + post: operations["goal-simport"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/limits": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets resource limits by project + * @description gets resource limits by project + */ + get: operations["project-limits-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/members": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * get project members + * @description gets a project's members + */ + get: operations["project-members"]; + put?: never; + /** + * adds members to a project + * @description adds members to a projects and assigns them a specific role + * **Note**: External users (without @semrsuh.com email) cannot be invited to projects of Semrush workspaces. + */ + post: operations["project-add-members"]; + /** + * delete members of a project + * @description deletes members of a project + */ + delete: operations["project-delete-members"]; + options?: never; + head?: never; + /** + * update project members role + * @description update project members role + */ + patch: operations["project-update-members-role"]; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/pagespeed-crawlers": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list pagespeed crawlers of a project + * @description gets a list pagespeed crawlers that belong to a project + */ + get: operations["pagespeed-list"]; + put?: never; + /** + * creates a pagespeed crawler of a project + * @description creates a pagespeed crawler that belong to a project + */ + post: operations["pagespeed-create"]; + /** + * deletes pagespeed crawlers of a project + * @description deletes pagespeed crawlers that belong to a project + */ + delete: operations["pagespeed-delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/pagespeed-crawlers/{crawler_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * updates a pagespeed crawler of a project + * @description updates a pagespeed crawler that belong to a project + */ + patch: operations["pagespeed-update"]; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/pagespeed-crawlers/{crawler_id}/keywords": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of keywords of pagespeed crawlers + * @description gets a list of keywords of pagespeed crawler that belong to a project + */ + get: operations["pagespeed-keywords-list"]; + put?: never; + /** + * adds keywords to pagespeed crawlers + * @description adds keywords to pagespeed crawlers + */ + post: operations["pagespeed-add-keywords"]; + /** + * deletes a list of keywords from pagespeed crawlers + * @description deletes a list of keywords from pagespeed crawlers + */ + delete: operations["pagespeed-delete-keywords"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/pagespeed-crawlers/{crawler_id}/keywords/custom": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * adds keywords by name to a pagespeed crawler. + * @description adds keywords by name to pagespeed crawler. + * A project should have these keywords otherwise keywords are not added to a pagespeed crawler. + */ + post: operations["pagespeed-add-named-keywords"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/pagespeed-crawlers/{crawler_id}/limits": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets resource limits by pagespeed crawler + * @description gets resource limits by pagespeed crawler + */ + get: operations["crawler-limits-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/pagespeed-crawlers/{crawler_id}/urls": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of urls of pagespeed crawlers + * @description gets a list of urls of pagespeed crawler that belong to a project + */ + get: operations["pagespeed-urls-list"]; + put?: never; + /** + * adds a list of urls in pagespeed crawlers of a project + * @description adds a list of urls to pagespeed crawlers that belong to a project + */ + post: operations["pagespeed-add-urls"]; + /** + * deletes a list of urls from pagespeed crawlers of a project + * @description deletes a list of urls from pagespeed crawlers that belong to a project + */ + delete: operations["pagespeed-delete-urls"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/pagespeed-crawlers/{crawler_id}/visible": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + /** + * makes a pagespeed crawler of a project is visible + * @description makes a pagespeed crawler of a project is visible + */ + patch: operations["pagespeed-visible"]; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/publish/async": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * publishes a project + * @description asynchronously publishes a project + */ + post: operations["project-publish-async"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/segments": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Gets a list of segments of a project + * @description Gets a list of segments that belong to a project. + * For description of response fields like conditions and filters, + * see segment create under **Segment** *\/workspaces/{id}/projects/{project_id}/segments [post]* + */ + get: operations["project-segment-list-get"]; + put?: never; + post?: never; + /** + * delete a segment for a project by id + * @description delete a segment for a project by id + */ + delete: operations["project-segment-delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/segments/{segment_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Gets a segment of a project by id (public) + * @description Gets a segment of a project by id. For description of response fields like conditions and filters, + * see segment create under **Segment** *\/workspaces/{id}/projects/{project_id}/segments [post]* + */ + get: operations["project-segments-get"]; + /** + * update segment for a project BY id + * @description update segment for a project BY id, see segment create for valid conditions and filters fields + * column_name, operator and value validations. + */ + put: operations["project-segment-update"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of targets of a project + * @description gets a list of targets that belong to a project + */ + get: operations["project-target-list-get"]; + put?: never; + /** + * adds target to a project + * @description creates target of the project + */ + post: operations["project-add-target"]; + /** + * delete a target + * @description deletes a target + */ + delete: operations["project-target-delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets target details + * @description gets target details + */ + get: operations["project-target-details"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/benchmarks": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * finds a list of benchmarks of a project + * @description this API lists benchmarks of a project + */ + get: operations["benchmarks-list"]; + put?: never; + /** + * creates a benchmark of a project + * @description this API lets client create benchmark of a project, max 20 benchmarks are allowed + */ + post: operations["project-add-benchmarks"]; + /** + * delete benchmarks of a project + * @description this API lets client delete benchmarks of a project + */ + delete: operations["project-delete-benchmarks"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/benchmarks/{benchmark_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * updates a benchmark of a project + * @description this API lets client updates a benchmark of a project + */ + put: operations["project-update-benchmarks"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/benchmarks/bulk": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * bulk update benchmarks of a project + * @description this API lets client bulk update benchmarks of a project + */ + put: operations["project-bulk-update-benchmarks"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/benchmarks/download": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * downloads benchmarks + * @description This API download benchmarks. + * First element is supposed to be URL + * whereas second element is supposed to be color. + */ + get: operations["project-download-benchmarks"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/benchmarks/remove-tags": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * remove tags from benchmarks + * @description remove tags from benchmarks + */ + delete: operations["project-remove-tags-benchmarks"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/benchmarks/upload": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * uploads benchmarks + * @description this API uploads benchmarks of a project from csv/xlsx file. + * First element is supposed to be URL + * whereas second element is supposed to be color, other elements are ignored. + */ + post: operations["project-upload-benchmarks"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * list of keywords + * @description gets list of keywords that belong to a target. + */ + get: operations["project-get-keywords"]; + put?: never; + /** + * creates keywords + * @description creates keywords that belong to a target + */ + post: operations["project-add-keywords"]; + /** + * deletes keywords + * @description deletes keywords that belong to a target + */ + delete: operations["project-delete-keywords"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/names": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * finds a taregt's keywords by names. + * @description finds a taregt's keywords by names. + */ + post: operations["targets-keywords-by-names"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/preferred-url": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * an API to update keywords preferred urls in bulk + * @description an API to update keywords preferred urls via csv/xlsx file, file content must be of text/csv. + * each row represents 1 keywords and its preferred url and values are expected to be comma + * separated for csv file. first element is supposed to be keyword name + * whereas second element is supposed to be preferred urls, other elements are ignored + */ + post: operations["keywords-preferred-urls-upload"]; + delete?: never; + options?: never; + head?: never; + /** + * updates keyword's preferred url + * @description this API can be used to update keywords' preferred url. + */ + patch: operations["project-update-keywords"]; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/preferred-url/download": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * downloads keywords with preferred-urls + * @description This API download keywords along with preferred urls associated with keywords. + * each row represents one keyword and its preferred url and values are expected to be comma + * separated for csv file. first element is supposed to be keyword name + * whereas second element is supposed to be preferred urls. + */ + get: operations["keywords-preferred-urls-download"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/related-tags-ids": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * gets related tag IDs for keywords + * @description This API fetches related tag IDs for the provided keywords. + * Response has keyword_id mapped to tag ids {"id1":["tag1", "tag2"]} + */ + post: operations["keywords-related-tag-ids-get"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/relations": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + post?: never; + /** + * an API to delete relationships of keywords with tags + * @description API deletes relantionships of keywords with tags, + * it can also delete relations of keywords with children and grandchildren of tags if parent id passed + * expected format of request {"relations": [["keyword_id", "tag_id"]]} + */ + delete: operations["keywords-tags-relations-delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/stats": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets metrics of keywords + * @description gets metrics of keywords, data is fetched from elements data source + */ + get: operations["keywords-metrics"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/tagged": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * creates tagged keywords + * @description this API creates tagged keywords by building tags hierarchy and + * assigning tags to keywords. tagged are expected to be separated by __ notion + */ + post: operations["project-add-tagged-keywords"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/tagged/download": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * downloads tagged keywords + * @description This API download keywords along with preferred URLs and tags associated with keywords. + * First element is supposed to be keyword name + * Second element is supposed to be preferred URL + * Third and subsequent elements are supposed to be list of tags. + * Tags are expected to be separated by __ notion. + * All tags are packaged in a quoted-field. + * Example of a csv row: keyword name, preferred_url, "tag1__tag2__tag3,tag4__tag5__tag6" + */ + get: operations["project-download-tagged-keywords"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/tagged/upload": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * uploads tagged keywords + * @description this API uploads tagged keywords by building tags hierarchy and + * assigning tags to keywords through csv/xlsx file. + * First element is supposed to be keyword name + * Second element is supposed to be preferred URL (optional) + * Third and subsequent elements are supposed to be list of tags. + * Tagged are expected to be separated by __ notion. + * All tags must be packaged in a quoted-field for csv file, this is not necessary for xlsx. + * Example of a csv row: keyword name,preferred_url,"tag1__tag2__tag3" + */ + post: operations["project-upload-tagged-keywords"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of tags of a target + * @description API to return list of tags that belong to a target + * parent_id param can be used to get immediate children of a tag + * live flag can be used get live/draft target's tags + * use limit, page for paginated result + */ + get: operations["project-get-tags"]; + put?: never; + /** + * adds tags to a target + * @description this API creates tags and parent_id in request body can be used to build parent children relantions + */ + post: operations["project-add-tags"]; + /** + * deletes tags of a target + * @description deletes tags that belong to a target, this API also deletes keywords associated to tags + * use `delete_keywords` flag to delete keywords along with tags + */ + delete: operations["project-delete-tags"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags/{tag_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * updates a tag's name and parent + * @description this API can be used to change a tag's name and its parent + */ + put: operations["project-update-tag"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags/all": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * get all tags as flat list + * @description This API returns all tags as a flat list without building tree structure for performance optimization. + * Frontend can build the tree structure if needed using parent_id relationships. + */ + get: operations["project-tags-all"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags/search": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * searches tags by name and returns matching tags' without their children or parents + * @deprecated + */ + get: operations["project-search-list-tags"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags/tree": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * find tags parents upto top level + * @description this API returns all ancestors of tag upto root level, this API does not return children of tags. + * API does not return full tree. + */ + get: operations["project-tags-tree"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags/tree/path": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * searches tags by path and returns ancestors tree of matched tags + * @description This API searches tags and returns ancestors tree structure of matched tags. + * Consider a tree `foo -> bar -> baz -> quack` and searched for `foo__bar__baz` + * then the returned result would be `foo -> bar -> baz` and the neighbors of children tags, if they exist. + * To find children of baz use list tags API. + */ + get: operations["project-find-tags-path"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags/tree/search": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * searches tags by name and returns ancestors tree of matched tags + * @description This API searches tags and returns ancestors tree structure of matched tags. + * Consider a tree `foo -> bar -> baz -> quack` and searched for `az` + * then return result would be `foo -> bar -> baz`, to find children of baz use list tags API. + */ + get: operations["project-search-tree-tags"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/targets/keywords_clone": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * clone keywords / tags from target to another + * @description clone keywords / tags from target to another + */ + post: operations["workspaces-clone-keywords-tags"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/url-groups": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of url groups of project + * @description gets a list of url groups that belong to a project + */ + get: operations["url-groups-list"]; + put?: never; + /** + * creates url groups of a project + * @description creates url groups that belong to a project + */ + post: operations["url-groups-create"]; + /** + * deletes an url group of project + * @description deletes an url groups that belong to a project + */ + delete: operations["url-groups-delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/{project_id}/url-groups/{url_group_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * updates an url group of project + * @description updates an url groups that belong to a project + */ + put: operations["url-groups-update"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/projects/targets": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of targets of all live projects by workspace id + * @description gets a list of targets of all live projects by workspace id + */ + get: operations["live-projects-target-list-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/resources": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets workspace resources + * @description gets workspace resources matching with id + */ + get: operations["workspace-resources"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/resources/transfer": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * transfer resources between a child workspace and its parent + * @description transfer resources between a child workspace and its parent. + */ + post: operations["workspace-transfer-resources"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/role": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets user's role in workspace + * @description gets user's role in workspace, also if user is admin/owner in parent it will return parent's role + * user_id is extracted from jwt token + */ + get: operations["user-workspace-role"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/segments": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Gets a list of segments of a workspace + * @description Gets a list of segments that belong to any project of given workspace. + * For description of response fields like conditions and filters, + * see segment create under **Segment** *\/workspaces/{id}/projects/{project_id}/segments [post]* + */ + get: operations["workspace-segment-list-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/service-units/balance": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets service units balance + * @description gets service units balance + */ + get: operations["service-units-balance-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/service-units/transactions": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Gets a list of service credits transactions + * @description Gets a list of service credits transactions + */ + post: operations["service-credits-transactions-list"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/service-units/transactions/{transaction_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Gets a service credits transaction + * @description Gets a service credits transaction + */ + get: operations["service-credits-transaction-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{id}/status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a workspace status + * @description THe status must be "not ready", "created" or "error" + */ + get: operations["workspaces-status-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{workspace_id}/connections": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get workpsace connections + * @description Retrieves a paginated list of workspace connections. + */ + get: operations["workspace-connections"]; + put?: never; + post?: never; + /** + * Delete workspace connections + * @description Deletes multiple workspace connections by their IDs. + */ + delete: operations["workspace-connections-delete"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{workspace_id}/connections/{connection_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get workpsace connection by connection ID + * @description Retrieves the details of workspace connection. + */ + get: operations["workspace-connections-byid"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{workspace_id}/connections/{connection_id}/projects/{project_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Attach a project to a connection + * @description Attaches a specific project to a specific connection. + */ + post: operations["workspace-connection-attach-project"]; + /** + * Detach a project from a connection + * @description Detaches a specific project from a specific connection. + */ + delete: operations["workspace-connection-detach-project"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{workspace_id}/connections/adobe-analytics": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * [DEPRECATED] Create Adobe Analytics connection + * @deprecated + * @description Deprecated: use POST /v2/workspaces/{workspace_id}/connections/adobe-analytics with credential_id in body instead. + */ + post: operations["adobe-analytics-connection-create"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{workspace_id}/connections/adobe-analytics/{connection_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * [DEPRECATED] Update Adobe Analytics connection + * @deprecated + * @description Deprecated: use PUT /v2/workspaces/{workspace_id}/connections/adobe-analytics/{connection_id} with credential_id in body instead. + */ + put: operations["adobe-analytics-connection-update"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{workspace_id}/connections/attach-projects": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Merge connections with projects + * @description Attaches multiple connections to multiple projects in a single transaction. + */ + post: operations["workspace-connections-merge"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{workspace_id}/connections/google-ads": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create Google Ads connection + * @description Creates a new Google Ads connection. + */ + post: operations["ads-connection-create"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{workspace_id}/connections/google-ads/{connection_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Update Google Ads connection + * @description Updates an existing Google Ads connection. + */ + put: operations["ads-connection-update"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{workspace_id}/connections/google-analytics": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create Google Analytics connection + * @description Creates a new Google Analytics connection. + */ + post: operations["analytics-connection-create"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{workspace_id}/connections/google-analytics/{connection_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Update Google Analytics connection + * @description Updates an existing Google Analytics connection. + */ + put: operations["analytics-connection-update"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{workspace_id}/connections/google-console": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create Google Console connection + * @description Creates a new Google Console connection. + */ + post: operations["console-connection-create"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{workspace_id}/connections/google-console/{connection_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Update Google Console connection + * @description Updates an existing Google Console connection. + */ + put: operations["console-connection-update"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{workspace_id}/connections/log-file-analysis": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create Log File Analysis connection + * @description Creates a new Log File Analysis connection. + */ + post: operations["log-file-analysis-connection-create"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{workspace_id}/connections/log-file-analysis/{connection_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Update Log File Analysis connection + * @description Updates an existing Log File Analysis connection. + */ + put: operations["log-file-analysis-connection-update"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{workspace_id}/connections/owners": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get workspace connection owners + * @description Retrieves a list of all users who own workspace connections. + */ + get: operations["workspace-connection-owners"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/{workspace_id}/projects/{project_id}/connections": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get connections for a specific project + * @description Retrieves a list of connection IDs attached to a specific project. + */ + get: operations["workspace-project-connections"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/light": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * lightweight workspaces list + * @description gets a lightweight list of workspaces owned by the user + */ + get: operations["workspaces-light-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/limits": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * [DEPRECATED] use /v1/workspaces/resources instead + * @deprecated + * @description [DEPRECATED] use /v1/workspaces/resources instead + */ + get: operations["total-limits-find"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/resources": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets workspace total resources + * @description gets workspace total resources in a cool new way + */ + get: operations["workspace-resources-find-all"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v1/workspaces/tiers": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * return list of tiers + * @description this API returns list of available tiers + */ + get: operations["tiers-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/admin/workspaces/api/create": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * creates a master workspace along with products and tiers (made for Activation Panel) + * @description creates a master workspace along with products and tiers (made for Activation Panel) + */ + post: operations["activation-panel-workspace-create-master-v2"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/adobe-analytics/credentials": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Creates Adobe Analytics credentials (v2) + * @description Creates new Adobe Analytics credentials and returns an internal credential_id. The adobe_proxy_auth_id is never exposed to the client. + */ + post: operations["adobe-analytics-create-credentials-v2"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/adobe-analytics/credentials/dimensions": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Gets Adobe dimensions (v2) + * @description Gets Adobe dimensions by internal credential_id with ownership check. + */ + get: operations["adobe-analytics-get-dimensions-v2"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/adobe-analytics/credentials/metrics": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Gets Adobe metrics (v2) + * @description Gets Adobe metrics by internal credential_id with ownership check. + */ + get: operations["adobe-analytics-get-metrics-v2"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/adobe-analytics/credentials/metrics-dimensions/validation": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Validate Adobe Analytics metrics and dimensions (v2) + * @description Validates metric and dimension by internal credential_id with ownership check. + */ + post: operations["adobe-analytics-validate-v2"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/adobe-analytics/credentials/reportsuites": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Gets Adobe report suites (v2) + * @description Gets Adobe report suites by internal credential_id with ownership check. + */ + get: operations["adobe-analytics-get-report-suites-v2"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/adobe-analytics/credentials/reportsuites/paginated": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Gets Adobe report suites with pagination (v2) + * @description Gets Adobe report suites by internal credential_id with ownership check and pagination. + */ + get: operations["adobe-analytics-get-report-suites-paginated-v2"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/adobe-analytics/credentials/status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Gets Adobe credentials status (v2) + * @description Gets Adobe credentials status by internal credential_id with ownership check. + */ + get: operations["adobe-analytics-get-status-v2"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/internal/products/{product_id}/workspaces": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * internal API to get workspace IDs by product + * @description internal API to get workspace IDs that have the specified product. + */ + get: operations["internal-product-workspaces-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/internal/transactions": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Creates a transaction for service credits and other transacting product limits + * @description Creates a transaction for service credits and other transacting product limits such as pages of + * SI product. In order to create service credits transactions set `global_limit_key` to `service_units`, + * and leave `product_limit` empty. + * In oder to create pages and other limits' transaction set `product_limit` and leave `global_limit_key` empty + * otherwise it will not accept the inputs. + * `owner_id` is required when `global_limit_key` is set to `service_units`. + * `receipt_id` is also not required when `product_limit` is set. + */ + post: operations["transaction-create-v2"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/internal/transactions/{transaction_id}/refund": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Cancels a transaction and refund the amount + * @description Cancel a transaction and refund the amount + */ + post: operations["transaction-refund-v2"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/internal/workspaces/{id}/ancestors": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * an internal API to get ancestor(parents/grandparents) of a workspace + * @description an internal API to get ancestor(parents/grandparents) of a workspace. + * Ancestors list does not include current workspace. + */ + get: operations["internal-workspaces-ancestor-v2"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/internal/workspaces/{id}/family": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * an internal API to get a list of workspace children + * @description an admin API to get a list of all children, grand children workspaces of a given workspace + */ + get: operations["internal-workspaces-family-v2"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/internal/workspaces/{id}/products/{product_id}/limits": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve Workspace Product Limits + * @description This endpoint retrieves the limits of entities associated with a specific workspace and product. + * It fetches the limits based on the product configuration and returns a map of entity limits + * defined for the specified workspace and product. + */ + get: operations["internal-workspace-product-limits"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/internal/workspaces/{id}/products/{product_id}/projects": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve product projects for a specific workspace accessible by the user. + * @description Retrieves a list of projects associated with a product and workspace the user has access to. + * Requires the `user_id` query parameter to determine the user identity. + * If the user is not a valid enterprise user, the project list will be empty. + */ + get: operations["internal-product-projects-find"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/internal/workspaces/{id}/products/{product_id}/projects/{project_id}/limits": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Retrieve Workspace Product Limits by Project + * @description This endpoint retrieves limits of specific entities in a workspace and product with respect to a project. + * It considers project-level constraints, with the draft count for all entities adjusted to align with the project. + * This enables assessment of how many entities can be added to the project. + */ + get: operations["internal-workspace-product-limits-by-project"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/internal/workspaces/{id}/projects": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of projects in workspace, where user has access if provided in query params + * @description This endpoint retrieves a list of projects available in a specific workspace. + * It allows filtering of projects based on user access roles or permissions. + * Only those projects are returned where the user has access. + * User roles and permissions are determined by the following rules: + * - Workspace Owners, Admins, and Editors have editor-level access to all projects in the workspace. + * - Workspace Viewers are granted view-level access to all projects in the workspace. + * - Specific roles, such as collaborators or content writers, control project-level access. + * Use query parameters to refine the results, including user ID and pagination options. + */ + get: operations["internal-projects-list-v2"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/internal/workspaces/{id}/projects/{project_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a project by ID in a workspace where the user has access, if provided in query params + * @description This endpoint retrieves a project by its ID within the workspace, provided the user has access. + * If the user ID is included in the query parameters, the following rules are applied to evaluate access: + * - Workspace Owners, Admins, and Editors have editor-level access to all projects in the workspace. + * - Workspace Viewers are granted view-level access to all projects in the workspace. + * - Specific access roles for collaborators or content writers apply at the project level. + * If the user does not have an applicable role in the project or workspace, the project will return as not found. + */ + get: operations["internal-project-by-id-v2"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/internal/workspaces/all": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Get all workspaces + * @description Gets a list of all workspaces based on product filter. + */ + get: operations["internal-workspaces-all-list-v2"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/internal/workspaces/projects/all": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of all published projects across all workspaces + * @description This endpoint retrieves a list of all published projects across all workspaces. + * It supports filtering and pagination to refine the results. + */ + get: operations["internal-projects-all-v2-list"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/workspaces/{id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets workspace details with settings and resources (v2) + * @description gets workspace details matching with id including settings and resource limits + */ + get: operations["workspace-details-v2"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/workspaces/{id}/child": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * version 2 of creates a child workspace + * @description Creates a child workspace. If field owner is provided, + * then the existing user will be the owner of the child workspace, + * otherwise the virtual owner of this workspace will be created. + */ + post: operations["workspace-child-create-v2"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/workspaces/{id}/projects": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * List published projects for workspace (V2 lightweight for selectors) + * @description List published projects for workspace with given ID. This is a lightweight V2 version suitable for selectors. + * Returns only published (live) projects. Maximum limit is 100 items per page. + * Supports product-specific default sorting and custom sorting via query parameters. + */ + get: operations["projects-list-v2"]; + put?: never; + /** + * creates a project as drafted + * @description creates a drafted project in a workspace with name and optional domain + */ + post: operations["project-create-v2"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/workspaces/{id}/projects/{product_id}/{project_id}/limits": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets resource limits by project + * @description gets resource limits by project + */ + get: operations["project-limits-get-v2"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/workspaces/{id}/projects/{project_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * updates a project + * @description updates color and title for draft/live projects, updates domain only for draft + */ + put: operations["project-update-v2"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * list of keywords with metrics and tags + * @description gets list of keywords that belong to a target with traffic, volume, position metrics and tags. + */ + post: operations["project-get-keywords-v2"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords/tags": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * updates tags in keywords in batch + * @description updates tags in keywords in workspace, project and target with given IDs. This endpoint allows + * batch operations for updating tag associations with multiple keywords. + */ + put: operations["project-update-keyword-tags-batch-v2"]; + post?: never; + /** + * deletes tags from keywords in batch + * @description deletes tags from keywords in workspace, project and target with given IDs. This endpoint allows batch operations for removing tag associations from multiple keywords. + */ + delete: operations["project-delete-keyword-tags-batch-v2"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/workspaces/{id}/projects/{project_id}/targets/{target_id}/tags": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets a list of all tags of a target with search and filter capabilities + * @description API to return list of all tags that belong to a target + * parent_id param can be used to get tags with specific parent + * query param can be used to filter tags by name + * live flag can be used get live/draft target's tags + * use limit, page for paginated result + */ + get: operations["project-get-tags-with-search"]; + put?: never; + post?: never; + /** + * deletes tags from target in batch + * @description deletes tags from target in workspace, project with given IDs. This endpoint allows batch operations for removing tag. + */ + delete: operations["project-delete-tags-batch-v2"]; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/workspaces/{id}/resources/transfer": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * version 2 transfer resources between a child workspace and its parent + * @description version 2 transfer resources between a child workspace and its parent. + */ + post: operations["workspace-transfer-resources-v2"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/workspaces/{workspace_id}/connections/adobe-analytics": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Create Adobe Analytics connection (v2) + * @description Creates a new Adobe Analytics connection. Uses credential_id in body; ownership is checked by backend. + */ + post: operations["adobe-analytics-connection-create-v2"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v2/workspaces/{workspace_id}/connections/adobe-analytics/{connection_id}": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + /** + * Update Adobe Analytics connection (v2) + * @description Updates an existing Adobe Analytics connection. Uses credential_id in body; ownership is checked by backend. + */ + put: operations["adobe-analytics-connection-update-v2"]; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/v3/workspaces/{id}/projects/{project_id}/targets/{target_id}/keywords": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * list of keywords with metrics and tags and filter by multiple tags + * @description gets list of keywords that belong to a target with traffic, volume, position metrics and tags, + * filter by multiple tags + */ + post: operations["project-get-keywords-v3"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/workspaces/{id}/api-key": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * gets workspace owner's API key + * @description This API gets workspace's owner API key, this API can be used by admin/owner of workspace + * other users can't get admin's API + * 400 is returned if user email is not passed in query + */ + get: operations["workspace-owner-api-key-get"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/workspaces/{id}/projects/{project_id}/segments": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * creates a new segment for a project + * @description creates a new segment in a specified project + * **conditions :** + * `column_name` is one of *url, url_list, keyword, keyword_list, traffic, position, search_volume, + * keyword_intent, country, device, clicks, impressions, ctr, gsc_position* + * `operator` is one of *equal, not_equal, begin, not_begin, end, not_end, contain, + * not_contain, greater, less, greater_equal, less_equal, between, one_of, in_list* + * *url_list* only can be used with *in_list* operator. Only zero or one url_list is allowed in the whole conditions array. + * *keyword_list* only can be used with *in_list* operator. + * **filters :** + * `column_name` is one of *url, url_list, keyword, keyword_list, traffic, position, search_volume, + * keyword_intent, country, device, clicks, impressions, ctr, gsc_position*. + * `operator` is one of *and, or, equal, not_equal, begin, not_begin, end, not_end, contain, + * not_contain, greater, less, greater_equal, less_equal, in_list*. + * `value` is string type. It becomes array of string in case of *in_list* operator as an exceptional case. + * *Notes*: + * * *url_list* only can be used with *in_list* operator. Only zero or one url_list is allowed in the whole filters array. + * * *keyword_list* only can be used with *in_list* operator. + * * *filters* logical operators *and, or* don't have *column_name, value* and must have nested *filters*. + * * *filters* logical operators *and, or* can have maximum depth up to 5 levels from the root. + * * *filters* non-logical operators must have *column_name, value* and must not have nested *filters*. + * * *filters* non-logical operators can have maximum 20 leaves in a single filter object. + */ + post: operations["project-segment-create"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/workspaces/{id}/projects/{project_id}/segments/copy": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Copy segments to other projects + * @description Copy specified segments from current project to other projects within the same workspace + */ + post: operations["segments-copy-to-projects"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/workspaces/{id}/projects/{project_id}/segments/copy-all-from": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Copy all segments from source project to current project + * @description Copy all segments from a source project to the current project within the same workspace + */ + post: { + parameters: { + query?: never; + header?: never; + path: { + /** @description Workspace ID */ + id: string; + /** @description Target Project ID */ + project_id: string; + }; + cookie?: never; + }; + /** @description Copy all segments request */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.CopyAllSegmentsRequest"]; + }; + }; + responses: { + /** @description Success response with copied count */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + [key: string]: unknown; + }; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal server error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/workspaces/{id}/projects/{project_id}/segments/export": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** + * Export segments to CSV or XLSX file + * @description Export segments to a CSV or XLSX file containing segment names and logical expressions + */ + get: operations["segments-export"]; + put?: never; + post?: never; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; + "/workspaces/{id}/projects/{project_id}/segments/import": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + get?: never; + put?: never; + /** + * Import segments from CSV or XLSX file + * @description Import segments from a CSV or XLSX file containing segment names and logical expressions. Format is automatically detected. + */ + post: operations["segments-import"]; + delete?: never; + options?: never; + head?: never; + patch?: never; + trace?: never; + }; +} +export type webhooks = Record; +export interface components { + schemas: { + "handlers.APIUnitsResponse": { + api_units?: number; + }; + "handlers.ActivationPanelAdminActivity": { + action?: string; + admin_email?: string; + admin_id?: number; + corporate_account_id?: number; + created_at?: string; + log_id?: number; + owner_id?: number; + section?: string; + subscription_id?: number; + user_email?: string; + workspace_id?: string; + }; + "handlers.ActivationPanelAdminActivityResponse": { + items?: components["schemas"]["handlers.ActivationPanelAdminActivity"][]; + limit?: number; + page?: number; + total?: number; + }; + "handlers.ActivationPanelBillingStatusCoreAccountId": { + corporate_account_id?: number; + subscription_id?: number; + }; + "handlers.ActivationPanelOwner": { + email?: string; + id?: number; + }; + "handlers.ActivationPanelPermissionsResponse": { + permissions?: components["schemas"]["handlers.activationPanelPermission"][]; + }; + "handlers.ActivationPanelWorkspace": { + corporate_account_id?: number; + created_at?: string; + expiration_date?: string; + icon?: string; + id?: string; + last_updated_at?: string; + owner?: components["schemas"]["handlers.ActivationPanelOwner"]; + parent_id?: string; + partnership_enabled?: boolean; + product_tiers?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductTierWithTimestamps"][]; + status?: string; + subscription_id?: number; + subscription_rank?: number; + title?: string; + }; + "handlers.ActivationPanelWorkspaceListResponse": { + items?: components["schemas"]["handlers.ActivationPanelWorkspace"][]; + page?: number; + total?: number; + }; + "handlers.ActivationPanelWorkspaceMetadata": { + /** @example https://example.com/icon.png */ + icon?: string; + /** @example 550e8400-e29b-41d4-a716-446655440000 */ + id?: string; + /** @example */ + parent_id?: string; + /** @example My Workspace */ + title?: string; + }; + "handlers.ActivationPanelWorkspaceWithLimits": { + api_units?: number; + children?: components["schemas"]["handlers.ActivationPanelWorkspaceWithLimits"][]; + corporate_account_id?: number; + created_at?: string; + expiration_date?: string; + icon?: string; + id?: string; + keywords?: number; + last_updated_at?: string; + owner?: components["schemas"]["handlers.ActivationPanelOwner"]; + pagespeed_urls?: number; + parent_id?: string; + partnership_enabled?: boolean; + product_tiers?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductTierWithTimestamps"][]; + projects?: number; + service_credits?: number; + status?: string; + subscription_id?: number; + subscription_rank?: number; + title?: string; + total_api_units?: number; + total_keywords?: number; + total_pagespeed_urls?: number; + total_projects?: number; + total_service_credits?: number; + total_users?: number; + users?: number; + }; + "handlers.AdminProjectsResponse": { + items?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.AdminProject"][]; + next_cursor?: string; + total?: number; + }; + /** @description Adobe Analytics connection settings */ + "handlers.AdobeAnalyticsConnectionCreateSettings": { + adobe_proxy_auth_id: string; + dimension_date_range_day_name?: string; + dimension_entry_page_url_name: string; + dimension_marketing_channel_detail_name: string; + dimension_marketing_channel_name: string; + global_company_id: string; + metric_bounce_rate_name: string; + metric_target_conversion_name: string; + metric_visits_name: string; + rs_name: string; + rsid: string; + }; + /** @description Adobe Analytics connection settings (v2) with credential_id instead of adobe_proxy_auth_id */ + "handlers.AdobeAnalyticsConnectionCreateSettingsV2": { + credential_id: number; + dimension_date_range_day_name?: string; + dimension_entry_page_url_name: string; + dimension_marketing_channel_detail_name: string; + dimension_marketing_channel_name: string; + global_company_id: string; + metric_bounce_rate_name: string; + metric_target_conversion_name: string; + metric_visits_name: string; + rs_name: string; + rsid: string; + }; + /** @description Adobe Analytics connection settings (public, uses credential_id) */ + "handlers.AdobeAnalyticsConnectionSettings": { + credential_id?: number; + dimension_date_range_day_name?: string; + dimension_entry_page_url_name?: string; + dimension_marketing_channel_detail_name?: string; + dimension_marketing_channel_name?: string; + global_company_id?: string; + metric_bounce_rate_name?: string; + metric_target_conversion_name?: string; + metric_visits_name?: string; + rs_name?: string; + rsid?: string; + }; + /** @description Adobe Analytics connection settings for update request */ + "handlers.AdobeAnalyticsConnectionUpdateSettings": { + adobe_proxy_auth_id: string; + dimension_date_range_day_name?: string; + dimension_entry_page_url_name: string; + dimension_marketing_channel_detail_name: string; + dimension_marketing_channel_name: string; + global_company_id: string; + metric_bounce_rate_name: string; + metric_target_conversion_name: string; + metric_visits_name: string; + rs_name: string; + rsid: string; + }; + /** @description Adobe Analytics connection settings for update (v2) with credential_id */ + "handlers.AdobeAnalyticsConnectionUpdateSettingsV2": { + credential_id: number; + dimension_date_range_day_name?: string; + dimension_entry_page_url_name: string; + dimension_marketing_channel_detail_name: string; + dimension_marketing_channel_name: string; + global_company_id: string; + metric_bounce_rate_name: string; + metric_target_conversion_name: string; + metric_visits_name: string; + rs_name: string; + rsid: string; + }; + /** @description Request body for validating Adobe Analytics metrics and dimensions */ + "handlers.AdobeAnalyticsValidateRequest": { + dimension?: string; + metric: string; + rsid: string; + }; + /** @description Response for Adobe Analytics validation */ + "handlers.AdobeAnalyticsValidateResponse": { + message?: string; + valid?: boolean; + }; + /** @description V2 request body for validating Adobe Analytics metrics and dimensions */ + "handlers.AdobeAnalyticsValidateV2Request": { + credential_id: number; + dimension?: string; + global_company_id: string; + metric: string; + rsid: string; + }; + "handlers.AdobeAnalyticsWorkspaceConnectionCreate": { + project_ids?: string[]; + settings?: components["schemas"]["handlers.AdobeAnalyticsConnectionCreateSettings"]; + }; + /** @description V2 request body for creating Adobe Analytics workspace connection (uses credential_id) */ + "handlers.AdobeAnalyticsWorkspaceConnectionCreateV2": { + project_ids?: string[]; + settings?: components["schemas"]["handlers.AdobeAnalyticsConnectionCreateSettingsV2"]; + }; + "handlers.AdobeAnalyticsWorkspaceConnectionUpdate": { + project_ids?: string[]; + settings?: components["schemas"]["handlers.AdobeAnalyticsConnectionUpdateSettings"]; + }; + /** @description V2 request body for updating Adobe Analytics workspace connection (uses credential_id) */ + "handlers.AdobeAnalyticsWorkspaceConnectionUpdateV2": { + project_ids?: string[]; + settings?: components["schemas"]["handlers.AdobeAnalyticsConnectionUpdateSettingsV2"]; + }; + "handlers.AdobeBulkStatusRequest": { + adobe_proxy_auth_ids: string[]; + }; + "handlers.AdobeBulkStatusResponse": { + statuses?: components["schemas"]["handlers.AdobeCredentialStatusInfo"][]; + }; + "handlers.AdobeCompanyInfo": { + company_name?: string; + global_company_id?: string; + }; + /** @description V2 credential creation response returning internal credential_id */ + "handlers.AdobeCredentialCreatedResponse": { + credential_id?: number; + }; + "handlers.AdobeCredentialStatusInfo": { + adobe_proxy_auth_id?: string; + organizations?: components["schemas"]["handlers.AdobeOrganizationInfo"][]; + status?: string; + }; + "handlers.AdobeCredentialsCreateRequest": { + client_id: string; + client_secret: string; + }; + "handlers.AdobeCredentialsInfo": { + adobe_proxy_auth_id?: string; + }; + "handlers.AdobeOrganizationInfo": { + companies?: components["schemas"]["handlers.AdobeCompanyInfo"][]; + organization_id?: string; + }; + "handlers.AdobeReportSuitesResponse": { + content?: components["schemas"]["handlers.ReportSuite"][]; + page?: number; + size?: number; + totalElements?: number; + totalPages?: number; + }; + "handlers.BaseProject": { + color?: string; + domain?: string; + is_draft?: boolean; + title?: string; + total_invited_members?: number; + }; + "handlers.BasicUserProfile": { + email?: string; + id?: number; + name?: string; + profile_pic?: string; + }; + "handlers.BasicWorkspaceMember": { + email?: string; + id?: number; + name?: string; + profile_pic?: string; + }; + "handlers.BasketResponse": { + /** @description BasketID is the id of the keywords-list */ + basket_id?: number; + /** @description BasketType is the type of the keywords-list */ + basket_type?: string; + /** @description KeywordsCount is the count of keywords in the keywords-list */ + keywords_count?: number; + /** @description Name is the name of the keywords-list */ + name?: string; + /** @description OwnerID is the id of the owner of the keywords-list */ + owner_id?: number; + /** @description Role is the role of the user in the keywords-list. Namely, role/keywords_list/editor, role/keywords_list/viewer */ + role?: components["schemas"]["rbac.RoleName"]; + /** @description SharedWith is the count of users with whom the keywords-list is shared */ + shared_with?: number; + /** @description UpdatedAt is the last update time of the keywords-list */ + updated_at?: string; + /** @description UserID is the id of the user of the keywords-list */ + user_id?: number; + }; + "handlers.BatchDeleteReferenceRequest": { + all?: boolean; + cascade?: boolean; + ids?: string[]; + }; + "handlers.BatchReferenceRequest": { + items: components["schemas"]["handlers.ReferenceRequest"][]; + }; + "handlers.Condition": { + column_name: string; + operator: string; + sub_conditions?: components["schemas"]["handlers.SubCondition"][]; + value: string; + values: string[]; + }; + "handlers.ConsumedUnits": { + users?: number; + }; + "handlers.CopyAllSegmentsRequest": { + source_project_id: string; + }; + "handlers.CopySegmentsRequest": { + segment_ids: string[]; + target_project_ids: string[]; + }; + "handlers.CoreUser": { + activated?: boolean; + company?: string; + email?: string; + id?: number; + locale?: string; + name?: string; + profession?: string; + timezone_new?: string; + }; + "handlers.CoreUserWithAPIKey": { + activated?: boolean; + api_key?: string; + company?: string; + email?: string; + id?: number; + locale?: string; + name?: string; + profession?: string; + timezone_new?: string; + }; + "handlers.Country": { + code?: string; + name?: string; + }; + "handlers.Dimension": { + category?: string; + description?: string; + extra_title_info?: string; + id?: string; + name?: string; + pathable?: boolean; + reportable?: string[]; + segmentable?: boolean; + support?: string[]; + title?: string; + type?: string; + }; + "handlers.Filter": { + column_name?: string; + filters?: components["schemas"]["handlers.Filter"][]; + operator: string; + value: unknown; + }; + "handlers.GetLimitsResponse": { + limits?: components["schemas"]["handlers.Limits"]; + }; + /** @description Google Ads connection settings */ + "handlers.GoogleAdsConnectionSettings": { + customer_id: number; + customer_title: string; + gap_email: string; + gap_user_id: string; + mcc_id: number; + }; + "handlers.GoogleAdsWorkspaceConnectionCreate": { + project_ids?: string[]; + settings?: components["schemas"]["handlers.GoogleAdsConnectionSettings"]; + }; + /** @description Google Analytics connection settings */ + "handlers.GoogleAnalyticsConnectionSettings": { + ga_account: string; + ga_account_title: string; + gap_email: string; + gap_user_id: string; + property: string; + property_title: string; + }; + "handlers.GoogleAnalyticsWorkspaceConnectionCreate": { + project_ids?: string[]; + settings?: components["schemas"]["handlers.GoogleAnalyticsConnectionSettings"]; + }; + "handlers.GoogleConsoleWorkspaceConnectionCreate": { + project_ids?: string[]; + settings?: components["schemas"]["handlers.GoogleSearchConsoleConnectionSettings"]; + }; + /** @description Google Console connection settings */ + "handlers.GoogleSearchConsoleConnectionSettings": { + gap_email: string; + gap_property: string; + gap_user_id: string; + }; + "handlers.HasChildrenResponse": { + has_children?: boolean; + }; + "handlers.IDsForm": { + ids: string[]; + }; + /** @description Adobe Analytics connection settings (internal, uses adobe_proxy_auth_id) */ + "handlers.InternalAdobeAnalyticsConnectionSettings": { + adobe_proxy_auth_id?: string; + dimension_date_range_day_name?: string; + dimension_entry_page_url_name?: string; + dimension_marketing_channel_detail_name?: string; + dimension_marketing_channel_name?: string; + global_company_id?: string; + metric_bounce_rate_name?: string; + metric_target_conversion_name?: string; + metric_visits_name?: string; + rs_name?: string; + rsid?: string; + }; + "handlers.InternalBenchmark": { + benchmark_id?: string; + created_at?: string; + database?: string; + device?: string; + project_id?: string; + target_id?: string; + url?: string; + url_type?: string; + }; + "handlers.InternalESUsersList": { + items?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.User"][]; + page?: number; + total?: number; + }; + "handlers.InternalProfileUpdate": { + availability?: string; + company?: string; + country?: components["schemas"]["handlers.Country"]; + description?: string; + es_type?: string; + jobs?: components["schemas"]["handlers.UserJob"][]; + languages?: string[]; + linked_in?: string; + name?: string; + phone?: string; + profession?: string; + profile_pic?: string; + skills?: string[]; + time_zone?: string; + }; + "handlers.InternalProjectsList": { + items?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.InternalProject"][]; + page?: number; + total?: number; + }; + "handlers.InternalTarget": { + campaign_id?: string; + created_at?: string; + database?: string; + device?: string; + domains?: string[]; + project_domain?: string; + project_id?: string; + target_id?: string; + }; + /** @description A connection for a particular workspace (internal) */ + "handlers.InternalWorkspaceConnectionDetails": { + data_source?: string; + id?: number; + owner?: components["schemas"]["handlers.WorkspaceConnectionOwner"]; + project_ids?: string[]; + settings?: components["schemas"]["handlers.InternalWorkspaceConnectionSettings"]; + status?: components["schemas"]["handlers.WorkspaceConnectionStatus"]; + updated_at?: string; + }; + /** @description Connection settings for internal use (adobe analytics returns adobe_proxy_auth_id) */ + "handlers.InternalWorkspaceConnectionSettings": { + adobe_analytics?: components["schemas"]["handlers.InternalAdobeAnalyticsConnectionSettings"]; + google_ads?: components["schemas"]["handlers.GoogleAdsConnectionSettings"]; + google_analytics?: components["schemas"]["handlers.GoogleAnalyticsConnectionSettings"]; + google_console?: components["schemas"]["handlers.GoogleSearchConsoleConnectionSettings"]; + log_file_analysis?: components["schemas"]["handlers.LogFileAnalysisConnectionSettings"]; + }; + "handlers.Keyword": { + id: components["schemas"]["handlers.KeywordID"]; + /** @description Tags max 5 tags are allowed, each tag can have max 50 characters */ + tags?: string[]; + }; + "handlers.KeywordAddRequest": { + keywords: components["schemas"]["handlers.Keyword"][]; + }; + "handlers.KeywordCountResponse": { + added_keyword_count?: number; + }; + "handlers.KeywordDeleteRequest": { + keyword_ids: components["schemas"]["handlers.KeywordID"][]; + }; + "handlers.KeywordDeleteResponse": { + deleted_keyword_ids?: components["schemas"]["handlers.KeywordID"][]; + }; + "handlers.KeywordID": { + /** @description Database is the database of the keyword. Max 2 characters are allowed */ + database: string; + /** @description Phrase is the keyword name. Max 90 characters are allowed */ + phrase: string; + }; + "handlers.KeywordResponse": { + click_potential?: number; + created_at?: string; + difficulty100?: number; + id: components["schemas"]["handlers.KeywordID"]; + status?: string; + /** @description Tags max 5 tags are allowed, each tag can have max 50 characters */ + tags?: string[]; + updated_at?: string; + volume?: number; + }; + "handlers.KeywordsListCreateRequest": { + /** @description Name of the keywords-list. Max 100 characters are allowed */ + name: string; + }; + "handlers.KeywordsListCreateResponse": { + basket_id?: number; + name?: string; + updated_at?: string; + }; + "handlers.KeywordsListDatabasesResponse": { + databases?: string[]; + }; + "handlers.KeywordsListDeleteRequest": { + basket_ids: number[]; + }; + "handlers.KeywordsListRenameRequest": { + /** @description Name of the keywords-list. Max 100 characters are allowed */ + name: string; + }; + "handlers.KeywordsListRenameResponse": { + basket_id?: number; + name?: string; + updated_at?: string; + }; + "handlers.KeywordsListResponse": { + baskets?: components["schemas"]["handlers.BasketResponse"][]; + page?: number; + total?: number; + }; + "handlers.KeywordsResponse": { + keywords?: components["schemas"]["handlers.KeywordResponse"][]; + page?: number; + total?: number; + }; + "handlers.KeywordsTagsRelationsDeleteForm": { + relations: string[][]; + }; + "handlers.KeywordsTagsRequest": { + keyword_ids: components["schemas"]["handlers.KeywordID"][]; + tags: string[]; + }; + "handlers.KeywordsTagsResponse": { + items?: components["schemas"]["handlers.Keyword"][]; + }; + "handlers.KeywordsTagsUpdateRequest": { + keyword_id: components["schemas"]["handlers.KeywordID"]; + /** @description TagsCreate max 5 tags are allowed, each tag can have max 50 characters */ + tags_create?: string[]; + /** @description TagsDelete max 5 tags are allowed, each tag can have max 50 characters */ + tags_delete?: string[]; + }; + "handlers.Language": { + code?: string; + name?: string; + }; + "handlers.Limits": { + api_units?: components["schemas"]["handlers.UsedLimit"]; + keywords?: components["schemas"]["handlers.UsedLimitWithDrafted"]; + pagespeed_urls?: components["schemas"]["handlers.UsedLimitWithDrafted"]; + projects?: components["schemas"]["handlers.UsedLimitWithDrafted"]; + service_units?: components["schemas"]["handlers.UsedLimit"]; + users?: components["schemas"]["handlers.UsedLimitWithDrafted"]; + }; + "handlers.Location": { + id?: number; + name?: string; + }; + /** @description Log file analysis connection settings */ + "handlers.LogFileAnalysisConnectionSettings": { + connectionName: string; + deliveryType?: string; + fallbackValues?: components["schemas"]["handlers.LogFileAnalysisFallbackValues"]; + ingestSchema?: components["schemas"]["handlers.LogFileAnalysisIngestSchema"]; + }; + /** @description Connector-reported status for a log file analysis connection (internal) */ + "handlers.LogFileAnalysisConnectorStatusPayload": { + message?: string; + /** @enum {string} */ + type: "success" | "error"; + }; + "handlers.LogFileAnalysisFallbackValues": { + hostname?: string; + protocolSchema?: string; + time?: string; + timezone?: string; + }; + "handlers.LogFileAnalysisIngestField": { + extracts?: string[]; + key?: string; + position?: number; + template?: string; + }; + "handlers.LogFileAnalysisIngestParser": { + /** @enum {string} */ + delimiter?: "space" | "pipe" | "tab" | "semicolum" | "comma"; + preProcessing?: components["schemas"]["handlers.LogFileAnalysisPreProcessing"]; + /** @enum {string} */ + type: "json" | "jsonp" | "text"; + }; + "handlers.LogFileAnalysisIngestSchema": { + example?: string; + fields: components["schemas"]["handlers.LogFileAnalysisIngestField"][]; + parser: components["schemas"]["handlers.LogFileAnalysisIngestParser"]; + }; + "handlers.LogFileAnalysisPreProcessing": { + type?: string; + }; + "handlers.LogFileAnalysisWorkspaceConnectionPayload": { + project_ids: string[]; + settings: components["schemas"]["handlers.LogFileAnalysisConnectionSettings"]; + }; + "handlers.Metric": { + allocation?: boolean; + calculated?: boolean; + category?: string; + description?: string; + id?: string; + name?: string; + precision?: number; + segmentable?: boolean; + support?: string[]; + title?: string; + type?: string; + }; + "handlers.NamedKeywordsFindForm": { + keywords: string[]; + }; + "handlers.NamedKeywordsFindResponse": { + keywords?: components["schemas"]["handlers.keyword"][]; + not_found?: string[]; + }; + "handlers.OptionsLimits": { + total_keywords?: number; + total_pagespeed_urls?: number; + total_projects?: number; + total_service_units?: number; + total_users?: number; + used_service_units?: number; + }; + "handlers.PreferredURLsUploadResponse": { + updated_keywords?: number; + }; + "handlers.ProjectConnectionResponse": { + id?: number; + type?: string; + }; + "handlers.ProjectItemResponse": { + color?: string; + core_conflicts?: boolean; + domain?: string; + draft_keywords_count?: number; + draft_project?: components["schemas"]["handlers.projectItemBaseProject"]; + draft_segments_count?: number; + draft_updated?: boolean; + favourite?: boolean; + goals_count?: number; + id?: string; + is_draft?: boolean; + is_out_of_sync?: boolean; + keywords_count?: number; + pagespeed_urls_count?: number; + publish_status?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProjectStatus"]; + published_at?: string; + publishing_failed_reason?: string; + role?: components["schemas"]["rbac.RoleName"]; + segments_count?: number; + shared_with?: number; + targets_stats?: components["schemas"]["handlers.projectItemTargetsStats"]; + title?: string; + }; + "handlers.ReferenceRequest": { + id: string; + references: string[]; + replace?: boolean; + }; + "handlers.ReportSuite": { + calendar_type?: string; + collection_item_type?: string; + currency?: string; + name?: string; + parent_rsid?: string; + rsid?: string; + timezone_zoneinfo?: string; + virtual_report_suite?: boolean; + }; + "handlers.RequiredUserUnitsForm": { + emails: string[]; + }; + "handlers.RequiredUserUnitsResponse": { + required_units?: number; + }; + "handlers.SegmentInternalResponse": { + conditions?: components["schemas"]["handlers.Condition"][]; + created_at?: string; + filters?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.Filter"]; + id?: string; + name?: string; + updated_at?: string; + }; + "handlers.SegmentListByWorkspaceResponse": { + items?: components["schemas"]["handlers.SegmentWithProjectResponse"][]; + page?: number; + total?: number; + }; + "handlers.SegmentListInternalResponse": { + items?: components["schemas"]["handlers.SegmentInternalResponse"][]; + page?: number; + total?: number; + }; + "handlers.SegmentListResponse": { + items?: components["schemas"]["handlers.SegmentResponse"][]; + page?: number; + total?: number; + }; + "handlers.SegmentResponse": { + conditions?: components["schemas"]["handlers.Condition"][]; + created_at?: string; + filters?: components["schemas"]["handlers.Filter"]; + id?: string; + name?: string; + updated_at?: string; + }; + "handlers.SegmentUpsertForm": { + conditions?: components["schemas"]["handlers.Condition"][]; + /** @description todo: after conditions removed this field should be required. */ + filters?: components["schemas"]["handlers.Filter"]; + name: string; + }; + "handlers.SegmentWithProjectResponse": { + conditions?: components["schemas"]["handlers.Condition"][]; + created_at?: string; + filters?: components["schemas"]["handlers.Filter"]; + id?: string; + name?: string; + project_id?: string; + project_name?: string; + updated_at?: string; + }; + "handlers.SubCondition": { + condition: components["schemas"]["handlers.Condition"]; + /** @enum {string} */ + logic_operator: "and" | "or"; + }; + "handlers.TagsTreeResponse": { + items?: components["schemas"]["handlers.tagTreeItem"][]; + }; + "handlers.TagsTreeResponseV2": { + items?: components["schemas"]["handlers.tagTreeItemV2"][]; + }; + "handlers.Target": { + benchmarks_count?: number; + campaign_id?: string; + created_at?: string; + database?: string; + device?: string; + domain?: string; + id?: string; + keywords_count?: number; + language?: components["schemas"]["handlers.TargetLanguage"]; + location?: components["schemas"]["handlers.Location"]; + name?: string; + volume_type?: string; + }; + "handlers.TargetLanguage": { + id?: number; + name?: string; + }; + "handlers.TargetMetadata": { + database?: string; + device?: string; + id?: string; + language?: components["schemas"]["handlers.TargetLanguage"]; + location?: components["schemas"]["handlers.Location"]; + name?: string; + }; + "handlers.TargetsStats": { + draft_targets_count?: number; + target?: components["schemas"]["handlers.TargetMetadata"]; + targets_count?: number; + }; + "handlers.Transaction": { + balance_after?: number; + balance_before?: number; + date?: string; + id?: string; + iid?: number; + operation?: string; + owner_id?: number; + owner_name?: string; + receipt_id?: number; + receipt_name?: string; + reference_transaction_id?: string; + service_credits?: number; + service_id?: string; + service_type?: string; + title?: string; + workspace_id?: string; + }; + "handlers.TransactionsCancelForm": { + service_credits: number; + }; + "handlers.TransactionsCreateForm": { + owner_id: number; + receipt_id?: number; + service_credits: number; + service_id: string; + service_type: string; + title?: string; + workspace_id: string; + }; + "handlers.TransactionsCreateFormV2": { + amount: number; + global_limit_key?: string; + owner_id?: number; + product_limit?: components["schemas"]["handlers.TxProductLimit"]; + receipt_id?: number; + service_id: string; + service_type: string; + title?: string; + workspace_id: string; + }; + "handlers.TransactionsListForm": { + /** + * @description Must have YYYY-MM-DD format + * @example 2023-10-24 + */ + end?: string; + /** + * @description Must be debit or credit + * @example [ + * "debit", + * "credit" + * ] + */ + operations?: string[]; + /** + * @example [ + * 123, + * 456 + * ] + */ + owners?: number[]; + /** + * @example [ + * 123, + * 456 + * ] + */ + receipts?: number[]; + /** + * @description Must be seo_workflow, job_hourly, job_fixed or service_fee + * @example [ + * "seo_workflow", + * "job_hourly", + * "job_fixed", + * "service_fee" + * ] + */ + service_types?: string[]; + /** + * @description Must have YYYY-MM-DD format + * @example 2023-10-24 + */ + start?: string; + /** @example some title */ + title?: string; + /** + * @example [ + * "eab40b25-ec97-4efb-91ea-dbcc6153a721", + * "eab40b25-ec97-4efb-91ea-dbcc6153a722" + * ] + */ + workspaces?: string[]; + }; + "handlers.TransactionsRefundForm": { + amount: number; + }; + "handlers.TxProductLimit": { + /** @example pages */ + enterprise_limit_key?: string; + /** @example si */ + product_id?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductID"]; + }; + "handlers.UsedLimit": { + total?: number; + used?: number; + }; + "handlers.UsedLimitWithDrafted": { + drafted?: number; + total?: number; + used?: number; + }; + "handlers.UserJob": { + description?: string; + end?: string; + id?: string; + name?: string; + start?: string; + }; + "handlers.UserProfile": { + availability?: string; + categories?: string[]; + company?: string; + country?: components["schemas"]["handlers.Country"]; + description?: string; + email?: string; + es_type?: string; + id?: number; + jobs?: components["schemas"]["handlers.UserJob"][]; + languages?: string[]; + linked_in?: string; + locale?: string; + name?: string; + phone?: string; + profession?: string; + profile_pic?: string; + projects?: components["schemas"]["handlers.UserProject"][]; + skills?: string[]; + time_zone?: string; + workspaces?: components["schemas"]["handlers.UserWorkspace"][]; + }; + "handlers.UserProject": { + id?: string; + title?: string; + user_role?: string; + }; + "handlers.UserWorkspace": { + id?: string; + title?: string; + user_role?: string; + }; + "handlers.WorkCategory": { + name?: string; + skills?: string[]; + }; + "handlers.WorkspaceCheckResponse": { + status?: string; + }; + /** @description A connection for a particular workspace */ + "handlers.WorkspaceConnection": { + data_source?: string; + id?: number; + owner?: components["schemas"]["handlers.WorkspaceConnectionOwner"]; + projects?: components["schemas"]["handlers.WorkspaceConnectionProject"][]; + settings?: components["schemas"]["handlers.WorkspaceConnectionSettings"]; + status?: components["schemas"]["handlers.WorkspaceConnectionStatus"]; + updated_at?: string; + }; + /** @description A connection for a particular workspace */ + "handlers.WorkspaceConnectionDetails": { + data_source?: string; + id?: number; + owner?: components["schemas"]["handlers.WorkspaceConnectionOwner"]; + project_ids?: string[]; + settings?: components["schemas"]["handlers.WorkspaceConnectionSettings"]; + status?: components["schemas"]["handlers.WorkspaceConnectionStatus"]; + updated_at?: string; + }; + /** @description A connection for a particular workspace item in the connection list */ + "handlers.WorkspaceConnectionItem": { + data_source?: string; + id?: number; + owner?: components["schemas"]["handlers.WorkspaceConnectionOwner"]; + projects?: components["schemas"]["handlers.WorkspaceConnectionProject"][]; + settings?: components["schemas"]["handlers.WorkspaceConnectionSettings"]; + status?: components["schemas"]["handlers.WorkspaceConnectionStatus"]; + updated_at?: string; + }; + /** @description Workspace connection owner information */ + "handlers.WorkspaceConnectionOwner": { + email?: string; + id?: number; + name?: string; + profile_pic?: string; + }; + "handlers.WorkspaceConnectionProject": { + id?: string; + name?: string; + }; + "handlers.WorkspaceConnectionSettings": { + adobe_analytics?: components["schemas"]["handlers.AdobeAnalyticsConnectionSettings"]; + google_ads?: components["schemas"]["handlers.GoogleAdsConnectionSettings"]; + google_analytics?: components["schemas"]["handlers.GoogleAnalyticsConnectionSettings"]; + google_console?: components["schemas"]["handlers.GoogleSearchConsoleConnectionSettings"]; + log_file_analysis?: components["schemas"]["handlers.LogFileAnalysisConnectionSettings"]; + }; + "handlers.WorkspaceConnectionStatus": { + message?: string; + type?: string; + }; + "handlers.WorkspaceConnectionsAttachItem": { + connection_ids?: number[]; + project_id?: string; + }; + /** @description Request body for workspace connections delete endpoint */ + "handlers.WorkspaceConnectionsDeleteRequest": { + ids?: number[]; + }; + /** @description Response for workspace connections */ + "handlers.WorkspaceConnectionsResponse": { + items?: components["schemas"]["handlers.WorkspaceConnectionItem"][]; + page_number?: number; + total_items?: number; + }; + "handlers.WorkspaceCreateChildForm": { + icon?: string; + owner?: string; + resources: components["schemas"]["handlers.WorkspaceResources"]; + title: string; + }; + "handlers.WorkspaceListItem": { + created_at?: string; + expires_at?: string; + icon?: string; + id?: string; + is_admin?: boolean; + is_master?: boolean; + keywords_count?: number; + last_updated_at?: string; + owner?: string; + pagespeed_urls_count?: number; + parent?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceParent"]; + parent_id?: string; + partnership_enabled?: boolean; + product_tiers?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductTier"][]; + products?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductID"][]; + published_projects_count?: number; + resources?: { + [key: string]: { + [key: string]: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.EntityLimit"]; + }; + }; + role?: string; + settings?: components["schemas"]["handlers.workspaceSettings"]; + shared_with?: number; + status?: string; + subscription_tier?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.Tier"]; + title?: string; + users?: number; + }; + "handlers.WorkspaceMember": { + email?: string; + id?: number; + is_all_projects_access?: boolean; + is_home_workspace?: boolean; + membership_status?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.MembershipStatus"]; + profile_pic?: string; + projects?: components["schemas"]["handlers.WorkspaceMemberProject"][]; + role?: string; + }; + "handlers.WorkspaceMemberProject": { + id?: string; + title?: string; + }; + "handlers.WorkspaceMemberUpsertResponse": { + consumed_units?: components["schemas"]["handlers.ConsumedUnits"]; + }; + "handlers.WorkspaceResources": { + api_units?: number; + keywords?: number; + pagespeed_urls?: number; + projects?: number; + service_credits?: number; + users?: number; + }; + "handlers.WorkspaceResourcesTransferV2Form": { + resources?: components["schemas"]["handlers.createWorkspaceV2Resources"]; + }; + "handlers.activationPanelAIOPromptSettingsForm": { + /** @enum {string} */ + prompt_type: "daily" | "weekly"; + /** @enum {unknown} */ + weekly_prompts_day_of_week?: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday"; + }; + "handlers.activationPanelAIOPromptSettingsGetForm": { + prompt_type?: string; + weekly_prompts_day_of_week?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.DayOfWeek"]; + }; + /** @enum {string} */ + "handlers.activationPanelPermission": "workspace.edit" | "workspace.delete" | "workspace.view" | "workspace.add"; + "handlers.activationPanelSubscriptionForm": { + workspace_id: string; + }; + "handlers.activationPanelWorkspaceCreateForm": { + email: string; + icon?: string; + /** @default false */ + partnership_enabled: boolean; + product_tiers?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductTierIDs"][]; + title: string; + }; + "handlers.adminProjectTransferForm": { + projects: components["schemas"]["handlers.transferProductProject"][]; + target_workspace_id: string; + target_workspace_owner_id: number; + }; + "handlers.adminSmbProjectMigrationForm": { + account_ids: number[]; + }; + "handlers.adminWorkspaceCreateForm": { + icon?: string; + owner_email?: string; + parent_id: string; + resources: components["schemas"]["handlers.WorkspaceResources"]; + title: string; + }; + "handlers.adminWorkspaceUpsertForm": { + icon?: string; + /** @default false */ + partnership_enabled: boolean; + product_tiers?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductTierIDs"][]; + title: string; + user_id: number; + }; + "handlers.ai": { + prompts_count?: number; + published_projects_count?: number; + }; + "handlers.aiProductResources": { + projects?: number; + prompts?: number; + }; + "handlers.basicWorkspacesMembersResponse": { + items?: components["schemas"]["handlers.BasicWorkspaceMember"][]; + }; + "handlers.batchWorkspaceMembersRequest": { + include_parental_admins?: boolean; + workspace_ids: string[]; + }; + "handlers.benchmark": { + color?: string; + id?: string; + sync_enabled?: boolean; + tags?: components["schemas"]["handlers.benchmarkTags"]; + url?: string; + }; + "handlers.benchmarkBulkUpdateForm": { + ids: string[]; + sync_enabled?: boolean; + tags?: string[]; + }; + "handlers.benchmarkCloneForm": { + dst_target_id: string; + src_target_id: string; + }; + "handlers.benchmarkCreateForm": { + color?: string; + sync_enabled?: boolean; + tags?: string[]; + url: string; + }; + "handlers.benchmarkRemoveTagsForm": { + benchmark_ids: string[]; + tag_ids: string[]; + }; + "handlers.benchmarkTags": { + [key: string]: string[]; + }; + "handlers.benchmarkUpdateForm": { + color?: string; + sync_enabled?: boolean; + tags?: string[]; + url?: string; + }; + "handlers.benchmarksDeleteForm": { + ids: string[]; + }; + "handlers.benchmarksListResponse": { + items?: components["schemas"]["handlers.benchmark"][]; + page?: number; + total?: number; + }; + "handlers.billingStatusResponse": { + expire_date?: string; + has_product?: boolean; + is_paid?: boolean; + subscription_id?: number; + user_id?: number; + }; + "handlers.ci": { + pages?: number; + published_projects_count?: number; + }; + "handlers.createWorkspaceV2Form": { + icon?: string; + owner?: string; + parentID?: string; + resources: components["schemas"]["handlers.createWorkspaceV2Resources"]; + title: string; + userID?: number; + }; + "handlers.createWorkspaceV2Resources": { + ai?: components["schemas"]["handlers.aiProductResources"]; + general?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesGlobal"]; + product_resources?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceProductResources"][]; + seo?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesSEO"]; + }; + "handlers.getServiceUnitsResponse": { + available?: number; + total?: number; + /** @description Deprecated: This is left here to ensure backward compatibility. Use Available field instead. */ + units?: number; + }; + "handlers.goalImportForm": { + source_project_id: string; + }; + "handlers.goalImportReponse": { + total_imported_goals?: number; + }; + "handlers.goalMetricsResponse": { + items?: components["schemas"]["handlers.goalsMetric"][]; + total?: number; + }; + "handlers.goalUpsertReponse": { + /** + * Format: date + * @description Is set when the goal is objective + * @example 2024-01-01 + */ + date_from?: string; + /** + * Format: date + * @description Is set when the goal is objective + * @example 2024-02-01 + */ + date_to?: string; + /** @description We can have monthly goals now */ + date_type?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.GoalDateType"]; + /** @description ID is the goal ID in the system */ + id: string; + /** @description May be null if we have only upper value in the threshold */ + lower_value?: number; + metric_id: string; + name: string; + /** + * @description ### Single objective value + * `value` is used for `single` `objective_value_type` + * ### Multiple objective values + * `values` is used for `multiple` `objective_value_type` + */ + objective_value_type?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.GoalObjectiveValueType"]; + /** + * @description ### Threshold goal + * `upper_value` and `lower_value` are used for threshold goals + * ### Objective goal + * `date_type`, `date_from`, `date_to`, `value`, `objective_value_type`, `values` are used for objective goals + */ + type: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.GoalType"]; + /** @description Is set when the goal is threshold */ + upper_value?: number; + /** @description Set when the goal is single objective */ + value?: number; + /** @description Set when the goal is multiple objective */ + values?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.GoalValue"][]; + }; + "handlers.goalsDeleteForm": { + ids?: string[]; + }; + "handlers.goalsListResponse": { + items?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.Goal"][]; + page?: number; + total?: number; + }; + "handlers.goalsMetric": { + id?: string; + name?: string; + }; + "handlers.goalsUpsertForm": { + /** + * Format: date + * @description Is set when the goal is objective + * @example 2024-01-01 + */ + date_from?: string; + /** + * Format: date + * @description Is set when the goal is objective + * @example 2024-02-01 + */ + date_to?: string; + /** @description We can have monthly goals now */ + date_type?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.GoalDateType"]; + /** @description May be null if we have only upper value in the threshold */ + lower_value?: number; + metric_id: string; + name: string; + /** + * @description ### Single objective value + * `value` is used for `single` `objective_value_type` + * ### Multiple objective values + * `values` is used for `multiple` `objective_value_type` + */ + objective_value_type?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.GoalObjectiveValueType"]; + /** + * @description ### Threshold goal + * `upper_value` and `lower_value` are used for threshold goals + * ### Objective goal + * `date_type`, `date_from`, `date_to`, `value`, `objective_value_type`, `values` are used for objective goals + */ + type: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.GoalType"]; + /** @description Is set when the goal is threshold */ + upper_value?: number; + /** @description Set when the goal is single objective */ + value?: number; + /** @description Set when the goal is multiple objective */ + values?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.GoalValue"][]; + }; + "handlers.internalGoal": { + /** + * Format: date + * @description Set when the goal is objective, will contain dates between date_from and date_to + * @example 2024-01-01 + */ + date?: string; + /** + * Format: date + * @description Set when the goal is objective, may be set when the goal is threshold + * @example 2024-01-01 + */ + date_from?: string; + /** + * Format: date + * @description Set when the goal is objective, may be set when the goal is threshold + * @example 2024-02-01 + */ + date_to?: string; + /** @description We can have monthly goals now */ + date_type?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.GoalDateType"]; + id: string; + metric_id: string; + metric_name: string; + name: string; + project_domain: string; + type: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.GoalType"]; + /** @description Is set to upper value when type is threshold and objective value when type is objective */ + value?: number; + }; + "handlers.internalGoalsListResponse": { + items?: components["schemas"]["handlers.internalGoal"][]; + page?: number; + total?: number; + }; + "handlers.internalWorkspace": { + created_at?: string; + icon?: string; + id?: string; + is_master?: boolean; + last_updated_at?: string; + parent?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceParent"]; + parent_id?: string; + partnership_enabled?: boolean; + product_tiers?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductTier"][]; + products?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductID"][]; + status?: string; + subscription_tier?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.Tier"]; + title?: string; + }; + "handlers.keyword": { + id?: string; + name?: string; + position?: number; + preferred_url?: string; + volume?: number; + }; + "handlers.keywordListAddMembersForm": { + members: string[]; + role: string; + }; + "handlers.keywordWithTargetID": { + id?: string; + name?: string; + position?: number; + preferred_url?: string; + target_id?: string; + volume?: number; + }; + "handlers.keywordsCloneForm": { + dst_target_id: string; + src_target_id: string; + }; + "handlers.keywordsCreateForm": { + keywords: string[]; + tag_ids?: string[]; + }; + "handlers.keywordsCreateResponse": { + duplicate_count?: number; + items?: components["schemas"]["handlers.keyword"][]; + }; + "handlers.keywordsDeleteForm": { + all?: boolean; + ids?: string[]; + }; + "handlers.keywordsListDeleteMembersForm": { + members: string[]; + }; + "handlers.keywordsListMemberUpdateRoleForm": { + member: string; + role: string; + }; + "handlers.keywordsListMembersResponse": { + items?: components["schemas"]["handlers.member"][]; + page?: number; + total?: number; + }; + "handlers.keywordsListResponse": { + items?: components["schemas"]["handlers.keyword"][]; + page?: number; + total?: number; + }; + "handlers.keywordsRelatedTagsForm": { + ids: string[]; + }; + "handlers.keywordsUpdateForm": { + ids: string[]; + url?: string; + }; + "handlers.keywordsUpdateResponse": { + ids: string[]; + url?: string; + }; + "handlers.member": { + email?: string; + id?: number; + profile_pic?: string; + role?: string; + }; + "handlers.pagespeedAddNamedKeywordsForm": { + keywords?: string[]; + target_id?: string; + }; + "handlers.pagespeedAddNamedKeywordsResponse": { + keywords?: components["schemas"]["handlers.keyword"][]; + not_found?: string[]; + }; + "handlers.pagespeedCrawler": { + crawler_type?: string; + device?: string; + id?: string; + interval?: string; + name?: string; + status?: string; + total_keywords?: number; + total_urls?: number; + }; + "handlers.pagespeedCrawlerAddKeywordsForm": { + keywords: components["schemas"]["handlers.pagespeedKeywordsForm"][]; + }; + "handlers.pagespeedCrawlerAddURLsForm": { + urls: string[]; + }; + "handlers.pagespeedCrawlerCreateForm": { + /** @enum {string} */ + crawler_type?: "keywords" | "urls"; + device: string; + /** @enum {string} */ + interval?: "once" | "daily" | "weekly" | "week-days" | "bi-weekly" | "monthly"; + invisible?: boolean; + keyword_names?: string[]; + keywords?: components["schemas"]["handlers.pagespeedKeywordsForm"][]; + name: string; + target_id?: string; + urls?: string[]; + }; + "handlers.pagespeedCrawlerCreateResponse": { + crawler_type?: string; + device?: string; + id?: string; + interval?: string; + keywords?: components["schemas"]["handlers.keyword"][]; + name?: string; + not_found_keywords?: string[]; + status?: string; + total_keywords?: number; + total_urls?: number; + urls?: components["schemas"]["handlers.pagespeedURL"][]; + }; + "handlers.pagespeedCrawlerUpdateForm": { + /** @enum {string} */ + interval?: "once" | "daily" | "weekly" | "week-days" | "bi-weekly" | "monthly"; + name: string; + }; + "handlers.pagespeedCrawlerVisibleForm": { + device: string; + /** @enum {string} */ + interval?: "once" | "daily" | "weekly" | "week-days" | "bi-weekly" | "monthly"; + name: string; + }; + "handlers.pagespeedCrawlersInternalListResponse": { + items?: components["schemas"]["handlers.pagespeedInternalCrawler"][]; + page?: number; + total?: number; + }; + "handlers.pagespeedCrawlersListResponse": { + items?: components["schemas"]["handlers.pagespeedCrawler"][]; + page?: number; + total?: number; + }; + "handlers.pagespeedDeleteForm": { + ids: string[]; + }; + "handlers.pagespeedInternalCrawler": { + crawler_type?: string; + device?: string; + id?: string; + interval?: string; + name?: string; + project_id?: string; + status?: string; + total_keywords?: number; + total_urls?: number; + }; + "handlers.pagespeedInternalKeywordsListResponse": { + items?: components["schemas"]["handlers.keywordWithTargetID"][]; + page?: number; + total?: number; + }; + "handlers.pagespeedKeywordsDeleteForm": { + ids: string[]; + }; + "handlers.pagespeedKeywordsForm": { + ids: string[]; + target_id: string; + }; + "handlers.pagespeedKeywordsListResponse": { + items?: components["schemas"]["handlers.keyword"][]; + page?: number; + total?: number; + }; + "handlers.pagespeedURL": { + id?: string; + url?: string; + }; + "handlers.pagespeedURLsDeleteForm": { + ids: string[]; + }; + "handlers.pagespeedURLsListResponse": { + items?: components["schemas"]["handlers.pagespeedURL"][]; + page?: number; + total?: number; + }; + "handlers.productTiersGroup": { + product?: string; + tiers?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.Tier"][]; + }; + "handlers.profileUpdate": { + availability?: string; + company?: string; + country?: components["schemas"]["handlers.Country"]; + description?: string; + jobs?: components["schemas"]["handlers.UserJob"][]; + languages?: string[]; + linked_in?: string; + name?: string; + phone?: string; + profession?: string; + profile_pic?: string; + skills?: string[]; + time_zone?: string; + }; + "handlers.projectAddMembersForm": { + members: string[]; + /** @description for backward compatibility no validate is required and assign SEO in case its empty */ + product_id?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductID"]; + role: string; + }; + "handlers.projectCreateForm": { + color?: string; + domain: string; + title: string; + }; + "handlers.projectDeleteMembersForm": { + members: string[]; + /** @description for backward compatibility no validate is required and assign SEO in case its empty */ + product_id?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductID"]; + }; + "handlers.projectDeleteResponse": { + id?: string; + }; + "handlers.projectFavouriteSetForm": { + favourite?: boolean; + }; + "handlers.projectItem": { + color?: string; + core_conflicts?: boolean; + domain?: string; + draft_keywords_count?: number; + draft_pagespeed_urls_count?: number; + draft_project?: components["schemas"]["handlers.BaseProject"]; + draft_segments_count?: number; + draft_updated?: boolean; + favourite?: boolean; + goals_count?: number; + id?: string; + is_draft?: boolean; + is_out_of_sync?: boolean; + keywords_count?: number; + pagespeed_urls_count?: number; + publish_status?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProjectStatus"]; + published_at?: string; + publishing_failed_reason?: string; + role?: components["schemas"]["rbac.RoleName"]; + segments_count?: number; + shared_with?: number; + targets_stats?: components["schemas"]["handlers.TargetsStats"]; + title?: string; + total_invited_members?: number; + }; + "handlers.projectItemBaseProject": { + color?: string; + domain?: string; + is_draft?: boolean; + title?: string; + }; + "handlers.projectItemLanguage": { + id?: number; + name?: string; + }; + "handlers.projectItemLocation": { + id?: number; + name?: string; + }; + "handlers.projectItemTargetMetadata": { + database?: string; + device?: string; + id?: string; + language?: components["schemas"]["handlers.projectItemLanguage"]; + location?: components["schemas"]["handlers.projectItemLocation"]; + name?: string; + }; + "handlers.projectItemTargetsStats": { + target?: components["schemas"]["handlers.projectItemTargetMetadata"]; + targets_count?: number; + }; + "handlers.projectListResponse": { + items?: components["schemas"]["handlers.projectItem"][]; + page?: number; + total?: number; + }; + "handlers.projectListV2Response": { + items?: components["schemas"]["handlers.ProjectItemResponse"][]; + page?: number; + total?: number; + }; + "handlers.projectMembersResponse": { + items?: components["schemas"]["handlers.member"][]; + page?: number; + total?: number; + }; + "handlers.projectUpdateForm": { + color?: string; + title?: string; + }; + "handlers.projectUpsertResponse": { + color?: string; + domain?: string; + id?: string; + is_draft?: boolean; + publish_status?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProjectStatus"]; + title?: string; + }; + "handlers.projectV2CreateForm": { + color?: string; + domain?: string; + title: string; + }; + "handlers.projectV2UpdateForm": { + color?: string; + domain?: string; + title?: string; + }; + "handlers.projectsGetResponse": { + benchmarks_count?: number; + color?: string; + core_id?: number; + crawlers_count?: number; + created_at?: string; + domain?: string; + draft_updated?: boolean; + favourite?: boolean; + goals_count?: number; + id?: string; + is_draft?: boolean; + is_out_of_sync?: boolean; + keywords_count?: number; + pagespeed_urls_count?: number; + preferred_urls_count?: number; + publish_status?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProjectStatus"]; + published_at?: string; + publishing_failed_reason?: string; + role?: components["schemas"]["rbac.RoleName"]; + segments_count?: number; + shared_with?: number; + targets_count?: number; + targets_stats?: components["schemas"]["handlers.TargetsStats"]; + title?: string; + }; + "handlers.seo": { + keywords_count?: number; + pagespeed_urls_count?: number; + published_projects_count?: number; + }; + "handlers.setServiceUnitsForm": { + units?: number; + }; + "handlers.si": { + logfile?: number; + pages?: number; + projects?: number; + }; + "handlers.tag": { + id?: string; + name?: string; + }; + "handlers.tagItem": { + children_count?: number; + id?: string; + keywords_count?: number; + name?: string; + }; + "handlers.tagTreeItem": { + children?: components["schemas"]["handlers.tagTreeItem"][]; + children_count?: number; + id?: string; + keywords_count?: number; + name?: string; + parent_id?: string; + }; + "handlers.tagTreeItemV2": { + children?: components["schemas"]["handlers.tagTreeItemV2"][]; + id?: string; + name?: string; + parent_id?: string; + }; + "handlers.tagWithSearchResponse": { + id?: string; + keywords_count?: number; + name?: string; + parent_id?: string; + }; + "handlers.taggedKeywordsCreateForm": { + keywords: { + [key: string]: string[]; + }; + }; + "handlers.tagsCreateForm": { + names: string[]; + parent_id?: string; + }; + "handlers.tagsDeleteForm": { + delete_keywords?: boolean; + ids: string[]; + }; + "handlers.tagsList": { + [key: string]: components["schemas"]["handlers.tagItem"]; + }; + "handlers.tagsListResponse": { + items?: components["schemas"]["handlers.tagsList"]; + page?: number; + total?: number; + }; + "handlers.tagsListWithSearchResponse": { + items?: components["schemas"]["handlers.tagWithSearchResponse"][]; + page?: number; + total?: number; + }; + "handlers.tagsUpdateForm": { + name: string; + parent_id?: string; + }; + "handlers.targetCreateForm": { + targets: components["schemas"]["handlers.targetForm"][]; + }; + "handlers.targetForm": { + device: string; + language_id: number; + location_id: number; + name: string; + /** @enum {string} */ + volume_type?: "national" | "regional" | "local"; + }; + "handlers.targetListResponse": { + items?: components["schemas"]["handlers.Target"][]; + page?: number; + total?: number; + }; + "handlers.tiersResponse": { + products?: components["schemas"]["handlers.productTiersGroup"][]; + tiers?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.Tier"][]; + }; + "handlers.transactionsListResponse": { + items?: components["schemas"]["handlers.Transaction"][]; + page?: number; + total?: number; + }; + "handlers.transferProductProject": { + product_id: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductID"]; + project_ids: string[]; + }; + "handlers.urlGroup": { + id?: string; + name?: string; + url?: string; + }; + "handlers.urlGroupsDeleteForm": { + ids: string[]; + }; + "handlers.urlGroupsListResponse": { + items?: components["schemas"]["handlers.urlGroup"][]; + page?: number; + total?: number; + }; + "handlers.urlGroupsUpsertForm": { + name: string; + url: string; + }; + "handlers.userIDsRequest": { + user_ids: number[]; + }; + "handlers.usersCreateForm": { + email: string; + es_type: string; + workspace?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceUpsert"]; + }; + "handlers.workspaceAddMembersForm": { + members: string[]; + role: string; + }; + "handlers.workspaceAddMembersResponse": { + emails?: string[]; + errors?: { + [key: string]: unknown; + }; + limit_exceeded?: boolean; + message?: string; + }; + "handlers.workspaceCheckMembershipInAncestryResponse": { + page?: number; + total?: number; + user_has_membership?: boolean; + }; + "handlers.workspaceCheckRolesInAncestryResponse": { + page?: number; + total?: number; + user_has_role?: boolean; + }; + "handlers.workspaceDeleteMembersForm": { + members: string[]; + }; + "handlers.workspaceDeleteResponse": { + id?: string; + }; + "handlers.workspaceIDsResponse": { + workspace_ids?: string[]; + }; + "handlers.workspaceLightResponse": { + icon?: string; + id?: string; + is_admin?: boolean; + is_master?: boolean; + parent?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceParent"]; + parent_id?: string; + partnership_enabled?: boolean; + product_tiers?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductTier"][]; + products?: string[]; + role?: string; + shared_with?: number; + status?: string; + title?: string; + users?: number; + }; + "handlers.workspaceMemberUpdateRoleForm": { + member: string; + role: string; + }; + "handlers.workspaceOwnershipEligibilityResponse": { + user?: components["schemas"]["handlers.workspaceOwnershipUser"]; + valid?: boolean; + }; + "handlers.workspaceOwnershipUser": { + email?: string; + name?: string; + profile_pic?: string; + }; + "handlers.workspaceProduct": { + id?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductID"]; + is_transferable?: boolean; + name?: string; + }; + "handlers.workspaceResponse": { + created_at?: string; + expires_at?: string; + icon?: string; + id?: string; + is_admin?: boolean; + is_master?: boolean; + keywords_count?: number; + last_updated_at?: string; + owner?: string; + pagespeed_urls_count?: number; + parent?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceParent"]; + parent_id?: string; + partnership_enabled?: boolean; + product_tiers?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductTier"][]; + products?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductID"][]; + published_projects_count?: number; + role?: string; + status?: string; + subscription_tier?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.Tier"]; + title?: string; + users?: number; + }; + "handlers.workspaceSettings": { + ai?: components["schemas"]["handlers.ai"]; + ci?: components["schemas"]["handlers.ci"]; + seo?: components["schemas"]["handlers.seo"]; + si?: components["schemas"]["handlers.si"]; + }; + "handlers.workspaceUpdateIconForm": { + url?: string; + }; + "handlers.workspaceUpsertForm": { + icon?: string; + title: string; + }; + "handlers.workspaceUserAPIKey": { + api_key?: string; + }; + "handlers.workspaceUserRole": { + role?: components["schemas"]["rbac.RoleName"]; + }; + "handlers.workspaceV2Response": { + created_at?: string; + expires_at?: string; + icon?: string; + id?: string; + is_admin?: boolean; + is_master?: boolean; + keywords_count?: number; + last_updated_at?: string; + owner?: string; + pagespeed_urls_count?: number; + parent?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceParent"]; + parent_id?: string; + partnership_enabled?: boolean; + product_tiers?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductTier"][]; + products?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductID"][]; + published_projects_count?: number; + resources?: { + [key: string]: { + [key: string]: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.EntityLimit"]; + }; + }; + role?: string; + settings?: components["schemas"]["handlers.workspaceSettings"]; + shared_with?: number; + status?: string; + subscription_tier?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.Tier"]; + title?: string; + users?: number; + }; + "handlers.workspacesListResponse": { + items?: components["schemas"]["handlers.WorkspaceListItem"][]; + page?: number; + total?: number; + }; + "handlers.workspacesMembersResponse": { + items?: components["schemas"]["handlers.WorkspaceMember"][]; + page?: number; + total?: number; + }; + "http_server.BasicResponse": { + errors?: { + [key: string]: unknown; + }; + message?: string; + }; + "page-engine-backend_internal_usermanager_core_domain.AdminProject": { + created_at?: string; + domain?: string; + id?: string; + is_transferable?: boolean; + keywords?: number; + last_updated_at?: string; + max_pages_per_crawler?: number; + owner?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProjectOwner"]; + pages?: number; + pagespeed_urls?: number; + product_type?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductID"]; + prompts?: number; + status?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProjectStatus"]; + title?: string; + }; + /** @enum {string} */ + "page-engine-backend_internal_usermanager_core_domain.DayOfWeek": "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday"; + "page-engine-backend_internal_usermanager_core_domain.EntityLimit": { + drafted?: number; + live?: number; + remaining?: number; + total?: number; + }; + /** @enum {string} */ + "page-engine-backend_internal_usermanager_core_domain.EsType": "client" | "freelancer" | "pro-serve" | "csm" | "sales"; + "page-engine-backend_internal_usermanager_core_domain.Filter": { + col?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.SegmentColumn"]; + filters?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.Filter"][]; + op?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.FilterOperator"]; + value?: unknown; + }; + /** @enum {string} */ + "page-engine-backend_internal_usermanager_core_domain.FilterOperator": "and" | "or" | "eq" | "neq" | "begins_with" | "not_begins_with" | "ends_with" | "not_ends_with" | "contains" | "not_contains" | "gt" | "lt" | "gte" | "lte" | "in"; + "page-engine-backend_internal_usermanager_core_domain.General": { + resources?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.GeneralResources"]; + }; + "page-engine-backend_internal_usermanager_core_domain.GeneralResources": { + api_units?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.UsedLimit"]; + service_credits?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.UsedLimit"]; + service_units?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.UsedLimit"]; + users?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.UsedLimit"]; + }; + /** @enum {string} */ + "page-engine-backend_internal_usermanager_core_domain.GlobalLimitType": "service_units"; + "page-engine-backend_internal_usermanager_core_domain.Goal": { + /** + * Format: date + * @description Is set when the goal is objective + * @example 2024-01-01 + */ + date_from?: string; + /** + * Format: date + * @description Is set when the goal is objective + * @example 2024-02-01 + */ + date_to?: string; + /** @description We can have monthly goals now */ + date_type?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.GoalDateType"]; + /** @description ID is the goal ID in the system */ + id: string; + /** @description May be null if we have only upper value in the threshold */ + lower_value?: number; + metric_id: string; + name: string; + /** + * @description ### Single objective value + * `value` is used for `single` `objective_value_type` + * ### Multiple objective values + * `values` is used for `multiple` `objective_value_type` + */ + objective_value_type?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.GoalObjectiveValueType"]; + /** + * @description ### Threshold goal + * `upper_value` and `lower_value` are used for threshold goals + * ### Objective goal + * `date_type`, `date_from`, `date_to`, `value`, `objective_value_type`, `values` are used for objective goals + */ + type: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.GoalType"]; + /** @description Is set when the goal is threshold */ + upper_value?: number; + /** @description Set when the goal is single objective */ + value?: number; + /** @description Set when the goal is multiple objective */ + values?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.GoalValue"][]; + }; + /** @enum {string} */ + "page-engine-backend_internal_usermanager_core_domain.GoalDateType": "month" | "quarter"; + /** @enum {string} */ + "page-engine-backend_internal_usermanager_core_domain.GoalObjectiveValueType": "single" | "multiple"; + /** @enum {string} */ + "page-engine-backend_internal_usermanager_core_domain.GoalType": "threshold" | "objective"; + "page-engine-backend_internal_usermanager_core_domain.GoalValue": { + /** + * Format: date + * @example 2024-01-01 + */ + date: string; + value: number; + }; + "page-engine-backend_internal_usermanager_core_domain.InternalProject": { + benchmarks?: number; + core_id?: number; + crawlers?: number; + domain?: string; + id?: string; + keywords?: number; + preferred_urls?: number; + published_at?: string; + publishing_failed_reason?: string; + segments?: number; + tags?: number; + targets?: number; + title?: string; + }; + "page-engine-backend_internal_usermanager_core_domain.InternalProjectV2": { + core_id?: number; + domain?: string; + id?: string; + published_at?: string; + role?: components["schemas"]["rbac.RoleName"]; + title?: string; + workspace_id?: string; + }; + "page-engine-backend_internal_usermanager_core_domain.InternalProjectV2List": { + projects?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.InternalProjectV2"][]; + total?: number; + }; + "page-engine-backend_internal_usermanager_core_domain.KeywordMetrics": { + position?: number; + search_volume?: number; + traffic?: number; + }; + "page-engine-backend_internal_usermanager_core_domain.KeywordTags": { + items?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.TagWithSearch"][]; + total?: number; + }; + "page-engine-backend_internal_usermanager_core_domain.KeywordWithMetrics": { + id?: string; + name?: string; + position?: number; + search_volume?: number; + tags?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.KeywordTags"]; + traffic?: number; + url?: string; + }; + "page-engine-backend_internal_usermanager_core_domain.KeywordsWithMetricsResponse": { + all_total?: number; + items?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.KeywordWithMetrics"][]; + page?: number; + total?: number; + unassigned?: number; + }; + "page-engine-backend_internal_usermanager_core_domain.KeywordsWithTagsRequestAndTagID": { + draft?: boolean; + filters?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.MetricRangeFilter"][]; + limit?: number; + page?: number; + search?: string; + sort?: string; + sort_dir?: string; + tag_id?: string; + unassigned_only?: boolean; + with_hierarchy?: boolean; + }; + "page-engine-backend_internal_usermanager_core_domain.KeywordsWithTagsRequestAndTagIDs": { + draft?: boolean; + filters?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.MetricRangeFilter"][]; + limit?: number; + page?: number; + search?: string; + sort?: string; + sort_dir?: string; + tag_ids?: string[]; + unassigned_only?: boolean; + with_hierarchy?: boolean; + }; + /** @enum {string} */ + "page-engine-backend_internal_usermanager_core_domain.MembershipStatus": "member" | "guest" | "basic"; + "page-engine-backend_internal_usermanager_core_domain.MetricRangeFilter": { + field?: string; + from?: number; + to?: number; + }; + "page-engine-backend_internal_usermanager_core_domain.NewWorkspaceResources": { + general?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.General"]; + product_resources?: { + [key: string]: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductResources"]; + }; + }; + "page-engine-backend_internal_usermanager_core_domain.Product": { + id?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductID"]; + limits_enabled?: boolean; + name?: string; + }; + /** @enum {string} */ + "page-engine-backend_internal_usermanager_core_domain.ProductID": "seo" | "ai" | "si" | "ci"; + "page-engine-backend_internal_usermanager_core_domain.ProductProjectMetadata": { + id?: string; + role?: components["schemas"]["rbac.RoleName"]; + shared_with?: number; + }; + "page-engine-backend_internal_usermanager_core_domain.ProductResources": { + resources?: { + [key: string]: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.UsedLimit"]; + }; + tier?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.Tier"]; + }; + "page-engine-backend_internal_usermanager_core_domain.ProductTier": { + product?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.Product"]; + tier?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.Tier"]; + }; + "page-engine-backend_internal_usermanager_core_domain.ProductTierIDs": { + product_id: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductID"]; + tier_id: string; + }; + "page-engine-backend_internal_usermanager_core_domain.ProductTierWithTimestamps": { + created_at?: string; + last_updated_at?: string; + product_id?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductID"]; + tier_id?: string; + }; + "page-engine-backend_internal_usermanager_core_domain.ProjectOwner": { + email?: string; + id?: string; + }; + /** @enum {string} */ + "page-engine-backend_internal_usermanager_core_domain.ProjectStatus": "draft" | "live" | "publishing" | "initial_publish_failed" | "live_with_unpublished_updates" | "subsequent_publish_failed"; + "page-engine-backend_internal_usermanager_core_domain.SOXProductActivation": { + product_activation_date?: string; + product_name?: string; + }; + "page-engine-backend_internal_usermanager_core_domain.SOXWorkspace": { + ownerID?: number; + products?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.SOXProductActivation"][]; + status?: string; + subscription_activation_date?: string; + subscription_expiration_date?: string; + subscription_id?: number; + workspace_name?: string; + workspace_owner?: string; + }; + /** @enum {string} */ + "page-engine-backend_internal_usermanager_core_domain.SegmentColumn": "url" | "url_list" | "keyword" | "keyword_list" | "traffic" | "position" | "search_volume" | "keyword_intent" | "country" | "device" | "clicks" | "impressions" | "ctr" | "gsc_position"; + "page-engine-backend_internal_usermanager_core_domain.TagWithSearch": { + id?: string; + name?: string; + parent_id?: string; + }; + "page-engine-backend_internal_usermanager_core_domain.Tier": { + id?: string; + name?: string; + rank?: number; + }; + "page-engine-backend_internal_usermanager_core_domain.Transaction": { + amount?: number; + balance_after?: number; + balance_before?: number; + date?: string; + global_limit_key?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.GlobalLimitType"]; + id?: string; + iid?: number; + operation?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.TransactionOperation"]; + owner_id?: number; + owner_name?: string; + product_limit?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.TxProductLimit"]; + receipt_id?: number; + receipt_name?: string; + reference_transaction_id?: string; + service_id?: string; + service_type?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.TransactionServiceType"]; + title?: string; + workspace_id?: string; + }; + /** @enum {string} */ + "page-engine-backend_internal_usermanager_core_domain.TransactionOperation": "debit" | "credit"; + /** @enum {string} */ + "page-engine-backend_internal_usermanager_core_domain.TransactionServiceType": "job_hourly" | "job_fixed" | "seo_workflow" | "service_fee" | "si_crawler" | "ai_insights"; + "page-engine-backend_internal_usermanager_core_domain.TxProductLimit": { + /** @example pages */ + enterprise_limit_key?: string; + /** @example si */ + product_id?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductID"]; + }; + "page-engine-backend_internal_usermanager_core_domain.UsedLimit": { + drafted?: number; + total?: number; + used?: number; + }; + "page-engine-backend_internal_usermanager_core_domain.User": { + e_mail?: string; + es_type?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.EsType"]; + id?: number; + invite_accepted?: boolean; + }; + "page-engine-backend_internal_usermanager_core_domain.WorkspaceExpiration": { + expires_at?: string; + }; + "page-engine-backend_internal_usermanager_core_domain.WorkspaceParent": { + id?: string; + title?: string; + }; + "page-engine-backend_internal_usermanager_core_domain.WorkspacePartnership": { + is_partnered?: boolean; + }; + "page-engine-backend_internal_usermanager_core_domain.WorkspaceProductResources": { + /** @example si */ + product_id?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductID"]; + resources?: { + [key: string]: number; + }; + }; + "page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesGlobal": { + api_units?: number; + logfile_analysis_mb_used?: number; + service_credits?: number; + service_units?: number; + users?: number; + }; + "page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesSEO": { + keywords?: number; + pagespeed_urls?: number; + projects?: number; + }; + "page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesV2": { + general?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesGlobal"]; + product_resources?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceProductResources"][]; + seo?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesSEO"]; + }; + "page-engine-backend_internal_usermanager_core_domain.WorkspaceTotalLimits": { + general?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesGlobal"]; + seo?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesSEO"]; + }; + "page-engine-backend_internal_usermanager_core_domain.WorkspaceUpsert": { + icon?: string; + /** @default false */ + partnership_enabled: boolean; + product_tiers?: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductTierIDs"][]; + title: string; + }; + /** @enum {string} */ + "rbac.RoleName": "role/workspace/owner" | "role/workspace/admin" | "role/workspace/editor" | "role/workspace/viewer" | "role/workspace/collaborator" | "role/workspace/content-writer" | "role/project/editor" | "role/project/viewer" | "role/keywords_list/editor" | "role/keywords_list/viewer"; + }; + responses: never; + parameters: never; + requestBodies: { + /** @description request body */ + "handlers.BatchReferenceRequest": { + content: { + "application/json": components["schemas"]["handlers.BatchReferenceRequest"]; + }; + }; + /** @description request body */ + "handlers.projectAddMembersForm": { + content: { + "application/json": components["schemas"]["handlers.projectAddMembersForm"]; + }; + }; + /** @description segment details */ + "handlers.SegmentUpsertForm": { + content: { + "application/json": components["schemas"]["handlers.SegmentUpsertForm"]; + }; + }; + /** @description request body */ + "handlers.urlGroupsUpsertForm": { + content: { + "application/json": components["schemas"]["handlers.urlGroupsUpsertForm"]; + }; + }; + /** @description request body */ + "handlers.GoogleConsoleWorkspaceConnectionCreate": { + content: { + "application/json": components["schemas"]["handlers.GoogleConsoleWorkspaceConnectionCreate"]; + }; + }; + /** @description request body */ + "handlers.setServiceUnitsForm": { + content: { + "application/json": components["schemas"]["handlers.setServiceUnitsForm"]; + }; + }; + /** @description request body */ + "handlers.workspaceAddMembersForm": { + content: { + "application/json": components["schemas"]["handlers.workspaceAddMembersForm"]; + }; + }; + /** @description request body */ + "handlers.goalsUpsertForm": { + content: { + "application/json": components["schemas"]["handlers.goalsUpsertForm"]; + }; + }; + /** @description request body */ + "handlers.activationPanelAIOPromptSettingsForm": { + content: { + "application/json": components["schemas"]["handlers.activationPanelAIOPromptSettingsForm"]; + }; + }; + /** @description request body */ + "handlers.taggedKeywordsCreateForm": { + content: { + "application/json": components["schemas"]["handlers.taggedKeywordsCreateForm"]; + }; + }; + /** @description request body */ + "handlers.GoogleAdsWorkspaceConnectionCreate": { + content: { + "application/json": components["schemas"]["handlers.GoogleAdsWorkspaceConnectionCreate"]; + }; + }; + /** @description request body */ + "handlers.GoogleAnalyticsWorkspaceConnectionCreate": { + content: { + "application/json": components["schemas"]["handlers.GoogleAnalyticsWorkspaceConnectionCreate"]; + }; + }; + /** @description request body */ + "handlers.LogFileAnalysisWorkspaceConnectionPayload": { + content: { + "application/json": components["schemas"]["handlers.LogFileAnalysisWorkspaceConnectionPayload"]; + }; + }; + /** @description Request body containing product and tier details */ + "page-engine-backend_internal_usermanager_core_domain.ProductTierIDs": { + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductTierIDs"]; + }; + }; + /** @description request body */ + "handlers.activationPanelWorkspaceCreateForm": { + content: { + "application/json": components["schemas"]["handlers.activationPanelWorkspaceCreateForm"]; + }; + }; + /** @description Credentials creation request */ + "handlers.AdobeCredentialsCreateRequest": { + content: { + "application/json": components["schemas"]["handlers.AdobeCredentialsCreateRequest"]; + }; + }; + /** @description request body */ + "handlers.TransactionsListForm": { + content: { + "application/json": components["schemas"]["handlers.TransactionsListForm"]; + }; + }; + /** @description request body */ + "handlers.KeywordsTagsRequest": { + content: { + "application/json": components["schemas"]["handlers.KeywordsTagsRequest"]; + }; + }; + "project-upload-benchmarks": { + content: { + "multipart/form-data": { + /** + * Format: binary + * @description The file to upload + */ + up_file: string; + }; + }; + }; + }; + headers: never; + pathItems: never; +} +export type $defs = Record; +export interface operations { + "admin-core-users-list": { + parameters: { + query?: { + /** @description user id */ + user_id?: string[]; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.CoreUserWithAPIKey"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "users-create": { + parameters: { + query?: never; + header: { + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.usersCreateForm"]; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "admin-get-user-billing-statuses": { + parameters: { + query?: never; + header: { + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + /** @description List of user IDs */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.userIDsRequest"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.billingStatusResponse"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "expired-subscription-users": { + parameters: { + query?: never; + header: { + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.CoreUser"][]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "admin-workspace-child-create": { + parameters: { + query?: never; + header: { + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.adminWorkspaceCreateForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "admin-workspace-update-partnership": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description Workspace ID (UUID) */ + id: string; + }; + cookie?: never; + }; + /** @description Request body containing partnership flag */ + requestBody: { + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspacePartnership"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad request, invalid input parameters */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized, invalid or missing API key */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden, insufficient permissions */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal server error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "admin-workspace-product-create": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description Workspace ID (UUID) */ + id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["page-engine-backend_internal_usermanager_core_domain.ProductTierIDs"]; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad request, invalid input parameters */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized, invalid or missing API key */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden, insufficient permissions */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal server error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "admin-workspace-product-update": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description Workspace ID (UUID) */ + id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["page-engine-backend_internal_usermanager_core_domain.ProductTierIDs"]; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad request, invalid input parameters */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized, invalid or missing API key */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden, insufficient permissions */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal server error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "admin-workspace-product-delete": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description Workspace ID (UUID) */ + id: string; + /** @description Product ID (UUID) */ + product_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad request, invalid input parameters */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized, invalid or missing API key */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden, insufficient permissions */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal server error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "admin-es-project-delete": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.projectDeleteResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-spa": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/html": unknown; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "text/html": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "text/html": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "text/html": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "admin-workspace-update-expiration": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description Workspace ID (UUID) */ + id: string; + }; + cookie?: never; + }; + /** @description Request body containing expiration date */ + requestBody: { + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceExpiration"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad request, invalid input parameters */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized, invalid or missing API key */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Workspace not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable entity, not a master or partnership workspace */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal server error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-workspace-create-master": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.activationPanelWorkspaceCreateForm"]; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Conflict */ + 409: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-get-all-workspaces": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.ActivationPanelWorkspace"][]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-get-all-admin-activities": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + /** @description filter by admin user ID */ + admin_id?: string; + /** @description filter by workspace ID (UUID format) */ + workspace_id?: string; + /** @description filter by action name */ + action?: string; + }; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.ActivationPanelAdminActivityResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-get-workspace": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.ActivationPanelWorkspaceWithLimits"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-users-report": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path: { + /** @description Workspace ID (UUID) */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description CSV file containing workspace users report */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": string; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-get-all-organizations": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + }; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.ActivationPanelWorkspaceListResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-workspace-permissions": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.ActivationPanelPermissionsResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-subscription-update": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.activationPanelSubscriptionForm"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-workspace-update": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceUpsert"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-check-owner-email": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path: { + /** @description customer's email */ + email: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.ActivationPanelBillingStatusCoreAccountId"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-all-workspaces-find": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.ActivationPanelWorkspaceMetadata"][]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-aio-settings-get": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.activationPanelAIOPromptSettingsForm"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.activationPanelAIOPromptSettingsGetForm"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Conflict */ + 409: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-aio-settings-upsert": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.activationPanelAIOPromptSettingsForm"]; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Conflict */ + 409: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-workspace-products-get": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceProduct"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-projects-find": { + parameters: { + query?: { + /** @description Search term for filtering projects */ + search?: string; + /** @description Sort direction (ASC/DESC, default: DESC) */ + sort_direction?: "ASC" | "DESC"; + /** @description Field to sort by (created_at/last_updated_at) */ + sort_field?: "created_at" | "last_updated_at"; + /** @description Filter by project status */ + status?: "draft" | "live" | "publishing" | "initial_publish_failed" | "live_with_unpublished_updates" | "subsequent_publish_failed"; + /** @description Filter by product */ + product?: "seo" | "ai" | "si" | "ci"; + /** @description Cursor for pagination (obtain from previous response's next_cursor field). If omitted, starts from the beginning. Cursors are signed and validated to ensure query consistency. */ + next_cursor?: string; + /** @description Page size (max 50) */ + limit?: number; + }; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path: { + /** @description Workspace ID (UUID) */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.AdminProjectsResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-projects-transfer": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path: { + /** @description Source Workspace ID (UUID) */ + id: string; + }; + cookie?: never; + }; + /** @description Transfer request containing project IDs and target workspace ID */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.adminProjectTransferForm"]; + }; + }; + responses: { + /** @description Map of failed project IDs to error reasons. Empty map means all projects transferred successfully. Example: {\"proj-uuid-1\": \"project is not transferable\", \"proj-uuid-2\": \"project not found\"} */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + [key: string]: string; + }; + }; + }; + /** @description Unauthorized - Invalid or missing authentication */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden - Missing editWorkspaces permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable Entity - Invalid workspace ID, project IDs, or request body validation errors */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error - Possible errors: workspace not found, workspace product not enabled, insufficient SEO projects, insufficient AI projects, insufficient AI prompts, insufficient SI crawl budget, insufficient keywords, insufficient pagespeed URLs */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-workspace-resources": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.NewWorkspaceResources"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-projects-migration": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path: { + /** @description Target Workspace ID (UUID) */ + id: string; + }; + cookie?: never; + }; + /** @description Transfer request containing account IDs */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.adminSmbProjectMigrationForm"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized - Invalid or missing authentication */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden - Missing editWorkspaces permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-projects-migration-report": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path: { + /** @description Target Workspace ID (UUID) */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized - Invalid or missing authentication */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden - Missing editWorkspaces permission */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-manager-import": { + parameters: { + query?: never; + header: { + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody: { + content: { + "multipart/form-data": { + /** + * Format: binary + * @description CSV file containing workspace IDs and user IDs + */ + file: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "admin-workspace-create-master": { + parameters: { + query?: never; + header: { + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.adminWorkspaceUpsertForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-tiers-list": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.tiersResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "adobe-analytics-get-dimensions": { + parameters: { + query: { + /** @description Report Suite ID */ + rsid: string; + }; + header?: never; + path: { + /** @description adobe_proxy_auth_id identifier */ + adobe_proxy_auth_id: string; + /** @description Adobe global company ID */ + global_company_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description dimensions retrieved successfully */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.Dimension"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "adobe-analytics-get-metrics": { + parameters: { + query: { + /** @description Report Suite ID */ + rsid: string; + }; + header?: never; + path: { + /** @description adobe_proxy_auth_id identifier */ + adobe_proxy_auth_id: string; + /** @description Adobe global company ID */ + global_company_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description metrics retrieved successfully */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.Metric"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "adobe-analytics-validate": { + parameters: { + query?: never; + header?: never; + path: { + /** @description Adobe Proxy Auth ID */ + adobe_proxy_auth_id: string; + /** @description Global Company ID */ + global_company_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.AdobeAnalyticsValidateRequest"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.AdobeAnalyticsValidateResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Too Many Requests */ + 429: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "adobe-analytics-get-report-suites": { + parameters: { + query?: never; + header?: never; + path: { + /** @description adobe_proxy_auth_id identifier */ + adobe_proxy_auth_id: string; + /** @description Adobe global company ID */ + global_company_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description report suites retrieved successfully */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.ReportSuite"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "adobe-analytics-get-report-suites-paginated": { + parameters: { + query?: { + /** @description Number of items per page */ + size?: number; + /** @description Page number (1-indexed) */ + page?: number; + }; + header?: never; + path: { + /** @description adobe_proxy_auth_id identifier */ + adobe_proxy_auth_id: string; + /** @description Adobe global company ID */ + global_company_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description report suites with pagination retrieved successfully */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.AdobeReportSuitesResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "adobe-analytics-get-status": { + parameters: { + query?: never; + header?: never; + path: { + /** @description adobe_proxy_auth_id identifier */ + adobe_proxy_auth_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description status retrieved successfully */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.AdobeCredentialStatusInfo"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "adobe-analytics-create-credentials": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.AdobeCredentialsCreateRequest"]; + responses: { + /** @description credentials created successfully */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.AdobeCredentialsInfo"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "adobe-analytics-get-bulk-status": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** @description Bulk status request with list of adobe_proxy_auth_ids */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.AdobeBulkStatusRequest"]; + }; + }; + responses: { + /** @description statuses retrieved successfully */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.AdobeBulkStatusResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + countries: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.Country"][]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "goals-metrics-list": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.goalMetricsResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-core-users-list": { + parameters: { + query?: { + /** @description user id */ + user_id?: string[]; + /** @description comma separated user ids */ + user_ids?: string[]; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.CoreUser"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-project-all-list": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.InternalProjectsList"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-restore-project": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-all-live-targets": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "transaction-create": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.TransactionsCreateForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.Transaction"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "service-credits-internal-transaction-get": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description transaction id */ + transaction_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.Transaction"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "transaction-cancel": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description transaction id */ + transaction_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.TransactionsCancelForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.Transaction"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "service-credits-internal-transactions-list": { + parameters: { + query?: { + /** @description sorting direction */ + direction?: string; + /** @description sorting field */ + field?: string; + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.TransactionsListForm"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.transactionsListResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "profiles-list": { + parameters: { + query?: { + /** @description user id */ + user_id?: string[]; + /** @description user id */ + es_type?: string; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.UserProfile"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "user-profile-update-internal": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description user id */ + user_id: number; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.InternalProfileUpdate"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.UserProfile"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-all-es-users": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.InternalESUsersList"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "user-by-api-key-get-internal": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.BasicUserProfile"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "basic-profiles-list": { + parameters: { + query?: { + /** @description user id */ + user_id?: string[]; + /** @description user ES type */ + es_type?: string; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.BasicUserProfile"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-workspace-get": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.internalWorkspace"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-workspaces-ancestor": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceResponse"][]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-workspace-owner-api-key-get": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceUserAPIKey"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-workspaces-family": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceResponse"][]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-managers-get": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.basicWorkspacesMembersResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-workspaces-members": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + /** @description asc/desc */ + direction?: string; + /** @description search by email */ + search?: string; + /** @description search by role name */ + role?: string; + /** @description search by membership status */ + membership_status?: string; + /** @description include parental admins */ + include_parental_admins?: boolean; + /** @description include parent workspace */ + include_parent_workspace?: boolean; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspacesMembersResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-workspace-add-members": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.workspaceAddMembersForm"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.WorkspaceMemberUpsertResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceAddMembersResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceAddMembersResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceAddMembersResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceAddMembersResponse"]; + }; + }; + }; + }; + "workspaces-check-roles-in-ancestry": { + parameters: { + query: { + /** @description roles */ + roles: string[]; + }; + header?: never; + path: { + /** @description user id */ + user_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceCheckRolesInAncestryResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspaces-check-membership-in-ancestry": { + parameters: { + query?: { + /** @description Filter by membership status. If provided, only these statuses are considered valid. Allowed: member, guest, basic. */ + membership?: string[]; + }; + header?: never; + path: { + /** @description workspace id */ + userId: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceCheckMembershipInAncestryResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "pagespeed-internal-list": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description results offset */ + offset?: number; + /** @description page size */ + limit?: number; + /** @description live */ + live?: boolean; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.pagespeedCrawlersInternalListResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "pagespeed-internal-keywords-list": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description results offset */ + offset?: number; + /** @description page size */ + limit?: number; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + /** @description pagespeed crawler id */ + crawler_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.pagespeedInternalKeywordsListResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "pagespeed-internal-urls-list": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description results offset */ + offset?: number; + /** @description page size */ + limit?: number; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + /** @description pagespeed crawler id */ + crawler_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.pagespeedURLsListResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-list-get": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.projectListResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-goals-list": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description limit number */ + limit?: number; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.internalGoalsListResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-public-project-segment-list-get": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + /** @description search by segment name */ + search?: string; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.SegmentListResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-project-segment-list-get": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.SegmentListInternalResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-project-segments-get": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description segment id */ + segment_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.SegmentListResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-target-list-get-internal": { + parameters: { + query?: { + /** @description live */ + live?: boolean; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.targetListResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-project-target-details": { + parameters: { + query?: { + /** @description live */ + live?: boolean; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.Target"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-benchmarks-input": { + parameters: { + query: { + /** @description benchmark ids */ + ids: string; + /** @description live */ + live?: boolean; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.InternalBenchmark"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-project-target-input-details": { + parameters: { + query?: { + /** @description live */ + live?: boolean; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.InternalTarget"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-get-tagged-keywords": { + parameters: { + query?: { + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.taggedKeywordsCreateForm"]; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-internal-search-list-tags": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + /** @description search */ + search?: string; + /** @description live */ + live?: boolean; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.tagsListResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-internal-tags-tree": { + parameters: { + query: { + /** @description tag id */ + tag_id: number; + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.TagsTreeResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-live-projects-target-list-get": { + parameters: { + query: { + /** @description user id */ + user_id: number; + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.targetListResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-workspace-resources": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.NewWorkspaceResources"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "service-units-get": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.getServiceUnitsResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "service-units-set": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.setServiceUnitsForm"]; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "service-units-used-set": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.setServiceUnitsForm"]; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-workspace-connections-list": { + parameters: { + query?: { + /** @description Number of page */ + page?: number; + /** @description Number of items per page (default: 10) */ + limit?: number; + /** @description Connection type filter: google-ads, google-analytics, google-console, adobe-analytics, log-file-connector */ + type?: string; + /** @description Owner filter */ + owner_id?: string; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + workspace_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.WorkspaceConnectionsResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "internal-workspace-connection-byid": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + workspace_id: string; + /** @description connection id */ + connection_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.InternalWorkspaceConnectionDetails"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "internal-log-file-analysis-connection-update": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + workspace_id: string; + /** @description connection id */ + connection_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.LogFileAnalysisWorkspaceConnectionPayload"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.WorkspaceConnection"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "internal-log-file-analysis-connection-status-patch": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + workspace_id: string; + /** @description connection id */ + connection_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.LogFileAnalysisConnectorStatusPayload"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "internal-workspace-project-connections": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + workspace_id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Array of connection IDs */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.ProjectConnectionResponse"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "internal-workspaces-all-list": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceResponse"][]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-workspaces-limits": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + [key: string]: components["schemas"]["handlers.OptionsLimits"]; + }; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-batch-workspaces-members": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.batchWorkspaceMembersRequest"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.basicWorkspacesMembersResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-workspace-get-root": { + parameters: { + query?: never; + header: { + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-workspaces-sox-list": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.SOXWorkspace"][][]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-tiers-list": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.tiersResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + languages: { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.Language"][]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + locations: { + parameters: { + query?: { + /** @description location name(deprecated use q) */ + location?: string; + /** @description filter by location, alias for location */ + q?: string; + /** @description location id */ + id?: number; + /** @description filter by search engine(bing) */ + filter_engine?: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "user-profile": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.UserProfile"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Conflict */ + 409: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "user-profile-update": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.profileUpdate"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.UserProfile"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "users-required-units": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.RequiredUserUnitsForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.RequiredUserUnitsResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "user-ownership-eligibility": { + parameters: { + query: { + /** @description user id */ + email: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceOwnershipEligibilityResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "work-categories": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.WorkCategory"][]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspaces-list": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspacesListResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-details": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-update": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.workspaceUpsertForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-delete": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceDeleteResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-api-units-get": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.APIUnitsResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspaces-campaign-keywords-list": { + parameters: { + query?: { + /** @description page number */ + page?: number; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + /** @description campaign id */ + campaign_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.keywordsListResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-child-create": { + parameters: { + query?: never; + header: { + /** @description Signed upload receipt token */ + "X-Upload-Receipt": string; + }; + path: { + /** @description parent workspace id */ + id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.WorkspaceCreateChildForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspaces-family": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceResponse"][]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspaces-has-children": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.HasChildrenResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-update-icon": { + parameters: { + query?: never; + header: { + /** @description Signed upload receipt token */ + "X-Upload-Receipt": string; + }; + path: { + /** @description Workspace UUID */ + id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.workspaceUpdateIconForm"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywordslists-get": { + parameters: { + query?: { + /** @description field default: name */ + field?: "name" | "updated_at"; + /** @description sort direction, default:asc */ + direction?: "asc" | "desc"; + /** @description search by keyword list name */ + search?: string; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.KeywordsListResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywordslists-post": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.KeywordsListCreateRequest"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.KeywordsListCreateResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywordslists-delete": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.KeywordsListDeleteRequest"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywordslists-rename": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description id of the keywords-list */ + basket_id: number; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.KeywordsListRenameRequest"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.KeywordsListRenameResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywordslists-keywords-get": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page limit */ + limit?: number; + /** @description sort direction, default:asc */ + direction?: "asc" | "desc"; + /** @description search by keyword name */ + search?: string; + /** @description sort direction, default:containing */ + operation?: "eq" | "containing" | "begins_with" | "ends_with" | "word_matching_separator" | "exact_matching" | "phrase_matching" | "broad_matching"; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description id of the keywords-list */ + basket_id: number; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.KeywordsResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywordslists-keywords-post": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description id of the keywords-list */ + basket_id: number; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.KeywordAddRequest"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.KeywordCountResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywordslists-keywords-delete": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description id of the keywords-list */ + basket_id: number; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.KeywordDeleteRequest"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.KeywordDeleteResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywordslists-keywords-tags-add": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description id of the keywords-list */ + basket_id: number; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.KeywordsTagsRequest"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.KeywordsTagsResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywordslists-keywords-tags-delete": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description id of the keywords-list */ + basket_id: number; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.KeywordsTagsRequest"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.KeywordsTagsResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywordslists-keywords-tags-patch": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description id of the keywords-list */ + basket_id: number; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.KeywordsTagsUpdateRequest"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.KeywordsTagsResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywordslists-keywords-post-upload": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description id of the keywords-list */ + basket_id: number; + }; + cookie?: never; + }; + requestBody: { + content: { + "multipart/form-data": { + /** + * Format: binary + * @description The file to upload + */ + file: string; + }; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.KeywordCountResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywords-list-members": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description basket id */ + basket_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.keywordsListMembersResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywords-list-add-members": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description basket id */ + basket_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.keywordListAddMembersForm"]; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywords-list-delete-members": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description basket id */ + basket_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.keywordsListDeleteMembersForm"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywords-list-update-members-role": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description basket id */ + basket_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.keywordsListMemberUpdateRoleForm"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "*/*": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywordslists-databases-get": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.KeywordsListDatabasesResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-light-details": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceLightResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "limits-get": { + parameters: { + query?: { + /** @description set true if you want the master workspace's limits */ + master?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.GetLimitsResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspaces-members": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + /** @description asc/desc */ + direction?: string; + /** @description search by email */ + search?: string; + /** @description search by role name */ + role?: string; + /** @description search by membership status */ + membership_status?: string; + /** @description include parental admins */ + include_parental_admins?: boolean; + /** @description include parent workspace */ + include_parent_workspace?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspacesMembersResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-add-members": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.workspaceAddMembersForm"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.WorkspaceMemberUpsertResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceAddMembersResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceAddMembersResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceAddMembersResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceAddMembersResponse"]; + }; + }; + }; + }; + "workspace-delete-members": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.workspaceDeleteMembersForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.WorkspaceMemberUpsertResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspaces-members-update": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.workspaceMemberUpdateRoleForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.WorkspaceMemberUpsertResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-details-parent": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-resources-master": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.NewWorkspaceResources"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-list-get-for-user": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.projectListResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-create": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.projectCreateForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.projectUpsertResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Conflict */ + 409: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-get": { + parameters: { + query?: { + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.projectsGetResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-update": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.projectUpdateForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.projectUpsertResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Conflict */ + 409: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-delete": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.projectDeleteResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspaces-clone-benchmarks-tags": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.benchmarkCloneForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "discard-draft-project": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "set-project-favourite": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.projectFavouriteSetForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "goals-list": { + parameters: { + query?: { + /** @description live */ + live?: boolean; + /** @description page number */ + page?: number; + /** @description limit number */ + limit?: number; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.goalsListResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "goal-create": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.goalsUpsertForm"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.goalUpsertReponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "goals-delete": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.goalsDeleteForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "goal-update": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description goal id */ + goal_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.goalsUpsertForm"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.goalUpsertReponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "goal-simport": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.goalImportForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.goalImportReponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-limits-get": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.GetLimitsResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-members": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.projectMembersResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-add-members": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.projectAddMembersForm"]; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-delete-members": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.projectDeleteMembersForm"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-update-members-role": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.projectAddMembersForm"]; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "pagespeed-list": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description results offset */ + offset?: number; + /** @description page size */ + limit?: number; + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.pagespeedCrawlersListResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "pagespeed-create": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.pagespeedCrawlerCreateForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.pagespeedCrawlerCreateResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "pagespeed-delete": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.pagespeedDeleteForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "pagespeed-update": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description pagespeed crawler id */ + crawler_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.pagespeedCrawlerUpdateForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.pagespeedCrawler"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "pagespeed-keywords-list": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description results offset */ + offset?: number; + /** @description page size */ + limit?: number; + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description pagespeed crawler id */ + crawler_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.pagespeedKeywordsListResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "pagespeed-add-keywords": { + parameters: { + query?: { + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description pagespeed crawler id */ + crawler_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.pagespeedCrawlerAddKeywordsForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.keyword"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "pagespeed-delete-keywords": { + parameters: { + query?: { + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description pagespeed crawler id */ + crawler_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.pagespeedKeywordsDeleteForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "pagespeed-add-named-keywords": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description pagespeed crawler id */ + crawler_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.pagespeedAddNamedKeywordsForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.pagespeedAddNamedKeywordsResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "crawler-limits-get": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description pagespeed crawler id */ + crawler_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.GetLimitsResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "pagespeed-urls-list": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description results offset */ + offset?: number; + /** @description page size */ + limit?: number; + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description pagespeed crawler id */ + crawler_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.pagespeedURLsListResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "pagespeed-add-urls": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description pagespeed crawler id */ + crawler_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.pagespeedCrawlerAddURLsForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.pagespeedURL"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "pagespeed-delete-urls": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description pagespeed crawler id */ + crawler_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.pagespeedURLsDeleteForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "pagespeed-visible": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description pagespeed crawler id */ + crawler_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.pagespeedCrawlerVisibleForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-publish-async": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-segment-list-get": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + /** @description sort by segment field */ + sort?: "name" | "created_at" | "updated_at"; + /** @description sort direction */ + direction?: "asc" | "desc"; + /** @description search by segment name */ + search?: string; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.SegmentListResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-segment-delete": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + /** @description segments ids */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.IDsForm"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-segments-get": { + parameters: { + query?: { + /** @description whether to show only for live projects */ + live?: "true" | "false"; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description segment id */ + segment_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.SegmentResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-segment-update": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description segment id */ + segment_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.SegmentUpsertForm"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.SegmentResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-target-list-get": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.targetListResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-add-target": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.targetCreateForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.Target"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-target-delete": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": unknown; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-target-details": { + parameters: { + query?: { + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.Target"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "benchmarks-list": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.benchmarksListResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-add-benchmarks": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.benchmarkCreateForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.benchmark"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-delete-benchmarks": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.benchmarksDeleteForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-update-benchmarks": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + /** @description benchmark id */ + benchmark_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.benchmarkUpdateForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.benchmark"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-bulk-update-benchmarks": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.benchmarkBulkUpdateForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.benchmark"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-download-benchmarks": { + parameters: { + query?: { + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-remove-tags-benchmarks": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.benchmarkRemoveTagsForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.benchmark"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-upload-benchmarks": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["project-upload-benchmarks"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-get-keywords": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description tag id(to get keywords of a tag) */ + tag_id?: string; + /** @description live */ + live?: boolean; + /** @description with_hierarchy */ + with_hierarchy?: boolean; + /** @description keyword name(to filter keywords by name) */ + name?: string; + /** @description preferred url(to filter keywords by preferred_url) */ + preferred_url?: string; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.keywordsListResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-add-keywords": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.keywordsCreateForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.keywordsCreateResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-delete-keywords": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.keywordsDeleteForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "targets-keywords-by-names": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.NamedKeywordsFindForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.NamedKeywordsFindResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywords-preferred-urls-upload": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["project-upload-benchmarks"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.PreferredURLsUploadResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-update-keywords": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.keywordsUpdateForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.keywordsUpdateResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywords-preferred-urls-download": { + parameters: { + query?: { + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywords-related-tag-ids-get": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.keywordsRelatedTagsForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + [key: string]: string[]; + }; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywords-tags-relations-delete": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.KeywordsTagsRelationsDeleteForm"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "keywords-metrics": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + [key: string]: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.KeywordMetrics"]; + }; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-add-tagged-keywords": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.taggedKeywordsCreateForm"]; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-download-tagged-keywords": { + parameters: { + query?: { + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-upload-tagged-keywords": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["project-upload-benchmarks"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-get-tags": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + /** @description parent id */ + parent_id?: string; + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.tagsListResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-add-tags": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.tagsCreateForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.tagsList"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-delete-tags": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.tagsDeleteForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-update-tag": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + /** @description tag id */ + tag_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.tagsUpdateForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.tag"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-tags-all": { + parameters: { + query?: { + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.TagsTreeResponseV2"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-search-list-tags": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + /** @description search */ + search?: string; + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.tagsListResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-tags-tree": { + parameters: { + query: { + /** @description tag id */ + tag_id: number; + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.TagsTreeResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-find-tags-path": { + parameters: { + query?: { + /** @description path */ + path?: string; + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.TagsTreeResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-search-tree-tags": { + parameters: { + query?: { + /** @description search */ + search?: string; + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.TagsTreeResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspaces-clone-keywords-tags": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.keywordsCloneForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "url-groups-list": { + parameters: { + query?: { + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.urlGroupsListResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "url-groups-create": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.urlGroupsUpsertForm"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.urlGroup"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "url-groups-delete": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.urlGroupsDeleteForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": string[]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "url-groups-update": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description url group id */ + url_group_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.urlGroupsUpsertForm"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.urlGroup"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "live-projects-target-list-get": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.targetListResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-resources": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.NewWorkspaceResources"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-transfer-resources": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.WorkspaceResources"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "user-workspace-role": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceUserRole"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-segment-list-get": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + /** @description whether to show only for live projects */ + live?: "true" | "false"; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.SegmentListByWorkspaceResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "service-units-balance-get": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.getServiceUnitsResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "service-credits-transactions-list": { + parameters: { + query?: { + /** @description sorting direction */ + direction?: string; + /** @description sorting field */ + field?: string; + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.TransactionsListForm"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.transactionsListResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "service-credits-transaction-get": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description transaction id */ + transaction_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.Transaction"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspaces-status-get": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.WorkspaceCheckResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-connections": { + parameters: { + query?: { + /** @description Number of page */ + page?: number; + /** @description Number of items per page (default: 10) */ + limit?: number; + /** @description Connection type filter: google-ads, google-analytics, google-console, adobe-analytics */ + type?: string; + /** @description Owner type filter */ + owner_id?: string; + }; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.WorkspaceConnectionsResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "workspace-connections-delete": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.WorkspaceConnectionsDeleteRequest"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "workspace-connections-byid": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + /** @description connection id */ + connection_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.WorkspaceConnectionDetails"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "workspace-connection-attach-project": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + /** @description connection id */ + connection_id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "workspace-connection-detach-project": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + /** @description connection id */ + connection_id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "adobe-analytics-connection-create": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.AdobeAnalyticsWorkspaceConnectionCreate"]; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "adobe-analytics-connection-update": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + /** @description connection id */ + connection_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.AdobeAnalyticsWorkspaceConnectionUpdate"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "workspace-connections-merge": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.WorkspaceConnectionsAttachItem"][]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "ads-connection-create": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.GoogleAdsWorkspaceConnectionCreate"]; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "ads-connection-update": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + /** @description connection id */ + connection_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.GoogleAdsWorkspaceConnectionCreate"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "analytics-connection-create": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.GoogleAnalyticsWorkspaceConnectionCreate"]; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "analytics-connection-update": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + /** @description connection id */ + connection_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.GoogleAnalyticsWorkspaceConnectionCreate"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "console-connection-create": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.GoogleConsoleWorkspaceConnectionCreate"]; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "console-connection-update": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + /** @description connection id */ + connection_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.GoogleConsoleWorkspaceConnectionCreate"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "log-file-analysis-connection-create": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.LogFileAnalysisWorkspaceConnectionPayload"]; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "log-file-analysis-connection-update": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + /** @description connection id */ + connection_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.LogFileAnalysisWorkspaceConnectionPayload"]; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "workspace-connection-owners": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.WorkspaceConnectionOwner"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "workspace-project-connections": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Array of connection IDs */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.ProjectConnectionResponse"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "workspaces-light-list": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceLightResponse"][]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "total-limits-find": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + [key: string]: components["schemas"]["handlers.OptionsLimits"]; + }; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-resources-find-all": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + [key: string]: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceTotalLimits"]; + }; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "tiers-list": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.tiersResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "activation-panel-workspace-create-master-v2": { + parameters: { + query?: never; + header: { + /** @description Semrush-admin Remote-User (UserId) */ + "Remote-User": string; + /** @description Admin API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.activationPanelWorkspaceCreateForm"]; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Conflict */ + 409: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "adobe-analytics-create-credentials-v2": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.AdobeCredentialsCreateRequest"]; + responses: { + /** @description credentials created successfully */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.AdobeCredentialCreatedResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "adobe-analytics-get-dimensions-v2": { + parameters: { + query: { + /** @description Internal credential ID */ + credential_id: number; + /** @description Adobe global company ID */ + global_company_id: string; + /** @description Report Suite ID */ + rsid: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description dimensions retrieved successfully */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.Dimension"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "adobe-analytics-get-metrics-v2": { + parameters: { + query: { + /** @description Internal credential ID */ + credential_id: number; + /** @description Adobe global company ID */ + global_company_id: string; + /** @description Report Suite ID */ + rsid: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description metrics retrieved successfully */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.Metric"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "adobe-analytics-validate-v2": { + parameters: { + query?: never; + header?: never; + path?: never; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.AdobeAnalyticsValidateV2Request"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.AdobeAnalyticsValidateResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Too Many Requests */ + 429: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "adobe-analytics-get-report-suites-v2": { + parameters: { + query: { + /** @description Internal credential ID */ + credential_id: number; + /** @description Adobe global company ID */ + global_company_id: string; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description report suites retrieved successfully */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.ReportSuite"][]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "adobe-analytics-get-report-suites-paginated-v2": { + parameters: { + query: { + /** @description Internal credential ID */ + credential_id: number; + /** @description Adobe global company ID */ + global_company_id: string; + /** @description Number of items per page */ + size?: number; + /** @description Page number (1-indexed) */ + page?: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description report suites with pagination retrieved successfully */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.AdobeReportSuitesResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "adobe-analytics-get-status-v2": { + parameters: { + query: { + /** @description Internal credential ID */ + credential_id: number; + }; + header?: never; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description status retrieved successfully */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.AdobeCredentialStatusInfo"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "internal-product-workspaces-get": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description product id (ai, si, ci, seo) */ + product_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceIDsResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "transaction-create-v2": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.TransactionsCreateFormV2"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.Transaction"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "transaction-refund-v2": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description transaction id */ + transaction_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.TransactionsRefundForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.Transaction"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-workspaces-ancestor-v2": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceResponse"][]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-workspaces-family-v2": { + parameters: { + query?: never; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceResponse"][]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-workspace-product-limits": { + parameters: { + query?: never; + header: { + /** @description API Key required for authentication */ + "API-Key": string; + }; + path: { + /** @description Unique identifier for the workspace */ + id: string; + /** @description Unique identifier for the product [enum: seo, aio] */ + product_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful operation */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + [key: string]: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.EntityLimit"]; + }; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-product-projects-find": { + parameters: { + query: { + /** @description Unique identifier for the user */ + user_id: number; + }; + header: { + /** @description API key for authentication */ + "API-Key": string; + }; + path: { + /** @description Unique identifier for the workspace */ + id: string; + /** @description Unique identifier for the product [possible values: seo, aio] */ + product_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK - List of product projects successfully retrieved */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.ProductProjectMetadata"][]; + }; + }; + /** @description Unauthorized - Invalid or missing API key */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden - Access denied for the user */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found - Workspace or Product not found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error - Unexpected system error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-workspace-product-limits-by-project": { + parameters: { + query?: never; + header: { + /** @description API Key required for authentication */ + "API-Key": string; + }; + path: { + /** @description Unique identifier for the workspace */ + id: string; + /** @description Unique identifier for the product [enums: seo, aio] */ + product_id: string; + /** @description Unique identifier for the project */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description Successful operation */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + [key: string]: components["schemas"]["page-engine-backend_internal_usermanager_core_domain.EntityLimit"]; + }; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-projects-list-v2": { + parameters: { + query?: { + /** @description user id */ + user_id?: number; + /** @description search by project name */ + search?: string; + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.InternalProjectV2List"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-project-by-id-v2": { + parameters: { + query?: { + /** @description user id */ + user_id?: number; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.InternalProjectV2"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-workspaces-all-list-v2": { + parameters: { + query?: { + /** @description Comma-separated list of product identifiers (e.g., ci,si) */ + products?: string; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceResponse"][]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "internal-projects-all-v2-list": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + }; + header: { + /** @description API key */ + "API-Key": string; + }; + path?: never; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.InternalProjectV2List"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-details-v2": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceV2Response"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-child-create-v2": { + parameters: { + query?: never; + header?: never; + path: { + /** @description parent workspace id */ + id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.createWorkspaceV2Form"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "projects-list-v2": { + parameters: { + query?: { + /** @description publish statuses filter */ + publish_status?: unknown[]; + /** @description search by project name or domain */ + search?: string; + /** @description sort field (name, target, keywords, pagespeedurls, favourite) */ + sort_field?: string; + /** @description sort direction (ASC or DESC) */ + sort_direction?: string; + /** @description page number */ + page?: number; + /** @description page size (max 100) */ + limit?: number; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.projectListV2Response"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-create-v2": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.projectV2CreateForm"]; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.projectUpsertResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Conflict */ + 409: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-limits-get-v2": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description product id */ + product_id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.GetLimitsResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-update-v2": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.projectV2UpdateForm"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.projectUpsertResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Conflict */ + 409: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-get-keywords-v2": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.KeywordsWithTagsRequestAndTagID"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.KeywordsWithMetricsResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-update-keyword-tags-batch-v2": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.BatchReferenceRequest"]; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-delete-keyword-tags-batch-v2": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.BatchReferenceRequest"]; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-get-tags-with-search": { + parameters: { + query?: { + /** @description page number */ + page?: number; + /** @description page size */ + limit?: number; + /** @description parent id */ + parent_id?: string; + /** @description search query */ + query?: string; + /** @description live */ + live?: boolean; + }; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.tagsListWithSearchResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-delete-tags-batch-v2": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.BatchDeleteReferenceRequest"]; + }; + }; + responses: { + /** @description No Content */ + 204: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-transfer-resources-v2": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.WorkspaceResourcesTransferV2Form"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.WorkspaceResourcesV2"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "adobe-analytics-connection-create-v2": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.AdobeAnalyticsWorkspaceConnectionCreateV2"]; + }; + }; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "adobe-analytics-connection-update-v2": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + workspace_id: string; + /** @description connection id */ + connection_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.AdobeAnalyticsWorkspaceConnectionUpdateV2"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content?: never; + }; + }; + }; + "project-get-keywords-v3": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + /** @description target id */ + target_id: string; + }; + cookie?: never; + }; + /** @description request body */ + requestBody: { + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.KeywordsWithTagsRequestAndTagIDs"]; + }; + }; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["page-engine-backend_internal_usermanager_core_domain.KeywordsWithMetricsResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "workspace-owner-api-key-get": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description OK */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.workspaceUserAPIKey"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Not Found */ + 404: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unprocessable Entity */ + 422: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "project-segment-create": { + parameters: { + query?: never; + header?: never; + path: { + /** @description workspace id */ + id: string; + /** @description project id */ + project_id: string; + }; + cookie?: never; + }; + requestBody: components["requestBodies"]["handlers.SegmentUpsertForm"]; + responses: { + /** @description Created */ + 201: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["handlers.SegmentResponse"]; + }; + }; + /** @description Bad Request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal Server Error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "segments-copy-to-projects": { + parameters: { + query?: never; + header?: never; + path: { + /** @description Workspace ID */ + id: string; + /** @description Source Project ID */ + project_id: string; + }; + cookie?: never; + }; + /** @description Copy segments request */ + requestBody: { + content: { + "application/json": components["schemas"]["handlers.CopySegmentsRequest"]; + }; + }; + responses: { + /** @description Copy result with copied count */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + [key: string]: unknown; + }; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal server error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "segments-export": { + parameters: { + query?: { + /** @description Export format: csv or xlsx */ + format?: string; + }; + header?: never; + path: { + /** @description Workspace ID */ + id: string; + /** @description Project ID */ + project_id: string; + }; + cookie?: never; + }; + requestBody?: never; + responses: { + /** @description CSV or XLSX file with segments data */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": string; + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": string; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal server error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "text/csv": components["schemas"]["http_server.BasicResponse"]; + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; + "segments-import": { + parameters: { + query?: never; + header?: never; + path: { + /** @description Workspace ID */ + id: string; + /** @description Project ID */ + project_id: string; + }; + cookie?: never; + }; + requestBody: { + content: { + "multipart/form-data": { + /** + * Format: binary + * @description CSV or XLSX file with segments data + */ + file: string; + }; + }; + }; + responses: { + /** @description Import result with imported count */ + 200: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": { + [key: string]: unknown; + }; + }; + }; + /** @description Bad request */ + 400: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Unauthorized */ + 401: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Forbidden */ + 403: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + /** @description Internal server error */ + 500: { + headers: { + [name: string]: unknown; + }; + content: { + "application/json": components["schemas"]["http_server.BasicResponse"]; + }; + }; + }; + }; +} diff --git a/packages/spacecat-shared-user-manager-client/test/foundation.test.js b/packages/spacecat-shared-user-manager-client/test/foundation.test.js new file mode 100644 index 000000000..f3a7034b9 --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/test/foundation.test.js @@ -0,0 +1,82 @@ +/* + * Copyright 2026 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +import { expect } from 'chai'; +import { readFileSync } from 'node:fs'; +import { fileURLToPath } from 'node:url'; +import { dirname, resolve } from 'node:path'; + +const here = dirname(fileURLToPath(import.meta.url)); +const pkgRoot = resolve(here, '..'); + +const read = (rel) => readFileSync(resolve(pkgRoot, rel), 'utf-8'); + +describe('User Manager foundation: vendored spec', () => { + const spec = read('spec/usermanager_swagger.yaml'); + + it('is the vendored Swagger 2.0 file', () => { + expect(spec).to.match(/^swagger:\s*['"]?2\.0['"]?/m); + }); + + it('declares the User Manager basePath', () => { + expect(spec).to.include('basePath: /enterprise/users/api'); + }); + + // The spec models the Semrush-native Auth-Data-Jwt header as a required param on ~187 ops. + // The live API does NOT accept it — it authenticates on Authorization: Bearer , which + // Semrush accepts directly — so the corrections overlay (CR1) strips it from the generated + // surface. The vendored contract keeps it untouched for faithful re-vendoring. + it('carries the Semrush-native Auth-Data-Jwt header param in the vendored spec', () => { + expect(spec).to.include('name: Auth-Data-Jwt'); + }); +}); + +describe('User Manager foundation: generated TypeScript types', () => { + // Committed in its own commit, marked linguist-generated (see .gitattributes). + const types = read('src/generated/types.ts'); + + it('exposes the openapi-typescript paths interface', () => { + expect(types).to.match(/export interface paths/); + }); + + it('includes the workspace routes the serenity integration exercises', () => { + expect(types).to.include('/workspaces/'); + }); + + it('includes a v2 workspace child-creation path', () => { + expect(types).to.include('/v2/workspaces/{id}/child'); + }); + + it('includes a v1 workspace status path', () => { + expect(types).to.include('/v1/workspaces/{id}/status'); + }); +}); + +describe('User Manager foundation: corrections overlay guard', () => { + // These pin the corrections in spec/overlays/corrections.yaml against the generated + // surface, so a future Semrush spec refresh that silently drops the overlay fails + // loudly here instead of regressing the typed contract. + const types = read('src/generated/types.ts'); + + it('strips the Auth-Data-Jwt header from the generated types (CR1)', () => { + // The live API authenticates on Authorization: Bearer , accepted directly by + // Semrush; the upstream Auth-Data-Jwt header is rejected and must not survive. + expect(types).to.not.include('Auth-Data-Jwt'); + }); + + it('types GET /v1/workspaces/{id}/status as a single object, not an array (CR2)', () => { + // The live API returns a bare WorkspaceCheckResponse object ({ status: ... }); the + // upstream spec wrongly wrapped it in an array. The array form must not survive. + expect(types).to.include('components["schemas"]["handlers.WorkspaceCheckResponse"]'); + expect(types).to.not.include('components["schemas"]["handlers.WorkspaceCheckResponse"][]'); + }); +}); diff --git a/packages/spacecat-shared-user-manager-client/test/overlay.test.js b/packages/spacecat-shared-user-manager-client/test/overlay.test.js new file mode 100644 index 000000000..4bf61bdb9 --- /dev/null +++ b/packages/spacecat-shared-user-manager-client/test/overlay.test.js @@ -0,0 +1,169 @@ +/* + * Copyright 2026 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ + +import { expect } from 'chai'; +import { + parsePath, + select, + deepMerge, + applyAction, + applyOverlay, +} from '../scripts/apply-overlay.mjs'; + +describe('apply-overlay: parsePath', () => { + it('parses key, bracketed-key, wildcard and filter segments', () => { + const steps = parsePath("$.paths['/v2/x'].*.parameters[?(@.name == 'Auth-Data-Jwt')]"); + expect(steps).to.deep.equal([ + { type: 'key', key: 'paths' }, + { type: 'key', key: '/v2/x' }, + { type: 'wild' }, + { type: 'key', key: 'parameters' }, + { type: 'filter', key: 'name', value: 'Auth-Data-Jwt' }, + ]); + }); + + it('throws when the target does not start with $', () => { + expect(() => parsePath('paths.x')).to.throw(/must start with/); + }); + + it('throws on an unsupported segment', () => { + // after `$` the remainder must start with `.` or `[`; a bare word matches no matcher + expect(() => parsePath('$foo')).to.throw(/Unsupported JSONPath segment/); + }); +}); + +describe('apply-overlay: deepMerge', () => { + it('recurses into objects and overwrites scalars/arrays', () => { + const target = { a: { x: 1, y: 2 }, list: [1, 2], scalar: 'old' }; + deepMerge(target, { a: { y: 9, z: 3 }, list: [3], scalar: 'new' }); + expect(target).to.deep.equal({ a: { x: 1, y: 9, z: 3 }, list: [3], scalar: 'new' }); + }); + + it('skips prototype-pollution keys (no Object.prototype mutation)', () => { + const target = {}; + deepMerge(target, JSON.parse('{ "__proto__": { "polluted": true }, "ok": 1 }')); + expect(target.ok).to.equal(1); + expect({}.polluted).to.equal(undefined); + expect(Object.prototype).to.not.have.property('polluted'); + }); +}); + +describe('apply-overlay: select', () => { + it('resolves a wildcard over object values', () => { + const doc = { paths: { '/a': { get: {} }, '/b': { post: {} } } }; + const refs = select(doc, '$.paths.*'); + expect(refs.map((r) => r.key)).to.deep.equal(['/a', '/b']); + }); +}); + +describe('apply-overlay: applyAction', () => { + it('update deep-merges into the targeted node', () => { + const doc = { components: { securitySchemes: {} } }; + const hits = applyAction(doc, { + target: '$.components.securitySchemes', + update: { imsBearer: { type: 'http', scheme: 'bearer' } }, + }); + expect(hits).to.equal(1); + expect(doc.components.securitySchemes.imsBearer).to.deep.equal({ type: 'http', scheme: 'bearer' }); + }); + + it('update creates the node as an object when the target is absent/non-object', () => { + const doc = { components: {} }; + applyAction(doc, { target: '$.components.securitySchemes', update: { a: 1 } }); + expect(doc.components.securitySchemes).to.deep.equal({ a: 1 }); + }); + + it('update throws when it matches no node', () => { + const doc = { paths: {} }; + expect(() => applyAction(doc, { + target: "$.paths['/missing'].get", + update: { summary: 'x' }, + })).to.throw(/matched no node/); + }); + + it('remove deletes a targeted object key', () => { + const doc = { paths: { '/a': { get: {} } } }; + const hits = applyAction(doc, { target: "$.paths['/a']", remove: true }); + expect(hits).to.equal(1); + expect(doc.paths).to.deep.equal({}); + }); + + it('remove deletes filtered array items (high-to-low, leaving siblings intact)', () => { + const doc = { + params: [ + { name: 'Auth-Data-Jwt' }, + { name: 'id' }, + { name: 'Auth-Data-Jwt' }, + ], + }; + const hits = applyAction(doc, { + target: "$.params[?(@.name == 'Auth-Data-Jwt')]", + remove: true, + }); + expect(hits).to.equal(2); + expect(doc.params).to.deep.equal([{ name: 'id' }]); + }); + + it('remove returns 0 (no throw) when it matches nothing', () => { + const doc = { params: [{ name: 'id' }] }; + const hits = applyAction(doc, { + target: "$.params[?(@.name == 'Auth-Data-Jwt')]", + remove: true, + }); + expect(hits).to.equal(0); + expect(doc.params).to.deep.equal([{ name: 'id' }]); + }); + + it('throws when the action has neither update nor remove', () => { + expect(() => applyAction({}, { target: '$.x' })).to.throw(/must have 'update' or 'remove'/); + }); +}); + +describe('apply-overlay: applyOverlay', () => { + it('applies every action and returns the total + per-action results (prints nothing)', () => { + const doc = { paths: { '/a': { get: {} } }, components: {} }; + const { total, results } = applyOverlay(doc, { + actions: [ + { target: '$.components.x', update: { v: 1 } }, + { target: "$.paths['/a']", remove: true }, + ], + }); + expect(total).to.equal(2); + expect(doc.components.x).to.deep.equal({ v: 1 }); + expect(doc.paths).to.deep.equal({}); + expect(results).to.deep.equal([ + { + target: '$.components.x', remove: false, hits: 1, staleRemove: false, + }, + { + target: "$.paths['/a']", remove: true, hits: 1, staleRemove: false, + }, + ]); + }); + + it('throws when the overlay has no actions', () => { + expect(() => applyOverlay({}, { actions: [] })).to.throw(/no actions/); + expect(() => applyOverlay({}, {})).to.throw(/no actions/); + }); + + it('flags a 0-match remove via staleRemove (does not throw, prints nothing)', () => { + const { total, results } = applyOverlay({ params: [{ name: 'id' }] }, { + actions: [{ target: "$.params[?(@.name == 'gone')]", remove: true }], + }); + expect(total).to.equal(0); + expect(results).to.deep.equal([ + { + target: "$.params[?(@.name == 'gone')]", remove: true, hits: 0, staleRemove: true, + }, + ]); + }); +});