Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
retryAfterré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,
queryparamè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
retryAfterchamp (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
traceIdsupport 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 :
- Vérifiez l’état HTTP 202.
- Lisez
retryAfterle 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. - Attendez jusqu’à ce moment-là.
- Envoyez à nouveau la même requête. Le
urlchamp contient l’URL à demander ; elle correspond par défaut à l’URL que vous avez demandée. - Limitez le nombre de tentatives d’interrogation. Une analyse qui ne peut pas se terminer retourne une erreur, telle que
HostCrawlTimeout(524) ouFailedNoContent(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
- Toujours vérifier les codes d’état - Ne supposez pas la réussite
- Utiliser traceId pour la prise en charge - Inclure traceId lors du contact avec le support technique
- Implémenter une logique de nouvelle tentative - Utiliser une interruption exponentielle pour les erreurs temporaires
-
Gérer les réponses 202 : pour l’API Parcourir avec analyse dynamique, patientez jusqu’à ce que le
retryAftertemps et la nouvelle tentative -
Gérer les deux
retryAfterformats - Utilisez la durée pourAuthUserThrottled,AuthUserDailyUsageExceededetInternalServerError, et l’horodatage ISO 8601 pour Parcourir 202 et les erreurs granulaires, notammentTooManyOnDemandCrawls(429) - Valider avant l’envoi - Vérifier les paramètres localement pour éviter 400 erreurs
- Utiliser HTTPS uniquement - Les requêtes HTTP retournent 410 erreurs