Virtuoso QA API

Virtuoso QA API as documented publicly: 17 operations. Contract generated from the documentation by API Evangelist (2026-10-29); not the provider's own document.

Operations 17

POST / POST / #
GET /accounts Retrieve accounts and check the response contains the specified account. #
POST /api/auth/login POST /api/auth/login #
POST /api/auth/login/integration POST /api/auth/login/integration #
GET /api/goals GET /api/goals #
POST /api/goals/{goalid}/snapshots/7/execute POST /api/goals/{goalId}/snapshots/7/execute #
GET /api/integrations/events GET /api/integrations/events #
DELETE /api/organizations DELETE /api/organizations #
PUT /api/organizations PUT /api/organizations #
POST /api/project POST /api/project #
GET /api/projects Returns a list of projects you can access. #
GET /api/projects/{projectId}/goals Returns a list of goals in your project. #
GET /api/projects/{projectId}/jobs Returns a list of active jobs (executions) for your project. #
GET /api/projects/{projectId}/snapshots Returns a list of snapshots within the project. #
POST /api/testsuites POST /api/testsuites #
GET /api/user GET /api/user #
GET /api/user/foo GET /api/user/foo #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/virtuoso-qa:virtuoso-qa-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

virtuoso-qa-openapi-generated.yml Raw ↑
openapi: 3.1.0
info:
  title: Virtuoso QA API
  version: '2026-10-29'
  description: 'GENERATED FROM DOCUMENTATION by API Evangelist on 2026-10-29: 17 operation(s) read from 6 public documentation page(s) (each operation
    names its page in x-source). This is not the provider''s published contract; Virtuoso QA has published no machine-readable contract that the
    pipeline could find. Engine: anthropic.'
  x-evidence-tiers:
    code-example: 13
    documentation: 4
    pages-with-code: 4
    pages-read: 6
  x-generated-from: documentation
  x-provenance: generated
  x-authored-by: API Evangelist
  x-generated: '2026-10-29'
  x-generator: generate-contract-from-docs.py
  x-engine: anthropic
  x-sources:
  - https://www.virtuosoqa.com/product/api-testing
  - https://www.virtuosoqa.com/post/api-functional-testing
  - https://docs.virtuoso.qa/guide/advanced-topics/virtuoso-api.html
  - https://docs.virtuoso.qa/guide/advanced-topics/client-certificates.html
  - https://docs.virtuoso.qa/guide/advanced-topics/apps/build
  - https://docs.virtuoso.qa/guide/making-the-most-of-virtuoso/language-extensions.html
servers:
- url: https://api.virtuoso.qa
paths:
  /:
    post:
      operationId: post
      tags:
      - Api
      summary: POST /
      x-source: https://docs.virtuoso.qa/guide/advanced-topics/virtuoso-api.html
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl --header \"Authorization: Bearer $TOKEN \" -X POST -H \"Content-Type: application/json\" -d '{ \"startingUrl\": \"https://spotqa.com/\"\
          \ }' https://api.virtuoso.qa/api/goals/42/execute\n Starting url Providing a startingUrl does not override a data-driven navigation\
          \ step. Only the first navigation step matching the goal URL is going to get updated.\nA startingUrl can also be combined with initial\
          \ variab"
  /accounts:
    get:
      operationId: get_accounts
      tags:
      - Accounts
      summary: Retrieve accounts and check the response contains the specified account.
      x-source: https://www.virtuosoqa.com/product/api-testing
      responses:
        '200':
          description: Success (status as documented)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetAccountsResponse'
      x-evidence:
        kind: documentation
  /api/auth/login:
    post:
      operationId: post_api_auth_login
      tags:
      - Api
      summary: POST /api/auth/login
      x-source: https://docs.virtuoso.qa/guide/advanced-topics/client-certificates.html
      parameters:
      - name: envelope
        in: query
        required: false
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostApiAuthLoginRequest'
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: 'curl -s -X POST -H "Content-Type: application/json" -d ''{ "email": "<email>", "password":"<password>"}'' "https://api.virtuoso.qa/api/auth/login?envelope=false"
          | jq -r .token) ; Run the container with the following command, replacing the values as necessary: podman run --env "CERTIFICATE_NAME=<The
          name that the certificate profile should have in Virtuoso>" --env "CERTIFICATE_DESCRIPTION=<A descrip'
  /api/auth/login/integration:
    post:
      operationId: post_api_auth_login_integration
      tags:
      - Api
      summary: POST /api/auth/login/integration
      x-source: https://docs.virtuoso.qa/guide/advanced-topics/apps/build
      parameters:
      - name: envelope
        in: query
        required: false
        schema:
          type: string
      responses:
        '201':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiAuthLoginIntegrationResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl --location --request POST 'https://api.virtuoso.qa/api/auth/login/integration?envelope=false'  --header 'Content-Type:\
          \ application/json'  --data-raw '{\n \"installationId\": \"<installation identifier>\",\n \"clientKey\": \"<app client key>\",\n \"\
          timeInMillis\": <time in millis used in the signature>,\n \"signature\": \"<signed string>\"\n}' \nResponse:\n { \n \"success\" : true,\n\
          \ \"item\" : { \n \"token\" : \"5ca64217-9"
  /api/goals:
    get:
      operationId: get_api_goals
      tags:
      - Api
      summary: GET /api/goals
      x-source: https://docs.virtuoso.qa/guide/advanced-topics/client-certificates.html
      responses:
        '200':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiGoalsResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X GET  -H \"Authorization: Bearer $TOKEN \"  -H \"Content-Type: application/json\"  https://api.virtuoso.qa/api/goals/\
          \ < GOAL-ID > \n If successful, this will provide a response similar to: { \n \"success\" : true , \n \"item\" : { \n \"id\" : 1234\
          \ , \n \"projectId\" : 567 , \n \"name\" : \"Goal name\" , \n \"otherFields\" : \"...\" , \n \"meta\" : { \n \"otherFields\" : \"...\"\
          \ \n } \n } \n } \n Then, you need to make a PUT requ"
  /api/goals/{goalid}/snapshots/7/execute:
    post:
      operationId: post_api_goals_goalid_snapshots_7_execute
      tags:
      - Api
      summary: POST /api/goals/{goalId}/snapshots/7/execute
      x-source: https://docs.virtuoso.qa/guide/advanced-topics/virtuoso-api.html
      parameters:
      - name: goalid
        in: path
        required: true
        schema:
          type: string
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: 'curl --header "Authorization: Bearer $TOKEN " -X POST https://api.virtuoso.qa/api/goals/42/snapshots/7/execute'
  /api/integrations/events:
    get:
      operationId: get_api_integrations_events
      tags:
      - Api
      summary: GET /api/integrations/events
      x-source: https://docs.virtuoso.qa/guide/advanced-topics/apps/build
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: curl curl -s GET https://api.virtuoso.qa/api/integrations/events?envelope = false
  /api/organizations:
    delete:
      operationId: delete_api_organizations
      tags:
      - Api
      summary: DELETE /api/organizations
      x-source: https://docs.virtuoso.qa/guide/advanced-topics/client-certificates.html
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X DELETE  -H \"Authorization: Bearer $TOKEN \"  -H \"Content-Type: application/json\"  https://api.virtuoso.qa/api/organizations/\
          \ < ORGANIZATION-ID > /certificates/ < CERTIFICATE-ID > \n WARNING Any goal or plan associations with the certificate will have to be\
          \ manually updated, and, unless done so, will fail to execute with the \"Archived certificates cannot be used\" error. # Limitations\
          \ Running "
    put:
      operationId: put_api_organizations
      tags:
      - Api
      summary: PUT /api/organizations
      x-source: https://docs.virtuoso.qa/guide/advanced-topics/client-certificates.html
      responses:
        '200':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PutApiOrganizationsResponse'
      x-evidence:
        kind: code-example
        language: curl
        snippet: "curl -X PUT  -T path/to/key4.db  https:// .. ./key4.db? .. .\n Please note that the maximum size for each file is 10 MB. WARNING\
          \ Please note that these upload links will expire 1 hour after they are created. These links should not be shared. # Verifying that\
          \ the NSSDB was uploaded After uploading your NSSDB files, the final step is to verify that your files were uploaded, allowing your\
          \ certificate "
  /api/project:
    post:
      operationId: post_api_project
      tags:
      - Api
      summary: POST /api/project
      x-source: https://docs.virtuoso.qa/guide/making-the-most-of-virtuoso/language-extensions.html
      responses:
        '201':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PostApiProjectResponse'
      x-evidence:
        kind: code-example
        language: javascript
        snippet: "fetch ( \"https://www.spotqa.com/api/project\" , { \n method : 'POST' , \n body : JSON . stringify ( { foo : 'bar' , spot :\
          \ 'QA' } )"
  /api/projects:
    get:
      operationId: get_api_projects
      tags:
      - Api
      summary: Returns a list of projects you can access.
      x-source: https://docs.virtuoso.qa/guide/advanced-topics/virtuoso-api.html
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/projects/{projectId}/goals:
    get:
      operationId: get_api_projects_projectId_goals
      tags:
      - Api
      summary: Returns a list of goals in your project.
      x-source: https://docs.virtuoso.qa/guide/advanced-topics/virtuoso-api.html
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/projects/{projectId}/jobs:
    get:
      operationId: get_api_projects_projectId_jobs
      tags:
      - Api
      summary: Returns a list of active jobs (executions) for your project.
      x-source: https://docs.virtuoso.qa/guide/advanced-topics/virtuoso-api.html
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/projects/{projectId}/snapshots:
    get:
      operationId: get_api_projects_projectId_snapshots
      tags:
      - Api
      summary: Returns a list of snapshots within the project.
      x-source: https://docs.virtuoso.qa/guide/advanced-topics/virtuoso-api.html
      parameters:
      - name: projectId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: documentation
  /api/testsuites:
    post:
      operationId: post_api_testsuites
      tags:
      - Api
      summary: POST /api/testsuites
      x-source: https://docs.virtuoso.qa/guide/advanced-topics/client-certificates.html
      responses:
        '201':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: 'curl -X POST  -H "Authorization: Bearer $TOKEN "  -H "Content-Type: application/json"  -d ''{ "certificateId": <CERTIFICATE-ID>
          }''  https://api.virtuoso.qa/api/testsuites/ < JOURNEY-ID > /execute'
  /api/user:
    get:
      operationId: get_api_user
      tags:
      - Api
      summary: GET /api/user
      x-source: https://docs.virtuoso.qa/guide/advanced-topics/virtuoso-api.html
      responses:
        '200':
          description: Success (status as documented)
      x-evidence:
        kind: code-example
        language: curl
        snippet: 'curl --header "Authorization: Bearer $TOKEN" https://api.virtuoso.qa/api/user Notice the `API` environment Notice that the address
          for the Virtuoso API (e.g., api.virtuoso.qa ) is different from the application address (e.g., app.virtuoso.qa ). # Useful endpoints
          For the purpose of creating apps, here are some of the interesting endpoints you can use

          to create executions, and retrieve relevant pro'
  /api/user/foo:
    get:
      operationId: get_api_user_foo
      tags:
      - Api
      summary: GET /api/user/foo
      x-source: https://docs.virtuoso.qa/guide/making-the-most-of-virtuoso/language-extensions.html
      responses:
        '200':
          description: Success (shape read from the example response on the page)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetApiUserFooResponse'
      x-evidence:
        kind: code-example
        language: javascript
        snippet: 'fetch ( "https://www.spotqa.com/api/user/foo" , { "method" : "GET" , "mode" : "no-cors" } )'
components:
  schemas:
    PostRequest:
      type: object
      properties:
        startingUrl:
          type: string
    GetAccountsResponse:
      type: object
      properties:
        accounts:
          type: string
    PostApiAuthLoginRequest:
      type: object
      properties:
        email:
          type: string
        password:
          type: string
    PostApiAuthLoginIntegrationResponse:
      type: object
      properties:
        success:
          type: boolean
        item:
          type: object
          properties:
            token:
              type: string
            expires:
              type: string
              format: date-time
    GetApiGoalsResponse:
      type: object
      properties:
        success:
          type: boolean
        item:
          type: object
          properties:
            id:
              type: integer
            projectId:
              type: integer
            name:
              type: string
            otherFields:
              type: string
            meta:
              type: object
              properties:
                otherFields:
                  type: string
    PutApiOrganizationsResponse:
      type: object
      properties:
        success:
          type: boolean
        item:
          type: object
          properties:
            id:
              type: integer
            projectId:
              type: integer
            name:
              type: string
            otherFields:
              type: string
            meta:
              type: object
              properties:
                otherFields:
                  type: string
    PostApiProjectResponse:
      type: object
      properties:
        quantity:
          type: integer
        price:
          type: integer
        priceWithTax:
          type: integer
    GetApiUserFooResponse:
      type: object
      properties:
        method:
          type: string
        mode:
          type: string
  securitySchemes:
    bearer:
      type: http
      scheme: bearer
security:
- bearer: []
tags:
- name: Accounts
- name: Api