Project snippets

Snippet visibility level

Snippets in GitLab can be either private, internal or public. You can set it with the visibility field in the snippet.

Constants for snippet visibility levels are:

visibility Description
private The snippet is visible only to the snippet creator
internal The snippet is visible for any logged in user except external users
public The snippet can be accessed without any authentication
noteFrom July 2019, the Internal visibility setting is disabled for new projects, groups, and snippets on GitLab.com. Existing projects, groups, and snippets using the Internal visibility setting keep this setting. You can read more about the change in the relevant issue.

List snippets

Get a list of project snippets.

GET /projects/:id/snippets

Parameters:

Single snippet

Get a single project snippet.

GET /projects/:id/snippets/:snippet_id

Parameters:

{
  "id": 1,
  "title": "test",
  "file_name": "add.rb",
  "description": "Ruby test snippet",
  "author": {
    "id": 1,
    "username": "john_smith",
    "email": "john@example.com",
    "name": "John Smith",
    "state": "active",
    "created_at": "2012-05-23T08:00:58Z"
  },
  "updated_at": "2012-06-28T10:52:04Z",
  "created_at": "2012-06-28T10:52:04Z",
  "project_id": 1,
  "web_url": "http://example.com/example/example/snippets/1",
  "raw_url": "http://example.com/example/example/snippets/1/raw"
}

Create new snippet

Creates a new project snippet. The user must have permission to create new snippets.

POST /projects/:id/snippets

Parameters:

Attribute Type Required Description
id integer yes The ID or URL-encoded path of the project owned by the authenticated user
title string yes Title of a snippet
file_name string no Deprecated: Use files instead. Name of a snippet file
content string no Deprecated: Use files instead. Content of a snippet
description string no Description of a snippet
visibility string no Snippet’s visibility
files array of hashes no An array of snippet files
files:file_path string yes File path of the snippet file
files:content string yes Content of the snippet file

Example request:

curl --request POST "https://gitlab.com/api/v4/projects/:id/snippets" \
     --header "PRIVATE-TOKEN: <your access token>" \
     --header "Content-Type: application/json" \
     -d @snippet.json

snippet.json used in the above example request:

{
  "title" : "Example Snippet Title",
  "description" : "More verbose snippet description",
  "visibility" : "private",
  "files": [
    {
      "file_path": "example.txt",
      "content" : "source code \n with multiple lines\n"
    }
  ]
}

Update snippet

Updates an existing project snippet. The user must have permission to change an existing snippet.

PUT /projects/:id/snippets/:snippet_id

Parameters:

Attribute Type Required Description
id integer yes The ID or URL-encoded path of the project owned by the authenticated user
snippet_id integer yes The ID of a project’s snippet
title string no Title of a snippet
file_name string no Deprecated: Use files instead. Name of a snippet file
content string no Deprecated: Use files instead. Content of a snippet
description string no Description of a snippet
visibility string no Snippet’s visibility
files array of hashes no An array of snippet files
files:action string yes Type of action to perform on the file, one of: create, update, delete, move
files:file_path string no File path of the snippet file
files:previous_path string no Previous path of the snippet file
files:content string no Content of the snippet file

Updates to snippets with multiple files must use the files attribute.

Example request:

curl --request PUT "https://gitlab.com/api/v4/projects/:id/snippets/:snippet_id" \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-Type: application/json" \
     -d @snippet.json

snippet.json used in the above example request:

{
  "title" : "Updated Snippet Title",
  "description" : "More verbose snippet description",
  "visibility" : "private",
  "files": [
    {
      "action": "update",
      "file_path": "example.txt",
      "content" : "updated source code \n with multiple lines\n"
    }
  ]
}

Delete snippet

Deletes an existing project snippet. This returns a 204 No Content status code if the operation was successfully or 404 if the resource was not found.

DELETE /projects/:id/snippets/:snippet_id

Parameters:

Example request:

curl --request DELETE "https://gitlab.com/api/v4/projects/:id/snippets/:snippet_id" \
     --header "PRIVATE-TOKEN: <your_access_token>"

Snippet content

Returns the raw project snippet as plain text.

GET /projects/:id/snippets/:snippet_id/raw

Parameters:

Example request:

curl "https://gitlab.com/api/v4/projects/:id/snippets/:snippet_id/raw" \
     --header "PRIVATE-TOKEN: <your_access_token>"

Snippet repository file content

Returns the raw file content as plain text.

GET /projects/:id/snippets/:snippet_id/files/:ref/:file_path/raw

Parameters:

  • id (required) - The ID or URL-encoded path of the project owned by the authenticated user
  • snippet_id (required) - The ID of a project’s snippet
  • ref (required) - The name of a branch, tag or commit, such as main
  • file_path (required) - The URL-encoded path to the file, such as snippet%2Erb

Example request:

curl "https://gitlab.com/api/v4/projects/1/snippets/2/files/master/snippet%2Erb/raw" \
     --header "PRIVATE-TOKEN: <your_access_token>"

Get user agent details

Introduced in GitLab 9.4.

Available only for users with the Administrator role.

GET /projects/:id/snippets/:snippet_id/user_agent_detail
Attribute Type Required Description
id integer or string yes The ID or URL-encoded path of a project.
snippet_id Integer yes The ID of a snippet

Example request:

curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/snippets/2/user_agent_detail"

Example response:

{
  "user_agent": "AppleWebKit/537.36",
  "ip_address": "127.0.0.1",
  "akismet_submitted": false
}