Fichiers, imports et réglages
Chaque commande pour les fichiers de la boîte mail, l'import d'une ancienne boîte mail ou d'un compte Resend, le calendrier trouvé dans le courrier, et les réglages de l'espace de travail et de chaque adresse.
Vue d'ensemble
Cinq espaces de noms couvrent ce qui entoure le courrier lui-même. openemail files est la page Fichiers : chaque pièce jointe envoyée et reçue et chaque fichier téléversé, avec ses octets et les liens de téléchargement sous lesquels il est parti. openemail imports fait entrer une ancienne boîte mail dans une adresse, et openemail provider-imports rapatrie un compte Resend. openemail calendar lit les événements trouvés dans le courrier, et openemail settings lit et modifie les préférences de la boîte mail ainsi que la signature et le suivi de chaque adresse.
- Un identifiant dit ce qu'il désigne :
file_pour un fichier,imp_pour un import de boîte mail,pimp_pour un import Resend etcal_pour un événement de calendrier, chacun suivi de 24 caractères hexadécimaux. Un lien de téléchargement a son propre identifiant, venant defiles list-linksoufiles create-link. --address-idsur un import est l'identifiant d'une adresse, venant deopenemail domains list-addresses <id>, pas l'adresse elle-même.- Les espaces de noms répondent aussi à
file,import,provider-importouproviderImports, etsetting. Les verbes acceptent les alias habituels quand ils en ont :lspourlist,showetviewpourget,newetaddpourcreate,editpoursettings update, etrm,deletremovepourfiles delete. - Aucune de ces commandes ne demande de code de vérification à une connexion par navigateur. Celles qui changent quelque chose définitivement demandent confirmation, et
--yesrépond pour un script. openemail <command> --helpliste chaque argument et option avec son type, le scope dont l'appel a besoin, sa méthode et son chemin, et ce qui revient. Ajoutez--jsonpour obtenir la même page sous forme de données.
Fichiers
openemail files lit et gère chaque fichier de la boîte mail : les pièces jointes reçues, les pièces jointes envoyées, et les fichiers téléversés sur la page Fichiers. openemail open files ouvre la même page dans l'application web.
| Commande | Ce qu'il fait |
|---|---|
| openemail files list | Lister une page de fichiers avec le nom, le type, la taille, la direction, l'adresse à laquelle chacun est arrivé et s'il peut être supprimé |
| openemail files get <id> | Lire un fichier, avec le fil et le message auxquels il appartient, son usage et deletable |
| openemail files stats | Compter les fichiers et les octets qu'ils occupent, répartis entre reçus, envoyés et téléversés, avec les principaux types et adresses, les 30 derniers jours et les liens encore actifs |
| openemail files download <id> | Récupérer les octets d'un fichier exactement tels qu'ils sont stockés, dans --out <file> ou vers stdout quand la sortie est redirigée |
| openemail files list-links <id> | Lister les liens de téléchargement sous lesquels un fichier est parti, du plus récent au plus ancien, avec le nombre de récupérations de chacun et s'il a été révoqué |
| openemail files create-link <id> | Publier le fichier sous un nouveau lien de téléchargement public qui s'ouvre sans connexion |
| openemail files revoke-link <id> <link-id> | Arrêter définitivement un lien public, y compris dans le courrier déjà envoyé. Demande confirmation |
| openemail files upload <data> | Téléverser un fichier depuis un chemin, ou depuis stdin avec -, jusqu'à 100 Mo |
| openemail files delete <id> | Supprimer définitivement un fichier téléversé dont rien ne dépend. Demande confirmation |
| openemail files delete-many <ids...> | Supprimer jusqu'à 100 fichiers en un appel et signaler ceux qui sont conservés et ceux qui sont introuvables. Demande confirmation |
files listfiltre avec--q(le nom et le type),--kind(image,pdf,audio,videooutext),--direction(inbound,outboundouuploaded),--address,--sinceet--until, et trie avec--sort(newest,oldest,largestouname).--sinceet--untilprennent une date ou une date-heure ISO 8601 :--sinceinclut son instant et--untils'arrête avant le sien.- Seul un fichier téléversé dont rien ne dépend peut être supprimé, et
deletablel'indique à l'avance.usagedit ce qui retient tout autre fichier :received,sent,linkedpour un fichier téléversé dont le lien de téléchargement fonctionne encore, ouscheduledpour un fichier joint à un message pas encore parti.deleteles refuse avec 409file_in_use.delete-manysupprime ce qu'elle peut, liste le reste danskeptavec une raison pour chacun, et liste les identifiants inconnus dansmissing. uploadlit le fichier au chemin indiqué et le stocke sous le nom de ce fichier, avec le type qu'implique son extension.--filenameet--content-typeles remplacent. Depuis stdin,-exige--filename, et sans--content-typele type estapplication/octet-stream. Le téléversement attend jusqu'à 10 minutes, ce que--timeout-msmodifie.- L'identifiant que renvoie
uploadjoint le fichier à un envoi sous la forme{ "fileId": "…" }dansopenemail emails send --attachments, et c'est ainsi qu'un fichier au-delà de la limite de 5 Mo en ligne peut partir. - Un fichier vide donne 400
upload_empty, un programme ou un script (jugé d'après son nom) donne 400upload_dangerous, et un fichier de plus de 100 Mo donne 413upload_too_large. Un espace de travail conserve jusqu'à 10 Go de fichiers téléversés et accepte 500 téléversements par heure. downloadexige--out <file>dans un terminal et s'arrête sans cela avec le code de sortie2. Quand la sortie est redirigée, les octets vont sur stdout, et--out -demande aussi stdout. Tout le fichier est gardé en mémoire.create-linkcrée un nouveau lien à chaque appel, avec son propre compteur de téléchargements, et le lien fonctionne jusqu'à sa révocation ou la suppression du fichier. Il se trouve sur le domaine de fichiers de--domainquand ce domaine en a un, commefiles.acme.com, sinon sur le domaine de fichiers de l'adresse du fichier, sinon sur l'adresse de l'API. Un programme ou un script est refusé avec 422file_unshareable.revoke-linkpeut être répétée sans risque : un lien déjà révoqué revient inchangé.- Une clé ou une connexion limitée à certaines adresses ou certains domaines ne voit que les fichiers qui y sont arrivés, jamais ceux téléversés pour tout l'espace de travail, et ses propres fichiers téléversés appartiennent à la première adresse qu'elle détient.
- L'index des fichiers commence le jour de sa mise en service. Les pièces jointes plus anciennes sont toujours sur leurs messages, où
openemail threads list-attachments <id>les lit.
Imports de boîte mail
openemail imports fait entrer une ancienne boîte mail dans une adresse : archives Google Takeout, fichiers .mbox d'Apple Mail, de Thunderbird et de la plupart des applications de bureau, fichiers .eml, et archives .zip ou .tgz contenant l'un d'eux, jusqu'à 100 Go par fichier et 50 fichiers par import. Les fils, les dates et les libellés suivent. Le courrier importé est silencieux : il ne déclenche ni règles, ni transferts, ni notifications, ni résumés, ni webhooks.
import-files est celle dont la plupart des gens ont besoin : elle crée l'import, téléverse chaque fichier par parties avec une ligne de progression, et le démarre. Les autres verbes sont ces étapes une à une, pour terminer un téléversement interrompu ou le piloter vous-même. create renvoie le plan, chunkBytes et les chunks de chaque fichier, upload-chunk envoie une partie, upload-state indique quelles parties sont arrivées, et start met l'import en file d'attente. openemail open imports montre les mêmes imports dans l'application web.
| Commande | Ce qu'il fait |
|---|---|
| openemail imports list | Lister une page des imports de l'espace de travail, du plus récent au plus ancien, avec le statut, les octets lus et les décomptes. --address-id garde une seule adresse |
| openemail imports get <id> | Lire un import avec son statut, sa progression et ses décomptes. Interrogez-le jusqu'à ce qu'il indique completed, failed ou cancelled |
| openemail imports create --address-id <value> --files <json|@file|-> | Créer un import à partir d'une liste de { name, bytes } et obtenir son plan de téléversement, avec status à uploading |
| openemail imports upload-state <id> | Pour chaque fichier, les index des parties déjà stockées, pour qu'un téléversement interrompu n'envoie que ce qui manque |
| openemail imports upload-chunk <id> <file> <chunk> <data> | Téléverser une partie d'un fichier, depuis un chemin ou depuis stdin avec -. Renvoyer une partie la remplace |
| openemail imports start <id> | Vérifier que chaque partie est arrivée, reconnaître le format de chaque fichier et mettre l'import en file d'attente |
| openemail imports cancel <id> | Arrêter l'import à son prochain point de contrôle. Le courrier déjà importé reste. Demande confirmation |
| openemail imports list-failures <id> | Lister chaque message ou entrée d'archive qui n'a pas suivi, avec la raison |
| openemail imports delete-upload <id> | Supprimer les fichiers téléversés. Le courrier déjà importé reste. Demande confirmation |
| openemail imports import-files --address-id <value> --files <path> | Créer, téléverser et démarrer un import en une seule commande, et rendre la main une fois qu'il est en file d'attente |
- L'adresse doit se trouver sur les propres domaines de l'espace de travail, et la clé ou la connexion doit pouvoir agir pour elle. Un seul import tourne par adresse : un autre, pendant qu'un premier est en file d'attente ou en cours, donne 409
already_running. import-filesprend--filesune fois par fichier, ou plusieurs chemins séparés par des virgules, et envoie chacun sous son propre nom de fichier.--optionsprend du JSON comme{"keepInbox":false,"includeSpam":true}. Surcreate, les trois mêmes sont des interrupteurs :--options-keep-inbox,--options-include-spamet--options-include-trash, chacun désactivé avec--no-devant, comme dans--no-options-keep-inbox.keepInboxest activé par défaut, donc le courrier de l'ancienne boîte de réception arrive dans la boîte de réception avec son état non lu. Désactivé, tout est classé dans l'archive. Le spam et la corbeille restent en arrière, sauf si vous les incluez.createprend--filesen JSON, en ligne ou depuis un fichier avec@path, et chaquebytesdoit être la taille exacte du fichier que vous téléversez ensuite.- Chaque partie fait exactement
chunkBytesde long, sauf la dernière partie d'un fichier, et une partie de mauvaise longueur donne 400bad_chunk.startrefuse un fichier auquel il manque des parties avec 412missing_chunks, et un fichier qui n'est ni une archive ni une boîte mail avec 400unsupported_file. Sur un import qui a déjà quittéuploading, elle renvoie l'import inchangé. - Si une partie échoue encore après ses nouvelles tentatives,
import-filess'arrête en laissant l'import dansuploading. Le bloc ci-dessous envoie les parties manquantes du premier fichier et le démarre. - Un import indique
processedBytessurtotalBytes, etcountsavecseen,imported,duplicate,filtered,failedetthreads.lastErrorn'est défini que quandstatusvautfailed. list-failuresdonne à chaque échec unereason:too-large(plus de 50 Mo),unparseable,no-date,storage-error,unreadable-entry,encrypted-entryouarchive-limit, avec l'objet et l'expéditeur quand ils ont pu être lus.cancelsur un import terminé donne 409not_cancellable.delete-uploadannule un import encore en cours de téléversement, et refuse un import en file d'attente ou en cours avec 409still_running, annulez donc celui-ci d'abord.
openemail imports get "$import_id" --json > import.jsonopenemail imports upload-state "$import_id" --json > state.jsonchunk=$(jq .chunkBytes import.json)chunks=$(jq '.files[0].chunks' import.json)for i in $(seq 0 $((chunks - 1))); do jq -e --argjson i "$i" '.received[0] | any(. == $i)' state.json > /dev/null && continue dd if=takeout-001.zip bs="$chunk" skip="$i" count=1 2> /dev/null | openemail imports upload-chunk "$import_id" 0 "$i" -doneopenemail imports start "$import_id"Imports depuis Resend
openemail provider-imports rapatrie un espace de travail depuis Resend avec une seule clé API Resend à accès complet. Les suppressions gardent leur motif, les segments deviennent des audiences, les contacts abonnés arrivent avec leurs noms, et les modèles arrivent comme modèles HTML avec leurs variables déclarées. Les webhooks sont enregistrés désactivés, car les livraisons sont signées différemment ici. Une clé de signature ou un jeton ne peut pas quitter Resend, donc les domaines et les clés API reviennent à la place sous forme de liste de contrôle dans le rapport.
| Commande | Ce qu'il fait |
|---|---|
| openemail provider-imports inspect <api-key> | Compter ce que contient le compte Resend, par ressource, avant d'importer. Rien n'est stocké et la clé n'est pas conservée |
| openemail provider-imports create --resend-key <value> --resources <a,b> | Mettre en file d'attente un import des ressources que vous nommez |
| openemail provider-imports list | Lister une page des imports depuis des fournisseurs d'envoi, du plus récent au plus ancien, chacun avec son rapport |
| openemail provider-imports get <id> | Lire un import : son statut, l'étape où il en est et le rapport jusqu'ici |
| openemail provider-imports cancel <id> | Arrêter l'import et effacer la clé Resend. Ce qui est déjà arrivé reste. Demande confirmation |
- Passez la clé Resend sous la forme
@pathpour la lire depuis un fichier, ou-pour la lire depuis stdin, afin qu'elle reste hors de l'historique de votre shell et de la liste des processus. Une clé tapée sur la ligne de commande fonctionne toujours, avec un avertissement.--dry-runaffiche le corps avec la clé masquée. --resourcesaccepte n'importe lesquels desuppressions,audiences,contacts,templates,webhooks,domainsetapi-keys, séparés par des virgules ou répétés.- Une clé d'envoi seul donne 400
restricted_key. Créez chez Resend une clé à accès complet pour l'import, et révoquez-la ensuite. inspectlit la première page de chaque ressource et renvoiecounts, un{ count, more }par ressource, avecmoredéfini quand une ressource dépasse sa première page.- Un seul import tourne à la fois par espace de travail, et un second donne 409
already_running. Lancer deux fois le même import ne duplique rien. La clé n'est conservée, chiffrée, que pendant l'import, et elle est effacée quand il se termine, échoue ou est annulé. - Les contacts désabonnés chez Resend sont laissés de côté et comptés dans
report.contacts.unsubscribed. report.domainsliste chaque domaine Resend avec unstate:absentquand il n'est pas dans cet espace de travail,addedquand il y est mais n'est pas vérifié, etverified, avec les enregistrements qu'il avait chez Resend. Ajoutez un domaine manquant avecopenemail domains create.report.apiKeysnomme les clés à recréer avecopenemail keys create.- Avec une connexion par navigateur, seul le propriétaire de l'espace de travail peut utiliser ces commandes, et un membre reçoit 403
owner_only. Une clé API n'y est pas soumise. Une clé ou une connexion limitée à certaines adresses ou certains domaines ne peut ni inspecter ni créer d'import, puisque les audiences, les suppressions et les modèles appartiennent à tout l'espace de travail. createa aussi besoin du scope de chaque ressource qu'elle importe :audiences:writepour les audiences,contacts:writeetaudiences:writepour les contacts,templates:writepour les modèles,webhooks:writepour les webhooks etdomains:readpour les domaines.
Calendrier
openemail calendar lit les événements de calendrier trouvés dans le courrier. Les trois commandes ne font que lire. list-events déploie chaque événement en ses occurrences dans une période que vous donnez, si bien qu'une réunion hebdomadaire fait une ligne par semaine, et get-event et get-event-ics lisent un événement en entier. openemail open calendar ouvre le calendrier dans l'application web.
| Commande | Ce qu'il fait |
|---|---|
| openemail calendar list-events --from <when> --to <when> | Lister une page d'occurrences entre deux instants, triées par heure de début, chacune renvoyant à son événement via eventId |
| openemail calendar get-event <id> | Lire un événement avec ses participants et leurs réponses, sa règle de récurrence, ses dates exclues, son organisateur et ses rappels |
| openemail calendar get-event-ics <id> | Télécharger l'événement sous forme de document iCalendar, affiché ou écrit dans --out <file> |
--fromet--tosont des dates-heures ISO 8601 comme2026-10-01T00:00:00Z.--todoit être après--fromet au plus 366 jours plus tard, puisqu'une série récurrente n'a pas de fin jusqu'à laquelle lister. Une borne manquante donne 422invalid_parameter. Une borne illisible, une période inversée ou trop longue, ou un fuseau inconnu donne 400invalid_parameter.--timezoneest un fuseau IANA commeEurope/London, UTC quand il est omis. Il sert à déployer les événements stockés sans fuseau propre, ce qui décide du jour où tombe un événement sur la journée entière.get-eventetget-event-icsprennent l'eventIdd'une occurrence, pas l'uidiCalendar. Une série récurrente est un seul événement, donc sesstartetenddécrivent la première instance.- Les événements annulés sont listés aussi, avec
statusàCANCELLED.myPartstatest la réponse enregistrée pour n'importe quelle adresse que l'espace de travail détient sur ses propres domaines, et null quand aucune d'elles n'est participante. - La pagination se poursuit avec
--cursoret la même période. Une clé ou une connexion limitée à certaines adresses ne voit que les événements que l'une d'elles organise ou auxquels elle participe, et tout autre événement donne un 404. get-event-icsdéclareMETHOD:PUBLISH, donc l'importer montre l'événement tel qu'il est plutôt que de proposer de l'accepter ou de le refuser. Les événements horodatés sont écrits comme des instants UTC et les événements sur la journée entière comme des dates.DTSTAMPest l'heure du téléchargement, donc deux téléchargements d'un événement inchangé diffèrent sur cette ligne.
Réglages
openemail settings lit et modifie les préférences de la boîte mail, comme le fuseau horaire, la langue, le format de l'heure et les listes de blocage. Quatre réglages appartiennent à une adresse plutôt qu'à l'espace de travail : signature, openEmailSignature (le pied de page OpenEmail), trackOpens et trackClicks. Nommez l'adresse avec --address, ou *@acme.com pour le catch-all d'un domaine.
| Commande | Ce qu'il fait |
|---|---|
| openemail settings get | Lire chaque réglage avec les valeurs par défaut remplies. Avec --address, les quatre réglages par adresse se lisent comme un envoi depuis cette adresse les résout |
| openemail settings update | Modifier les réglages passés et garder le reste. La réponse contient chaque réglage, relu après l'écriture |
- Sans
--address,getlit les quatre réglages par adresse comme les valeurs par défaut intégrées : pas de signature, le pied de page OpenEmail activé, et le suivi des ouvertures et des liens activé. Avec, ils viennent des valeurs propres à l'adresse, puis du catch-all de son domaine quand le catch-all a recueilli cette adresse, puis des valeurs par défaut. Une adresse plus sans réglages propres lit ceux de son adresse de base. - Sans
--address,updaterefuse--signature,--open-email-signature,--track-openset--track-clicksavec 422address_requiredet n'écrit rien. Avec,updaten'accepte que ces quatre-là, et tout le reste donne 422not_per_address. L'adresse doit appartenir à cet espace de travail, ou être*@domainpour un domaine vérifié ici avec son catch-all activé. - Les interrupteurs se désactivent avec
--no-devant :--no-open-email-signature,--no-track-openset--no-track-clicks. --signatureest du HTML d'au plus 150 000 caractères, assaini à l'écriture, donc ce qui revient est ce qui sera envoyé. Une chaîne vide la retire. C'est l'envoi qui décide s'il l'ajoute : voir--signaturedansopenemail emails send --help.- Les options couvrent les champs courants.
--dataaccepte n'importe quel réglage stocké en JSON, en ligne, depuis un fichier avec@pathou depuis stdin avec-, commetimeFormat,weekStart,undoSendEnabled,blockedSendersoublockedDomains. Les clés que les réglages ne connaissent pas sont écartées sans erreur, et une clé connue avec le mauvais type donne 422invalid_parameter. - Une liste comme
blockedDomainsest remplacée en entier, lisez-la donc d'abord et renvoyez-la avec votre changement, comme le fait l'exemple ci-dessous. Une entrée de liste de blocage trop courte pour faire une règle donne 422blocklist_entry_too_broad. --timezoneet--languagesont enregistrés tels quels, sans vérification, vérifiez donc un fuseau ou un code de langue avant de l'envoyer.- Les champs de confidentialité,
externalImages,trustedSenders,blockedSenders,blockedDomains,blockedWordsetuseDefaultBlockedWords, appartiennent à l'espace de travail. Une clé ou une connexion limitée à certaines adresses ou certains domaines ne peut pas les modifier, et ne peut nommer dans--addressqu'une adresse qu'elle détient, ou un catch-all sur un domaine qu'elle détient en entier. Les deux refus donnent 422capability_unsupported. - Une mise à jour vide ne change rien et renvoie les réglages actuels.
defaultEmailAliasne fait que présélectionner l'adresse From dans le compositeur de l'application web, et l'API ne l'utilise jamais pour choisir un expéditeur.
Exemples
file_id=$(openemail files upload ./price-list.pdf --json | jq -r .id)openemail files create-link "$file_id" --domain acme.com --json | jq -r .urlopenemail files list-links "$file_id"openemail files download "$file_id" --out copy.pdfChaque create-link crée un nouveau lien, lancez-la donc une fois et relisez le lien avec list-links. revoke-link l'arrête plus tard, y compris dans le courrier déjà parti.
openemail files list --direction uploaded --all | jq -r 'select(.deletable) | .id' > deletable.txtwc -l < deletable.txtxargs -r -n 100 openemail files delete-many --yes --json < deletable.txt | jq -c '.kept[]'Avec --all dans un pipe, files list affiche un fichier par ligne. xargs -n 100 passe à delete-many au plus 100 identifiants par appel, et tout fichier devenu utilisé entre-temps revient dans kept avec sa raison au lieu de faire échouer l'appel.
domain_id=$(openemail domains list --all | jq -r 'select(.domain == "acme.com") | .id')address_id=$(openemail domains list-addresses "$domain_id" --all | jq -r 'select(.address == "[email protected]") | .id')openemail imports import-files --address-id "$address_id" --files ~/Downloads/takeout-001.zip --files ~/Downloads/takeout-002.zip --json > import.jsonimport_id=$(jq -r .id import.json)until openemail imports get "$import_id" --json | jq -e '.status != "queued" and .status != "running"' > /dev/null; do sleep 60doneopenemail imports get "$import_id" --json | jq '{status, counts, lastError}'openemail imports list-failures "$import_id" --json | jq -r '.data[] | [.reason, .subject] | @tsv'--dry-run sur import-files affiche le POST /imports qu'elle enverrait, avec le nom et la taille de chaque fichier, et ne téléverse rien. list-failures lit 100 éléments à la fois : passez le nextCursor affiché comme --after pour la page suivante.
openemail provider-imports inspect @resend-key.txtopenemail provider-imports create --resend-key @resend-key.txt --resources suppressions,audiences,contacts,templates,webhooks,domains,api-keys --json > resend.jsonpimp_id=$(jq -r .id resend.json)until openemail provider-imports get "$pimp_id" --json | jq -e '.status != "queued" and .status != "running"' > /dev/null; do sleep 10doneopenemail provider-imports get "$pimp_id" --json | jq '.report | {contacts, domains: [.domains[] | {name, state}], apiKeys: [.apiKeys[].name]}'openemail calendar list-events --from 2026-10-01T00:00:00Z --to 2026-11-01T00:00:00Z --timezone Europe/London --all | jq -r 'select(.status != "CANCELLED") | [.start, .summary, .myPartstat] | @tsv'openemail calendar get-event cal_8d3f0a2b9c4e41f7a6b5c2d1 --json | jq '.attendees[] | {email, partstat}'openemail calendar get-event-ics cal_8d3f0a2b9c4e41f7a6b5c2d1 --out standup.icsopenemail settings get --address [email protected] --json | jq '{signature, openEmailSignature, trackOpens, trackClicks}'openemail settings update --address [email protected] --signature "$(cat signature.html)" --no-track-clicks --dry-runopenemail settings update --address [email protected] --signature "$(cat signature.html)" --no-track-clicksopenemail settings update --address '*@acme.com' --no-track-opensopenemail settings update --timezone Europe/London --language enopenemail settings get --json | jq -c '{blockedDomains: ((.blockedDomains + ["spam.example"]) | unique)}' | openemail settings update --data -La simulation affiche le PATCH /settings?address=sales%40acme.com et son corps sans l'envoyer. La ligne du catch-all règle le suivi pour chaque adresse que recueille le catch-all de acme.com, et la dernière ligne ajoute un domaine à la liste de blocage sans retirer les autres.
Scopes, confirmations et erreurs
| Scope | Commandes |
|---|---|
| files:read | files list, get, stats, download, list-links |
| files:write | files create-link, revoke-link, upload, delete, delete-many |
| threads:read | imports list, get, list-failures |
| threads:write | imports create, upload-state, upload-chunk, start, cancel, delete-upload, import-files |
| settings:read | provider-imports list, get et settings get |
| settings:write | provider-imports inspect, create, cancel et settings update |
| calendar:read | calendar list-events, get-event, get-event-ics |
- Une connexion ou une clé sans le scope s'arrête avec le code de sortie
4, nomme le scope manquant et explique comment l'obtenir. files revoke-link,files delete,files delete-many,imports cancel,imports delete-uploadetprovider-imports canceldemandent confirmation. Répondre non sort avec le code10et ne change rien. Sans surveillance et sans--yes, elles s'arrêtent avec le code de sortie2avant tout envoi.- Aucune commande ici ne demande de code de vérification, avec une connexion par navigateur comme avec une clé API, donc
--yesest tout ce dont un script a besoin. --dry-runaffiche la requête qu'un changement enverrait, avec son corps, et sort avec le code0sans l'envoyer ni vous demander de confirmer. Un corps de fichier est affiché sous forme de sa taille et de son type.files list,files list-links,imports list,provider-imports listetcalendar list-eventslisent une page :--limitprend de 1 à 100 et le serveur en envoie 25 quand elle est omise, et--cursorprend lenextCursorde la page précédente.--alllit chaque page,--max <n>s'arrête après autant d'éléments, et--ndjson, ou--alldans un pipe, affiche un objet JSON par ligne. Avec--json, elles affichent un seul document{ items, hasMore, nextCursor }.imports list-failurespagine à sa façon :--afterprend lenextCursorde la page précédente,--limitvaut au plus 100, la valeur par défaut, et il n'y a pas de--all. Avec--json, elle affiche{ object, data, nextCursor }.- Les lectures et les changements qui aboutissent au même résultat deux fois sont relancés après une panne réseau :
files revoke-link,imports upload-chunk,imports startetsettings update. Tout autre changement est envoyé une seule fois. Après une réponse perdue, regardez avant de réessayer : un seconduploadstocke une seconde copie et un secondcreate-linkcrée un second lien, un 404 sur votre secondfiles deletesignifie que le premier a fonctionné, et un seconddelete-manyliste dansmissingce que le premier a supprimé. - Un refus sort avec le code de son statut :
4pour un 403,5pour un 404,6pour un 409,7pour un 400 ou un 422, et8pour un 429.