curl --request POST \
--url https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/blueprints \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contents": "<string>",
"repo_name": "<string>"
}
'import requests
url = "https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/blueprints"
payload = {
"contents": "<string>",
"repo_name": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({contents: '<string>', repo_name: '<string>'})
};
fetch('https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/blueprints', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/blueprints",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'contents' => '<string>',
'repo_name' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/blueprints"
payload := strings.NewReader("{\n \"contents\": \"<string>\",\n \"repo_name\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/blueprints")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contents\": \"<string>\",\n \"repo_name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/blueprints")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"contents\": \"<string>\",\n \"repo_name\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"blueprint_id": "<string>",
"created_at": 123,
"repo_name": "<string>",
"type": "enterprise",
"updated_at": 123,
"build_on_default_branch_commit": true,
"report_check_runs": true,
"source": "git"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}Créer un blueprint au niveau de l’organisation ou du dépôt
Créer un blueprint. type est déduit de repo_name.
source prend par défaut la valeur database. Avec source='git', le contenu YAML
(et les éventuels fichiers référencés par includes) est lu à partir de .devin/blueprint.yaml sur la
branche par défaut du repo — 404 si le fichier est absent, 422 s’il est
invalide, 502 si le fournisseur Git est inaccessible.
Conformément à la spécification, cette opération ne déclenche jamais automatiquement de build — les appelants doivent
effectuer explicitement une requête POST /builds.
curl --request POST \
--url https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/blueprints \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contents": "<string>",
"repo_name": "<string>"
}
'import requests
url = "https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/blueprints"
payload = {
"contents": "<string>",
"repo_name": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({contents: '<string>', repo_name: '<string>'})
};
fetch('https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/blueprints', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/blueprints",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'contents' => '<string>',
'repo_name' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/blueprints"
payload := strings.NewReader("{\n \"contents\": \"<string>\",\n \"repo_name\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/blueprints")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"contents\": \"<string>\",\n \"repo_name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.devin.ai/v3/organizations/{org_id}/snapshot-setup/blueprints")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"contents\": \"<string>\",\n \"repo_name\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"blueprint_id": "<string>",
"created_at": 123,
"repo_name": "<string>",
"type": "enterprise",
"updated_at": 123,
"build_on_default_branch_commit": true,
"report_check_runs": true,
"source": "git"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}{
"status": 123,
"title": "<string>",
"detail": "<string>",
"error_code": "<string>",
"errors": [
{}
],
"instance": "<string>",
"type": "about:blank"
}Autorisations
Nécessite un utilisateur de service ou un jeton d’accès personnel disposant de l’autorisationManageRepoBlueprints au niveau de l’organisation. La création de blueprints au niveau de l’organisation nécessite l’autorisation ManageOrgSnapshots.
Comportement
Crée un blueprint de niveau organisation ou dépôt. Un blueprint définit la configuration d’environnement déclarative des sessions Devin. La modification d’un blueprint ne déclenche pas automatiquement un build — vous devez appeler explicitement l’endpoint builds.repo_name ajoute également ce dépôt à l’environnement — il n’existe pas d’endpoint distinct pour enregistrer d’abord le dépôt. Le dépôt est cloné dans l’environnement lors du build suivant, et son indexation est lancée.L’inverse est également vrai : supprimer un dépôt de l’environnement (le commutateur Inclure dans l’environnement dans l’UI) supprime tous les blueprints de ce dépôt, y compris tous ses périmètres d’espace de travail.owner/repo) ; un dépôt inconnu ou inaccessible renvoie 404 et aucun blueprint n’est créé. Si un blueprint actif existe déjà pour ce dépôt et ce périmètre, la requête renvoie 409 — utilisez plutôt l’endpoint de mise à jour.Autorisations
Identifiant de compte de service (préfixe : cog_)
Paramètres de chemin
Identifiant d’organisation (préfixe : org-)
"org-abc123def456"
Corps
Corps YAML initial facultatif pour le blueprint. Non autorisé avec source='git' (le contenu provient du repo).
S’il est défini, crée un blueprint au niveau du dépôt pour ce dépôt. S’il est omis, crée un blueprint à l’échelle de l’organisation (niveau organisation).
Uniquement au niveau du dépôt. 'git' lit .devin/blueprint.yaml (et ses fichiers inclus) depuis la branche par défaut du repo et maintient le blueprint synchronisé avec ce fichier ; 'database' stocke le YAML dans Devin. La valeur par défaut est 'database' en cas d’omission.
git, database Réponse
Réponse réussie
Schéma public de la ressource Blueprint.
Remarque : l’énumération type pourra être étendue à l’avenir ; les clients DOIVENT gérer correctement
les valeurs inconnues. Le contenu YAML est récupéré séparément via
GET /blueprints/{id}/contents.
enterprise, org, repo Indique si chaque push vers la branche par défaut du repo déclenche un build de l’environnement. Valeur null sauf s’il s’agit du plan de configuration racine d’un repo.
Indique si chaque build de commit est signalé sur le commit sous la forme d’une exécution de vérification GitHub. Valeur null sauf s’il s’agit du plan de configuration racine d’un repo.
Emplacement où le YAML est rédigé : 'git' (synchronisé depuis .devin/blueprint.yaml dans le repo) ou 'database' (modifié via l’API ou l’interface utilisateur). Toujours null pour les blueprints au niveau Enterprise ou organisation.
git, database 
