Table of contents
Official Content
  • This documentation is valid for:

This API provides endpoints to create and delete Organizations, and to retrieve Organization-related data such as Projects and Requests. It allows you to fetch Project details and export request data.

Check the generic variables needed to use the API.

Endpoints

Method Path Description
POST /admin/organizations Creates a new Organization.
GET /admin/organizations Retrieves all the organizations available based on a given search criteria.
DELETE /admin/organizations/{organizationId} Deletes the created Organization.
GET /organization/assistants Returns the list of Assistants.
GET /organization/projects Returns the list of Projects.
GET /organization/project/{id} Returns Project details.
POST /organization/project Creates a Project.
PUT /organization/project/{id} Updates a Project.
DELETE /organization/project/{id} Deletes a Project.
GET /organization/project/{id}/tokens Returns the list of Tokens for the Project.
GET /accessControl/apitoken/validate Returns Organization and Project information.
GET /organization/request/export Exports request data.
POST /projects/tokens Creates a new API Token for a specific Project.
PUT /projects/tokens/{ApiTokenId} Updates an API Token definition.
GET /projects/tokens/{ApiTokenId} Returns details of a specific API Token.
DELETE /projects/tokens/{ApiTokenId} Deletes a specific API Token.
POST /v2/projects/providers Adds a provider to the specified Project and registers its models.
DELETE /v2/projects/models/{modelId} Deletes a model override configured for a Project.
GET /v2/projects/providers Returns the list of providers configured for the given project.
GET /v2/projects/providers/{providerName}/models Returns all models for the specified provider within the given project, along with provider metadata and selection state.
GET /v2/projects/{projectId}/users Returns a paginated list of users that belong to the specified project.
POST /v2/projects/{projectId}/initializations/roles Ensures that all standard project roles are created for the specified project.
GET /v2/projects/providers Retrieve all providers and models for the project scope.
GET /v2/projects/providers/{providerName}/models Retrieve all models for a specific provider in the project scope.
PUT /$BASE_URL/v2/organizations/models/applyChanges Requests an availability-status update for a set of models at Organization level.

Note: Keep in mind that the searchProfiles parameter refers to RAG Assistants.

Authentication

All endpoints require authentication using one of the following:

  • Authorization: Bearer $GEAI_APITOKEN
  • Authorization: Bearer $OAuth_accesstoken

Some endpoints may require additional headers such as:

  • Content-Type: application/json
  • Accept: application/json

POST /admin/organizations

Creates a new Organization with predefined Agents that will be auto-published as Solutions. You can optionally control whether the default Agents are created and whether invitation emails are sent to the organization administrator.

This endpoint requires a $OAuth_accesstoken from the System Administrator role.

Request

  • Method: POST
  • Path: $BASE_URL/v2/admin/organizations
Request Body
{
  "name":                    "string",  // Organization Name
  "administratorUserEmail":  "string",  // Must be a valid email with user assigned as the Organization member role.
  "createDefaultAgents":     "string",  // Controls whether default Agents are created in the organization's Default project. Values: "enabled" or "disabled". Default: "enabled".
  "sendNotificationEmail":   "string"   // Controls whether invitation emails are sent to organization members. Values: "enabled" or "disabled". Default: "enabled".
}

Response

{
  "administratorUserEmail": "string", // Valid email with user assigned as the Organization member role
  "id": "string",                     // Unique identifier for the organization (UUID)
  "name": "string",                   // Name of the Organization
  "projects": [                   // List of Projects associated with the Organization
    {
      "projectDescription": "string", // Description of the Project
      "projectId": "string",          // Unique identifier for the Project (UUID)
      "projectName": "string",        // Name of the Project
      "tokens": [                 // List of tokens associated with the pPoject
        {
          "description": "string", // Description of the token
          "id": "string",          // Unique identifier for the token
          "name": "string",        // Name of the token
          "status": "string",      // Status of the token (e.g., "Active")
          "timestamp": "string"    // Timestamp when the token was created or updated (ISO 8601 format)
        }
        // ... additional token
      ]
    }
    // ... additional Project 
  ],
  "tokens": [ // List of tokens associated with the Organization
    {
      "description": "string", // Description of the token
      "id": "string",          // Unique identifier for the token
      "name": "string",        // Name of the token
      "status": "string",      // Status of the token (e.g., "Active")
      "timestamp": "string"    // Timestamp when the token was created or updated (ISO 8601 format)
    }
    // ... additional token 
  ]
}

cURL Sample

curl -X POST "$BASE_URL/v2/admin/organizations" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OAuth_accesstoken" \
  -d '{
    "name": "Organization Name",
    "administratorUserEmail": "user@domain.com",
    "createDefaultAgents": "disabled",
    "sendNotificationEmail": "disabled"
}'

GET /admin/organization

Retrieves all the organizations available based on a given search criteria.

Parameters

Name Type Description
startPage number Starting point for paging.
pageSize number Maximum amount of items that will be returned.
orderKey string Attribute in which will be based the order (only name will be considered for now).
orderDirection string Order direction can be asc or desc (desc is the default value).
filterKey string Attribute in which will be based the filter (only name will be considered for now).
filterValue string String value to be used as a filter.

Request

  • Method: GET
  • Path: $BASE_URL/v2/admin/organizations
  • Request Body: Empty

Response

A successful request returns a 200 status code and the details of the retrieved API Token.

{
  "count": integer, // Total number of organizations matching the search criteria.
  "pages": integer, // Total number of pages available.
  "organizations": 
    {
      "id": "string", // Unique identifier for the organization.
      "isStationAvailable": boolean,                   // Indicates if the station is available for the organization.
      "name": "string"                            // Name of the organization.
    },
    {
      "id": "string", // Unique identifier for the organization.
      "isStationAvailable": boolean,                   // Indicates if the station is available for the organization.
      "name": "string"                            // Name of the organization.
    },
    {
      "id": "string", // Unique identifier for the organization.
      "isStationAvailable": boolean,                   // Indicates if the station is available for the organization.
      "name": "string"                            // Name of the organization.
    }
  
}

cURL Sample

curl -X GET
'$BASE_URL/v2/admin/organizations?startPage=1&pageSize=20&orderKey=name&orderDirection=asc&filterKey=name&filterValue=MyOrganizationsName'
  -H "Authorization: Bearer $OAuth_accesstoken" \

DELETE /admin/organizations/{OrganizationId}

Deletes an Organization. This operation performs a hard delete, permanently removing the Organization and all related data. Use it with caution, since the following information will be irreversibly deleted: requests, quota limit definitions, statistics, and any other associated records.

This endpoint requires a $OAuth_accesstoken from the System Administrator role.

Parameters

Name Type Description
organizationId string Organization id that will be deleted.

Request

  • Method: DELETE
  • Path: $BASE_URL/v2/admin/organizations/{OrganizationId}
  • Request Body: Empty

Response

StatusCode 200 is shown when successfully deleted; otherwise, 400* is displayed with a collection of errors.

cURL Sample

curl -X DELETE "$BASE_URL/v2/admin/organizations/{organizationId}" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer  $OAuth_accesstoken" \

GET /organization/assistants

Returns a list of Assistants.

Parameters

Name Type Description
detail string Defines the level of detail required. The available options are summary (default) or full (optional).

Request

  • Method: GET
  • Path: $BASE_URL/v1/organization/assistants
  • Request Body: Empty

Response

Using the default summary option will only show the first level. The full option will display revision details and Assistant composition:

{
  "assistants": [
    {
      "assistantId": "string",
      "assistantName": "string",
      "intents": [ /* full option */
        {
          "assistantIntentDefaultRevision": "number",
          "assistantIntentDescription": "string",
          "assistantIntentId": "string",
          "assistantIntentName": "string",
          "revisions": [
            {
              "metadata": [
                {
                  "key": "string",
                  "type": "string",
                  "value": "string"
                },
                ...
              ],
              "modelId": "string",
              "modelName": "string",
              "prompt": "string",
              "providerName": "string",
              "revisionDescription": "string",
              "revisionId": "string",
              "revisionName": "string",
              "timestamp": "timestamp"
            },
            ...
          ]
        }
      ]
    },
    ...
  ],
  "projectId": "string",
  "projectName": "string"
}

This endpoint's response depends on whether the Project has activated the role and permission scheme described in Activating the Scheme in an Existing Project. Projects that have not activated the scheme return the complete list of Assistants by default. Projects that have activated the scheme, and all new Projects, require the include-all: true header to return the complete list.

Without this header, Projects that have activated the scheme return an empty list.

cURL Sample

curl -X GET "$BASE_URL/v1/organization/assistants" \
    -H "Authorization: Bearer $GEAI_APITOKEN" \
    -H "Accept: application/json" \
    -H "include-all: true"   # Allows you to get the complete Assistants list
# using the full detail option change the URL to
$BASE_URL/v1/organization/assistants?detail=full

Keep an eye on the returned assistantId element that is needed for other related APIs.

GET /organization/projects

Gets a list of Projects.

This endpoint requires a Glob.AI OS AI API token with Organization scope.

Parameters

Name Type Description
detail string Defines the level of detail required. The available options are summary (default) or full (optional).
name string Searches by Project name (equals) (optional).

Active Projects will be listed by default. To list all Projects, use the full detail option.

Request

  • Method: GET
  • Path: $BASE_URL/v1/organization/projects
  • Request Body: Empty

Response

{
  "projects": [
    {
      "projectActive": "boolean",
      "projectDescription": "string",
      "projectId": "string",
      "projectName": "string",
      "projectStatus": "integer" /* 0:Active, 2:Hidden */
    },
    ...
  ]
}

cURL Sample

curl -X GET "$BASE_URL/v1/organization/projects" \
  -H "Authorization: Bearer $GEAI_APITOKEN" \
  -H "Accept: application/json"
# using the full detail option change the URL to
$BASE_URL/v1/organization/projects?detail=full
# using the name option filter change the URL to
$BASE_URL/v1/organization/projects?name=projectName

Keep an eye on the returned projectId item value that is needed for other related APIs.

GET /organization/project/{id}

Returns Project details.

This endpoint supports Glob.AI OS AI API tokens with either Organization scope or Project scope.

Parameters

Name Type Description
id string GUID Project id (required)

Request

  • Method: GET
  • Path: $BASE_URL/v1/organization/project/{id}
  • Request Body: Empty

Response

{
  "organizationId": "string",
  "organizationName": "string",
  "projectActive": "boolean",
  "projectDescription": "string",
  "projectId": "string",
  "projectName": "string",
  "projectStatus": "integer" /* 0:Active, 2:Hidden */,
  "searchProfiles": [
    {
      "name": "string",
      "description": "string"
    },
    ...
  ]
}

If the Project has a usage limit applied, the response will include information regarding the usage limit. Otherwise, the Project details are returned as follows:

{
  "organizationId": "string",
  "organizationName": "string",
  "projectActive": "boolean",
  "projectDescription": "string",
  "projectId": "string",
  "projectName": "string",
  "projectStatus": "integer" /* 0:Active, 2:Hidden */,
  "searchProfiles": [
    {
      "name": "string",
      "description": "string"
    }
  ],
  "tokens": [
    {
      "description": "string",
      "id": "string",
      "name": "string",
      "status": "string" /* Active, Blocked */,
      "timestamp": "timestamp"
    }
  ],
  "usageLimit": {
    "hardLimit": "number", // Upper usage limit
    "id": "string", // Usage limit ID
    "relatedEntityName": "string", // Name of the related entity
    "remainingUsage": "number", // Remaining usage
    "renewalStatus": "string", // Renewal status (Renewable, NonRenewable)
    "softLimit": "number", // Lower usage limit
    "status": "integer", // Status (1: Active, 2: Expired, 3: Empty, 4: Cancelled)
    "subscriptionType": "string", // Subscription type (Freemium, Daily, Weekly, Monthly)
    "usageUnit": "string", // Usage unit (Requests, Cost)
    "usedAmount": "number", // Amount used (decimal or scientific notation)
    "validFrom": "timestamp", // Start date of the usage limit
    "validUntil": "timestamp" // Expiration or renewal date
  }
}

cURL Sample

curl -X GET "$BASE_URL/v1/organization/project/{id}" \
 -H "Authorization: Bearer $GEAI_APITOKEN" \
 -H "accept: application/json"

POST /organization/project

Creates a new Project.

This endpoint requires a Glob.AI OS AI API token with Organization scope.

Request

  • Method: POST
  • Path: $BASE_URL/v1/organization/project

Request Body

{
  "name": "string",
  "description": "string",
  "administratorUserEmail": "mail@domain.com"
}

Note that the administratorUserEmail parameter can only be used if How to Update to the Roles and Permissions Management System has been completed.

You can provide only the Project details, or optionally include the usageLimit parameter to define usage restrictions on the Project.

{
  "name": "string",
  "description": "string",
  "administratorUserEmail": "mail@domain.com",
  "usageLimit": {
    "subscriptionType": "string", // Options: Freemium, Daily, Weekly, Monthly
    "usageUnit": "string", // Options: Requests, Cost
    "softLimit": "number", // Soft limit for usage (lower threshold)
    "hardLimit": "number", // Hard limit for usage (upper threshold)
    "renewalStatus": "string" // Options: Renewable, NonRenewable
  }
}

The value of hardLimit must always be greater than or equal to softLimit, since both define the Project usage thresholds.

As for renewalStatus, if the subscription type is Freemium, this option will always be NonRenewable, since Freemium limits are not renewed over time.

Response

{
  "projectActive": "boolean",
  "projectDescription": "string",
  "projectId": "string",
  "projectName": "string",
  "projectStatus": "integer" /* 0:Active, 2:Hidden */,
  "searchProfiles": [
    {
      "name": "string",
      "description": "string"
    },
    ...
  ],
  "tokens": [
    {
      "description": "string",
      "id": "string",
      "name": "string",
      "status": "string" /* Active, Blocked */,
      "timestamp": "timestamp"
    },
    ...
  ]
}

Note that token elements (default API Tokens) are only returned at Project creation time. You can retrieve them using the GET Tokens endpoint.

If the optional usageLimit parameter is included when creating a Project, the response will include additional information about the applied usage limits:

{
  "projectActive": "boolean",
  "projectDescription": "string",
  "projectId": "string",
  "projectName": "string",
  "projectStatus": "integer" /* 0:Active, 2:Hidden */,
  "searchProfiles": [
    {
      "name": "string",
      "description": "string"
    }
  ],
  "tokens": [
    {
      "description": "string",
      "id": "string",
      "name": "string",
      "status": "string" /* Active, Blocked */,
      "timestamp": "timestamp"
    }
  ],
  "usageLimit": {
    "hardLimit": "number", // Upper usage limit
    "id": "string", // Usage limit ID
    "relatedEntityName": "string", // Name of the related entity
    "remainingUsage": "number", // Remaining usage
    "renewalStatus": "string", // Renewal status (Renewable, NonRenewable)
    "softLimit": "number", // Lower usage limit
    "status": "integer", // Status (1: Active, 2: Expired, 3: Empty, 4: Cancelled)
    "subscriptionType": "string", // Subscription type (Freemium, Daily, Weekly, Monthly)
    "usageUnit": "string", // Usage unit (Requests, Cost)
    "usedAmount": "number", // Amount used (decimal or scientific notation)
    "validFrom": "timestamp", // Start date of the usage limit
    "validUntil": "timestamp" // Expiration or renewal date
  }
}

When the creation is not successful, StatusCode 400* will be shown with a collection of errors:

{
  "errors": [
    {
      "id": "integer",
      "description": "string"
    },
    ...
  ]
}

cURL Sample

curl -X POST "$BASE_URL/v1/organization/project" \
 -H "Authorization: Bearer $GEAI_APITOKEN" \
 -H "accept: application/json" \
 -d '{
      "name": "my Project",
      "description": "My awesome Project",
      "administratorUserEmail": "myemail@globant.com"
 }'
curl -X POST "$BASE_URL/v1/organization/project" \
 -H "Authorization: Bearer $GEAI_APITOKEN" \
 -H "accept: application/json" \
 -d '{
  "name": "my Project",
  "description": "My awesome Project",
  "administratorUserEmail": "myemail@globant.com",
  "usageLimit": {
    "subscriptionType": "Monthly",
    "usageUnit": "Requests",
    "softLimit": 1,
    "hardLimit": 2,
    "renewalStatus": "Renewable"
  }
}'

PUT /organization/project/{id}

Updates a Project.

This endpoint requires a Glob.AI OS AI API token with Organization scope.

Parameters

Name Type Description
id string GUID Project id (required)

Request

  • Method: PUT
  • Path: $BASE_URL/v1/organization/project/{id}

Request Body

{
  "name": "string", /* Required */
  "description": "string"
}

Response

{
  "projectActive": "boolean",
  "projectDescription": "string",
  "projectId": "string",
  "projectName": "string",
  "projectStatus": "integer" /* 0:Active, 2:Hidden */,
  "searchProfiles": [
    {
      "name": "string",
      "description": "string"
    },
    ...
  ]
}

When the creation is not successful, StatusCode 400* will be shown with a collection of errors.

cURL Sample

curl -X PUT "$BASE_URL/v1/organization/project/{id}" \
 -H "Authorization: Bearer $GEAI_APITOKEN" \
 -H "accept: application/json" \
 -d '{
  "name":"Sample Project",
  "description":"sample Project description updated"
}'

DELETE /organization/project/{id}

Deletes a Project.

This endpoint requires a Glob.AI OS AI API token with Organization scope.

Parameters

Name Type Description
id string GUID Project id (required)

Request

  • Method: DELETE
  • Path: $BASE_URL/v1/organization/project/{id}
  • Request Body: Empty

Response

StatusCode 200 is shown when successfully deleted; otherwise, 400* is displayed with a collection of errors.

cURL Sample

curl -X DELETE "$BASE_URL/v1/organization/project/{id}" \
 -H "Authorization: Bearer $GEAI_APITOKEN" \
 -H "accept: application/json"

GET /organization/project/{id}/tokens

Gets the list of API tokens for the Project.

This endpoint requires a Glob.AI OS AI API token with Organization scope.

Parameters

Name Type Description
id string GUID Project id (required)

Request

  • Method: GET
  • Path: $BASE_URL/v1/organization/project/{id}/tokens
  • Request Body: Empty

Response

{
  "tokens": [
    {
      "description": "string",
      "id": "string",
      "name": "string",
      "status": "string" /* options can be "Active", "Blocked" or "Revoked" */,
      "timestamp": "timestamp"
    },
    ...
  ]
}

cURL Sample

curl -X GET "$BASE_URL/v1/organization/project/{id}/tokens" \
 -H "Authorization: Bearer $GEAI_APITOKEN" \
 -H "accept: application/json"

GET /accessControl/apitoken/validate

Returns information about the Organization and Project related to the provided API token.

This endpoint supports Glob.AI OS AI API tokens with either Organization scope or Project scope.

Request

  • Method: GET
  • Path: $BASE_URL/v1/accessControl/apitoken/validate
  • Request Body: Empty

Response

If the endpoint execution is successful, it will return a Status 200 OK with the Organization data. In the case of a Project API token, the Project data will be included.
If the API token does not exist or is inactive, the status will be 401.

{
    "organizationId": "String (GUID)",
    "organizationName": "String",
    "projectId": "String (GUID)",
    "projectName": "String",
    "scope":  "String" /* Options: Pia.Data.Organization, Pia.Data.Project */
}

cURL Sample

curl -X GET "$BASE_URL/v1/accessControl/apitoken/validate" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $GEAI_APITOKEN"

GET /organization/request/export

Exports request data.

This endpoint requires a Glob.AI OS AI API token with Project scope.

Parameters

Name Type Description
assistantName string Assistant name (optional)
status string Status (optional)
skip integer Number of entries to skip (optional)
count integer Number of entries to retrieve (optional)

Request

  • Method: GET
  • Path: $BASE_URL/v1/organization/request/export
  • Request Body: Empty

Response

{
  "items": [
    {
      "assistant": "string",
      "intent": "string",
      "timestamp": "string",
      "prompt": "string",
      "output": "string",
      "inputText": "string",
      "status": "string"
    },
    ...
  ]
}

cURL Sample

curl -X GET "$BASE_URL/v1/organization/request/export?assistantName=example&status=succeeded&count={count}&skip={skip}" \
  -H "Authorization: Bearer $GEAI_APITOKEN" \
  -H "Accept: application/json"

POST /projects/tokens

Creates a new API Token for a specific Project.

This endpoint requires a Glob.AI OS AI API token with Organization scope.

Request

  • Method: POST
  • Path: $BASE_URL/v2/projects/tokens

Request Body:

{
  "name": "string",             // Name of the API Token that will be created.
  "description": "string"           // Brief description of the API Token that will be created.
}

Response

A successful request returns a 201 status code and the details of the created API Token.

{
  "description": "string",          // Should match with the requested description.
  "id": "string",                //{ApiTokenId} to be used in other endpoints.
  "name": "string",             // Should match with the requested name.
  "scope": "string",            // The scope of permissions granted by this API Token (e.g., access to specific resources or APIs).
  "status": "string",            // The current status of the API Token (options can be "Active", "Blocked" or "Revoked").
  "timestamp": "string"      // The timestamp indicating when the API Token was created.
}

cURL Example

curl -X POST "$BASE_URL/v2/projects/tokens" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $GEAI_APITOKEN" \
  -H "project-id: $GEAI_PROJECT_ID" \
  -d '{
    "Name": "My API Token",
    "Description": "Used for testing"
  }'

PUT /projects/tokens/{ApiTokenId}

Updates an API Token definition.

This endpoint supports Glob.AI OS AI API tokens with either Organization scope or Project scope.

Parameters

Name Type Description
ApiTokenId string API Token id (required)

Request

  • Method: PUT
  • Path: $BASE_URL/v2/projects/tokens/{ApiTokenId}

Request Body

{
  "description": "string"           // Updated text to be published.
}

Response

A successful request returns a 200 status code and the details of the updated API Token.

{
  "description": "string",          // Should match with the updated requested description.
  "id": "string",               //{ApiTokenId}.
  "name": "string",             // Should match with the update requested.
  "scope": "string",            // The scope of permissions granted by this API Token (e.g., access to specific resources or APIs).
  "status": "string",            // The current status of the API Token (options can be "Active", "Blocked" or "Revoked"). Might be updated upon request.
  "timestamp": "string",         // The timestamp indicating when the API Token was last updated.
}

cURL Example

curl -X PUT "$BASE_URL/v2/projects/tokens/{ApiTokenId}" \
  -H "Content-Type: application/json" \
  -H "Authorization:Bearer $GEAI_APITOKEN" \
  -d '{
    "description": "Updated description"
  }'

GET /projects/tokens/{ApiTokenId}

Returns details of a specific API Token.

This endpoint requires a Glob.AI OS AI API token with Organization scope.

Parameters

Name Type Description
ApiTokenId string API Token id (required)

Request

  • Method: GET
  • Path: $BASE_URL/v2/projects/tokens/{ApiTokenId}
  • Request Body: Empty

Response

A successful request returns a 200 status code and the details of the retrieved API Token.

{
  "description": "string",          // Should match with the API Token description.
  "id": "string",               //{ApiTokenId}.
  "name": "string",             // Should match with the API Token requested.
  "scope": "string",            // The scope of permissions granted by this token (e.g., access to specific resources or APIs).
  "status": "string",            // The current status of the API Token (options can be "Active", "Blocked" or "Revoked"). Might be updated upon request.
  "timestamp": "string",         // The timestamp indicating when the API Token was last updated.
}

cURL Sample

curl -X GET "$BASE_URL/v2/projects/tokens/{ApiTokenId}" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $GEAI_APITOKEN"

DELETE /projects/tokens/{ApiTokenId}

Deletes a specific API Token.

This endpoint requires a Glob.AI OS AI API token with Organization scope.

Parameters

Name Type Description
ApiTokenId string API Token id (required)

Request

  • Method: DELETE
  • Path: $BASE_URL/v2/projects/tokens/{ApiTokenId}
  • Request Body: Empty

Response

StatusCode 200 is shown when successfully deleted; otherwise, 400* is displayed with a collection of errors.

cURL Example

curl -X DELETE "$BASE_URL/v2/projects/tokens/{ApiTokenId}" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $GEAI_APITOKEN"

POST /v2/projects/models/addProvider/{providerName}

Adds a provider to the specified Project and registers its models. Returns the list of models available to the Project for the provider.

This endpoint requires a Glob.AI OS AI API token with Organization scope.

Request

  • Method: POST
  • Path: $BASE_URL/v2/projects/models/addProvider/{providerName}
  • Body: Empty.

Response

[
  {
    "fullName": "string",         // Fully-qualified provider and model name (e.g., "openai/gpt-4.1")
    "modelId": "string",          // Internal UUID of the model within the platform
    "modelName": "string",        // Model identifier/name from the provider (e.g., "gpt-4.1")
    "organizationId": "string",   // UUID of the owning organization
    "origin": "string",           // How the entry was introduced (e.g., "override")
    "projectId": "string",        // UUID of the project where the model is registered
    "providerName": "string"      // Provider key (e.g., "openai")
  }
// repeats node for every model
]

cURL Sample

curl --request POST \
  --url https://api.beta.saia.ai/v2/projects/models/addProvider/openai \
  --header "authorization: Bearer $GEAI_ORGANIZATION_APITOKEN" \
  --header "content-type: application/json" \
  --header "project-id: $GEAI_PROJECT_ID"

DELETE /v2/projects/models/{modelId}

Deletes a model override configured for a Project.

This endpoint requires a Glob.AI OS AI API token with Organization scope.

Request

  • Method: DELETE
  • Path: $BASE_URL/v2/projects/models/{modelId}
  • Body: Empty

Response

  • 204 No Content — The model override was successfully removed from the specified project. No response body is returned.

cURL Sample

curl --request DELETE \
  "$BASE_URL/v2/projects/models/openai-gpt-5" \
  --header "Authorization: Bearer $GEAI_ORGANIZATION_APITOKEN" \
  --header "Content-Type: application/json" \
  --header "project-id: $GEAI_PROJECT_ID"

GET /v2/projects/providers

Returns the list of providers configured for the given project, including their organization-level status and project selection state.

This endpoint requires $GEAI_ORGANIZATION_APITOKEN.

Request

  • Method: GET
  • Path: $BASE_URL/v2/projects/providers
  • Body: Empty

Response

{
  "providers":  "Embedding" | "Rerank" | "Image" | "Audio")
        }
      ,
      "name": "string",                            // Provider key/name (e.g., "anthropic", "openai", "nvidia")
      "providerScope": "string",                   // Provider scope (e.g., "System")
      "selectedModelsCount": integer,              // Count of selected models for this provider in the project
      "totalModelsCount": integer,                 // Total number of models available under this provider
      "unselectedModelsCount": integer             // Count of unselected models for this provider
    }
  ' target='_blank'>                                  // Array of Model objects under this provider
        {
          "description": "string",                 // Human-readable summary of the model (optional)
          "fullName": "string",                    // Fully-qualified model name (e.g., "anthropic/claude-sonnet-4-6")
          "id": "string",                          // Model GUID
          "isDisabledByOrg": boolean,              // True if disabled at the organization level
          "isSelected": boolean,                   // True if selected/enabled for the project
          "name": "string",                        // Short model name (e.g., "claude-sonnet-4-6")
          "type": "string"                         // Model category (e.g., "Chat" ' target='_blank'> "Embedding" | "Rerank" | "Image" | "Audio")
        }
      ,
      "name": "string",                            // Provider key/name (e.g., "anthropic", "openai", "nvidia")
      "providerScope": "string",                   // Provider scope (e.g., "System")
      "selectedModelsCount": integer,              // Count of selected models for this provider in the project
      "totalModelsCount": integer,                 // Total number of models available under this provider
      "unselectedModelsCount": integer             // Count of unselected models for this provider
    }
  
}

Sample cURL

curl --request GET \
  --url "$BASE_URL/v2/projects/providers" \
  --header "accept: application/json" \
  --header "content-type: application/json" \
  --header "authorization: Bearer $GEAI_ORGANIZATION_APITOKEN" \
  --header "project-id: $GEAI_PROJECT_ID"

GET /v2/projects/providers/{providerName}/models

Returns all models for the specified provider within the given project, along with provider metadata and selection state.

Request

  • Method: GET
  • URL: $BASE_URL/v2/projects/providers/{providerName}/models
  • Body: Empty

Response

{
  "description": "string",                // Provider description
  "friendlyName": "string",               // Human-friendly provider name (e.g., "Anthropic")
  "isSelected": boolean,                  // True if provider is selected/enabled for the project
  "models":  "Embedding" | "Rerank" | "Image" | "Audio"
    }
  ,
  "name": "string",                       // Provider key/name as stored (may differ in case from path)
  "providerScope": "string",              // Provider scope (e.g., "System")
  "selectedModelsCount": integer,         // Number of selected models for this provider
  "totalModelsCount": integer,            // Total models available under this provider
  "unselectedModelsCount": integer        // Number of unselected models for this provider
}

cURL Sample

curl --request GET \
  --url "$BASE_URL/v2/projects/providers/anthropic/models" \
  --header "authorization: Bearer $GEAI_APITOKEN" \
  --header "project-id: $GEAI_PROJECT_ID" \
  --header "accept: application/json" \
  --header "content-type: application/json"

GET /v2/projects/{projectId}/users

Returns a paginated list of users that belong to the specified project. Supports optional filtering by a search term that matches user name or email.

Request

  • Method: GET
  • Path:: $BASE_URL’v2/projects/{projectId}/users
  • Body:: Empty

Parameters

Name Type Description
search string (optional) Filter users by name or email containing the search term.
page integer (optional) Page number to retrieve (pagination).
limit integer (optional) Number of users to return per page.

Response

{
  "count": integer,                 // Total number of users matching the criteria
  "pages": integer,                 // Total number of pages
  "users":                         // List of users
    {
      "userId": "string",           // User ID (UUID)
      "userName": "string",         // User's full name
      "userEmail": "string"         // User's email address
    }
  
}

cURL Sample

curl --request GET \
  --url "$GEAI_BASE_URL/v2/projects/{projectId}/users?search=Station&page=1&limit=20" \
  --header "authorization: Bearer $Oauth_Accesstoken" \
  --header "content-type: application/json" \
  --header "project-id: $GEAI_PROJECT_ID"

Ensure Project Roles API

The Ensure Project Roles API guarantees that all required project roles exist for a given project in Globant Enterprise AI. It validates the project’s initialization status first, and then creates any missing standard roles so the project functions correctly. The operation is idempotent: if all roles already exist, no changes are made.

Endpoints

  • POST /v2/projects/{projectId}/initializations/roles — Validates project initialization and ensures all required roles exist.

Authentication

All endpoints require authentication using one of the following: - Authorization: Bearer $GEAI_APITOKEN - Authorization: Bearer $OAUTH_ACCESS_TOKEN

For $OAUTH_ACCESS_TOKEN, include the header: - ProjectId: $GEAI_PROJECT_ID

Typical additional headers: - Accept: application/json - Content-Type: application/json (if a request body is sent; this endpoint does not require one)

Required permissions: - The caller must have at least Project Member access to the target project.

POST /v2/projects/{projectId}/initializations/roles

Ensures that all standard project roles are created for the specified project. The endpoint first validates the project’s initialization status. If the project is not in a valid state for role creation, it returns an appropriate error. If valid, it creates any missing roles and returns a summary.

Request

  • Method: POST
  • Path: $BASE_URL/v2/projects/{projectId}/initializations/roles
  • Body: Empty

Response

json
{
  "projectId": "string",                      // The project identifier.
  "initializationStatus": "string",           // "ready" | "notInitialized" | "inProgress"
  "ensuredAt": "string",                      // ISO-8601 timestamp of the ensure operation.
  "created": integer,                         // Number of roles created during this call.
  "skipped": integer,                         // Number of roles that already existed.
  "createdRoles":  "string" ,               // List of role names or IDs that were created.
  "existingRoles":  "string" ,              // List of role names or IDs that already existed.
  "message": "string"                         // Human-readable summary of the outcome.
}

cURL Sample

curl --location --request POST "$BASE_URL/v2/projects/$PROJECT_ID/initializations/roles" \
  --header "Authorization: Bearer $GEAI_APITOKEN" \
  --header "Accept: application/json"

Providers & Models (LLMs) Project-level Overrides API

The Providers & Models (LLMs) Project-level Overrides API allows you to manage model enablement per project in Globant Enterprise AI. Project overrides follow the same criteria as Organization-level overrides, but at the Project level they must be a subset of the Organization-level settings. When present, a project override takes precedence over model sets assigned to the project.

Endpoints

Method Path Description
POST /v2/projects/models/{modelIdOrName} Add a project model override by model ID or provider-model name.
DELETE /v2/projects/models/{modelIdOrName} Remove a project model override by model ID or provider-model name.
GET /v2/projects/models List all model overrides configured at the project level.
POST /v2/projects/models/addProvider/{providerName} Create overrides for all models from a specific provider.
POST /v2/projects/models/deleteProvider/{providerName} Delete overrides for all models from a specific provider.
POST /v2/projects/models/deleteAll Delete all model overrides for the project.
PUT /v2/projects/models/applyChanges Apply a set of model override changes (create/remove in bulk).
GET /v2/projects/providers Get all providers and their models in the project scope.
GET /v2/projects/providers/{providerName}/models Get all models for a specific provider in the project scope.

Authentication

All endpoints require one of the following:

  • OAuth access token with required role:
  • Authorization: Bearer $OAUTH_ACCESS_TOKEN
  • Required roles: ProvisioningServices, GAM Administrator, or Organization member.

  • API Token (Organization scope only):

  • Authorization: Bearer $GEAI_APITOKEN

Required headers for all requests: - project-id: $PROJECT_ID - Accept: application/json - Content-Type: application/json (for requests with a body)

Notes: - For model “Name” input in path parameters, the format must be Provider-Model (hyphen), e.g., openai-gpt-5. - Project-level overrides must be a subset of what is allowed at the Organization level. - Overrides (origin = "override") take precedence over set-based definitions.


POST /v2/projects/models/{modelIdOrName}

Add a project model override.

  • Description: Creates an override entry for the provided model in the project, with origin "override". Overrides take precedence over set definitions.
  • Method: POST
  • URL: $BASE_URL/v2/projects/models/{modelIdOrName}

Parameters: - Path: - modelIdOrName: string (required) — Model GUID or provider-model name. If name is provided, it must be in the format Provider-Model (e.g., openai-gpt-5). - Headers: - project-id: string (required) — Project GUID. - Authorization: string (required) — Bearer token (OAuth with proper role or organization-scoped API token).

Request: - Body: empty

Response (200 OK) example:

{
  "fullName": "string",           // Provider/Model full name in 'provider/model' format (e.g., "openai/gpt-5.4")
  "modelId": "string",            // Model GUID
  "modelName": "string",          // Model name (e.g., "gpt-5.4")
  "organizationId": "string",     // Organization GUID
  "origin": "string",             // Override origin; value is "override"
  "projectId": "string",          // Project GUID
  "providerName": "string"        // Provider name (e.g., "openai")
}

Sample cURL:

curl -X POST "$BASE_URL/v2/projects/models/openai-gpt-5" \
  -H "Authorization: Bearer $OAUTH_ACCESS_TOKEN" \
  -H "project-id: $PROJECT_ID" \
  -H "Accept: application/json"

DELETE /v2/projects/models/{modelIdOrName}

Remove a project model override.

  • Description: If an override exists for the given model, remove it so the model falls back to definitions from assigned set(s).
  • Method: DELETE
  • URL: $BASE_URL/v2/projects/models/{modelIdOrName}

Parameters: - Path: - modelIdOrName: string (required) — Model GUID or provider-model name in Provider-Model format when using name. - Headers: - project-id: string (required) - Authorization: string (required)

Request: - Body: empty

Response: - 204 No Content — Override removed. - 404 Not Found — No override exists.

Sample cURL:

curl -X DELETE "$BASE_URL/v2/projects/models/openai-gpt-5" \
  -H "Authorization: Bearer $OAUTH_ACCESS_TOKEN" \
  -H "project-id: $PROJECT_ID" \
  -H "Accept: application/json"

GET /v2/projects/models

List project model overrides.

  • Description: Returns all model overrides configured for the project.
  • Method: GET
  • URL: $BASE_URL/v2/projects/models

Parameters: - Headers: - project-id: string (required) - Authorization: string (required)

Request: - Body: empty

Response (200 OK) example:

{
  "organizationId": "string",   // Organization GUID
  "overrideModels":            // List of override entries
    {
      "fullName": "string",     // Provider/Model (e.g., "openai/gpt-5.4")
      "modelId": "string",      // Model GUID
      "modelName": "string",    // Model name
      "origin": "string",       // "override"
      "providerName": "string"  // Provider name
    }
  ,
  "projectId": "string"         // Project GUID
}

Sample cURL:

curl -X GET "$BASE_URL/v2/projects/models" \
  -H "Authorization: Bearer $OAUTH_ACCESS_TOKEN" \
  -H "project-id: $PROJECT_ID" \
  -H "Accept: application/json"

POST /v2/projects/models/addProvider/{providerName}

Add all models override from a specific provider.

  • Description: Creates overrides (origin "override") for all models under the specified provider within the project.
  • Method: POST
  • URL: $BASE_URL/v2/projects/models/addProvider/{providerName}

Parameters: - Path: - providerName: string (required) — Provider name (e.g., "openai"). - Headers: - project-id: string (required) - Authorization: string (required)

Request: - Body: empty

Response (200 OK) example:


  {
    "fullName": "string",         // Provider/Model (e.g., "openai/gpt-4o")
    "organizationId": "string",   // Organization GUID
    "modelId": "string",          // Model GUID
    "modelName": "string",        // Model name (e.g., "gpt-4o")
    "origin": "string",           // "override"
    "projectId": "string",        // Project GUID
    "providerName": "string"      // Provider name
  }

Sample cURL:

curl -X POST "$BASE_URL/v2/projects/models/addProvider/openai" \
  -H "Authorization: Bearer $OAUTH_ACCESS_TOKEN" \
  -H "project-id: $PROJECT_ID" \
  -H "Accept: application/json"

POST /v2/projects/models/deleteProvider/{providerName}

Delete all model overrides from a specific provider.

  • Description: Removes all override entries for models belonging to the specified provider in the project.
  • Method: POST
  • URL: $BASE_URL/v2/projects/models/deleteProvider/{providerName}

Parameters: - Path: - providerName: string (required) - Headers: - project-id: string (required) - Authorization: string (required)

Request: - Body: empty

Response: - 204 No Content — Overrides removed. - 404 Not Found — No overrides exist for the provider.

Sample cURL:

curl -X POST "$BASE_URL/v2/projects/models/deleteProvider/openai" \
  -H "Authorization: Bearer $OAUTH_ACCESS_TOKEN" \
  -H "project-id: $PROJECT_ID" \
  -H "Accept: application/json"

POST /v2/projects/models/deleteAll

Delete all model overrides from the project.

  • Description: Removes all override entries for the project and returns to default (set-based) values.
  • Method: POST
  • URL: $BASE_URL/v2/projects/models/deleteAll

Parameters: - Headers: - project-id: string (required) - Authorization: string (required)

Request: - Body: empty

Response: - 204 No Content — Overrides removed. - 404 Not Found — No overrides exist.

Sample cURL:

curl -X POST "$BASE_URL/v2/projects/models/deleteAll" \
  -H "Authorization: Bearer $OAUTH_ACCESS_TOKEN" \
  -H "project-id: $PROJECT_ID" \
  -H "Accept: application/json"

PUT /v2/projects/models/applyChanges

Apply a set of model overrides by creating/removing records in bulk. For each model provided, creates or removes override records based on isSelected. Skips Not Found errors to support mass updates.

Request

  • Method: PUT
  • Path: $BASE_URL/v2/projects/models/applyChanges

Request Body

{
  "modelOverrideSet":               // Array of model updates to apply
    {
      "modelId": "string",           // Model GUID
      "isSelected": boolean          // true: ensure override exists; false: remove override
    }
  
}

Response

  • 200 OK — Updates applied (no response body).
  • 404 Not Found — If modelId is not provided in the request.
  • 400 Bad Request — Malformed body or request.

cURL Sample

curl -X PUT "$BASE_URL/v2/projects/models/applyChanges" \
  -H "Authorization: Bearer $OAUTH_ACCESS_TOKEN" \
  -H "project-id: $PROJECT_ID" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "modelOverrideSet": 
      { "modelId": "1ba8b55e-d5ad-40d7-ae62-475bf0487028", "isSelected": false },
      { "modelId": "1e3ce18d-c06d-430c-9e4b-032bb1ade237", "isSelected": true }
    
  }'

GET /v2/projects/providers

Retrieve all providers and models for the project scope. Returns all providers and their models as seen at the project scope. Optionally include full detail compatible with LlmApiV3 by using the detail=full query parameter.

Parameters

Name Type Description
detail string When "full", returns detailed fields similar to LlmApiV3.

Request

  • Method: GET
  • Path: $BASE_URL/v2/projects/providers
  • Body: empty

Response

{
  "providers":                             // List of providers in project scope
    {
      "description": "string",              // Provider description
      "friendlyName": "string",             // Human-friendly provider name
      "isSelected": boolean,                // Provider selected within the project
      "models": [                           // Models for this provider in project scope
        {
          "description": "string",          // Model description
          "fullName": "string",             // Provider/Model (e.g., "openai/gpt-5-mini")
          "id": "string",                   // Model GUID
          "isDisabledByOrg": boolean,       // True if disabled at Organization level
          "isSelected": boolean,            // Model selected (enabled) for the project
          "name": "string",                 // Model name (e.g., "gpt-5-mini")
          "type": "string"                  // Model type (e.g., "Chat")
        }
      ,
      "name": "string",                     // Provider name (e.g., "openai")
      "providerScope": "string",            // "System" | "Public" | "Private"
      "selectedModelsCount": integer,       // Number of selected models
      "totalModelsCount": integer,          // Total models for provider
      "unselectedModelsCount": integer      // Number of unselected models
    }
  ]
}

cURL Sample

curl -X GET "$BASE_URL/v2/projects/providers?detail=full" \
  -H "Authorization: Bearer $OAUTH_ACCESS_TOKEN" \
  -H "project-id: $PROJECT_ID" \
  -H "Accept: application/json"

GET /v2/projects/providers/{providerName}/models

Retrieve all models for a specific provider in the project scope. Returns models for the given provider at the project scope. Optionally include full detail compatible with LlmApiV3 using detail=full.

Parameters

Name Type Description
detail string When "full", returns detailed fields similar to LlmApiV3.

Request

  • Method: GET
  • Path: $BASE_URL/v2/projects/providers/{providerName}/models
  • Body: Empty

Response

{
  "description": "string",            // Provider description
  "friendlyName": "string",           // Human-friendly provider name
  "isSelected": boolean,              // Provider selected within the project
  "models":                          // Models for this provider
    {
      "description": "string",        // Model description
      "fullName": "string",           // Provider/Model (e.g., "openai/gpt-5-mini")
      "id": "string",                 // Model GUID
      "isDisabledByOrg": boolean,     // True if disabled at Organization level
      "isSelected": boolean,          // Model enabled for the project
      "name": "string",               // Model name
      "type": "string"                // Model type (e.g., "Chat")
    }
  ,
  "name": "string",                   // Provider name (e.g., "openai")
  "providerScope": "string",          // "System" | "Public" | "Private"
  "selectedModelsCount": integer,     // Number of selected models
  "totalModelsCount": integer,        // Total models for provider
  "unselectedModelsCount": integer    // Number of unselected models
}

cURL Sample

curl -X GET "$BASE_URL/v2/projects/providers/openai/models?detail=full" \
  -H "Authorization: Bearer $OAUTH_ACCESS_TOKEN" \
  -H "project-id: $PROJECT_ID" \
  -H "Accept: application/json"

PUT $BASE_URL/v2/organizations/models/applyChanges

Requests an availability-status update for a set of models at Organization level.

Request

  • Method: PUT
  • Path: $BASE_URL/v2/organizations/models/applyChanges

Request Body

json
{
  "modelOverrideSet":                 // array of model override change requests
    {
      "modelId": "string",            // Model GUID to update
      "isSelected": true              // boolean: true=create/ensure override; false=remove override
    }
  
}

Response

200 OK — Updates applied (response body not specified)

cURL Sample

bash
curl --request PUT \
  --url "$BASE_URL/v2/organizations/models/applyChanges" \
  --header "Authorization: Bearer $TOKEN" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --header "organization-id: $GEAI_ORGANIZATION_ID" \
  --data '{
    "modelOverrideSet": 
      { "modelId": "1ba8b55e-d5ad-40d7-ae62-475bf0487028", "isSelected": false },
      { "modelId": "1e3ce18d-c06d-430c-9e4b-032bb1ade237", "isSelected": true }
    
  }
Last update: 2026 | © Globant S.A. All rights reserved.