Microsoft gestion des erreurs Web IQ

Toutes les API v3 retournent des réponses d’erreur standardisées pour vous aider à diagnostiquer et résoudre rapidement les problèmes. Cette section traite des codes d’état HTTP, de la structure de réponse aux erreurs et des scénarios de résolution des problèmes courants.

Note

Toutes les valeurs d’énumération de chaîne ne respectent pas la casse.

Codes d’état HTTP

Code de statut S’applique à Catégorie d’erreur Description Causes courantes
200 Toutes les API Success La demande a abouti. -
202 Parcourir uniquement Accepté Demande acceptée pour le traitement (analyse dynamique). Analyse à la demande en cours lorsqu’il liveCrawl s’agit de « secours »
400 Toutes les API Demande incorrecte Paramètres de requête non valides. Champs obligatoires manquants, valeurs de paramètre non valides, JSON mal formé
401 Toutes les API Unauthorized Échec ou absence de l’authentification. Clé API non valide, en-tête x-apikey manquant
403 Toutes les API Interdit Informations d’identification valides, mais autorisations insuffisantes. La clé API ne dispose pas des autorisations requises
403 Parcourir uniquement Interdit Contenu filtré ou URL exclu. URL bloquée par stratégie ou contenu filtré
404 Parcourir uniquement Introuvable Document introuvable. URL non valide ou inaccessible
410 Toutes les API Non disponible (Gone) HTTPS requis. Requête effectuée sur HTTP au lieu de HTTPS
415 Toutes les API Type de média non pris en charge Type de contenu non pris en charge. En-tête manquant ou incorrect content-type
429 Toutes les API Trop de demandes Limite de débit dépassée. Pour Parcourir avec des codes d’erreur granulaires, également retourné lorsque trop d’analyses à la demande sont demandées. Trop de requêtes dans la fenêtre de temps ou des demandes d’analyse dynamique excessives
430 Parcourir uniquement Erreur du serveur Trop d’analyses à la demande (codes d’erreur hérités). Demandes d’analyse dynamique excessives
500 Toutes les API Erreur interne du serveur Erreur de serveur inattendue. Problème de serveur temporaire
520 Parcourir uniquement Échec du traitement du contenu La page a été récupérée, mais aucun contenu utilisable ne peut être produit. Échec ou expiration du délai d’expiration du traitement des documents ou expiration du rendu dynamique
523 Parcourir uniquement Analyse annulée L’URL n’a pas produit de contenu, car l’analyse n’a pas réussi en raison d’un quota limité d’analyse de site. Quota d’analyse limité pour l’hôte source
524 Parcourir uniquement Délai d’expiration de l’analyse L’URL n’a pas produit de contenu, car l’analyse a expiré. L’hôte distant a expiré

Les états 520, 523 et 524 font partie des codes d’erreur De navigation granulaires activés par défaut.

Structure de la réponse d’erreur

Toutes les réponses d’erreur suivent ce schéma :

Champ Type Description
errorCode string Catégorie d’erreur plus détaillée qui permet d’identifier le type d’erreur.
errorCategory string Catégorie de haut niveau : UserError (côté client / non retenable) ou SystemError (côté serveur / retentable).
userMessage string Description lisible de l’erreur.
technicalDetails chaîne (facultatif) Informations techniques supplémentaires ou détails de validation des paramètres pour le débogage.
retryAfter chaîne (facultatif) Recommandations relatives aux nouvelles tentatives. Pour AuthUserThrottled, AuthUserDailyUsageExceededet InternalServerError, une durée avec un "s" suffixe (par exemple, "60s"). Pour les erreurs granulaires parcourir, notamment TooManyOnDemandCrawls (429), un horodatage UTC ISO 8601 (par exemple) "2026-10-30T01:01:00Z"qui est le plus tôt à réessayer. Omis lorsqu’aucune aide de nouvelle tentative ne s’applique.
requestId chaîne (facultatif) Identificateur unique de la requête.
traceId string ID de trace distribué pour le débogage et Microsoft prise en charge.

Note

retryAfter utilise deux formats. AuthUserThrottled, AuthUserDailyUsageExceededet InternalServerError les réponses utilisent une durée telle que "60s". Parcourir les réponses et parcourir 202 Accepted les erreurs granulaires utilisent un horodatage UTC ISO 8601 absolu tel que "2026-10-30T01:01:00Z". L’état HTTP seul ne détermine pas le format : TooManyOnDemandCrawls retourne 429, mais utilise un horodatage. La logique de nouvelle tentative doit gérer les deux formats.

Note

202 Accepted Les réponses (par exemple, Parcourir l’interrogation d’analyse dynamique) ne sont pas des réponses d’erreur et n’utilisent pas le schéma d’erreur ci-dessus. Ils incluent un retryAfter horodatage pour indiquer quand réessayer la requête.

Exemple de réponse d’erreur :

{
  "errorCode": "HandlerInvalidInput",
  "errorCategory": "UserError",
  "userMessage": "Invalid input provided. Please check your request parameters.",
  "technicalDetails": "Parameter validation failed: maxResults=100 exceeds maximum=50",
  "requestId": "req_abc123",
  "traceId": "trace_xyz789"
}

Informations de référence sur les codes d’erreur

Erreurs de validation de requête

Code d’erreur État HTTP Category Description
RequestInvalidFormat 400 UserError Corps JSON mal formé ou structure de charge utile de requête non valide.
RequestInvalidMethod 400 UserError Nom de méthode ou d’outil non valide spécifié dans la requête.
HandlerInvalidInput 400 UserError Valeurs de paramètre d’entrée non valides (par exemple, requête vide, maxResults hors plage [1, 50], valeurs d’énumération non valides). Pour les demandes de passage parcourir, query il manque, vide ou plus de 1 000 caractères.
RequestBlockedHeader 400 UserError La requête contient un en-tête de débogage/variant bloqué (par exemple, , X-AugmentationsX-DebugOptions, X-XapHostOverride). Utilisez les paramètres d’URL documentés (?p1=, ?debugoptions=, ?atlahostname=) à la place.
RequestUnsupportedMediaType 415 UserError L’en-tête content-type est manquant ou non application/json.
MethodNotAllowed 405 UserError Méthode HTTP non autorisée sur l’itinéraire (par exemple, GET sur un point de terminaison POST uniquement).

Erreurs d’authentification et d’autorisation

Code d’erreur État HTTP Category Description
AuthNoToken 401 UserError Authentification requise. Aucun jeton du porteur ni clé API fournie.
AuthTokenParse 401 UserError Échec de l’analyse du jeton d’authentification ou du format de jeton d’authentification non valide.
AuthInvalidApiKey 401 UserError La clé API fournie n’est pas valide ou n’est pas reconnue.
AuthenticationFailed 401 UserError Échec général de l’authentification.
AuthExpiredTrial 401 UserError La période d’essai a expiré. Mettez à niveau votre clé.
AuthMissingEntryId 400 UserError Identité de l’application manquante / ID d’entrée dans le contexte de la demande.
AuthAppIdSelectionRequired 400 UserError Votre identité est mappée à plusieurs applications. Spécifiez l’application cible à l’aide du APPID paramètre de requête. Voir Appeler plusieurs AppID.
AuthUnauthorizedEntryId 401 UserError ID d’entrée non autorisé. L’identité de l’application n’a pas pu être résolue ou le paramètre de requête a été envoyé avec l’authentification APPID par clé API.
AuthUnauthorizedAppId 403 UserError La valeur spécifiée APPID n’est pas associée à votre identité.
AuthUnauthorizedService 403 UserError L’appelant est authentifié mais non autorisé à accéder au service/vertical demandé.
AuthBatchEndpointRequired 403 UserError L’application est nécessaire pour utiliser le point de terminaison de lot (X-FD-Batch: 1) pour la recherche web.
AuthMcpWebForbidden 403 UserError L’application n’est pas autorisée à utiliser l’outil MCP web .
AuthContentFormatForbidden 403 UserError Cette application a uniquement accès aux passages. Utiliser contentFormatpassage. Consultez passages et formats de contenu.

Erreurs de limitation de débit

Code d’erreur État HTTP Category Description
AuthUserThrottled 429 UserError La fréquence de requête dépasse la limite de débit de votre AppID. Vérifiez retryAfter.
AuthUserDailyUsageExceeded 429 UserError Le quota de demandes quotidiennes a été atteint (réinitialise à 00:00 UTC). Vérifiez retryAfter.

Parcourir les erreurs spécifiques à l’API

Les codes d’erreur granulaires sont activés par défaut pour Parcourir. Ils identifient la raison spécifique pour laquelle une page n’a pas pu être retournée, comme le filtrage de contenu, un document manquant ou un échec d’analyse, et incluent des conseils de nouvelle tentative le cas échéant. Aucune demande d’inscription ou de support n’est requise.

Les codes granulaires et hérités utilisent la structure de réponse d’erreur standard. Les erreurs de navigation qui ne sont pas répertoriées ici sont signalées comme InternalServerError (HTTP 500).

Codes d’erreur Parcourir hérités

Ces codes ont été utilisés avant que les codes d’erreur granulaires deviennent la valeur par défaut. Ils sont répertoriés pour référence lors de la gestion des réponses plus anciennes.

Code d’erreur État HTTP Category Description
BrowseApiDocNotFound 404 UserError Document introuvable. Aucun contenu disponible pour l’URL spécifiée.
BrowseApiIsFilteredOut 403 UserError Le résultat a été supprimé par la stratégie de contenu, le filtrage pour adultes, les restrictions d’accès ou les restrictions de domaine.
BrowseApiIsUrlExcluded 403 UserError L’URL cible est exclue par robots.txt ou les stratégies d’exclusion d’analyse.
BrowseApiTooManyOnDemandCrawls 430 UserError Trop de demandes d’analyse dynamique à la demande en cours. Réduisez le taux d’analyse en direct.

Codes d’erreur De navigation granulaire

Code d’erreur État HTTP Category Typique retryAfter userMessage Action recommandée
InvalidUrl 400 UserError Omis L’URL demandée n’est pas valide. Corrigez l’URL avant de réessayer.
NotSupported 400 UserError Omis L’URL demandée n’est pas prise en charge. Utilisez une URL qui pointe vers un document web pris en charge.
URLFilteredOutSpamAdult 403 UserError Environ 24 heures L’URL demandée a été filtrée par le courrier indésirable ou la stratégie pour adultes. La page ne peut pas être retournée. Ne réessayez pas avant retryAfter.
URLFilteredOutEncumbrance 403 UserError Environ 24 heures L’URL demandée a été filtrée par restrictions de contenu. L’éditeur ou la stratégie de site, telle que les directives de robots ou les règles de paywall, n’autorise pas le retour du contenu. Ne réessayez pas avant retryAfter.
URLFilteredOutSource403Forbidden 403 UserError Environ 24 heures La source a refusé l’accès à l’URL demandée. Le site source a retourné HTTP 403. Ne réessayez pas avant retryAfter.
BrowseApiIsFilteredOut 403 UserError Environ 24 heures, lorsqu’elles sont fournies L’URL demandée a été filtrée. Retourné lorsqu’une page est filtrée pour une raison pour laquelle aucun code plus spécifique n’est couvert. Ne réessayez pas avant retryAfter.
DocNotFound 404 UserError Omis, sauf si fourni par le service d’analyse Le document demandé n’a pas été trouvé. Vérifiez l’URL ou définissez liveCrawl sur « secours » pour demander une analyse dynamique.
TooManyOnDemandCrawls 429 UserError Lorsqu’il est fourni par le service d’analyse Trop d’analyses à la demande ont été demandées. Réduisez le taux d’analyse en direct. S’il retryAfter est présent, patientez jusqu’à ce moment-là avant de réessayer.
FailedNoContent 520 SystemError Environ 5 minutes Le traitement ou la publication de documents n’ont pas pu produire du contenu utilisable. Réessayez après retryAfter.
DynamicRenderingTimeout 520 SystemError Environ 5 minutes Le rendu de page dynamique a expiré. Réessayez après retryAfter, ou réessayez sans renderDynamicPages.
ProcessingTimeout 520 SystemError Environ 5 minutes Délai d’expiration du traitement des documents. Réessayez après retryAfter.
PolitenessCancellation 523 SystemError Environ 5 minutes L’analyse a été annulée pour respecter les limites d’analyse de l’hôte source. L’URL n’a pas produit de contenu, car l’analyse n’a pas réussi en raison d’un quota limité d’analyse de site. Réessayez après retryAfter.
HostCrawlTimeout 524 SystemError Environ 5 minutes L’analyse de l’hôte source a expiré. L’URL n’a pas produit de contenu, car l’analyse a expiré : l’hôte distant n’a pas répondu dans le temps. Réessayez après retryAfter.

Lorsqu’un délai de nouvelle tentative s’applique, la réponse inclut retryAfter en tant qu’horodatage UTC ISO 8601 au format yyyy-MM-ddTHH:mm:ssZ, par exemple "retryAfter": "2026-10-30T01:01:00Z". Ne réessayez pas avant cette heure. Lorsqu’il retryAfter est omis, aucune aide de nouvelle tentative ne s’applique.

Exemple de réponse d’erreur granulaire :

{
  "errorCode": "URLFilteredOutEncumbrance",
  "errorCategory": "UserError",
  "userMessage": "The requested URL was filtered by content restrictions.",
  "retryAfter": "2026-10-31T01:00:00Z",
  "traceId": "0123456789abcdef0123456789abcdef"
}

Parcourir les erreurs de passage

Ces erreurs s’appliquent aux requêtes Parcourir avec contentFormat: "passage", y compris les demandes des applications sans accès complet aux documents, pour lesquelles « passage » est le format par défaut. Consultez Parcourir les demandes de passage.

Pathologie Code d’erreur État HTTP userMessage
query manquants, vides, espaces blancs uniquement ou plus de 1 000 caractères HandlerInvalidInput 400 Entrée non valide fournie. Vérifiez les paramètres de votre demande.
Une application sans demandes textd’accès complet aux documents, htmlou markdown AuthContentFormatForbidden 403 Cette application a uniquement accès aux passages. Utilisez contentFormat 'passage'.

Tous les autres résultats parcourir pour les demandes de passage utilisent les mêmes codes d’état et codes d’erreur que text, htmlet markdown les demandes. Cela inclut les pages filtrées, les documents introuvables, une analyse dynamique en attente (202 Accepted) et des échecs d’analyse.

Erreurs de service et d’infrastructure

Code d’erreur État HTTP Category Réessayable Description
InternalServerError 500 SystemError Oui (30s) Erreur interne du serveur.

Scénarios d’erreurs courants

Erreurs d’authentification (401, 403)

Symptôme : Échec de l’authentification ou accès interdit

Solutions :

  • Vérifiez que votre clé API est correcte et incluse dans l’en-tête x-apikey
  • Vérifiez que votre clé API n’a pas expiré
  • Vérifiez que vous disposez des autorisations requises pour le point de terminaison
  • Contactez votre représentant Microsoft si les problèmes persistent

Exemple :

# Correct authentication
curl -X POST "https://api.microsoft.ai/v3/search/web" \
  -H "x-apikey: your-valid-key-here" \
  -H "content-type: application/json" \
  -d '{"query": "test"}'

Limitation du débit (429)

Symptôme : Limite de débit dépassée ou quota quotidien épuisé (AuthUserThrottled ou AuthUserDailyUsageExceeded)

Les requêtes au-dessus de la limite de débit de votre AppID retournent HTTP 429. Votre limite de taux s’affiche dans le portail Web IQ.

Solutions :

  • Implémenter une logique de nouvelle tentative avec temporisation exponentielle
  • Attendez l’intervalle dans la retryAfter réponse d’erreur (par exemple, "60s") avant de réessayer
  • Réduire la fréquence des demandes
  • Notez que les limites de quota quotidiennes (AuthUserDailyUsageExceeded) sont réinitialisées quotidiennement à 00:00 UTC
  • Pour demander une limite plus élevée, contactez le support web IQ

Exemple de réponse :

{
  "errorCode": "AuthUserThrottled",
  "errorCategory": "UserError",
  "userMessage": "Rate limit exceeded. Please reduce your request frequency.",
  "retryAfter": "60s",
  "requestId": "req_123",
  "traceId": "trace_456"
}

Paramètres non valides (400)

Symptôme : Demande incorrecte en raison de paramètres non valides

Problèmes courants

  • Champs obligatoires manquants (par exemple, query paramètre)
  • Valeurs des paramètres hors plage (par exemple, maxResults> 50)
  • Types de paramètres non valides (par exemple, chaîne au lieu d’entier)
  • Valeurs de paramètre non prises en charge (par exemple, non valides contentFormat)

Solutions :

  • Valider tous les paramètres requis sont présents
  • Vérifier les valeurs des paramètres par rapport aux contraintes documentées
  • Garantir une mise en forme JSON appropriée

Erreurs de serveur et d’infrastructure (500)

Symptôme : Erreur inattendue du serveur interne ou du service en amont (InternalServerError)

Solutions :

  • Vérifiez le retryAfter champ (par défaut "30s") et réessayez la requête après avoir attendu
  • Implémenter une stratégie de nouvelle tentative avec temporisation exponentielle et gigue
  • Si le problème persiste, contactez Microsoft support avec le traceId support fourni dans la réponse

Exemple de réponse :

{
  "errorCode": "InternalServerError",
  "errorCategory": "SystemError",
  "userMessage": "The service is temporarily unavailable. Please try again later.",
  "technicalDetails": "An internal service error occurred. Please contact support if the issue persists.",
  "retryAfter": "30s",
  "traceId": "trace_456"
}

Parcourir la réponse acceptée par l’API (202)

Symptôme : Réponse acceptée (202) avec url et retryAfter champs dans le corps de la réponse

Explication : Quand liveCrawl est « secours » et que l’URL n’est pas trouvée dans l’index, l’API peut démarrer une analyse de manière asynchrone et retourner 202 Accepté. L’analyse dynamique est soumise aux restrictions et à la disponibilité de l’éditeur ; La « secours » ne garantit pas une analyse réelle. Le même comportement s’applique à tous contentFormat, y compris passage.

Gestion :

  1. Vérifiez l’état HTTP 202.
  2. Lisez retryAfter le corps de la réponse. Il s’agit d’un horodatage UTC ISO 8601 (par exemple) "2026-10-30T01:01:00Z"qui est le plus tôt à réessayer.
  3. Attendez jusqu’à ce moment-là.
  4. Envoyez à nouveau la même requête. Le url champ contient l’URL à demander ; elle correspond par défaut à l’URL que vous avez demandée.
  5. Limitez le nombre de tentatives d’interrogation. Une analyse qui ne peut pas se terminer retourne une erreur, telle que HostCrawlTimeout (524) ou FailedNoContent (520).
# Initial request
curl -X POST "https://api.microsoft.ai/v3/browse" \
  -H "x-apikey: your-key" \
  -H "content-type: application/json" \
  -d '{"url": "https://example.com", "contentFormat": "passage", "query": "information about this domain", "liveCrawl": "fallback"}'

# Example response when the URL isn't indexed: 202 Accepted with "retryAfter": "2026-10-30T01:01:00Z"
# Wait until that time, then send the same request again

Bonnes pratiques

  1. Toujours vérifier les codes d’état - Ne supposez pas la réussite
  2. Utiliser traceId pour la prise en charge - Inclure traceId lors du contact avec le support technique
  3. Implémenter une logique de nouvelle tentative - Utiliser une interruption exponentielle pour les erreurs temporaires
  4. Gérer les réponses 202 : pour l’API Parcourir avec analyse dynamique, patientez jusqu’à ce que le retryAfter temps et la nouvelle tentative
  5. Gérer les deux retryAfter formats - Utilisez la durée pour AuthUserThrottled, AuthUserDailyUsageExceededet InternalServerError, et l’horodatage ISO 8601 pour Parcourir 202 et les erreurs granulaires, notamment TooManyOnDemandCrawls (429)
  6. Valider avant l’envoi - Vérifier les paramètres localement pour éviter 400 erreurs
  7. Utiliser HTTPS uniquement - Les requêtes HTTP retournent 410 erreurs