> 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)

### Headers

- `X-Polytomic-Harbor-Session` (string, optional)
- `X-Polytomic-Activity-Request-ID` (string, optional)

## Response

### 200

OK

- `data` (HarborActionExecutionResponse, optional)

## Types

### HarborActionExecutionResponse

- `connection_id` (string, optional)
- `credential_id` (string, optional) — Original credential attribution, including when another credential submits a duplicate.
- `deadline_at` (datetime, optional)
- `execution_id` (string, optional)
- `failure_category` (string, optional)
- `field_ids` (list of string, optional, nullable) — Submitted field names only, never their values.
- `finished_at` (datetime, optional, nullable)
- `lookup_field_id` (string, optional)
- `operation_id` (string, optional)
- `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)
- `started_at` (datetime, optional)
- `status` (enum, optional)
  - Allowed values: `executing`, `succeeded`, `failed`, `unknown`
- `status_path` (string, optional)

## 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()
```