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.
| 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.
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
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.
- Method: POST
- Path: $BASE_URL/v2/admin/organizations
{
"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".
}
{
"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 -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"
}'
Retrieves all the organizations available based on a given search criteria.
| 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. |
- Method: GET
- Path: $BASE_URL/v2/admin/organizations
- Request Body: Empty
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 -X GET
'$BASE_URL/v2/admin/organizations?startPage=1&pageSize=20&orderKey=name&orderDirection=asc&filterKey=name&filterValue=MyOrganizationsName'
-H "Authorization: Bearer $OAuth_accesstoken" \
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.
| Name |
Type |
Description |
| organizationId |
string |
Organization id that will be deleted. |
- Method: DELETE
- Path: $BASE_URL/v2/admin/organizations/{OrganizationId}
- Request Body: Empty
StatusCode 200 is shown when successfully deleted; otherwise, 400* is displayed with a collection of errors.
curl -X DELETE "$BASE_URL/v2/admin/organizations/{organizationId}" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OAuth_accesstoken" \
Returns a list of Assistants.
| Name |
Type |
Description |
| detail |
string |
Defines the level of detail required. The available options are summary (default) or full (optional). |
- Method: GET
- Path: $BASE_URL/v1/organization/assistants
- Request Body: Empty
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 -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.
Gets a list of Projects.
This endpoint requires a Glob.AI OS AI API token with Organization scope.
| 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.
- Method: GET
- Path: $BASE_URL/v1/organization/projects
- Request Body: Empty
{
"projects": [
{
"projectActive": "boolean",
"projectDescription": "string",
"projectId": "string",
"projectName": "string",
"projectStatus": "integer" /* 0:Active, 2:Hidden */
},
...
]
}
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.
Returns Project details.
This endpoint supports Glob.AI OS AI API tokens with either Organization scope or Project scope.
| Name |
Type |
Description |
| id |
string |
GUID Project id (required) |
- Method: GET
- Path: $BASE_URL/v1/organization/project/{id}
- Request Body: Empty
{
"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 -X GET "$BASE_URL/v1/organization/project/{id}" \
-H "Authorization: Bearer $GEAI_APITOKEN" \
-H "accept: application/json"
Creates a new Project.
This endpoint requires a Glob.AI OS AI API token with Organization scope.
- Method: POST
- Path: $BASE_URL/v1/organization/project
{
"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.
{
"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 -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"
}
}'
Updates a Project.
This endpoint requires a Glob.AI OS AI API token with Organization scope.
| Name |
Type |
Description |
| id |
string |
GUID Project id (required) |
- Method: PUT
- Path: $BASE_URL/v1/organization/project/{id}
{
"name": "string", /* Required */
"description": "string"
}
{
"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 -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"
}'
Deletes a Project.
This endpoint requires a Glob.AI OS AI API token with Organization scope.
| Name |
Type |
Description |
| id |
string |
GUID Project id (required) |
- Method: DELETE
- Path: $BASE_URL/v1/organization/project/{id}
- Request Body: Empty
StatusCode 200 is shown when successfully deleted; otherwise, 400* is displayed with a collection of errors.
curl -X DELETE "$BASE_URL/v1/organization/project/{id}" \
-H "Authorization: Bearer $GEAI_APITOKEN" \
-H "accept: application/json"
Gets the list of API tokens for the Project.
This endpoint requires a Glob.AI OS AI API token with Organization scope.
| Name |
Type |
Description |
| id |
string |
GUID Project id (required) |
- Method: GET
- Path: $BASE_URL/v1/organization/project/{id}/tokens
- Request Body: Empty
{
"tokens": [
{
"description": "string",
"id": "string",
"name": "string",
"status": "string" /* options can be "Active", "Blocked" or "Revoked" */,
"timestamp": "timestamp"
},
...
]
}
curl -X GET "$BASE_URL/v1/organization/project/{id}/tokens" \
-H "Authorization: Bearer $GEAI_APITOKEN" \
-H "accept: application/json"
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.
- Method: GET
- Path: $BASE_URL/v1/accessControl/apitoken/validate
- Request Body: Empty
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 -X GET "$BASE_URL/v1/accessControl/apitoken/validate" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $GEAI_APITOKEN"
Exports request data.
This endpoint requires a Glob.AI OS AI API token with Project scope.
| 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) |
- Method: GET
- Path: $BASE_URL/v1/organization/request/export
- Request Body: Empty
{
"items": [
{
"assistant": "string",
"intent": "string",
"timestamp": "string",
"prompt": "string",
"output": "string",
"inputText": "string",
"status": "string"
},
...
]
}
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"
Creates a new API Token for a specific Project.
This endpoint requires a Glob.AI OS AI API token with Organization scope.
- Method: POST
- Path: $BASE_URL/v2/projects/tokens
{
"name": "string", // Name of the API Token that will be created.
"description": "string" // Brief description of the API Token that will be created.
}
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 -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"
}'
Updates an API Token definition.
This endpoint supports Glob.AI OS AI API tokens with either Organization scope or Project scope.
| Name |
Type |
Description |
| ApiTokenId |
string |
API Token id (required) |
- Method: PUT
- Path: $BASE_URL/v2/projects/tokens/{ApiTokenId}
{
"description": "string" // Updated text to be published.
}
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 -X PUT "$BASE_URL/v2/projects/tokens/{ApiTokenId}" \
-H "Content-Type: application/json" \
-H "Authorization:Bearer $GEAI_APITOKEN" \
-d '{
"description": "Updated description"
}'
Returns details of a specific API Token.
This endpoint requires a Glob.AI OS AI API token with Organization scope.
| Name |
Type |
Description |
| ApiTokenId |
string |
API Token id (required) |
- Method: GET
- Path: $BASE_URL/v2/projects/tokens/{ApiTokenId}
- Request Body: Empty
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 -X GET "$BASE_URL/v2/projects/tokens/{ApiTokenId}" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $GEAI_APITOKEN"
Deletes a specific API Token.
This endpoint requires a Glob.AI OS AI API token with Organization scope.
| Name |
Type |
Description |
| ApiTokenId |
string |
API Token id (required) |
- Method: DELETE
- Path: $BASE_URL/v2/projects/tokens/{ApiTokenId}
- Request Body: Empty
StatusCode 200 is shown when successfully deleted; otherwise, 400* is displayed with a collection of errors.
curl -X DELETE "$BASE_URL/v2/projects/tokens/{ApiTokenId}" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $GEAI_APITOKEN"
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.
- Method: POST
- Path: $BASE_URL/v2/projects/models/addProvider/{providerName}
- Body: Empty.
[
{
"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 --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"
Deletes a model override configured for a Project.
This endpoint requires a Glob.AI OS AI API token with Organization scope.
- Method: DELETE
- Path: $BASE_URL/v2/projects/models/{modelId}
- Body: Empty
- 204 No Content — The model override was successfully removed from the specified project. No response body is returned.
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"
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.
- Method: GET
- Path: $BASE_URL/v2/projects/providers
- Body: Empty
{
"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
}
}
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"
Returns all models for the specified provider within the given project, along with provider metadata and selection state.
- Method: GET
- URL: $BASE_URL/v2/projects/providers/{providerName}/models
- Body: Empty
{
"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 --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"
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.
- Method: GET
- Path:: $BASE_URL’v2/projects/{projectId}/users
- Body:: Empty
| 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. |
{
"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 --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"
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.
- POST /v2/projects/{projectId}/initializations/roles — Validates project initialization and ensures all required roles exist.
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.
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.
- Method: POST
- Path: $BASE_URL/v2/projects/{projectId}/initializations/roles
- Body: Empty
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 --location --request POST "$BASE_URL/v2/projects/$PROJECT_ID/initializations/roles" \
--header "Authorization: Bearer $GEAI_APITOKEN" \
--header "Accept: application/json"
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.
| 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. |
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.
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"
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"
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"
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"
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"
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"
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.
- Method: PUT
- Path: $BASE_URL/v2/projects/models/applyChanges
{
"modelOverrideSet": // Array of model updates to apply
{
"modelId": "string", // Model GUID
"isSelected": boolean // true: ensure override exists; false: remove override
}
}
- 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 -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 }
}'
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.
| Name |
Type |
Description |
| detail |
string |
When "full", returns detailed fields similar to LlmApiV3. |
- Method: GET
- Path: $BASE_URL/v2/projects/providers
- Body: empty
{
"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 -X GET "$BASE_URL/v2/projects/providers?detail=full" \
-H "Authorization: Bearer $OAUTH_ACCESS_TOKEN" \
-H "project-id: $PROJECT_ID" \
-H "Accept: application/json"
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.
| Name |
Type |
Description |
| detail |
string |
When "full", returns detailed fields similar to LlmApiV3. |
- Method: GET
- Path: $BASE_URL/v2/projects/providers/{providerName}/models
- Body: Empty
{
"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 -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"
Requests an availability-status update for a set of models at Organization level.
- Method: PUT
- Path: $BASE_URL/v2/organizations/models/applyChanges
json
{
"modelOverrideSet": // array of model override change requests
{
"modelId": "string", // Model GUID to update
"isSelected": true // boolean: true=create/ensure override; false=remove override
}
}
200 OK — Updates applied (response body not specified)
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 }
}