{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"1a8eeefb-7337-4adc-bb9b-44f4f7e06bab","name":"GAR Ninja - V1 - Canope","description":"**L'API GAR Ninja Canopé** permet au réseau Canopé de réaliser l'ensemble des opérations **normalement à la charge de l'éditeur**. Par exemple, pour effectuer une **commande**, Canopé enverra la trame de commande à **GAR Ninja** via cette API, et ce dernier se chargera d'**enregistrer la commande** côté **GAR** et de renvoyer le **bordereau de livraison** à Canopé.\n\n> Il s agit d une offre de service qui est proposée à l ensemble des éditeurs du marché et dont le coût est pris en charge par le Réseau Canopé \n  \n\nCette API permet également au réseau Canopé d'obtenir la liste des établissements GARés.\n\n> **L'API est en constante évolution**  \nNous ajouterons de nouveaux **endpoint** et mettrons éventuellement à jour ceux existants \n  \n\nVous trouverez dans cette documentation la description de chaque méthode.\n\n---\n\n# Routes\n\n- L'URL de base [https://saas.gar.ninja/canope_api](#prod) correspond à la route de l'environnement de **production**\n    \n- L'URL de base [https://staging.gar.ninja/canope_api](#test) correspond à la route de l'environnement de **test**\n    \n\nDans la suite de cette documentation les routes utiliseront l'URL de production, mais elles sont toutes transposables pour accéder aux mêmes fonctionnalités côté environnement de test.\n\nActuellement l'environnement est configuré pour {{api_base}}/canope_api\n\n## Version\n\nLa version de l'API complète cette URL de base. Chaque appel vers l’api devra donc **toujours contenir la base et la version**.\n\nAinsi nous aurons :\n\n- [https://saas.gar.ninja/canope_api/v1](https://saas.gar.ninja/canope_api/v1) pour l'api de **production**\n    \n- [https://staging.gar.ninja/canope_api/v1](https://staging.gar.ninja/canope_api/v1) pour l'api de **test**\n    \n\n---\n\n# Environnement de test\n\nL'environnement de test met à disposition des données pour permettre de tester certaines fonctionnalités. Les données de cet environnement ne représentent pas toujours la réalité et ne sont pas forcément exhaustivex.\n\n---\n\n# Principes\n\nL'API GAR Ninja suit les principes généraux des API REST JSON.\n\nLes méthodes exposées désignent des ressources (abonnements, affectations, établissements...), et les verbes HTTP (GET, POST, PUT, etc.) les actions disponibles sur ces ressources.\n\nLes paramètres de requêtes sont passés par URL (méthode GET) ou dans la trame (POST, PUT, etc.). Dans ce cas elles sont attendues au format JSON.\n\nLes réponses sont renvoyées au format JSON.\n\nEn cas de succès les codes HTTP 200 (OK), 201 (Created) ou 202 (Accepted) sont renvoyés.\n\n## Gestion des erreurs\n\nEn cas d'erreur, l'API GAR Ninja utilise les codes HTTP classiques, dont :\n\n### Erreurs côté client (40x)\n\n| **Code HTTP** | **Signification** |\n| --- | --- |\n| 400 | `Bad Request` : la syntaxe de la trame est invalide |\n| 401 | `Unauthorized` : l'authentification n'est pas valide |\n| 403 | `Forbidden` : l'authentification ne donne pas droit à accéder au service |\n| 404 | `Not found` : la ressource demandée n'a pas été trouvée |\n| 405 | `Method Not Allowed` : le verbe HTTP n'est pas supporté pour la ressource |\n\n### Erreurs côté serveur (50x)\n\n| **Code HTTP** | **Signification** |\n| --- | --- |\n| 500 | `Internal Server Error` : l'API n'a pas pu mener à bien la requête |\n| 503 | `Service Unavailable` : l'API n'est pas en état de répondre (maintenance e.g.) |\n\n### Réponse type d'une erreur\n\nEn cas d'erreur, l'objet réponse est alors de la forme :\n\n``` json\n{\n    \"status\": \"error\",\n    \"error\": {\n        \"type\": erreur_http,\n        \"message\": message_erreur,\n        \"code\": code_interne  \n    }\n}\n\n ```\n\nOù :\n\n- `erreur_http` est le message d'erreur HTTP correspondant au code HTTP du retour\n    \n- `message_erreur` est la description de l'erreur\n    \n- `code_interne` est un code interne à GAR Ninja : \\[code HTTP\\]+\\[identifiant interne\\] (ex: `4001` = Paramètre incorrect, Un des articles ou une des offres n’existe pas)\n    \n\n# Pagination\n\n> **Attention :** La fonctionnalité de pagination n'est pas encore disponible mais elle fait partie de la feuille de route \n  \n\nL'API met à disposition plusieurs _**endpoint**_ permettant de récupérer (_**GET**_) des listes de données. Par exemple, vous pouvez récupérer la liste des affectations, des abonnements, etc. Ces méthodes d'API sont soumis à une pagination sous la forme d'une **structure commune** appelée **pagination** et contenant au moins le paramètre **limit** et l'un des deux autres paramètres :\n\n| **Nom** | **Description** | **Format** |\n| --- | --- | --- |\n| **limit** | définit le nombre d'occurrences retournées | Entier |\n| starting_after | Un identifiant à utiliser dans la pagination. **starting_after** est un ID d'objet qui définit votre place dans la liste. Par exemple, si vous faites une demande de liste et recevez 100 objets, se **terminant** par un objet avec id _54250_, votre appel suivant peut inclure _starting_after=54250_ afin de **récupérer la page suivante** de la liste. | Entier |\n| ending_before | Un identifiant à utiliser dans la pagination. **ending_before** est un ID d'objet qui définit votre place dans la liste. Par exemple, si vous faites une demande de liste et recevez 100 objets, **commençant** par un objet avec id _54250_, votre appel suivant peut inclure _ending_before=54250_ afin de **récupérer la page précédente** de la liste. | Entier |\n\nIl est fortement conseillé d'utiliser les différents filtres mis à disposition pour optimiser les requêtes faites à l'API.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"24375391","team":4099967,"collectionId":"1a8eeefb-7337-4adc-bb9b-44f4f7e06bab","publishedId":"2sAXxQfD4U","public":true,"publicUrl":"https://canope.gar.ninja","privateUrl":"https://go.postman.co/documentation/24375391-1a8eeefb-7337-4adc-bb9b-44f4f7e06bab","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":"La documentation officielle de l'API Canopé"},{"name":"title","value":""}],"appearance":{"default":"light","themes":[{"name":"dark","logo":null,"colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"FF6C37"}},{"name":"light","logo":null,"colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"}}]}},"version":"8.10.0","publishDate":"2024-10-10T15:43:38.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"","description":"La documentation officielle de l'API Canopé"},"logos":{"logoLight":null,"logoDark":null}},"statusCode":200},"environments":[{"name":"prod","id":"9cb4f866-58bc-4dcc-95be-2f61b633ec6c","owner":"23591924","values":[{"key":"api_base","value":"https://saas.gar.ninja","enabled":true,"type":"default"},{"key":"gar_env","value":"gar","enabled":true,"type":"default"},{"key":"client_id","value":"anthony.hornec@outlook.fr","enabled":true,"type":"default"},{"key":"client_pwd","value":"HtpS$q6r@yMSRtXM","enabled":true,"type":"secret"},{"key":"ido","value":"877e61eee1a48e94962e63149a1c5c26ca3de4b36a6b14709037da188e812b034ac4dbfe8fd2cb7575b1f8c660dcec891af6c0107b41ccf1e37565d0dfbf2b24","enabled":true,"type":"default"},{"key":"canope_api_key","value":"EOI13KQ83Gnb5xzIVDes80TUlP7r67B95iJ","enabled":true,"type":"secret"},{"key":"cron_api_token","value":"hmmBTyvPc92z8njg7oQGuJCTjM","enabled":true,"type":"secret"},{"key":"token","value":"","enabled":true,"type":"secret","description":{"content":"Access token from Ninja Connect API, automatically fetched via pre-request script","type":"text/plain"}},{"key":"token_last_updated","value":"","enabled":true,"type":"default","description":{"content":"Timestamp of the last token's update, to check if it is expired","type":"text/plain"}},{"key":"token_ttl","value":"","enabled":true,"type":"default","description":{"content":"Token's Time To Live, to check with token_last_updated if it is expired","type":"text/plain"}}],"published":true}],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/8d508ce1d5c7884e83f016602fe240feed8b5c5361c724c2249ec7958875c8ce","favicon":"https://res.cloudinary.com/postman/image/upload/v1664463380/team/vdsieszc3rxlvss5melk.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"},{"label":"prod","value":"23591924-9cb4f866-58bc-4dcc-95be-2f61b633ec6c"}],"canonicalUrl":"https://canope.gar.ninja/view/metadata/2sAXxQfD4U"}