# Power Automate Error Patterns Reference Quick reference guide for common Power Automate error patterns and their solutions. ## Authentication Errors (401/403) ### Pattern Recognition - Status codes: 401, 403 - Error messages containing: "unauthorized", "forbidden", "access denied", "authentication failed" - Common in: SharePoint, OneDrive, HTTP with authentication ### Research Targets ``` PowerAutomateDocs/{Connector}/overview.md → Authentication section PowerAutomateDocs/{Connector}/actions.md → Permission requirements ``` ### Common Root Causes 1. **Expired or invalid credentials** - Connection needs re-authentication - Credentials rotated but connection not updated 2. **Insufficient permissions** - Service account lacks required permissions - SharePoint: Need "Edit" or "Full Control" on list - OneDrive: Need appropriate file/folder permissions 3. **Conditional access policies** - Azure AD policies blocking service accounts - MFA requirements not met - Location-based restrictions ### Fix Patterns ```json { "actions": { "Scope_Error_Handling": { "type": "Scope", "actions": { "Get_Items": { // Original action } }, "runAfter": {} }, "Catch_Auth_Error": { "type": "Compose", "inputs": "Authentication failed - verify connection permissions", "runAfter": { "Scope_Error_Handling": ["Failed", "TimedOut"] } } } } ``` ## Throttling Errors (429) ### Pattern Recognition - Status code: 429 - Error messages: "TooManyRequests", "throttled", "rate limit exceeded" - Common in: SharePoint (600/min), OneDrive (100/min), HTTP APIs ### Research Targets ``` PowerAutomateDocs/{Connector}/overview.md → API Limits section PowerAutomateDocs/BuiltIn/control.md → Delay actions ``` ### Connector-Specific Limits | Connector | Limit | Per | |-----------|-------|-----| | SharePoint | 600 calls | 60 seconds per connection | | OneDrive | 100 calls | 60 seconds per connection | | HTTP | 600 calls | 60 seconds (default) | | Apply to each | 50 iterations | Concurrent (default) | ### Fix Patterns **1. Add Delays Between Calls** ```json { "actions": { "Delay": { "type": "Wait", "inputs": { "interval": { "count": 1, "unit": "Second" } }, "runAfter": { "Previous_Action": ["Succeeded"] } } } } ``` **2. Implement Exponential Backoff** ```json { "actions": { "Do_Until_Success": { "type": "Until", "expression": "@equals(variables('Success'), true)", "limit": { "count": 5, "timeout": "PT1H" }, "actions": { "Try_Action": { "type": "ApiConnection", "inputs": { /* action config */ } }, "Check_Status": { "type": "If", "expression": { "and": [ { "equals": [ "@outputs('Try_Action')['statusCode']", 429 ] } ] }, "actions": { "Wait_Exponential": { "type": "Wait", "inputs": { "interval": { "count": "@mul(2, variables('RetryCount'))", "unit": "Second" } } } } } } } } } ``` **3. Reduce Concurrent Iterations** ```json { "Apply_to_each": { "type": "Foreach", "foreach": "@body('Get_Items')", "runtimeConfiguration": { "concurrency": { "repetitions": 1 } }, "actions": { /* ... */ } } } ``` ## Data Format Errors ### Pattern Recognition - Error messages: "InvalidTemplate", "Unable to process template", "cannot be evaluated", "property doesn't exist" - Common in: Parse JSON, Compose, expressions with dynamic content ### Research Targets ``` PowerAutomateDocs/BuiltIn/data-operation.md → Parse JSON section PowerAutomateDocs/BuiltIn/data-operation.md → Compose section ``` ### Common Root Causes 1. **Missing Parse JSON Schema** - Dynamic content not available without schema - Schema doesn't match actual data structure 2. **Incorrect Expression Syntax** - Invalid Power Automate expression functions - Wrong property paths in JSON - Type mismatches (string vs number vs array) 3. **Null/Undefined Values** - Expressions trying to access null properties - Missing optional fields ### Fix Patterns **1. Add Parse JSON with Proper Schema** ```json { "Parse_JSON": { "type": "ParseJson", "inputs": { "content": "@body('HTTP')", "schema": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "items": { "type": "array", "items": { "type": "object", "properties": { "value": { "type": "string" } } } } } } } } } ``` **2. Add Null Checks in Expressions** ```json { "Compose_Safe": { "type": "Compose", "inputs": "@if(not(empty(body('Parse_JSON')?['property'])), body('Parse_JSON')['property'], 'default_value')" } } ``` **3. Use Proper Type Conversions** ```json { "Convert_To_String": { "type": "Compose", "inputs": "@string(variables('NumberValue'))" }, "Convert_To_Int": { "type": "Compose", "inputs": "@int(variables('StringValue'))" } } ``` ## Timeout Errors ### Pattern Recognition - Error messages: "timeout", "timed out", "operation took too long" - Common in: Large file operations, long-running HTTP calls, Do until loops ### Research Targets ``` PowerAutomateDocs/{Connector}/overview.md → Known Limitations PowerAutomateDocs/BuiltIn/control.md → Do until limits ``` ### Connector-Specific Limits | Operation | Timeout | |-----------|---------| | OneDrive file triggers | 50MB max file size | | SharePoint attachments | 90MB max size | | HTTP actions | 2 minutes default | | Do until loops | No default (must set) | ### Fix Patterns **1. Add Timeout Configuration** ```json { "Do_Until": { "type": "Until", "expression": "@equals(variables('Complete'), true)", "limit": { "count": 60, "timeout": "PT1H" }, "actions": { /* ... */ } } } ``` **2. Implement Chunking for Large Operations** ```json { "Apply_to_each_Batch": { "type": "Foreach", "foreach": "@chunk(body('Get_Items'), 100)", "actions": { "Process_Batch": { "type": "Scope", "actions": { /* Process smaller batch */ } } } } } ``` **3. Add File Size Check** ```json { "Check_File_Size": { "type": "If", "expression": { "and": [ { "lessOrEquals": [ "@triggerBody()?['Size']", 52428800 ] } ] }, "actions": { "Process_File": { /* ... */ } }, "else": { "actions": { "Handle_Large_File": { /* Alternative approach */ } } } } } ``` ## Not Found Errors (404) ### Pattern Recognition - Status code: 404 - Error messages: "not found", "does not exist", "cannot find" - Common in: SharePoint Get Item, OneDrive Get File Content, HTTP calls ### Research Targets ``` PowerAutomateDocs/{Connector}/actions.md → Specific action requirements PowerAutomateDocs/{Connector}/overview.md → Naming conventions ``` ### Common Root Causes 1. **Incorrect Resource Paths/IDs** - Hardcoded IDs that don't exist - Wrong site URLs - Invalid file paths 2. **Permissions** - User lacks read access to resource - Resource moved or deleted 3. **SharePoint-Specific Issues** - List names with periods (.) cause errors - Special characters in file names - Spaces in URLs not encoded ### Fix Patterns **1. Add Existence Check** ```json { "Try_Get_Item": { "type": "Scope", "actions": { "Get_Item": { "type": "ApiConnection", "inputs": { /* ... */ } } } }, "Check_If_Failed": { "type": "If", "expression": { "and": [ { "equals": [ "@result('Try_Get_Item')[0]['status']", "Failed" ] } ] }, "runAfter": { "Try_Get_Item": ["Failed", "Succeeded"] }, "actions": { "Handle_Not_Found": { "type": "Compose", "inputs": "Item not found - creating new one" } } } } ``` **2. Use Dynamic IDs from Previous Actions** ```json { "Get_Items": { "type": "ApiConnection", "inputs": { /* Get items first */ } }, "Apply_to_each": { "type": "Foreach", "foreach": "@outputs('Get_Items')?['body/value']", "actions": { "Get_Item_Detail": { "type": "ApiConnection", "inputs": { "host": { "connectionName": "shared_sharepointonline" }, "method": "get", "path": "/datasets/@{encodeURIComponent(variables('SiteURL'))}/tables/@{encodeURIComponent(variables('ListID'))}/items/@{items('Apply_to_each')?['ID']}" } } } } } ``` ## Permission Errors (403) ### Pattern Recognition - Status code: 403 - Error messages: "forbidden", "access denied", "insufficient permissions" - Different from 401 (authentication vs authorization) ### Research Targets ``` PowerAutomateDocs/{Connector}/actions.md → Required permissions PowerAutomateDocs/{Connector}/overview.md → Permission scopes ``` ### Common Root Causes 1. **SharePoint Permissions** - Need "Edit" for Create/Update/Delete - Need "Read" for Get operations - Site-level vs list-level permissions 2. **OneDrive Permissions** - Need write access for file operations - Shared folders require special handling 3. **Delegated vs Application Permissions** - Service accounts need proper permission grants - Azure AD application permissions ### Fix Patterns **1. Verify and Document Required Permissions** ```json { "actions": { "Comment_Permissions": { "type": "Compose", "inputs": "This flow requires: SharePoint site collection admin or list owner permissions" }, "Try_Action_With_Permission": { "type": "Scope", "actions": { /* Action requiring permissions */ } }, "Handle_Permission_Error": { "type": "If", "expression": { "and": [ { "equals": [ "@result('Try_Action_With_Permission')[0]['code']", "Forbidden" ] } ] }, "runAfter": { "Try_Action_With_Permission": ["Failed", "Succeeded"] }, "actions": { "Send_Permission_Request": { "type": "ApiConnection", "inputs": { /* Send email to admin */ } } } } } } ``` ## Invalid JSON/Syntax Errors ### Pattern Recognition - Error messages: "Invalid JSON", "syntax error", "unexpected token" - Common in: HTTP response parsing, JSON composition, dynamic expression building ### Research Targets ``` PowerAutomateDocs/BuiltIn/data-operation.md → JSON handling PowerAutomateDocs/power-automate-json-format.md → Valid structure ``` ### Fix Patterns **1. Escape Special Characters** ```json { "Compose_JSON_String": { "type": "Compose", "inputs": "@{replace(variables('TextWithQuotes'), '\"', '\\\"')}" } } ``` **2. Validate JSON Before Parsing** ```json { "Try_Parse": { "type": "Scope", "actions": { "Parse_JSON": { "type": "ParseJson", "inputs": { "content": "@body('HTTP')" } } } }, "Handle_Invalid_JSON": { "type": "If", "expression": { "and": [ { "equals": [ "@result('Try_Parse')[0]['status']", "Failed" ] } ] }, "runAfter": { "Try_Parse": ["Failed", "Succeeded"] }, "actions": { "Log_Invalid_Response": { "type": "Compose", "inputs": "Invalid JSON received from API" } } } } ``` ## Cross-Reference Matrix | Error Code | Error Type | Primary Research Location | Common Connectors | |------------|------------|--------------------------|-------------------| | 401 | Authentication | {Connector}/overview.md | SharePoint, OneDrive, HTTP | | 403 | Permission | {Connector}/actions.md | SharePoint, OneDrive | | 404 | Not Found | {Connector}/actions.md | SharePoint, OneDrive, HTTP | | 429 | Throttling | {Connector}/overview.md | SharePoint, OneDrive, HTTP | | 500 | Server Error | {Connector}/overview.md | HTTP, SharePoint | | N/A | Data Format | BuiltIn/data-operation.md | Parse JSON, Compose | | N/A | Timeout | BuiltIn/control.md | Do Until, HTTP | | N/A | Expression Error | BuiltIn/data-operation.md | All actions | ## Usage in Debugger Skill This reference should be consulted during Phase 1 (Error Analysis) to: 1. Quickly classify the error type 2. Identify relevant research targets 3. Understand common root causes 4. Reference appropriate fix patterns The patterns here are templates - always customize based on: - Specific connector documentation from PowerAutomateDocs/ - Actual error details from erreur.json - User's flow requirements and constraints