Skip to content

Code Suggestions API

Use the Code Suggestions API to access the Code Suggestions feature.

Generate code completions

DETAILS: Status: Experiment

FLAG: The availability of the context and user_instruction attributes is controlled by a feature flag. For more information, see the history. These attributes are available for testing, but are not ready for production use.

POST /code_suggestions/completions

NOTE: This endpoint rate-limits each user to 60 requests per 1-minute window.

Use the AI abstraction layer to generate code completions.

Requests to this endpoint are proxied to the AI gateway.

Parameters:

Attribute Type Required Description
current_file hash yes Attributes of file that suggestions are being generated for. See File attributes for a list of strings this attribute accepts.
intent string no The intent of the completion request. This can be either completion or generation.
stream boolean no Whether to stream the response as smaller chunks as they are ready (if applicable). Default: false.
project_path string no The path of the project.
generation_type string no The type of event for generation requests. This can be comment, empty_function, or small_file.
context array no Additional context to be used for Code Suggestions. See Context attributes for a list of parameters this attribute accepts.
user_instruction string no A user's instructions for Code Suggestions.

File attributes

The current_file attribute accepts the following strings:

  • file_name - The name of the file. Required.
  • content_above_cursor - The content of the file above the current cursor position. Required.
  • content_below_cursor - The content of the file below the current cursor position. Optional.

Context attributes

The context attribute accepts a list of elements with the following attributes:

  • type - The type of the context element. This can be either file or snippet.
  • name - The name of the context element. A name of the file or a code snippet.
  • content - The content of the context element. The body of the file or a function.

Example request:

curl --request POST \
  --header "Authorization: Bearer <YOUR_ACCESS_TOKEN>" \
  --data '{
      "current_file": {
        "file_name": "car.py",
        "content_above_cursor": "class Car:\n    def __init__(self):\n        self.is_running = False\n        self.speed = 0\n    def increase_speed(self, increment):",
        "content_below_cursor": ""
      },
      "intent": "completion"
    }' \
  --url "https://gitlab.example.com/api/v4/code_suggestions/completions"

Example response:

{
  "id": "id",
  "model": {
    "engine": "vertex-ai",
    "name": "code-gecko"
  },
  "object": "text_completion",
  "created": 1688557841,
  "choices": [
    {
      "text": "\n        if self.is_running:\n            self.speed += increment\n            print(\"The car's speed is now",
      "index": 0,
      "finish_reason": "length"
    }
  ]
}

Validate that Code Suggestions is enabled

Use this endpoint to validate if either:

  • A project has code_suggestions enabled.
  • A project's group has code_suggestions enabled in its namespace settings.
POST code_suggestions/enabled

Supported attributes:

Attribute Type Required Description
project_path string yes The path of the project to be validated.

If successful, returns:

  • 200 if the feature is enabled.
  • 403 if the feature is disabled.

Additionally, returns a 404 if the path is empty or the project does not exist.

Example request:

curl --request POST \
  --url "https://gitlab.example.com/api/v4/code_suggestions/enabled"
  --header "Private-Token: <YOUR_ACCESS_TOKEN>" \
  --header "Content-Type: application/json" \
  --data '{
      "project_path": "group/project_name"
    }' \

Fetch direct connection information

POST /code_suggestions/direct_access

NOTE: This endpoint rate-limits each user to 10 requests per 5-minute window.

Returns user-specific connection details which can be used by IDEs/clients to send completion requests directly to AI gateway.

Example request:

curl --request POST \
  --header "Authorization: Bearer <YOUR_ACCESS_TOKEN>" \
  --url "https://gitlab.example.com/api/v4/code_suggestions/direct_access"

Example response:

{
  "base_url": "http://0.0.0.0:5052",
  "token": "a valid token",
  "expires_at": 1713343569,
  "headers": {
    "X-Gitlab-Instance-Id": "292c3c7c-c5d5-48ec-b4bf-f00b724ce560",
    "X-Gitlab-Realm": "saas",
    "X-Gitlab-Global-User-Id": "Df0Jhs9xlbetQR8YoZCKDZJflhxO0ZBI8uoRzmpnd1w=",
    "X-Gitlab-Host-Name": "gitlab.example.com"
  }
}