# SAP AI Core API Reference Complete API reference for SAP AI Core. **Documentation Source:** [https://github.com/SAP-docs/sap-artificial-intelligence/tree/main/docs/sap-ai-core](https://github.com/SAP-docs/sap-artificial-intelligence/tree/main/docs/sap-ai-core) --- ## Authentication ### OAuth Token Endpoint ```bash curl -X POST "[https://.authentication..hana.ondemand.com/oauth/token"](https://.authentication..hana.ondemand.com/oauth/token") \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "grant_type=client_credentials&client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET" ``` ### Required Headers | Header | Description | |--------|-------------| | `Authorization` | `Bearer ` | | `AI-Resource-Group` | Resource group name (e.g., `default`) | | `Content-Type` | `application/json` | --- ## Base URLs | Environment | URL Pattern | |-------------|-------------| | AI API | `[https://api.ai.prod..hana.ondemand.com`](https://api.ai.prod..hana.ondemand.com`) | | Inference | `[https://api.ai.prod..hana.ondemand.com/v2/inference/deployments/`](https://api.ai.prod..hana.ondemand.com/v2/inference/deployments/`) | | OAuth | `[https://.authentication..hana.ondemand.com/oauth/token`](https://.authentication..hana.ondemand.com/oauth/token`) | **Regions:** `eu10`, `eu11`, `us10`, `us21`, `jp10`, `ap10`, `ap11` --- ## API Versioning All endpoints use the `/v2/*` versioned routes: - `/v2/lm/*` - Language model operations - `/v2/inference/*` - Inference deployments - `/v2/admin/*` - Administrative operations (secrets, repositories) --- ## Scenarios ### List Scenarios ```bash GET $AI_API_URL/v2/lm/scenarios ``` **Response:** ```json { "count": 2, "resources": [ { "id": "foundation-models", "name": "Foundation Models", "description": "Access to generative AI models" }, { "id": "orchestration", "name": "Orchestration", "description": "Unified model access with pipeline features" } ] } ``` --- ## Models ### List Available Models ```bash GET $AI_API_URL/v2/lm/scenarios/foundation-models/models ``` **Response:** ```json { "count": 50, "resources": [ { "model": "gpt-4o", "accessType": "Remote", "displayName": "GPT-4o", "provider": "azure-openai", "executableId": "azure-openai", "versions": [ { "name": "2024-05-13", "isLatest": true, "capabilities": ["text-generation", "chat"], "contextLength": 128000, "inputCost": 5.0, "outputCost": 15.0, "isStreamingSupported": true } ] } ] } ``` --- ## Configurations ### Create Configuration ```bash POST $AI_API_URL/v2/lm/configurations ``` **Request Body:** ```json { "name": "my-config", "executableId": "azure-openai", "scenarioId": "foundation-models", "parameterBindings": [ {"key": "modelName", "value": "gpt-4o"}, {"key": "modelVersion", "value": "latest"} ], "inputArtifactBindings": [] } ``` **Response:** ```json { "id": "abc123-def456-ghi789", "message": "Configuration created" } ``` ### List Configurations ```bash GET $AI_API_URL/v2/lm/configurations ``` **Query Parameters:** | Parameter | Description | |-----------|-------------| | `scenarioId` | Filter by scenario | | `executableId` | Filter by executable | | `$top` | Limit results | | `$skip` | Skip results | ### Get Configuration ```bash GET $AI_API_URL/v2/lm/configurations/{configurationId} ``` ### Delete Configuration ```bash DELETE $AI_API_URL/v2/lm/configurations/{configurationId} ``` --- ## Deployments ### Create Deployment ```bash POST $AI_API_URL/v2/lm/deployments ``` **Request Body:** ```json { "configurationId": "", "ttl": "24h" } ``` **TTL Format:** Natural numbers with units: `m` (minutes), `h` (hours), `d` (days) - Valid: `5m`, `2h`, `7d` - Invalid: `4.5h`, `4h30m` (fractional and combined units not supported) - **Tip:** Convert combined durations to a single unit (e.g., `270m` instead of `4h30m`) **Response:** ```json { "id": "d12345-abcd-efgh", "deploymentUrl": "[https://...",](https://...",) "status": "PENDING", "message": "Deployment created" } ``` ### Get Deployment ```bash GET $AI_API_URL/v2/lm/deployments/{deploymentId} ``` **Response:** ```json { "id": "d12345-abcd-efgh", "configurationId": "c12345-abcd", "configurationName": "my-config", "scenarioId": "foundation-models", "status": "RUNNING", "statusMessage": "", "deploymentUrl": "[https://...",](https://...",) "createdAt": "2024-01-15T10:00:00Z", "modifiedAt": "2024-01-15T10:05:00Z" } ``` ### Deployment Statuses | Status | Description | |--------|-------------| | `UNKNOWN` | Initial state | | `PENDING` | Starting up | | `RUNNING` | Active, serving requests | | `STOPPING` | Shutting down | | `STOPPED` | Inactive | | `DEAD` | Failed | ### List Deployments ```bash GET $AI_API_URL/v2/lm/deployments ``` ### Update Deployment ```bash PATCH $AI_API_URL/v2/lm/deployments/{deploymentId} ``` **Request Body:** ```json { "configurationId": "" } ``` ### Stop Deployment ```bash PATCH $AI_API_URL/v2/lm/deployments/{deploymentId} ``` **Request Body:** ```json { "targetStatus": "STOPPED" } ``` ### Delete Deployment ```bash DELETE $AI_API_URL/v2/lm/deployments/{deploymentId} ``` --- ## Executions ### Create Execution ```bash POST $AI_API_URL/v2/lm/executions ``` **Request Body:** ```json { "configurationId": "" } ``` ### Get Execution ```bash GET $AI_API_URL/v2/lm/executions/{executionId} ``` ### Execution Statuses | Status | Description | |--------|-------------| | `UNKNOWN` | Initial state | | `PENDING` | Queued | | `RUNNING` | Executing | | `COMPLETED` | Finished successfully | | `DEAD` | Failed | | `STOPPED` | Manually stopped | ### List Executions ```bash GET $AI_API_URL/v2/lm/executions ``` ### Stop Execution ```bash PATCH $AI_API_URL/v2/lm/executions/{executionId} ``` **Request Body:** ```json { "targetStatus": "STOPPED" } ``` ### Delete Execution ```bash DELETE $AI_API_URL/v2/lm/executions/{executionId} ``` ### Get Execution Logs ```bash GET $AI_API_URL/v2/lm/executions/{executionId}/logs ``` --- ## Artifacts ### Register Artifact ```bash POST $AI_API_URL/v2/lm/artifacts ``` **Request Body:** ```json { "name": "training-data", "kind": "dataset", "url": "ai:///", "scenarioId": "", "description": "Training dataset" } ``` **Artifact Kinds:** - `dataset`: Training data - `model`: Trained model - `resultset`: Inference results - `other`: Other artifacts ### Get Artifact ```bash GET $AI_API_URL/v2/lm/artifacts/{artifactId} ``` ### List Artifacts ```bash GET $AI_API_URL/v2/lm/artifacts ``` --- ## Resource Groups ### Create Resource Group ```bash POST $AI_API_URL/v2/admin/resourceGroups ``` **Request Body:** ```json { "resourceGroupId": "my-resource-group" } ``` ### List Resource Groups ```bash GET $AI_API_URL/v2/admin/resourceGroups ``` ### Delete Resource Group ```bash DELETE $AI_API_URL/v2/admin/resourceGroups/{resourceGroupId} ``` --- ## Secrets ### Create Generic Secret ```bash POST $AI_API_URL/v2/admin/secrets ``` **Request Body:** ```json { "name": "my-secret", "data": { "key1": "value1", "key2": "value2" } } ``` ### Create Object Store Secret ```bash POST $AI_API_URL/v2/admin/objectStoreSecrets ``` **AWS S3:** ```json { "name": "default", "type": "S3", "pathPrefix": "my-bucket/path", "data": { "AWS_ACCESS_KEY_ID": "", "AWS_SECRET_ACCESS_KEY": "" } } ``` ### List Secrets ```bash GET $AI_API_URL/v2/admin/secrets ``` ### Delete Secret ```bash DELETE $AI_API_URL/v2/admin/secrets/{secretName} ``` --- ## Meta API ### Get Runtime Capabilities ```bash GET $AI_API_URL/lm/meta ``` **Response:** ```json { "capabilities": { "logs.executions": true, "logs.deployments": true, "multitenant": true, "shareable": false, "staticDeployments": true, "userDeployments": true, "userExecutions": true, "timeToLiveDeployments": true, "analytics": true, "bulkUpdates": true, "executionSchedules": true }, "limits": { "deployments.maxRunningCount": 10, "executions.maxRunningCount": 10, "minimumFrequencyHour": 1, "timeToLiveDeployments.minimum": "5m", "timeToLiveDeployments.maximum": "90d" }, "extensions": { "analytics": "1.0", "metrics": "1.0", "resourceGroups": "1.0", "dataset": "1.0" } } ``` --- ## Orchestration API ### Chat Completion ```bash POST $ORCHESTRATION_URL/v2/completion ``` **Request Body:** ```json { "config": { "module_configurations": { "llm_module_config": { "model_name": "gpt-4o", "model_version": "latest", "model_params": { "max_tokens": 1000, "temperature": 0.7 } }, "templating_module_config": { "template": [ {"role": "system", "content": "{{?system}}"}, {"role": "user", "content": "{{?user}}"} ] } } }, "input_params": { "system": "You are a helpful assistant.", "user": "Hello!" } } ``` ### Streaming Completion ```bash POST $ORCHESTRATION_URL/v2/completion ``` **Request Body:** ```json { "config": { "module_configurations": { "llm_module_config": { "model_name": "gpt-4o", "model_version": "latest", "model_params": { "stream": true } }, "templating_module_config": { "template": [{"role": "user", "content": "{{?prompt}}"}] } } }, "input_params": {"prompt": "Tell me a story"} } ``` ### Embeddings ```bash POST $ORCHESTRATION_URL/v2/embeddings ``` **Request Body:** ```json { "config": { "module_configurations": { "embedding_module_config": { "model_name": "text-embedding-3-large", "model_version": "latest", "model_params": { "encoding_format": "float", "dimensions": 1024 } } } }, "input": ["Text to embed"] } ``` --- ## Grounding API ### Create Pipeline ```bash POST $AI_API_URL/v2/lm/groundingPipelines ``` **Request Body (SharePoint):** ```json { "name": "hr-docs-pipeline", "configuration": { "dataSource": { "type": "sharepoint", "configuration": { "siteUrl": "[https://company.sharepoint.com/sites/HR",](https://company.sharepoint.com/sites/HR",) "folderPath": "/Documents/Policies" } }, "secretName": "sharepoint-secret" } } ``` ### List Pipelines ```bash GET $AI_API_URL/v2/lm/groundingPipelines ``` ### Delete Pipeline ```bash DELETE $AI_API_URL/v2/lm/groundingPipelines/{pipelineId} ``` --- ## Error Responses ### Standard Error Format ```json { "error": { "code": "ERROR_CODE", "message": "Human-readable error message", "requestId": "req-12345", "target": "deployments" } } ``` ### Common Error Codes | Code | HTTP Status | Description | |------|-------------|-------------| | `UNAUTHORIZED` | 401 | Invalid or expired token | | `FORBIDDEN` | 403 | Missing permissions or quota exceeded | | `NOT_FOUND` | 404 | Resource not found | | `CONFLICT` | 409 | Resource already exists | | `QUOTA_EXCEEDED` | 429 | Rate limit or quota exceeded | | `INTERNAL_ERROR` | 500 | Server error | --- ## Bulk Operations ### Bulk Update Deployments ```bash PATCH $AI_API_URL/v2/lm/deployments ``` **Request Body:** ```json { "deployments": [ {"id": "dep1", "targetStatus": "STOPPED"}, {"id": "dep2", "targetStatus": "STOPPED"} ] } ``` **Limit:** 100 items per request ### Bulk Delete Deployments ```bash DELETE $AI_API_URL/v2/lm/deployments ``` **Request Body:** ```json { "deploymentIds": ["dep1", "dep2", "dep3"] } ``` --- ## Schedules ### Create Schedule ```bash POST $AI_API_URL/v2/lm/executionSchedules ``` **Request Body:** ```json { "configurationId": "", "cron": "0 0 * * *", "start": "2024-01-01T00:00:00Z", "end": "2024-12-31T23:59:59Z" } ``` **Cron Format:** `minute hour day month weekday` ### List Schedules ```bash GET $AI_API_URL/v2/lm/executionSchedules ``` ### Delete Schedule ```bash DELETE $AI_API_URL/v2/lm/executionSchedules/{scheduleId} ``` --- ## Documentation Links - AI API Overview: [https://github.com/SAP-docs/sap-artificial-intelligence/blob/main/docs/sap-ai-core/ai-api-overview-716d4c3.md](https://github.com/SAP-docs/sap-artificial-intelligence/blob/main/docs/sap-ai-core/ai-api-overview-716d4c3.md) - Configurations: [https://github.com/SAP-docs/sap-artificial-intelligence/blob/main/docs/sap-ai-core/create-configurations-884ae34.md](https://github.com/SAP-docs/sap-artificial-intelligence/blob/main/docs/sap-ai-core/create-configurations-884ae34.md) - Deployments: [https://github.com/SAP-docs/sap-artificial-intelligence/blob/main/docs/sap-ai-core/deploy-models-dd16e8e.md](https://github.com/SAP-docs/sap-artificial-intelligence/blob/main/docs/sap-ai-core/deploy-models-dd16e8e.md)