Aller au contenu

Codes d'erreur

Au-delà des codes de statut HTTP standards, plusieurs opérations de la RealityConnect API renvoient un code error exploitable par programme dans le corps de la réponse pour préciser la raison du rejet de la requête. Cette page recense chaque code nommé par endpoint, ce qui le déclenche, et comment le gérer.


Les opérations qui renvoient un code nommé utilisent cette forme, avec des champs supplémentaires propres à chaque endpoint, indiqués ci-dessous :

{
"statusCode": 409,
"error": "NodeHasDerivatives",
"message": "..."
}

message est optionnel et, lorsqu’il est présent, donne un détail lisible par un humain. Basez votre traitement sur error, pas sur message.

PATCH /v1/nodes/{nodeId}/move/{newParentId} — 409 Conflict

CodeSignificationAction suggérée
AccessRightsChangeRequiredLe déplacement changerait qui peut accéder au nœud ; message explique le changement précisExaminez le changement d’accès, ou retentez avec force: true si cela est acceptable
MaxDepthExceededLe déplacement dépasserait la profondeur de hiérarchie maximale autoriséeDéplacez le nœud vers un emplacement moins profond
CircularityFoundLe parent cible se trouve dans la sous-arborescence du nœud déplacéChoisissez un parent hors de la sous-arborescence du nœud
NodeHaveMembershipsAttachedLe nœud a des enregistrements d’appartenance qui bloquent son déplacement au-delà d’une frontière de permissionRetirez d’abord les appartenances, ou déplacez le nœud dans la même portée de permission
NodesInDifferentRegionsLe nœud et le parent cible sont provisionnés dans des régions différentesNon résoluble — les nœuds ne peuvent pas être déplacés entre régions
NodeCannotBeMovedCe type de nœud ne prend pas en charge le déplacementNon résoluble pour ce type de nœud
DerivativesNotInCommonParentLes sorties dérivées du nœud ne sont pas toutes sous un parent commun avec la cible du déplacementRéorganisez les dérivés, puis retentez
SourcesNotInCommonParentLes entrées source du nœud ne sont pas toutes sous un parent communRéorganisez les sources, puis retentez
DataBundleLinkedToTwinLe data bundle du nœud est lié à un twinDétachez d’abord le twin
DoesNotMeetHierarchyConstraintsLe déplacement viole une règle de hiérarchie propre au typeVérifiez quels types enfants le parent cible autorise
MoveNodeFailedLe déplacement a été rejeté pour une raison sans code plus précisRetentez ; contactez le support si cela persiste

DELETE /v1/nodes/{nodeId} — 409 Conflict

CodeSignificationAction suggérée
NodeHasDerivativesLe nœud a des sorties dérivées qui doivent d’abord être supprimées, listées dans derivatives[]Supprimez ou déplacez les dérivés listés, puis retentez
NodeNotInDeletableStateLe nœud est en cours de traitement ou son traitement a échoué, voir isProcessing / isFailedAttendez la fin du traitement, ou résolvez l’échec, puis retentez
NodeHasBundleDependantsLe data bundle du nœud a des dépendants qui bloquent la suppressionRetirez d’abord les dépendants
DeleteNodeFailedLa suppression a été rejetée pour une raison sans code plus précisRetentez ; contactez le support si cela persiste

Restaurer ou supprimer définitivement un nœud dans la corbeille

Section intitulée « Restaurer ou supprimer définitivement un nœud dans la corbeille »
EndpointStatutCodeSignificationAction suggérée
PATCH /v1/nodes/{id}/restore409StorageLimitExceededRestaurer le nœud dépasserait le quota de stockage de l’organisationLibérez du stockage ou augmentez le quota, puis retentez
DELETE /v1/nodes/{id}/hard409NoNodeRemovedLe nœud n’a pas été trouvé dans la corbeille dans un état supprimableVérifiez l’id du nœud et son état dans la corbeille

POST /v1/bundles/{bundleId}/processing — 409 Conflict

CodeSignificationAction suggérée
ProcessingCostMismatchLe coût de traitement soumis ne correspond plus au coût actuelRécupérez une nouvelle estimation de coût et retentez
NoInputDataFoundForProcessingAucune donnée d’entrée n’a été trouvée pour traiter ce bundleVérifiez que la session d’upload a été finalisée avant de déclencher le traitement
InsufficientProcessingCapacityLa capacité de traitement n’est actuellement pas disponibleRetentez plus tard
FailedToLaunchProcessingLe job de traitement n’a pas pu être lancéRetentez ; contactez le support si cela persiste
EndpointStatutCodeSignificationAction suggérée
POST /v1/site-files403StorageLimitExceededLe quota de stockage de l’organisation est dépasséLibérez du stockage ou augmentez le quota
POST /v1/site-files409FileAlreadyExistsUn fichier avec la même identité existe déjàUtilisez le fichier existant, ou uploadez sous un autre nom
POST /v1/site-files/{fileId}/finalize400FileNotCompatibleLe format du fichier uploadé n’est pas compatible avec le type de fichier attenduVérifiez le format du fichier et re-uploadez
POST /v1/bundles/{bundleId}/upload-sessions403StorageLimitExceededLe quota de stockage de l’organisation est dépasséLibérez du stockage ou augmentez le quota
POST /v1/bundles/{bundleId}/upload-sessions/{sessionId}/files403StorageLimitExceededLe quota de stockage de l’organisation est dépasséLibérez du stockage ou augmentez le quota
POST /v1/twin/{contextId}/object/attachments409StorageLimitExceededLe quota de stockage de l’organisation est dépasséLibérez du stockage ou augmentez le quota
POST /v1/twin/{contextId}/object/attachments409FileAlreadyExistsUne pièce jointe avec la même identité existe déjàUtilisez la pièce jointe existante, ou uploadez sous un autre nom

PUT /v1/groups/{groupId}/users/{userId} (ajouter un membre) — 409 Conflict

CodeSignificationAction suggérée
GroupHasSamlLinkL’appartenance au groupe est gérée par une intégration SAML/SSOGérez l’appartenance via le fournisseur SAML
CannotInviteToSCIMGroupL’appartenance au groupe est gérée par provisionnement SCIMGérez l’appartenance via le fournisseur SCIM
UserAlreadyMemberL’utilisateur est déjà membre du groupeAucune action requise

DELETE /v1/groups/{groupId}/users/{userId} (retirer un membre) — 409 Conflict

CodeSignificationAction suggérée
GroupHasSamlLinkL’appartenance au groupe est gérée par une intégration SAML/SSOGérez l’appartenance via le fournisseur SAML
CannotRemoveMemberFromSCIMGroupL’appartenance au groupe est gérée par provisionnement SCIMGérez l’appartenance via le fournisseur SCIM

POST /v1/groups et PATCH /v1/groups/{groupId} — 409 Conflict

CodeSignificationAction suggérée
DuplicateGroupNameUn groupe portant ce nom existe déjà dans l’organisationChoisissez un autre nom
CannotUpdateMemberFromSCIMGroupL’appartenance au groupe est gérée par provisionnement SCIMGérez l’appartenance via le fournisseur SCIM

DELETE /v1/groups/{groupId} — 409 Conflict

CodeSignificationAction suggérée
CannotRemoveSCIMGroupL’appartenance au groupe est gérée par provisionnement SCIMGérez l’appartenance via le fournisseur SCIM
CannotRemoveOrganizationGroupLe groupe n’a pas de division propriétaire uniqueNon résoluble — ce groupe ne peut pas être supprimé via cet endpoint

POST /v1/nodes/{nodeId}/invitations et POST /v1/invitations partagent les mêmes codes d’erreur.

StatutCodeSignificationAction suggérée
409UserAlreadyInvitedL’utilisateur a déjà une invitation en attenteAucune action requise
409UserAlreadyMemberL’utilisateur est déjà membreAucune action requise
403InvalidEmailDomainLe domaine de l’email invité n’est pas autorisé pour cette organisationUtilisez une adresse email sur un domaine autorisé
400CustomRoleNotAssignableToDataNodeLe rôle personnalisé indiqué ne peut pas être attribué à ce nœudChoisissez un rôle attribuable à ce nœud
400CustomRoleNotFoundLe rôle personnalisé indiqué n’existe pasVérifiez l’id du rôle
400AdminsitrativeRoleNotFound*Le rôle administratif indiqué n’existe pasVérifiez l’id du rôle
400AdministrativeRoleInvalidNodeUn rôle administratif a été ciblé sur un nœud qui ne le prend pas en chargeAttribuez le rôle administratif au niveau de l’organisation
422InvitationEmailRejectedLe fournisseur de messagerie a rejeté définitivement l’adresse du destinataireCorrigez l’adresse email avant de retenter
503InvitationEmailNotSentLe fournisseur de messagerie est temporairement indisponible ; rien n’a été persistéRetentez la requête telle quelle

* Ce nom de code contient une faute de frappe dans la réponse actuelle de l’API — reproduisez-le exactement tel qu’indiqué, pas AdministrativeRoleNotFound.

Limitation de débit, authentification et contrôle d’accès

Section intitulée « Limitation de débit, authentification et contrôle d’accès »

Un 403 peut provenir de n’importe laquelle des trois couches de contrôle d’accès décrites dans Getting Started — Modèle de sécurité : les scopes OAuth, les rôles par nœud, et l’accès au contenu. Les trois partagent actuellement le même code de statut, et la plupart partagent le même corps générique ; traitez donc un 403 comme « non autorisé pour une de ces raisons » plutôt que de supposer qu’il s’agit toujours d’un problème de scope.

StatutCodeSignification
429rate_limitedLe bucket de requêtes de l’organisation est épuisé — voir Limites de débit
401not_authenticatedLa requête n’a pas de jeton bearer, ou le jeton n’a pas pu être analysé
401invalid_tokenLa vérification de signature ou d’expiration du jeton a échoué
403(pas de code — message : "Insufficient OAuth scopes")Le jeton ne porte pas un scope requis par l’opération — voir Scopes OAuth
403(pas de code — message : "Forbidden resource")Le rôle ou l’accès au contenu de l’appelant sur ce nœud ne permet pas l’action, ou l’organisation a atteint une limite de licences/sièges — le corps ne permet pas de distinguer laquelle
403errorCode: "SSORestrictedResource"Cette ressource est restreinte aux appelants authentifiés via une session SSO/fournisseur d’identité spécifique
  • Consultez la référence API pour les schémas complets de requête et de réponse par opération.