OutSystems ODC External Library Generation API
REST endpoints for generating and managing external libraries from high-code .NET packages so ODC apps can consume custom C# logic.
REST endpoints for generating and managing external libraries from high-code .NET packages so ODC apps can consume custom C# logic.
{
"openapi": "3.0.1",
"info": {
"title": "External Library Generation Service API",
"description": "API for generating and managing external libraries from high-code packages.\n",
"version": "v1"
},
"servers": [
{
"url": "https://ODC_PORTAL_DOMAIN/api/external-libraries/v1",
"description": "Replace ODC_PORTAL_DOMAIN with the domain of your organization."
},
{
"url": "https://{odc-portal-domain}/api/external-libraries/v1",
"description": "Replace {odc-portal-domain} with the domain of your organization.",
"variables": {
"odc-portal-domain": {
"default": "ODC_PORTAL_DOMAIN",
"description": "The domain of your organization"
}
}
}
],
"paths": {
"/generation-operations": {
"post": {
"tags": [
"GenerationOperations"
],
"summary": "Generate an external library from a high-code package.",
"description": "Asynchronously generates an external library using the HighCode package, containing the compiled code of the library.\n\nRequired permissions:\n - If generation operation corresponds to a new library: **Asset management > Create**\n - If generation operation corresponds to a new version of an existing library: **Asset management > Change** for that specific library key",
"operationId": "GenerationOperations_CreateGenerationOperation",
"requestBody": {
"description": "External library generation operation creation request.",
"content": {
"application/json": {
"schema": {
"allOf": [
{
"$ref": "#/components/schemas/OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Models.GenerationOperationCreationRequest"
}
],
"description": "Request to create a generation operation."
}
}
}
},
"responses": {
"201": {
"description": "The generation operation key.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.CreationOperationResponse"
}
}
}
},
"400": {
"description": "Request is malformed.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"403": {
"description": "Insufficient permissions to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
}
},
"x-os-permissions": "Required permissions:\n - If generation operation corresponds to a new library: **Asset management > Create**\n - If generation operation corresponds to a new version of an existing library: **Asset management > Change** for that specific library key"
},
"get": {
"tags": [
"GenerationOperations"
],
"summary": "Returns the list of generation operations.",
"description": "Gets the list of all available generation operations.\n\nAPI Client needs at least one permission.",
"operationId": "GenerationOperations_GetGenerationOperations",
"responses": {
"200": {
"description": "The list of generation operations.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.GenerationOperationListResponse"
}
}
}
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"403": {
"description": "Insufficient permissions to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"410": {
"description": "Client cancelled the execution of the request.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
}
}
}
},
"/generation-operations/{operationKey}": {
"delete": {
"tags": [
"GenerationOperations"
],
"summary": "Deletes a generation operation.",
"description": "Deletes a specific generation operation and all associated logs.\n\nRequired permissions:\n - If generation operation corresponds to a new library: **Asset management > Create**\n - If generation operation corresponds to a new version of an existing library: **Asset management > Change** for that specific library key",
"operationId": "GenerationOperations_DeleteGenerationOperationByOperationKey",
"parameters": [
{
"name": "operationKey",
"in": "path",
"description": "The operation key.",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"204": {
"description": "Generation operation was successfully deleted."
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"403": {
"description": "Insufficient permissions to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"404": {
"description": "Generation Operation not found.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"405": {
"description": "Method Not Allowed",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"410": {
"description": "Client cancelled the execution of the request."
}
},
"x-os-permissions": "Required permissions:\n - If generation operation corresponds to a new library: **Asset management > Create**\n - If generation operation corresponds to a new version of an existing library: **Asset management > Change** for that specific library key"
},
"get": {
"tags": [
"GenerationOperations"
],
"summary": "Returns the details of a generation operation.",
"description": "Returns the details of a generation operation its key.\n\nAPI Client needs at least one permission.",
"operationId": "GenerationOperations_GetGenerationOperationByOperationKey",
"parameters": [
{
"name": "operationKey",
"in": "path",
"description": "The operation key.",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "The generation operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.GenerationOperationResponse"
}
}
}
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"403": {
"description": "Insufficient permissions to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"410": {
"description": "Client cancelled the execution of the request.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"404": {
"description": "Generation Operation not found."
}
}
}
},
"/generation-operations/{operationKey}/contents": {
"get": {
"tags": [
"GenerationOperations"
],
"summary": "Returns the contents of the specified generation operation.",
"description": "Returns the actions and structures defined on the high code package corresponding to the specified generation operation\n\nRequired permissions:\n - If generation operation corresponds to a new library: **Asset management > Create**\n - If generation operation corresponds to a new version of an existing library: **Asset management > Change** for that specific library key",
"operationId": "GenerationOperations_GetGenerationOperationContents",
"parameters": [
{
"name": "operationKey",
"in": "path",
"description": "The generation operation key.",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "The generation operation contents.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.GenerationOperationContentsResponse"
}
}
}
},
"400": {
"description": "Generation operation key is not a valid GUID.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"403": {
"description": "Insufficient permissions to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"404": {
"description": "generation operation not found.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"410": {
"description": "Client cancelled the execution of the request.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
}
},
"x-os-permissions": "Required permissions:\n - If generation operation corresponds to a new library: **Asset management > Create**\n - If generation operation corresponds to a new version of an existing library: **Asset management > Change** for that specific library key"
}
},
"/generation-operations/{operationKey}/log-messages": {
"get": {
"tags": [
"GenerationOperations"
],
"summary": "Get log messages.",
"description": "Returns the validation messages for the specified generation operation.\n\nRequired permissions:\n - If generation operation has no library key associated (failed to get extracted from high code): **Asset management > Create** or **Asset management > Change**\n - If generation operation corresponds to a new library: **Asset management > Create**\n - If generation operation corresponds to a new version of an existing library: **Asset management > Change** for that specific library key",
"operationId": "GenerationOperations_GetGenerationOperationLogMessages",
"parameters": [
{
"name": "operationKey",
"in": "path",
"description": "The generation operation key.",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "The generation operation details.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.GenerationOperationLogMessagesResponse"
}
}
}
},
"400": {
"description": "Generation operation key is not a valid GUID.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"403": {
"description": "Insufficient permissions to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"404": {
"description": "Generation operation not found.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"410": {
"description": "Client cancelled the execution of the request.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"429": {
"description": "Too Many Requests",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
}
},
"x-os-permissions": "Required permissions:\n - If generation operation has no library key associated (failed to get extracted from high code): **Asset management > Create** or **Asset management > Change**\n - If generation operation corresponds to a new library: **Asset management > Create**\n - If generation operation corresponds to a new version of an existing library: **Asset management > Change** for that specific library key"
}
},
"/assets/{assetKey}/revisions/{revision}/source-code-download": {
"post": {
"tags": [
"SourceCodeDownload"
],
"summary": "Create Download Operation.",
"description": "Asynchronously initiates the process to download the source code of a published external library.\n\nRequired permissions: **Asset management > Change**",
"operationId": "SourceCodeDownload_CreateDownloadOperation",
"parameters": [
{
"name": "assetKey",
"in": "path",
"description": "Key of the desired external library.",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "revision",
"in": "path",
"description": "Id of the desired revision.",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"201": {
"description": "The download operation key.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.CreationOperationResponse"
}
}
}
},
"400": {
"description": "Request is malformed.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"403": {
"description": "Insufficient permissions to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"404": {
"description": "Specified asset and revision not found.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
}
},
"x-os-permissions": "Required permissions: **Asset management > Change**"
}
},
"/assets/{assetKey}/revisions/{revision}/source-code-download/{operationKey}": {
"get": {
"tags": [
"SourceCodeDownload"
],
"summary": "Get Download Operation.",
"description": "Retrieves the current status of a download operation and the source code download URL if ready\n\nRequired permissions: **Asset management > Change**",
"operationId": "SourceCodeDownload_GetDownloadUri",
"parameters": [
{
"name": "assetKey",
"in": "path",
"description": "Key of the desired external library.",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "revision",
"in": "path",
"description": "Id of the desired revision.",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "operationKey",
"in": "path",
"description": "Key of the download operation.",
"required": true,
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "The download operation status and the source code download URL.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.SourceCodeDownload"
}
}
}
},
"400": {
"description": "Request is malformed.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"403": {
"description": "Insufficient permissions to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"404": {
"description": "Specified asset, revision or download operation not found.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"429": {
"description": "Too Many Requests",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
}
},
"x-os-permissions": "Required permissions: **Asset management > Change**"
}
},
"/uploads": {
"get": {
"tags": [
"Upload"
],
"summary": "Returns an Upload Schema.",
"description": "Returns an Upload Schema containing a pre-signed uploadURL for uploading external library source code and an associated downloadURL to retrieve the uploaded source code.\n\nRequired permissions: **Asset management > Create**",
"operationId": "Upload_UploadOperation",
"responses": {
"200": {
"description": "UploadResponse.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.UploadResponse"
}
}
}
},
"400": {
"description": "Request is malformed.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"401": {
"description": "Not authorized to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"403": {
"description": "Insufficient permissions to perform the requested operation.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
},
"429": {
"description": "Too Many Requests",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
}
}
}
}
},
"x-os-permissions": "Required permissions: **Asset management > Create**"
}
}
},
"components": {
"schemas": {
"Microsoft.AspNetCore.Mvc.ProblemDetails": {
"type": "object",
"properties": {
"type": {
"type": "string",
"description": "A URI reference that identifies the problem type.",
"nullable": true
},
"title": {
"type": "string",
"description": "A short, human-readable summary of the problem.",
"nullable": true
},
"status": {
"type": "integer",
"description": "The HTTP status code applicable to the problem.",
"format": "int32",
"nullable": true
},
"detail": {
"type": "string",
"description": "A human-readable explanation of the error.",
"nullable": true
},
"instance": {
"type": "string",
"description": "A URI that identifies the specific occurrence of the problem.",
"nullable": true
},
"traceId": {
"type": "string",
"description": "This field helps OutSystems support track and investigate specific error occurrences. Providing this identifier when reporting an issue allows for more precise and faster troubleshooting."
},
"errorCode": {
"type": "string",
"description": "This error code serves the purpose to communicate with OutSystems Support and help diagnose errors."
}
},
"description": "A standardized error response as per RFC 7807 (Problem Details for HTTP APIs)."
},
"OutSystems.ExternalLibraryGeneration.Application.Enums.ChangeType": {
"enum": [
"None",
"Added",
"Removed",
"Updated",
"Unchanged"
],
"type": "string"
},
"OutSystems.ExternalLibraryGeneration.Application.Enums.JobValidationMessageType": {
"enum": [
"None",
"Information",
"Warning",
"Error"
],
"type": "string"
},
"OutSystems.ExternalLibraryGeneration.Application.Enums.ParameterType": {
"enum": [
"None",
"Input",
"Output"
],
"type": "string"
},
"OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.ActionResponse": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Name of the action",
"nullable": true
},
"parameters": {
"type": "array",
"items": {
"$ref": "#/components/schemas/OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.ParameterResponse"
},
"description": "List of parameters of the action",
"nullable": true
},
"changeType": {
"allOf": [
{
"$ref": "#/components/schemas/OutSystems.ExternalLibraryGeneration.Application.Enums.ChangeType"
}
],
"description": "Change compared with previous version"
},
"iconBase64": {
"type": "string",
"description": "Icon of the action represented in Base64",
"nullable": true
}
},
"additionalProperties": false
},
"OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.AttributeResponse": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Name of the attribute",
"nullable": true
},
"dataType": {
"type": "string",
"description": "OutSystems data type of the attribute",
"nullable": true
},
"changeType": {
"allOf": [
{
"$ref": "#/components/schemas/OutSystems.ExternalLibraryGeneration.Application.Enums.ChangeType"
}
],
"description": "Change compared with previous version"
}
},
"additionalProperties": false
},
"OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.CreationOperationResponse": {
"type": "object",
"properties": {
"operationKey": {
"type": "string",
"description": "The operation key",
"format": "uuid"
}
},
"additionalProperties": false
},
"OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.GenerationOperationContentsResponse": {
"type": "object",
"properties": {
"actions": {
"type": "array",
"items": {
"$ref": "#/components/schemas/OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.ActionResponse"
},
"description": "List of actions defined in the HCPkg. Contains the delta for the currently published version in the update scenario",
"nullable": true
},
"structures": {
"type": "array",
"items": {
"$ref": "#/components/schemas/OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.StructureResponse"
},
"description": "List of structures defined in the HCPkg. Contains the delta for the currently published version in the update scenario",
"nullable": true
}
},
"additionalProperties": false
},
"OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.GenerationOperationListResponse": {
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"$ref": "#/components/schemas/OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.GenerationOperationResponse"
},
"description": "List of generation operations, sorted by CreatedAt descending",
"nullable": true
}
},
"additionalProperties": false
},
"OutSystems.ExternalLibraryGeneration.Service.V1Beta1.Controllers.DataObjects.GenerationOperationLogMessagesResponse": {
"type": "object",
"properties": {
"validationMessages": {
"type": "array",
"items": {
"$ref":
# --- truncated at 32 KB (41 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/outsystems/refs/heads/main/openapi/outsystems-external-library-generation-api-v1-openapi.json