Defined.ai Public API

The Defined.ai Public API (v2.0) enables enterprise customers to manage AI training data projects programmatically: list supported languages, create and clone Mean Opinion Score and Pronunciation Validation projects, upload input units, edit and cancel projects and jobs, monitor project status and upload errors, retrieve deliverables and downloads, and manage email notification subscriptions. Authentication is a Bearer JWT in the Authorization header.

OpenAPI Specification

definedcrowd-openapi-original.json Raw ↑
{
  "openapi": "3.0.1",
  "info": {
    "title": "Defined.ai API",
    "description": "# Introduction\n\nWelcome to the Defined.ai Public API.\n\nTo get started you need a Defined.ai Enterprise account to manage your project in [Enterprise Portal](https://enterprise.definedcrowd.com).\nPlease contact Defined<area>.ai\u2019s sales team at sales@defined.ai to set up your Defined<area>.ai Enterprise account.\n\nDefined.ai offers an intelligent data infrastructure that provides high-quality training data that enables customers \nwith AI roadmaps reach market at better quality and speed. Defined.ai collects, structures, \nand enriches high-quality training data for AI initiatives using efficient data workflows that combine human intelligence,\nautomatic tools and machine learning capabilities. \n\nThis REST API provides a programmable interface for directly integrating your data processes with Defined.ai\u2019s platform.  \nFrom the REST API, you can create or clone Projects based on Workflow Templates, upload your data, \nand monitor them during their execution.  Upon Project completion, it\u2019ll be possible to quickly retrieve high-quality \ntraining data enriched by the Defined.ai platform.\n\nHere are some essential concepts to help you understand and use our REST API to its fullest potential: \n\n* A **Contributor** is someone who participates in the project execution.  This is our human intelligence component.\n* One or more Contributors work on **Input Units**.  When you submit data for evaluation, each individual item within that submitted data is an Input Unit.  \n* A **Workflow Template**  is a pre-configured set of steps designed for executing specific types of tasks.  A Project combines a Workflow Template with Input Units.\n* A **Job** determines the rules of execution for each input unit (e.g. how many Contributor can execute each input unit).\n\n\nOur Workflow Templates fall into the following offers:\n* Mean Opinion Score\n* Pronunciation Validation\n* ABx Testing\n\nWorkflow Templates can be data collection specific. Here, Defined.ai uses data-based \u201cprompts\u201d that you provide as Input Units and are then displayed in our data collection tools.  Defined.ai also provides Workflow Templates for structuring and enriching customer-provided data.  That data, which you provide as Input Units,  can be text and audio.  \n\nOur REST API is based on four primary actions:\n\n1. [**Clone a Project**](#operation/Projects_CloneProject) \u2013 A Project consists of a specific Workflow Template, a configuration that instructs Defined.ai how to execute the Project and the actual data to operate on.\n2. [**Set Subscriptions**](#operation/Subscriptions_SubmitSubscriptions) \u2013 Subscribe to automatic notifications for specific email addresses. Email notifications are sent for events that happen during the life cycle of the project (e.g. when the upload finishes or when the deliverables are ready to download)\n3. [**Upload Input Units**](#operation/UploadManagement_UploadInputUnits) \u2013 This is a unit of work that can be performed by one or more Contributors.  Each uploaded unit within the data that you submit will be validated and uploaded into the platform.  Each unit can then be executed multiple times by different Contributors in different steps, depending on the configuration defined in the project. It is possible to know what to upload by [getting the input unit schema](#operation/UploadManagement_GetInputUnitSchema). When the upload is finished, the project starts automatically.\n4. [**Get Deliverables**](#operation/ProjectsDeliverables_GetDeliverables) \u2013 When project execution is complete, this action allows you to obtain the results. \n   \nThe following image shows the end-to-end life cycle of a project:\n\n   ![API Workflow](https://dcpd01workflowstorage.definedcrowd.com/content/images/api_workflow.png)\n\n\n\n# Authentication\n\nAny application utilizing our REST APIs must first authenticate with our service. Our service utilizes the \nOAuth v2 protocol for authenticating. This requires both an \u201c**Access Key ID**\u201d and an \u201c**Access Key Secret**\u201d \nthat can be secured through Defined.ai\u2019s [Enterprise Portal](https://enterprise.definedcrowd.com). The Access Key pair \nmust be secured appropriately and cannot be shared.\n\nAssociated with an Access Key pair is a set of permissions which are scoped to different functionalities.\n\nBased on your scenario, review the REST API\u2019s below, identify the permissions required and create the \nappropriate API Key permissions. The mapping is described in the following table:\n\n| Access Key Permissions\u202f  | Rest API Permissions\u202f|\n| :--- | :--- |\n| View Projects\u202f| List Projects\u202f<br/> Read Project Properties\u202f\u202f |\n| Create Projects | List Projects\u202f<br/> Read Project Properties <br/>Create Projects\u202f<br/> Upload Data\u202f<br/> Update Project Properties |\n| Full Projects\u202f| List Projects\u202f<br/> Read Project Properties\u202f<br/> Create Projects\u202f<br/> Upload Data\u202f<br/> Update Project Properties\u202f<br/>Delete Project\u202f<br/> |\n\n\nUpon successful authentication, an OAuth token is returned.\n\nOAuth tokens have an expiration time. Access Key Pairs may also be revoked at any time by an Enterprise Portal user. It\u2019s important to take this into consideration when authoring your application.\n\nSecurity scheme type: OAuth2\n\n<div class = \"table--no-header\">\n\n| OAuth2Flow | client_credentials|\n| --- | --- |\n| Token URL | https://auth.definedcrowd.com/connect/token |\n\n</div>\n\n<br/>\nOAuth2 Scopes\n\nPublicAPIv2 \u2014 everything\n\n\nAfter the authentication has been done successfully, it\u2019s possible to start to use the API. To do that, the URL for the API should be the following:\n\n> https://api.production-na01.definedcrowd.com/[VERSION]/[APINAME]/\n\nFor example:\n\n> https://api.production-na01.definedcrowd.com/v2.0/public/projects/3964986c-3d34-447f-9d75-740584575d2b/clone\n\nNote: All calls must be performed over Secure HTTP (HTTPS).\n\n# Errors\n\nEach of our REST APIs returns standard HTTP responses that communicate successes or errors.  If a response is unsuccessful, we provide detailed error information in the response, as in the example below:\n\n~~~json\nHttpStatusCode: 400\nBody:\n{\n    \"errors\": [\n       {\n            \"code\": \"requestInvalidParameter\",\n            \"innercode\": \"projectItemCountOOB\",\n            \"message\": \"The number of items per page is out of bounds.\",\n            \"details\": {\n                \"ItemsPerPage\": 101,\n                \"ItemsPerPageNeeded\": \"ItemsPerPage > 0 AND ItemsPerPage < 100\"\n            }\n        }\n    ]\n}\n~~~\n\n\nThe following error codes are returned in cases where an API invocation was unsuccessful\n\n| **HTTP Status Code** | **Error Code** | **Error Inner Code** |\n| --- | --- | --- |\n| 400 Bad Request |   |   |\n|   | invalidProjectId | none |\n|   | projectAlreadyExists | none |\n|   | projectInvalidInputUnit |  |\n|   |   | duplicateId |\n|   |   | duplicateIdInPlatform |\n|   |   | invalidSchemaFormat |\n|   | partnerInvalidKey | none |\n|   | projectInvalidState |  |\n|   |   | invalidCurrentState |\n|   |   | invalidStateChange |\n|   | projectInvalidType | none |\n|   | requestInvalidBody |   |\n|   |   | duplicatedEmail |\n|   |   | emailInvalid |\n|   |   | jobSettingsContributorsPerInputUnitOOB |\n|   |   | jsonParsingError |\n|   |   | projectConfigNull |\n|   |   | projectIdNull |\n|   |   | projectInvalidFutureDesiredDeliveryDate |\n|   |   | projectMetatagCountOOB |\n|   |   | projectMetatagInvalidCharacters |\n|   |   | projectMetatagKeyLengthOOB |\n|   |   | projectMetatagValueLengthOOB |\n|   |   | projectNameNull |\n|   |   | projectNameSizeOOB |\n|   |   | projectUnitCountOOB |\n|   |   | projectSettingsAgeDistributionOOB |\n|   |   | projectSettingsCategoryNull |\n|   |   | projectSettingsCategoryIdNull |\n|\t|\t| ProjectSettingsCategoryDisplayNameNull |\n|\t|\t| ProjectSettingsCategoryDisplayNameOOB |\n|   |   | projectSettingsCategoryDescriptionNull |\n|   |   | projectSettingsCategoryCountOOB |\n|   |   | projectSettingsCategoryDuplicated |\n|   |   | projectSettingsCategoryExampleCountOOB |\n|   |   | projectSettingsContributorsPerUnitOOB |\n|   |   | projectSettingsDeviceLocationDistributionOOB |\n|   |   | projectSettingsDeviceLocationInvalidTarget |\n|   |   | projectSettingsDomainNull |\n|   |   | projectSettingsDomainCountOOB |\n|\t|\t| projectSettingsDomainDescriptionNull |\n|   |   | projectSettingsDomainDisplayNameNull |\n|   |   | projectSettingsDomainDisplayNameOOB |\n|   |   | projectSettingsDomainDuplicated |\n|\t|\t| projectSettingsDomainExampleCountOOB |\n|   |   | projectSettingsDomainIdNull |\n|   |   | projectSettingsDomainIdOOB |\n|   |   | projectSettingsDomainIntentsDuplicated |\n|   |   | projectSettingsDomainIntentsNull |\n|   |   | projectSettingsDomainIntentsOOB |\n|   |   | projectSettingsExamplesOOB |\n|   |   | projectSettingsGenderDistributionOOB |\n|   |   | projectSettingsInputUnitAudioUrlNull |\n|   |   | projectSettingsInputUnitAudioUrlInvalid |\n|   |   | projectSettingsInputUnitDetailsTooLong |\n|   |   | projectSettingsInputUnitDuplicated |\n|   |   | projectSettingsInputUnitNull |\n|   |   | projectSettingsInputUnitSentenceNull |\n|\t|\t| projectSettingsIntentDescriptionNull |\n|   |   | projectSettingsIntentDisplayNameNull |\n|   |   | projectSettingsIntentDisplayNameOOB |\n|\t|\t| projectSettingsIntentExampleCountOOB |\n|   |   | projectSettingsIntentIdNull |\n|   |   | projectSettingsIntentIdOOB |\n|   |   | projectSettingsLanguageCodeInvalid |\n|   |   | projectSettingsLanguageCodeNull |\n|   |   | projectSettingsLanguageNull |\n|\t|\t| projectSettingsLanguageTestUnsupported |\n|   |   | projectSettingsNull |\n|   |   | projectSettingsSubCategoryCountOOB |\n|   |   | projectSettingsSubCategoryDescriptionNull |\n|\t|\t| projectSettingsSubCategoryDisplayNameNull |\n|\t|\t| projectSettingsSubCategoryDisplayNameOOB |\n|   |   | projectSettingsSubCategoryDuplicated |\n|   |   | projectSettingsSubCategoryExampleCountOOB |\n|   |   | projectSettingsSubCategoryIdNull |\n|   |   | projectSettingsTextCollectionNull |\n|   |   | projectSettingsTextCorrectionNull |\n|   |   | projectWebhookNotAbsoluteUrl |\n|   |   | projectWebhookNotHttps |\n|   |   | projectWebhookNull |\n|   |   | subscriptionInvalidType |\n|   |   | subscriptionSettingsEmailCountOOB |\n|   | requestInvalidParameter |   |\n|   |   | projectItemCountOOB |\n|   |   | projectPageNumberOOB |\n|   |   | subscriptionInvalidType |\n|   | jobInvalid | jobNotCloneable |\n| 401 Unauthorized |   |   |\n|   | authorizationInvalidToken | none |\n| 402 Payment Required |   |   |\n|   | accountNotEnoughCredits | none |\n| 403 Forbidden |   |   |\n|   | accountInvalidProject | none |\n|   | invalidEmailListConsent | none |\n| 404 Not Found |   |   |\n|   | projectNotFound | none |\n|   | subscriptionNotFound | none |\n| 500 Internal Server Error |   |   |\n|   | internalServerError | none |\n",
    "version": "v2",
    "x-logo": {
      "url": "https://definedcrowd.azureedge.net/content/images/dai-logo-black.svg",
      "backgroundColor": "#FFFFFF",
      "href": "https://defined.ai/"
    }
  },
  "paths": {
    "/v2.0/public/languages": {
      "get": {
        "tags": [
          "Supported Languages"
        ],
        "summary": "Get supported languages",
        "description": "|<i style=\"color: #EB9D06\">The endpoint will be deprecated</i>\n\r\nReturns a list of language and country combinations supported by Defined.ai, the language code associated\r\nwith each combination, and whether Defined.ai supports the ability to source for a specific language\u2019s\r\nnative speakers, all of whom have passed a series of language tests administered by Defined.ai.\r\n            \r\nThe Language code may be added to the Configuration of a Project. If you need to source high-quality data\r\nfrom native speakers, the value nativeSpeakerSupported will indicate whether Defined.ai supports that\r\ncapability the specific language you\u2019re looking for.\r\n\r\nThe number of languages we support varies. \r\n\r\nDefined.ai currently supports the following languages:    \r\n            \r\n            \r\n\r\n| **Language** | **Country** | **Language Code + Country** |\r\n|:------------:|:-----------:|:---------------------------:|\r\n| **Arabic**| Egypt\u00a0| ar-EG\u00a0|\r\n| **Arabic**| Jordan\u00a0| ar-JO\u00a0|\r\n| **Arabic**| Morocco\u00a0| ar-MA\u00a0|\r\n| **Arabic**| Saudi Arabia\u00a0| ar-SA\u00a0|\r\n| **Arabic**| United Arab Emirates\u00a0| ar-AE\u00a0|\r\n| **Arabic**| Yemen\u00a0| ar-YE\u00a0|\r\n| **Basque**| Spain\u00a0| eu-ES\u00a0|\r\n| **Bengali**| India\u00a0| bn-IN\u00a0|\r\n| **Catalan**| Spain\u00a0| ca-ES\u00a0|\r\n| **Chinese Simplified**| China (Mandarin)\u00a0| zh-CN\u00a0|\r\n| **Chinese Simplified**| Singapore (Mandarin)\u00a0| zh-SG\u00a0|\r\n| **Chinese Traditional**| Taiwan (Mandarin)\u00a0| zh-TW\u00a0|\r\n| **Chinese Traditional**| Hong Kong (Cantonese)\u00a0| zh-HK\u00a0|\r\n| **Croatian**| Croatia\u00a0| hr-HR\u00a0|\r\n| **Czech**| Czech Republic\u00a0| cs-CZ\u00a0|\r\n| **Danish**| Denmark\u00a0| da-DK\u00a0|\r\n| **Danish**| Greenland\u00a0| da-GL\u00a0|\r\n| **Dutch**| Netherlands\u00a0| nl-NL\u00a0|\r\n| **Dutch**| Belgium (Flemish)\u00a0| nl-BE\u00a0|\r\n| **English**| United Kingdom\u00a0| en-GB\u00a0|\r\n| **English**| United States\u00a0| en-US\u00a0|\r\n| **English**| Canada\u00a0| en-CA\u00a0|\r\n| **English**| Philippines\u00a0| en-PH\u00a0|\r\n| **English**| Singapore\u00a0| en-SG\u00a0|\r\n| **English**| Australia\u00a0| en-AU\u00a0|\r\n| **English**| New Zealand\u00a0| en-NZ\u00a0|\r\n| **English**| India\u00a0| en-IN\u00a0|\r\n| **English**| Ireland\u00a0| en-IE\u00a0|\r\n| **English**| South Africa\u00a0| en-ZA\u00a0|\r\n| **Estonian**| Estonia\u00a0| et-EE\u00a0|\r\n| **Finnish**| Finland\u00a0| fi-Fl\u00a0|\r\n| **French**| France\u00a0| fr-FR\u00a0|\r\n| **French**| Belgium\u00a0| fr-BE\u00a0|\r\n| **French**| Canada\u00a0| fr-CA\u00a0|\r\n| **Galician**| Spain\u00a0| gl-ES\u00a0|\r\n| **German**| Germany\u00a0| de-DE\u00a0|\r\n| **German**| Belgium\u00a0| de-BE\u00a0|\r\n| **German**| Austria\u00a0| de-AT\u00a0|\r\n| **German**| Switzerland\u00a0| de-CH\u00a0|\r\n| **Greek**| Greece\u00a0| el-GR\u00a0|\r\n| **Gujarati**| India\u00a0| gu-IN\u00a0|\r\n| **Hebrew**| Israel\u00a0| he-IL\u00a0|\r\n| **Hindi**| India\u00a0| hi-IN\u00a0|\r\n| **Hungarian**| Hungary\u00a0| hu-HU\u00a0|\r\n| **Indonesian (Bahasa)**| Indonesia\u00a0| id-ID\u00a0|\r\n| **Irish**| Ireland\u00a0| ga-IE\u00a0|\r\n| **Italian**| Italy\u00a0| it-IT\u00a0|\r\n| **Japanese**| Japan\u00a0| ja-JP\u00a0|\r\n| **Kannada**| India\u00a0| ml-IN\u00a0|\r\n| **Korean**| South Korea\u00a0| ko-KR\u00a0|\r\n| **Latvian**| Latvia\u00a0| lv-LV\u00a0|\r\n| **Lithuanian**| Lithuania\u00a0| lt-LT\u00a0|\r\n| **Malay**| Malaysia\u00a0| ms-MY\u00a0|\r\n| **Malayalam**| India\u00a0| ml-IN\u00a0|\r\n| **Marathi**| India\u00a0| mr-IN\u00a0|\r\n| **Norwegian Bokm\u00e5l**| Norway\u00a0| nb-NO\u00a0|\r\n| **Persian / Farsi**| Iran\u00a0| fa-IR\u00a0|\r\n| **Polish**| Poland\u00a0| pl-PL\u00a0|\r\n| **Portuguese**| Portugal\u00a0| pt-PT\u00a0|\r\n| **Portuguese**| Brazil\u00a0| pt-BR\u00a0|\r\n| **Portuguese**| Angola\u00a0| pt-AO\u00a0|\r\n| **Portuguese**| Mozambique\u00a0| pt-MZ\u00a0|\r\n| **Punjabi**| India\u00a0| pa-IN\u00a0|\r\n| **Romanian**| Romania\u00a0| ro-RO\u00a0|\r\n| **Russian**| Russia\u00a0| ru-RU\u00a0|\r\n| **Slovak**| Slovakia\u00a0| sk-SK\u00a0|\r\n| **Slovenian**| Slovenia\u00a0| sl-SI\u00a0|\r\n| **Spanish**| Spain\u00a0| es-ES\u00a0|\r\n| **Spanish**| Argentina\u00a0| es-AR\u00a0|\r\n| **Spanish**| Chile\u00a0| es-CL\u00a0|\r\n| **Spanish**| Colombia\u00a0| es-CO\u00a0|\r\n| **Spanish**| Mexico\u00a0| es-MX\u00a0|\r\n| **Spanish**| Peru\u00a0| es-PE\u00a0|\r\n| **Spanish**| Paraguay\u00a0| es-PY\u00a0|\r\n| **Spanish**| United States\u00a0| es-US\u00a0|\r\n| **Spanish**| Venezuela\u00a0| es-VE\u00a0|\r\n| **Swedish**| Sweden\u00a0| sv-SE\u00a0|\r\n| **Tamil**| Singapore\u00a0| ta-SG\u00a0|\r\n| **Telugu**| India\u00a0| te-IN\u00a0|\r\n| **Thai**| Thailand\u00a0| th-TH\u00a0|\r\n| **Turkish**| Turkey\u00a0| tr-TR\u00a0|\r\n| **Ukrainian**| Ukraine\u00a0| uk-UA\u00a0|\r\n| **Urdu**| India\u00a0| ur-IN\u00a0|\r\n| **Vietnamese**| Vietnam\u00a0| vi-VN\u00a0|\r\n\r\n            \r\n\n\r\n**Permission Required:** None",
        "operationId": "Languages_GetLanguages",
        "responses": {
          "200": {
            "description": "Returns a list with the language information.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Results.Languages.GetLanguagesResults"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Results.Languages.GetLanguagesResults"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Results.Languages.GetLanguagesResults"
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication (invalid/expired token)."
          },
          "403": {
            "description": "Invalid Enterprise Subscription."
          }
        },
        "deprecated": true
      }
    },
    "/v2.0/public/projects/{projectId}/subscriptions": {
      "put": {
        "tags": [
          "Subscriptions"
        ],
        "summary": "Put Subscriptions",
        "description": "Subscribe or edit the list of email addresses that receive the notifications.\r\nCurrently, the following types of events are available for subscription:\r\n            \r\n**Data Upload Completed:** Receive a notification when an upload of data for the project\r\nis completed, including information if any errors were found. The email is only sent after\r\nthe asynchronous part of the upload is finished. Note that you will receive an email per each\r\ninput unit set uploaded. You can know more\r\nin <a href=\"#tag/Input-Units\">data upload section</a>.\r\n            \r\n**Deliverable Published:** Receive a notification when a new result file for the project is available to\r\ndownload. You can know more in the\r\n<a href=\"#tag/Deliverables\">deliverables section</a>.\r\n            \r\n**Permissions:** Update Project Properties",
        "operationId": "Subscriptions_SubmitSubscriptions",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project ID.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "00000000-0000-0000-0000-000000000000"
            }
          }
        ],
        "requestBody": {
          "description": "Subscriptions.",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Models.Subscriptions.SubscriptionViewModel"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Models.Subscriptions.SubscriptionViewModel"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Models.Subscriptions.SubscriptionViewModel"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Models.Subscriptions.SubscriptionViewModel"
                }
              }
            }
          }
        },
        "responses": {
          "202": {
            "description": "Accepted. Subscription will be configured asynchronously."
          },
          "400": {
            "description": "Invalid parameters."
          },
          "401": {
            "description": "Invalid authentication (invalid/expired token)."
          },
          "403": {
            "description": "Email consent is missing (or invalid), subscription can\u2019t be done without email consent."
          },
          "404": {
            "description": "Project does not exist."
          }
        }
      },
      "get": {
        "tags": [
          "Subscriptions"
        ],
        "summary": "Get Subscriptions",
        "description": "Retrieves a list of subscribed notifications within a specific project.\r\n            \r\n**Permissions:** Read Project Properties",
        "operationId": "Subscriptions_GetSubscriptions",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project ID.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "00000000-0000-0000-0000-000000000000"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Returns a list with project subscriptions.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Results.Subscriptions.GetSubscriptionsResults"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Results.Subscriptions.GetSubscriptionsResults"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Results.Subscriptions.GetSubscriptionsResults"
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication (invalid/expired token)."
          },
          "404": {
            "description": "Project does not exist."
          }
        }
      }
    },
    "/v2.0/public/projects/{projectId}/subscriptions/{type}": {
      "delete": {
        "tags": [
          "Subscriptions"
        ],
        "summary": "Delete Subscription",
        "description": "Allows to unsubscribe each of the existing notifications. \r\n             \r\n**Permissions**: Update Project Properties",
        "operationId": "Subscriptions_DeleteSubscription",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project ID.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "00000000-0000-0000-0000-000000000000"
            }
          },
          {
            "name": "type",
            "in": "path",
            "description": "Type of notifications. Valid values: \"DeliverablePublished\" and \"DataUploadCompleted\".",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "202": {
            "description": "Accepted. Subscription will be deleted asynchronously."
          },
          "400": {
            "description": "Invalid parameters."
          },
          "401": {
            "description": "Invalid authentication (invalid/expired token)."
          },
          "404": {
            "description": "Project does not exist / Subscription type is not configured."
          }
        }
      }
    },
    "/v2.0/public/projects/{sourceProjectId}/clone": {
      "post": {
        "tags": [
          "Project Management"
        ],
        "summary": "Clone Project",
        "description": "Cloning a project creates a copy of the setup configuration and other elements.\r\nA new project with the same configuration, properties and jobs as the source project is created.  \r\n\r\n**Permission Required:** Create Project",
        "operationId": "Projects_CloneProject",
        "parameters": [
          {
            "name": "sourceProjectId",
            "in": "path",
            "description": "Source Project ID. The project is copied from this ID.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "00000000-0000-0000-0000-000000000000"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Models.Projects.CloneProject.CloneProjectConfigurationViewModel"
                  }
                ]
              }
            },
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Models.Projects.CloneProject.CloneProjectConfigurationViewModel"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Models.Projects.CloneProject.CloneProjectConfigurationViewModel"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Models.Projects.CloneProject.CloneProjectConfigurationViewModel"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "202": {
            "description": "Accepted. Project will be cloned asynchronously.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Models.Projects.CloneProject.CloneProjectResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Models.Projects.CloneProject.CloneProjectResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Models.Projects.CloneProject.CloneProjectResult"
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters."
          },
          "401": {
            "description": "Invalid authentication (invalid/expired token)."
          },
          "404": {
            "description": "Source project does not exist."
          }
        }
      }
    },
    "/v2.0/public/projects": {
      "get": {
        "tags": [
          "Project Management"
        ],
        "summary": "Get Projects",
        "description": "Retrieves a comprehensive list of projects and the respective information about those projects associated\r\nwith an Enterprise account. This includes Projects created through the REST API and the Enterprise Portal.\r\n            \r\n**Permission Required:** List Projects",
        "operationId": "Projects_GetProjects",
        "parameters": [
          {
            "name": "pageNumber",
            "in": "query",
            "description": "The page to retrieve.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "itemsPerPage",
            "in": "query",
            "description": "The number of items to retrieve per page. The maximum number of items per page allowed is 100.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns a List with project Information.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Results.Project.GetPagedProjectsQueryResults"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Results.Project.GetPagedProjectsQueryResults"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Results.Project.GetPagedProjectsQueryResults"
                }
              }
            }
          },
          "400": {
            "description": "Invalid page number or items per page count"
          },
          "401": {
            "description": "Invalid authentication (invalid/expired token)."
          },
          "403": {
            "description": "Invalid Enterprise Subscription."
          }
        }
      }
    },
    "/v2.0/public/projects/{projectId}": {
      "get": {
        "tags": [
          "Project Management"
        ],
        "summary": "Get Project Details",
        "description": "Retrieves the information associated with a Project.\r\n            \r\n**Permission Required:** Read Project Properties",
        "operationId": "Projects_GetProjectDetails",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project ID.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "00000000-0000-0000-0000-000000000000"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Returns project details.",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Results.Project.GetProjectDetailsResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Results.Project.GetProjectDetailsResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DefinedCrowd.PublicApi.Api.Results.Project.GetProjectDetailsResult"
                }
              }
            }
          },
          "401": {
            "description": "Invalid authentication (invalid/expired token)."
          },
          "404": {
            "description": "Project does not exist."
          }
        }
      },
      "put": {
        "tags": [
          "Project Management"
        ],
        "summary": "Edit Project",
        "description": "Allows you to edit project settings such as name and desired delivery date, after creation or cloning.\r\nThe editing function stops once the first upload of input units begin and the NOT ACTIVE project state\r\nis changed.\r\n            \r\nNote: both fields must be provided to update either one of them. \r\n\r\n**Permission Required:** Update Project Properties",
        "operationId": "Projects_EditProject",
        "parameters": [
          {
            "name": "projectId",
            "in": "path",
            "description": "Project ID.",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "example": "00000000-0000-0000-0000-000000000000"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "allOf": [
                  {
                   

# --- truncated at 32 KB (153 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/definedcrowd/refs/heads/main/openapi/definedcrowd-openapi-original.json