# Retry a held landing

- **OpenAPI Version:** `3.2.0`
- **API Version:** `3.1.0`
- **Contact:** Syndai <https://syndai.ai>

## Contents

**Operations**

- [POST /api/v1/external/coding/runs/{coding\_run\_id}/land/retry](#scalar-operation-post-apiv1externalcodingrunscoding-run-idlandretry)

**Schemas**

- [ExternalLandStepResponse](#scalar-schema-externallandstepresponse)
- [ExternalCodingLandRead](#scalar-schema-externalcodinglandread)
- [ExternalLandSecurityRead](#scalar-schema-externallandsecurityread)
- [ExternalLandAccessRead](#scalar-schema-externallandaccessread)
- [ExternalLandIntendedAccess](#scalar-schema-externallandintendedaccess)
- [ExternalLandSecurityFixed](#scalar-schema-externallandsecurityfixed)
- [ExternalLandSecurityHeld](#scalar-schema-externallandsecurityheld)
- [ProblemDetail](#scalar-schema-problemdetail)
- [ExternalErrorCode](#scalar-schema-externalerrorcode)

<a id="scalar-context-global-servers"></a>

## Servers

- **URL:** `https://api.syndai.ai`

<a id="scalar-context-global-authentication"></a>

## Authentication

- **CustomerApiKey**: HTTP bearer (`API Key`)

  Customer API key sent as a bearer token

## Tags

### Landing

Getting a finished run's change onto your default branch and live: retry or close a held landing, go live anyway past the checks that held it (a person's decision), read the diff a held landing would ship, or revert a landed change. These act on your real repository.

## Operations

<a id="scalar-operation-post-apiv1externalcodingrunscoding-run-idlandretry"></a>

### Retry a held landing

- **Method:** `POST`
- **Path:** `/api/v1/external/coding/runs/{coding_run_id}/land/retry`
- **Operation ID:** `retryRunLand`
- **Tags:** Landing

Restarts a landing that is on hold as a fresh attempt: from the beginning, or from the post-landing checks when the change already landed (it never merges twice). Any earlier "go live anyway" consent is dropped. Returns 409 when the landing is not held, and 404 when the run did not land on its own. An API key may call this; a signed-in person must be a workspace owner or admin (403).

**Servers:** [Inherited servers](#scalar-context-global-servers)

**Authentication:** [Global authentication](#scalar-context-global-authentication)

#### Path parameters

- **`coding_run_id` (required)**: `string`, format: `uuid`

#### Query parameters

- **`customer_id`**: `string | null`, format: `uuid`

#### Responses

##### 200 Request fulfilled, document follows

**Content type:** `application/json`

[ExternalLandStepResponse](#scalar-schema-externallandstepresponse)

**Example:**

```json
{
  "land": {
    "can_merge_anyway": false,
    "head_sha": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
    "state": "landing",
    "strategy": "merge"
  }
}
```

##### 400, 401, 403, 404

- `400` Bad request syntax or unsupported method
- `401` Invalid or missing customer API key
- `403` Insufficient scope or forbidden customer access
- `404` Resource not found

**Content type:** `application/problem+json`

[ProblemDetail](#scalar-schema-problemdetail)

RFC 7807 problem detail returned for public CaaS errors.

<a id="scalar-example-1"></a>

**Generated example:**

```json
{
  "code": "BUDGET_EXHAUSTED",
  "detail": null,
  "existing_run_id": null,
  "instance": null,
  "status": 1,
  "title": "",
  "type": "about:blank",
  "additionalProperty": "anything"
}
```

##### 429 Rate limit exceeded

**Headers:**

- **`Retry-After`**

  Seconds to wait before retrying the request

  `integer`

**Content type:** `application/problem+json`

[ProblemDetail](#scalar-schema-problemdetail)

RFC 7807 problem detail returned for public CaaS errors.

[Generated example](#scalar-example-1)

##### default Unexpected error

**Content type:** `application/problem+json`

[ProblemDetail](#scalar-schema-problemdetail)

<a id="scalar-example-2"></a>

**Generated example:**

```json
null
```

## Schemas

<a id="scalar-schema-externallandstepresponse"></a>

### ExternalLandStepResponse

**Type:** `object`

- **`land` (required)**: [ExternalCodingLandRead](#scalar-schema-externalcodinglandread)

**Example:**

```json
{
  "land": {
    "can_merge_anyway": false,
    "head_sha": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
    "state": "landing",
    "strategy": "merge"
  }
}
```

<a id="scalar-schema-externalcodinglandread"></a>

### ExternalCodingLandRead

**Type:** `object`

- **`state` (required)**: `string`
- **`strategy` (required)**: `string`
- **`can_merge_anyway`**: `boolean`, default: `false`
- **`commit_url`**: `string | null`
- **`deploy_status`**: `string | null`
- **`head_sha`**: `string | null`
- **`landed_sha`**: `string | null`
- **`live_url`**: `string | null`
- **`owner_step`**: `string | null`
- **`reason`**: `string | null`
- **`revert_of_run_id`**: `string | null`, format: `uuid`
- **`reverted_by_run_id`**: `string | null`, format: `uuid`
- **`security`**: [ExternalLandSecurityRead](#scalar-schema-externallandsecurityread) | `null`
- **`verified`**: `boolean | null`

<a id="scalar-example-3"></a>

**Generated example:**

```json
{
  "can_merge_anyway": false,
  "commit_url": "",
  "deploy_status": "",
  "head_sha": "",
  "landed_sha": "",
  "live_url": "",
  "owner_step": "",
  "reason": "",
  "revert_of_run_id": "",
  "reverted_by_run_id": "",
  "security": {
    "access": {
      "intended": [
        {
          "quote": "",
          "sentence": ""
        }
      ],
      "members_see": [
        ""
      ],
      "unchecked": [
        ""
      ],
      "visitors_add": [
        ""
      ],
      "visitors_see": [
        ""
      ]
    },
    "fixed": [
      {
        "proved": true,
        "sentence": ""
      }
    ],
    "held": [
      {
        "file": "",
        "proved": true,
        "sentence": "",
        "severity": ""
      }
    ],
    "state": ""
  },
  "state": "",
  "strategy": "",
  "verified": true
}
```

<a id="scalar-schema-externallandsecurityread"></a>

### ExternalLandSecurityRead

**Type:** `object`

- **`state` (required)**: `string`
- **`access`**: [ExternalLandAccessRead](#scalar-schema-externallandaccessread) | `null`
- **`fixed`**: array of [ExternalLandSecurityFixed](#scalar-schema-externallandsecurityfixed)
- **`held`**: array of [ExternalLandSecurityHeld](#scalar-schema-externallandsecurityheld)

<a id="scalar-example-4"></a>

**Generated example:**

```json
{
  "access": {
    "intended": [
      {
        "quote": "",
        "sentence": ""
      }
    ],
    "members_see": [
      ""
    ],
    "unchecked": [
      ""
    ],
    "visitors_add": [
      ""
    ],
    "visitors_see": [
      ""
    ]
  },
  "fixed": [
    {
      "proved": true,
      "sentence": ""
    }
  ],
  "held": [
    {
      "file": "",
      "proved": true,
      "sentence": "",
      "severity": ""
    }
  ],
  "state": ""
}
```

<a id="scalar-schema-externallandaccessread"></a>

### ExternalLandAccessRead

**Type:** `object`

- **`intended`**: array of [ExternalLandIntendedAccess](#scalar-schema-externallandintendedaccess)
- **`members_see`**: `array of string`
- **`unchecked`**: `array of string`
- **`visitors_add`**: `array of string`
- **`visitors_see`**: `array of string`

<a id="scalar-example-5"></a>

**Generated example:**

```json
{
  "intended": [
    {
      "quote": "",
      "sentence": ""
    }
  ],
  "members_see": [
    ""
  ],
  "unchecked": [
    ""
  ],
  "visitors_add": [
    ""
  ],
  "visitors_see": [
    ""
  ]
}
```

<a id="scalar-schema-externallandintendedaccess"></a>

### ExternalLandIntendedAccess

**Type:** `object`

- **`quote` (required)**: `string`
- **`sentence` (required)**: `string`

<a id="scalar-example-6"></a>

**Generated example:**

```json
{
  "quote": "",
  "sentence": ""
}
```

<a id="scalar-schema-externallandsecurityfixed"></a>

### ExternalLandSecurityFixed

**Type:** `object`

- **`proved` (required)**: `boolean`
- **`sentence` (required)**: `string`

<a id="scalar-example-7"></a>

**Generated example:**

```json
{
  "proved": true,
  "sentence": ""
}
```

<a id="scalar-schema-externallandsecurityheld"></a>

### ExternalLandSecurityHeld

**Type:** `object`

- **`proved` (required)**: `boolean`
- **`sentence` (required)**: `string`
- **`severity` (required)**: `string`
- **`file`**: `string | null`

<a id="scalar-example-8"></a>

**Generated example:**

```json
{
  "file": "",
  "proved": true,
  "sentence": "",
  "severity": ""
}
```

<a id="scalar-schema-problemdetail"></a>

### ProblemDetail

**Type:** `object`

RFC 7807 problem detail returned for public CaaS errors.

- **`code` (required)**: `string`, possible values: `"BUDGET_EXHAUSTED", "QUOTA_EXCEEDED", "RUN_CONCURRENCY_LIMIT", "CUSTOMER_DISABLED", "REPO_NOT_BOUND", "IDEMPOTENCY_REPLAY", "CONFLICT", "MISSION_BUSY_RETRY", "HITL_REQUEST_CONFLICT", "HITL_REQUEST_SETTLED", "RUN_TERMINATED_BEFORE_RESPONSE", "INVALID_POLICY", "INVALID_SCOPE", "RATE_LIMITED", "INSTALLATION_INCOMPLETE", "SUBSCRIPTION_USAGE_UNAVAILABLE", "INVALID_TOKEN", "ROLE_REQUIRED", "PLAN_UPGRADE_REQUIRED", "EMAIL_MISMATCH", "EXPIRED_TOKEN", "NOT_FOUND", "OVERSCOPE_ACK_REQUIRED", "VERIFY_FAILED", "PUBLISH_IN_FLIGHT", "PUBLISH_UNSUPPORTED_REPO", "PUBLICATION_NOT_LIVE", "NO_APP_DATA", "FEATURE_REQUESTS_NEEDS_MEMBERS", "EMPTY_UPDATE", "BAD_CURSOR", "HUMAN_APPROVAL_REQUIRED", "PROTECTED_PATHS_MANAGED_ONLY", "RUN_IN_FLIGHT", "TEXT_EDIT_REFUSED", "CLI_UPGRADE_REQUIRED", "PRODUCTION_STEP_UP_REQUIRED", "PRICES_UPDATING", "GITHUB_UNAVAILABLE", "PUBLISH_NOT_SET_UP", "VERSION_NOT_DEPLOYED", "INTERNAL_ERROR"`

  Stable error codes surfaced to public CaaS clients.
- **`status` (required)**: `integer`
- **`title` (required)**: `string`
- **`detail`**: `string | null`, default: `null`
- **`existing_run_id`**: `string | null`, default: `null`
- **`instance`**: `string | null`, default: `null`
- **`type`**: `string`, default: `"about:blank"`

<a id="scalar-example-9"></a>

**Generated example:**

```json
{
  "code": "BUDGET_EXHAUSTED",
  "detail": null,
  "existing_run_id": null,
  "instance": null,
  "status": 1,
  "title": "",
  "type": "about:blank",
  "additionalProperty": "anything"
}
```

<a id="scalar-schema-externalerrorcode"></a>

### ExternalErrorCode

**Type:** `string`, possible values: `"BUDGET_EXHAUSTED", "QUOTA_EXCEEDED", "RUN_CONCURRENCY_LIMIT", "CUSTOMER_DISABLED", "REPO_NOT_BOUND", "IDEMPOTENCY_REPLAY", "CONFLICT", "MISSION_BUSY_RETRY", "HITL_REQUEST_CONFLICT", "HITL_REQUEST_SETTLED", "RUN_TERMINATED_BEFORE_RESPONSE", "INVALID_POLICY", "INVALID_SCOPE", "RATE_LIMITED", "INSTALLATION_INCOMPLETE", "SUBSCRIPTION_USAGE_UNAVAILABLE", "INVALID_TOKEN", "ROLE_REQUIRED", "PLAN_UPGRADE_REQUIRED", "EMAIL_MISMATCH", "EXPIRED_TOKEN", "NOT_FOUND", "OVERSCOPE_ACK_REQUIRED", "VERIFY_FAILED", "PUBLISH_IN_FLIGHT", "PUBLISH_UNSUPPORTED_REPO", "PUBLICATION_NOT_LIVE", "NO_APP_DATA", "FEATURE_REQUESTS_NEEDS_MEMBERS", "EMPTY_UPDATE", "BAD_CURSOR", "HUMAN_APPROVAL_REQUIRED", "PROTECTED_PATHS_MANAGED_ONLY", "RUN_IN_FLIGHT", "TEXT_EDIT_REFUSED", "CLI_UPGRADE_REQUIRED", "PRODUCTION_STEP_UP_REQUIRED", "PRICES_UPDATING", "GITHUB_UNAVAILABLE", "PUBLISH_NOT_SET_UP", "VERSION_NOT_DEPLOYED", "INTERNAL_ERROR"`

Stable error codes surfaced to public CaaS clients.
