Working with REST APIs, HTTP Status Codes and JSON in Power Automate

Introduction

Power Automate is usually presented as a low-code automation platform based on connectors. However, many enterprise integrations eventually require direct communication with REST APIs.

This is where knowledge of HTTP, REST, JSON, authentication, status codes, error handling, arrays, objects and expressions becomes extremely important.

A typical integration architecture is:

Power Automate
│
│ HTTP Request
▼
REST API
│
│ HTTP Response
▼
JSON
│
▼
Power Automate
│
├── Parse JSON
├── Conditions
├── Apply to each
├── SharePoint
├── Dataverse
└── Other processing

A Power Automate developer working with APIs should understand not only how to configure an HTTP action but also what is actually happening at the protocol level.

The fundamental model is:

REQUEST
↓
HTTP
↓
REST API
↓
HTTP RESPONSE
↓
STATUS CODE + HEADERS + BODY
↓
JSON
↓
POWER AUTOMATE

Understanding this architecture transforms Power Automate from a simple workflow designer into a powerful integration platform.


1. What Is a REST API?

REST stands for:

Representational State Transfer

A REST API exposes resources through HTTP endpoints.

Imagine an application containing customers.

An endpoint might be:

https://api.contoso.com/customers

To retrieve customers:

GET /customers

To retrieve one customer:

GET /customers/123

To create a customer:

POST /customers

To modify a customer:

PATCH /customers/123

To delete a customer:

DELETE /customers/123

Therefore, the combination of:

HTTP METHOD
+
ENDPOINT

describes the operation we want the server to perform.


2. The HTTP Request

An HTTP request usually contains several important components:

Method
URL
Headers
Body
Authentication

Example:

POST https://api.contoso.com/customers
Content-Type: application/json
Authorization: Bearer <token>

Body:

{
"name": "John Smith",
"email": "john@contoso.com",
"status": "Active"
}

Conceptually:

Power Automate
│
│ POST
│
│ Headers
│ Authorization
│ Content-Type
│
│ JSON Body
▼
REST API

3. HTTP Methods

The HTTP method communicates the intended operation.

The most common methods are:

MethodTypical Purpose
GETRetrieve information
POSTCreate a resource or execute an operation
PUTReplace/update a resource
PATCHPartially update a resource
DELETEDelete a resource

A useful mental model is:

GET → READ
POST → CREATE
PUT → REPLACE
PATCH → UPDATE
DELETE → DELETE

However, the exact behavior is always defined by the API.

A REST API doesn’t have to follow CRUD semantics perfectly.


4. GET

GET retrieves information.

Example:

GET https://api.contoso.com/customers/123

Response:

{
"id": 123,
"name": "John Smith",
"email": "john@contoso.com",
"status": "Active"
}

In Power Automate, the returned JSON can then be used by subsequent actions.


5. POST

POST is commonly used to create a new resource.

Example:

POST https://api.contoso.com/customers

Body:

{
"name": "Maria Silva",
"email": "maria@contoso.com"
}

The server might respond:

201 Created

with:

{
"id": 501,
"name": "Maria Silva",
"email": "maria@contoso.com"
}

The important point is that the request and response are separate messages.

Power Automate
│
│ POST
▼
API
│
│ 201
│ JSON
▼
Power Automate

6. PUT vs PATCH

This is another common interview question.

Conceptually:

PUT
→ Replace/update the resource representation
PATCH
→ Partially modify the resource

Suppose we have:

{
"id": 10,
"name": "John",
"department": "IT",
"status": "Active"
}

A PATCH might send only:

{
"status": "Inactive"
}

The intent is to modify only that property.

Always follow the specific API documentation because APIs can implement update semantics differently.


7. DELETE

DELETE requests removal of a resource.

Example:

DELETE https://api.contoso.com/customers/123

A successful API might return:

204 No Content

Notice the word:

No Content

A successful REST call doesn’t necessarily return JSON.

Sometimes the status code itself is the important response.


8. Anatomy of an HTTP Response

When an API responds, think in three major components:

STATUS CODE
HEADERS
BODY

Example:

HTTP/1.1 200 OK
Content-Type: application/json

Body:

{
"id": 123,
"name": "John Smith"
}

Therefore:

REST API RESPONSE
├── Status Code
│ 200
│
├── Headers
│ Content-Type
│ Request ID
│ Rate Limit information
│ etc.
│
└── Body
JSON

This distinction is extremely important when troubleshooting Power Automate integrations.


9. HTTP Status Codes

HTTP status codes are grouped into families.

1xx → Informational
2xx → Success
3xx → Redirection
4xx → Client/request error
5xx → Server error

The most important groups for Power Automate developers are:

2xx
4xx
5xx

10. 2xx — Success

These indicate successful processing.

Common examples:

CodeMeaning
200OK
201Created
202Accepted
204No Content

200 OK

Typical successful GET:

GET /customers/123

Response:

200 OK

201 Created

Common response after creating something:

POST /customers

Response:

201 Created

202 Accepted

The server accepted the request, but processing might continue asynchronously.

Conceptually:

Power Automate
│
│ POST
▼
API
│
▼
202 Accepted

This does not necessarily mean the final business operation has completed.

204 No Content

The operation succeeded but there is no response body.

Common example:

DELETE
↓
204 No Content

11. 4xx — Client-Side Request Problems

A 4xx response usually means there is a problem with the request, authentication, authorization or requested resource.

Important examples:

CodeMeaning
400Bad Request
401Unauthorized
403Forbidden
404Not Found
409Conflict
429Too Many Requests

12. 400 — Bad Request

The API considers the request invalid.

Possible causes include:

Invalid JSON
Missing required property
Invalid parameter
Wrong data type
Incorrect endpoint syntax
Invalid query

Example:

API expects:

{
"age": 42
}

but receives:

{
"age": "banana"
}

The server may return:

400 Bad Request

When debugging a 400 error, inspect:

URL
Headers
Query parameters
Body
JSON structure
Required properties
Data types

13. 401 — Unauthorized

401 normally relates to authentication.

Think:

WHO ARE YOU?

Possible causes:

Missing token
Expired token
Invalid token
Incorrect credentials
Authentication configuration problem

Architecture:

Power Automate
│
│ Request
│ Bad/Missing Token
▼
API
│
▼
401 Unauthorized

14. 403 — Forbidden

403 generally means the caller is authenticated but doesn’t have sufficient authorization.

Think:

401 → I cannot properly establish who you are.
403 → I know who you are, but you cannot perform this operation.

Example:

User authenticated
↓
API receives request
↓
Permission check
↓
Insufficient privileges
↓
403 Forbidden

This distinction is particularly important with:

Microsoft Graph
SharePoint
Dataverse
Azure APIs
Enterprise REST APIs

15. 404 — Not Found

404 means the requested resource wasn’t found.

Examples:

Wrong URL
Wrong endpoint
Deleted record
Incorrect ID
Resource doesn't exist

Example:

GET /customers/99999999

Response:

404 Not Found

16. 409 — Conflict

409 indicates that the request conflicts with the current state of the resource.

Examples might include:

Duplicate resource
Version conflict
State conflict
Concurrency issue

This becomes important in systems where multiple processes can modify the same data.


17. 429 — Too Many Requests

429 is particularly important in Power Automate.

It normally indicates throttling.

Power Automate
│
├── request
├── request
├── request
├── request
├── request
├── request
└── request
↓
API
↓
TOO MANY REQUESTS
↓
429

The service is effectively saying:

Slow down.

Possible strategies include:

Retry policy
Exponential backoff
Reduce concurrency
Batch requests
Respect Retry-After when provided
Redesign excessive loops

A 429 should not automatically be treated the same way as a 400.

A 400 often requires fixing the request.

A 429 may simply require waiting and retrying.


18. 5xx — Server-Side Errors

5xx responses generally indicate server/service-side failures.

Common examples:

CodeMeaning
500Internal Server Error
502Bad Gateway
503Service Unavailable
504Gateway Timeout

These are often candidates for retry strategies because the failure may be transient.

Conceptually:

Request is valid
↓
Server experiences problem
↓
500 / 502 / 503 / 504

This connects directly with the Try/Catch and Retry architecture discussed in the previous article.


19. Status Codes and Error Handling

A useful classification is:

200–299
↓
SUCCESS
400
↓
CHECK REQUEST
401
↓
CHECK AUTHENTICATION
403
↓
CHECK AUTHORIZATION
404
↓
CHECK RESOURCE
409
↓
CHECK STATE / CONFLICT
429
↓
THROTTLING / RETRY
500+
↓
SERVER / POSSIBLE RETRY

This is an excellent troubleshooting mental model.


20. JSON

JSON stands for:

JavaScript Object Notation

It is one of the most common data formats used by REST APIs.

Example:

{
"id": 100,
"name": "John",
"active": true
}

A JSON document contains structured data.

Power Automate works particularly well with JSON because APIs and connectors frequently exchange data in this format.


21. JSON Data Types

Important JSON types include:

string
number
boolean
null
object
array

Example:

{
"name": "John",
"age": 42,
"active": true,
"manager": null
}

Types:

name → string
age → number
active → boolean
manager → null

Understanding types is important because Power Automate expressions and connectors can fail when the expected type differs from the actual value.


22. JSON Objects

An object uses:

{ }

Example:

{
"id": 100,
"name": "John"
}

Think:

Object
├── id
└── name

In Power Automate, a property can be accessed using expressions such as:

body('HTTP')?['name']

Microsoft’s current expression guidance recommends safe navigation using ? when values might be absent or null.


23. Nested Objects

JSON objects can contain other objects.

Example:

{
"id": 100,
"name": "John",
"department": {
"id": 20,
"name": "Information Technology"
}
}

Structure:

Customer
│
├── id
├── name
│
└── department
│
├── id
└── name

To retrieve the department name:

body('HTTP')?['department']?['name']

Result:

Information Technology

24. JSON Arrays

Arrays use:

[ ]

Example:

[
{
"id": 1,
"name": "John"
},
{
"id": 2,
"name": "Maria"
},
{
"id": 3,
"name": "Peter"
}
]

Think:

Array
│
├── Object 0
├── Object 1
└── Object 2

In Power Automate, arrays frequently lead to:

Apply to each

25. Object vs Array

This distinction is fundamental.

Object

{
"id": 1,
"name": "John"
}

One object.

Array

[
{
"id": 1,
"name": "John"
},
{
"id": 2,
"name": "Maria"
}
]

Multiple objects.

Visual model:

{ }
Object
[ ]
Array

If you understand this distinction, many Power Automate JSON problems become much easier.


26. API Responses Frequently Wrap Arrays

An API doesn’t necessarily return a raw array.

For example:

{
"value": [
{
"id": 1,
"name": "John"
},
{
"id": 2,
"name": "Maria"
}
]
}

Here:

Root
│
└── value
│
└── Array
├── Object
└── Object

Therefore, we need the array:

body('HTTP')?['value']

and then process it.


27. SharePoint REST Example

This pattern is extremely common with SharePoint REST.

Example endpoint:

_api/web/lists/getbytitle('Documents')/items

The Power Automate action:

Send an HTTP request to SharePoint

can execute SharePoint REST/OData queries directly when the standard SharePoint actions don’t cover the requirement. Microsoft describes this action specifically as a developer-oriented capability and recommends understanding both SharePoint REST and JSON parsing.

Typical architecture:

Power Automate
│
▼
Send an HTTP request to SharePoint
│
▼
SharePoint REST API
│
▼
JSON Response
│
▼
body(...)
│
▼
value[]
│
▼
Apply to each

28. SharePoint JSON Light

Microsoft recommends using a lighter JSON representation where appropriate.

For SharePoint REST, a useful header is:

Accept: application/json; odata=nometadata

This reduces unnecessary OData metadata in the response and makes the result easier to process.

Conceptually:

Large metadata-heavy response
↓
JSON Light
↓
Simpler JSON response
↓
Easier Power Automate processing

29. Processing SharePoint REST Results

Microsoft’s SharePoint guidance demonstrates the basic pattern.

For a property:

body('Send_an_HTTP_request_to_SharePoint')?['Id']

For a returned collection:

body('Send_an_HTTP_request_to_SharePoint')?['value']

Then:

Apply to each

Inside the loop:

items('Apply_to_each')?['Title']

Architecture:

HTTP Response
│
▼
body()
│
▼
value
│
▼
Array
│
▼
Apply to each
│
▼
Current Item
│
▼
Title

This is one of the most useful patterns to memorize for SharePoint REST development.


30. Parse JSON

Power Automate provides the:

Parse JSON

action.

Its purpose is to transform JSON content according to a schema so that its properties become easier to consume as structured dynamic content.

Architecture:

HTTP
↓
JSON Response
↓
Parse JSON
↓
Structured properties
↓
Dynamic Content

Instead of manually writing expressions everywhere, Parse JSON can expose the properties through the designer.


31. JSON Schema

Suppose the API returns:

{
"id": 100,
"name": "John",
"active": true
}

A simplified schema could describe:

{
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"name": {
"type": "string"
},
"active": {
"type": "boolean"
}
}
}

This tells Power Automate:

Root = object
id = integer
name = string
active = boolean

Power Automate can generate the schema from a sample payload, which is often the easiest development workflow.


32. Parse JSON Is Not Always Necessary

This is important.

If Power Automate already treats the HTTP body as a structured object, you can frequently access properties directly:

body('HTTP')?['name']

or:

body('HTTP')?['data']?['customer']?['name']

Microsoft’s current expression cookbook explicitly warns against double parsing JSON. If the action already returns an object, applying json() again can produce an error.

Therefore:

Parse JSON

is useful, but it isn’t mandatory in every integration.


33. json()

Power Automate also provides the json() expression.

Example:

json('{"name":"John","age":42}')

This converts a JSON string into a structured object.

Then:

json('{"name":"John"}')?['name']

returns:

John

The important distinction is:

JSON STRING
↓
json()
↓
JSON OBJECT

Don’t apply json() unnecessarily to content that is already an object.


34. Safe Navigation with ?

Consider:

body('HTTP')['department']['manager']['email']

What happens if manager doesn’t exist?

The expression may fail.

A safer pattern is:

body('HTTP')?['department']?['manager']?['email']

The ? provides safe navigation.

Instead of immediately failing when a parent value is missing, the expression can return null.

This is especially useful when dealing with unpredictable external API responses.


35. Handling Null

APIs frequently return null.

Example:

{
"name": "John",
"phone": null
}

Power Automate must be prepared for that.

A useful expression is:

coalesce(
body('HTTP')?['phone'],
'Not informed'
)

Conceptually:

phone exists?
│
yes ──→ use phone
│
no
↓
Not informed

Microsoft documents coalesce() for handling null values.


36. empty()

Another useful expression is:

empty(...)

Example:

empty(body('HTTP')?['email'])

This can be used in a Condition:

Email empty?
│
┌─┴─┐
Yes No
│ │
▼ ▼
Skip Process

Null handling becomes extremely important in API integrations because external systems don’t always guarantee that optional fields are populated.


37. Building JSON Request Bodies

For POST, PUT and PATCH, we often need to send JSON.

Example:

{
"title": "New Request",
"status": "Open"
}

But Power Automate usually needs dynamic values.

Conceptually:

{
"title": "<dynamic value>",
"status": "Open"
}

The value might come from:

SharePoint
Trigger
Variable
Compose
Previous API call
Power Apps
Copilot Studio

38. Avoid Fragile JSON String Concatenation

A tempting approach is manually constructing JSON strings using concat().

But consider a name containing quotes:

John "Johnny" Smith

Naive string concatenation can produce invalid JSON.

Microsoft’s expression guidance recommends creating objects directly where possible rather than manually concatenating JSON strings.

This is more robust because the platform handles JSON serialization correctly.


39. Headers

HTTP headers contain metadata about the request.

Common examples:

Content-Type: application/json
Accept: application/json
Authorization: Bearer <token>

Think:

URL
→ Where?
Method
→ What operation?
Headers
→ How should the request be interpreted?
Body
→ What data am I sending?

40. Content-Type

A common header is:

Content-Type: application/json

It tells the API:

The request body I’m sending is JSON.

For example:

POST /customers
Content-Type: application/json

Body:

{
"name": "John"
}

41. Accept

Another common header is:

Accept: application/json

It communicates the desired response format.

Conceptually:

Content-Type
→ What I am sending
Accept
→ What I want back

42. Authorization

Many REST APIs require authentication.

A common model is:

Authorization: Bearer <access_token>

Architecture:

Identity Provider
│
▼
Access Token
│
▼
Power Automate
│
│ Authorization: Bearer token
▼
REST API
│
▼
Validate Token
│
┌──┴──┐
Valid Invalid
│ │
▼ ▼
Allow 401

In Microsoft environments, authentication frequently involves:

Microsoft Entra ID
OAuth 2.0
Access tokens
Scopes
API permissions
Delegated permissions
Application permissions

43. HTTP with Microsoft Entra ID

Power Automate provides an HTTP with Microsoft Entra ID connector for calling web services protected by Microsoft Entra ID.

Microsoft currently documents this connector as Premium and supports HTTP methods including GET, POST, PUT, PATCH and DELETE.

This is useful when calling Microsoft or enterprise services protected by Entra authentication.

Architecture:

Power Automate
│
▼
HTTP with Microsoft Entra ID
│
▼
Microsoft Entra ID
│
▼
Authenticated HTTP Request
│
▼
Protected API

44. SharePoint HTTP vs Generic HTTP

This distinction is important.

For SharePoint REST:

Send an HTTP request to SharePoint

is specifically designed to call SharePoint REST APIs.

Microsoft explicitly states that this action supports SharePoint REST APIs and that another HTTP mechanism is required for other Microsoft services.

Conceptually:

SharePoint REST
↓
Send an HTTP request to SharePoint

versus:

Other REST API
↓
HTTP / HTTP with Microsoft Entra ID

45. Calling Microsoft Graph

The same REST concepts apply to Microsoft Graph.

Conceptually:

Power Automate
│
▼
Authenticated HTTP
│
▼
Microsoft Graph
│
▼
Microsoft 365

Graph endpoints follow REST principles and commonly return JSON.

Example conceptual response:

{
"value": [
{
"id": "123",
"displayName": "John Smith"
},
{
"id": "456",
"displayName": "Maria Silva"
}
]
}

Then:

body
↓
value
↓
array
↓
Apply to each
↓
displayName

46. Query Parameters

REST APIs frequently support query parameters.

Example:

/customers?status=active

Another example:

/customers?department=IT&active=true

The portion after:

?

contains query parameters.

Conceptually:

Endpoint
│
└── Query Parameters
│
├── filtering
├── sorting
├── pagination
└── selection

The exact syntax depends on the API.


47. OData

SharePoint REST and Microsoft Graph commonly expose OData-style query capabilities.

Examples include concepts such as:

$select
$filter
$orderby
$top
$expand

Instead of retrieving everything:

API
↓
10,000 records
↓
Power Automate filters

we should prefer, where supported:

Power Automate
↓
Filtered API request
↓
API
↓
Only required records

This improves:

Performance
Network usage
Flow execution time
API consumption
Memory/processing

48. Pagination

Many APIs don’t return every record in one response.

Suppose there are:

50,000 customers

The API may return:

100 records
+
next page information

Conceptually:

Request Page 1
↓
100 records
↓
Next Link
↓
Request Page 2
↓
100 records
↓
Next Link
↓
...

Therefore, developers must always check the API’s pagination model.

Possible patterns include:

nextLink
page
pageSize
offset
cursor
skipToken

Never assume:

One API call = all data

49. API Error Responses Are Often JSON Too

A failed API request may return useful structured information.

Example:

{
"error": {
"code": "InvalidRequest",
"message": "Customer ID is required"
}
}

This means error handling can also parse JSON.

For example:

Error Response
│
▼
body
│
▼
error
│
├── code
└── message

Potential expression:

body('HTTP')?['error']?['message']

However, the exact error schema depends entirely on the API.


50. Integrating REST with Try/Catch

Now we can combine this article with the previous error-handling architecture.

Trigger
│
▼
TRY
│
▼
HTTP Request
│
├──── 2xx ────────────┐
│ │
▼ ▼
JSON Response Continue
│
▼
Parse JSON
│
▼
Business Logic
HTTP failure
│
▼
CATCH
│
├── Read error
├── Status/Error information
├── Log
├── Retry strategy
└── Notification

Microsoft’s Power Automate error reference confirms that downstream API 4xx and 5xx responses are common causes of failed connector actions and recommends examining the failed action’s outputs for the actual API status and error details.


51. Complete Enterprise Pattern

A mature integration might look like:

                 POWER AUTOMATE
                       │
                       ▼
                Initialize Context
                       │
                       ▼
              ┌──────────────────┐
              │       TRY        │
              │                  │
              │ Build Request    │
              │       ↓          │
              │ HTTP Request     │
              │       ↓          │
              │ JSON Response    │
              │       ↓          │
              │ Parse / Extract  │
              │       ↓          │
              │ Business Logic   │
              └────────┬─────────┘
                       │
                    Failure
                       │
                       ▼
              ┌──────────────────┐
              │      CATCH       │
              │                  │
              │ Inspect Error    │
              │       ↓          │
              │ Classify         │
              │ 4xx / 5xx        │
              │       ↓          │
              │ Log              │
              │       ↓          │
              │ Notify / Handle  │
              └────────┬─────────┘
                       │
                       ▼
              ┌──────────────────┐
              │     FINALLY      │
              │                  │
              │ Final Logging    │
              └──────────────────┘

52. A Practical Troubleshooting Table

When an HTTP action fails, use this mental model:

ResultFirst Investigation
200Successful response
201Resource created
202Request accepted; check asynchronous processing
204Success with no body
400URL, body, JSON, parameters
401Authentication/token
403Permissions/authorization
404Endpoint/resource/ID
409Conflict/state/concurrency
429Throttling/retry
500Server-side failure
502Gateway/upstream service
503Service unavailable
504Timeout/gateway

This table is worth memorizing for interviews.


53. REST API Interview Questions

How do you call a REST API from Power Automate?

A strong answer:

I normally use an appropriate HTTP action or connector depending on the API and authentication model. I configure the HTTP method, endpoint, headers, authentication and request body when required. I then process the response status, headers and JSON body using expressions or Parse JSON.


How do you process JSON returned by an API?

If Power Automate already exposes the response as an object, I can access properties directly with expressions such as body('HTTP')?['property']. For complex payloads, I can use Parse JSON with a schema to expose properties as dynamic content. If the API returns an array, I normally process that collection using Apply to each, Select, Filter array or other data operations depending on the requirement.


What is the difference between an object and an array?

A JSON object uses curly braces and represents a structured entity with properties. An array uses square brackets and represents a collection of values or objects. In Power Automate, arrays often require collection operations such as Apply to each.


What does HTTP 400 mean?

Bad Request. I would inspect the endpoint, parameters, request body, JSON structure, required properties and data types.


What is the difference between 401 and 403?

401 generally indicates an authentication problem, while 403 means the caller is authenticated but doesn’t have sufficient authorization to perform the requested operation.


What does 429 mean?

Too Many Requests. It normally indicates throttling. I would investigate retry behavior, exponential backoff, concurrency, batching and whether the API provides retry guidance such as a Retry-After header.


How do you handle HTTP errors?

I normally combine the HTTP action with a Try/Catch pattern implemented using Scopes and Configure run after. I inspect the API response, classify the failure, log relevant information and decide whether the operation should be retried, terminated or handled as a business exception.


Do you always use Parse JSON?

No. If the action already returns structured JSON, I can access properties directly using expressions. Parse JSON is useful when I want schema-based parsing and dynamic content, but unnecessary parsing can add complexity.


54. The 30-Second Interview Answer

If the interviewer asks:

“How do you work with REST APIs in Power Automate?”

A strong concise answer is:

“I use HTTP actions or the appropriate authenticated connector depending on the API. I configure the HTTP method, endpoint, headers, authentication and JSON body, then process the response based on its status code and payload. For JSON responses I can use Parse JSON or access properties directly with expressions such as body() and safe navigation. I distinguish objects from arrays and handle collections appropriately. For errors, I classify 4xx and 5xx responses — for example 401 for authentication, 403 for authorization, 404 for missing resources, 429 for throttling and 5xx for server-side problems — and combine that with Scopes, Run After, retry policies and logging.”

That is an excellent answer because it connects:

REST
↓
HTTP
↓
Authentication
↓
Status Codes
↓
JSON
↓
Power Automate
↓
Error Handling

55. Technical Summary

ConceptMeaning
REST APIHTTP-based application interface
EndpointAddress of an API resource
GETRetrieve
POSTCommonly create/execute
PUTReplace/update
PATCHPartial update
DELETEDelete
HeaderRequest/response metadata
Content-TypeFormat being sent
AcceptDesired response format
AuthorizationAuthentication information
2xxSuccess
4xxRequest/client-side category
5xxServer/service-side category
401Authentication
403Authorization
404Resource not found
429Throttling
JSON Object{ }
JSON Array[ ]
Parse JSONSchema-based JSON parsing
body()Access action body
json()Convert JSON string into structured JSON
?Safe navigation
coalesce()Handle null/default value
Apply to eachIterate over arrays
RetryRetry transient failures
ScopeGroup actions/error handling
ODataQuery protocol commonly used by Microsoft APIs
PaginationRetrieve large datasets over multiple responses

Conclusion

Working with REST APIs in Power Automate requires understanding several layers simultaneously:

Power Automate
│
▼
HTTP
│
├── Method
├── URL
├── Headers
├── Authentication
└── Body
│
▼
REST API
│
▼
HTTP Response
│
├── Status Code
├── Headers
└── JSON Body
│
▼
Power Automate
│
├── body()
├── Parse JSON
├── Arrays
├── Objects
├── Expressions
└── Business Logic

The important transition for a Power Automate developer is moving from:

"I know how to configure the HTTP action."

to:

"I understand the HTTP request,
the REST contract,
authentication,
the response status,
the JSON structure,
and how the workflow should behave
for both successful and unsuccessful responses."

That second level is what makes REST API knowledge valuable in enterprise Power Platform development and technical interviews.

Official Microsoft References

Microsoft Learn — Working with the SharePoint Send HTTP Request flow action in Power Automate

Microsoft Learn — Power Automate Expression Cookbook

Microsoft Learn — Power Automate Cloud Flow Error Reference

Microsoft Learn — HTTP with Microsoft Entra ID Connector

Microsoft Learn — Employ Robust Error Handling in Power Automate

Edvaldo Guimrães Filho Avatar

Published by