> This page is for version 2025-09-18 (default).
> For other versions, use one of these documentation indexes:
> - 2025-09-18 (default): https://apidocs.polytomic.com/2025-09-18/llms.txt
> - 2024-02-08: https://apidocs.polytomic.com/2024-02-08/llms.txt
> - 2023-04-25: https://apidocs.polytomic.com/2023-04-25/llms.txt
> - 2022-12-12: https://apidocs.polytomic.com/2022-12-12/llms.txt
> - 2021-05-23: https://apidocs.polytomic.com/2021-05-23/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://apidocs.polytomic.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://apidocs.polytomic.com/_mcp/server.

# Get Harbor Action Execution

GET https://app.polytomic.com/api/harbors/{harbor_id}/action-executions/{execution_id}

Read a metadata-only action receipt without resubmitting the action.

Use a currently valid scoped credential belonging to the original Harbor. The
receipt remains readable after the action or rollout feature is disabled. A
credential from another Harbor cannot inspect it. The response does not contain
lookup values, input values, output payloads, credential secrets, or raw provider
errors. It includes structured operation identity, lookup field names, submitted
field names, and the original credential ID.

An overdue executing receipt transitions atomically to `unknown`; this read
never invokes the destination provider. Stop polling at `succeeded`, `failed`, or `unknown`.
Unknown is terminal for this execution identifier and means the update may have
happened. Investigate rather than preparing a replacement action to retry.

Preparation alone has no execution receipt. A `404 Not Found` after an uncertain
execution does not prove the operation never happened.

Send a new nonzero UUID in `X-Polytomic-Activity-Request-ID`. Direct REST requests
may omit `X-Polytomic-Harbor-Session`; a supplied session must be active and bound
to the same credential and Harbor.

Reference: https://apidocs.polytomic.com/api-reference/harbors/actions/get-execution

## Authentication

- `Authorization` header (bearer token, required) — Bearer user API key
- `Authorization` header (basic auth, required) — Basic organization-scoped API key

## Request

### Path parameters

- `harbor_id` (string, required) — Unique identifier of the Harbor
- `execution_id` (string, required) — Action execution ID

### Headers

- `X-Polytomic-Harbor-Session` (string, optional) — Harbor session token; when supplied, the session must be active and bound to this credential and Harbor.
- `X-Polytomic-Activity-Request-ID` (string, optional) — New nonzero UUID for each request, required for scoped credentials; a reused value is rejected.

## Response

### 200

OK

- `data` (HarborActionExecutionResponse, optional) — The execution receipt

## Types

### HarborActionExecutionResponse

- `connection_id` (string, optional) — Connection ID of the action
- `credential_id` (string, optional) — Original credential attribution, including when another credential submits a duplicate
- `deadline_at` (datetime, optional) — When an unfinished execution becomes unknown
- `execution_id` (string, optional) — Action execution ID
- `failure_category` (string, optional) — Category of a failed or unknown outcome
- `field_ids` (list of string, optional, nullable) — Submitted field names only, never their values
- `finished_at` (datetime, optional, nullable) — When the execution reached its final status
- `lookup_field_id` (string, optional) — Lookup field ID used to find the target record
- `operation_id` (string, optional) — Operation ID of the action
- `recovery_required` (boolean, optional) — True when receipt persistence was interrupted or uncertain. Inspect status; this response does not confirm durable acceptance or completion.
- `schema_id` (string, optional) — Schema ID of the action
- `started_at` (datetime, optional) — When the execution started
- `status` (enum, optional) — Current execution status
  - Allowed values: `executing`, `succeeded`, `failed`, `unknown`
- `status_path` (string, optional) — API path for reading this execution receipt

## Examples

**Response**

```json
{
  "data": {
    "connection_id": "248df4b7-aa70-47b8-a036-33ac447e668d",
    "credential_id": "248df4b7-aa70-47b8-a036-33ac447e668d",
    "deadline_at": "2024-01-15T09:30:00Z",
    "execution_id": "248df4b7-aa70-47b8-a036-33ac447e668d",
    "failure_category": "string",
    "field_ids": [
      "string"
    ],
    "finished_at": "2024-01-15T09:30:00Z",
    "lookup_field_id": "string",
    "operation_id": "string",
    "recovery_required": true,
    "schema_id": "string",
    "started_at": "2024-01-15T09:30:00Z",
    "status": "executing",
    "status_path": "string"
  }
}
```

**SDK Code**

```python
import requests

url = "https://app.polytomic.com/api/harbors/248df4b7-aa70-47b8-a036-33ac447e668d/action-executions/248df4b7-aa70-47b8-a036-33ac447e668d"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript
const url = 'https://app.polytomic.com/api/harbors/248df4b7-aa70-47b8-a036-33ac447e668d/action-executions/248df4b7-aa70-47b8-a036-33ac447e668d';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://app.polytomic.com/api/harbors/248df4b7-aa70-47b8-a036-33ac447e668d/action-executions/248df4b7-aa70-47b8-a036-33ac447e668d"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://app.polytomic.com/api/harbors/248df4b7-aa70-47b8-a036-33ac447e668d/action-executions/248df4b7-aa70-47b8-a036-33ac447e668d")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://app.polytomic.com/api/harbors/248df4b7-aa70-47b8-a036-33ac447e668d/action-executions/248df4b7-aa70-47b8-a036-33ac447e668d")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://app.polytomic.com/api/harbors/248df4b7-aa70-47b8-a036-33ac447e668d/action-executions/248df4b7-aa70-47b8-a036-33ac447e668d', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://app.polytomic.com/api/harbors/248df4b7-aa70-47b8-a036-33ac447e668d/action-executions/248df4b7-aa70-47b8-a036-33ac447e668d");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://app.polytomic.com/api/harbors/248df4b7-aa70-47b8-a036-33ac447e668d/action-executions/248df4b7-aa70-47b8-a036-33ac447e668d")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```