# Get webhook delivery

A single delivery plus its full attempt timeline (including async retries).

**Endpoint:** `GET /v2/webhooks/{teamId}/{webhookId}/deliveries/{deliveryId}`  
**Operation ID:** `getWebhookDelivery`  
**Server:** `https://developers.micro.so`  
**Security:** `[{"apiKey":[]}]`

## Parameters

```json
[
  {
    "name": "teamId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string",
      "format": "uuid"
    }
  },
  {
    "name": "webhookId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string",
      "format": "uuid"
    }
  },
  {
    "name": "deliveryId",
    "in": "path",
    "required": true,
    "schema": {
      "type": "string",
      "format": "uuid"
    }
  }
]
```

## Request body

```json
null
```

## Responses

```json
{
  "200": {
    "description": "The delivery and its attempts.",
    "headers": {
      "x-request-id": {
        "$ref": "#/components/headers/XRequestId"
      }
    },
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/WebhookDeliveryDetail"
        }
      }
    }
  },
  "401": {
    "$ref": "#/components/responses/Unauthorized"
  },
  "403": {
    "$ref": "#/components/responses/Forbidden"
  },
  "404": {
    "$ref": "#/components/responses/NotFound"
  }
}
```

## Referenced components

```json
{
  "securitySchemes": {
    "apiKey": {
      "type": "apiKey",
      "in": "header",
      "name": "x-api-key",
      "description": "Public API key generated from Micro settings. Sent as the `x-api-key` header and validated by AWS API Gateway in front of the service."
    }
  },
  "headers": {
    "XRequestId": {
      "description": "Correlation ID. Echoed from the request `x-request-id` header when supplied, otherwise generated. Include in support requests.",
      "schema": {
        "type": "string"
      }
    }
  },
  "schemas": {
    "WebhookDeliveryDetail": {
      "description": "A delivery plus its full attempt timeline.",
      "allOf": [
        {
          "$ref": "#/components/schemas/WebhookDelivery"
        },
        {
          "type": "object",
          "properties": {
            "attempt_history": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/WebhookAttempt"
              }
            }
          }
        }
      ]
    },
    "WebhookDelivery": {
      "type": "object",
      "description": "A webhook delivery — one logical event delivery to an endpoint, grouping its attempts. Status and status_code reflect the latest attempt.",
      "required": [
        "delivery_id",
        "webhook_id",
        "type",
        "status",
        "created_at"
      ],
      "properties": {
        "delivery_id": {
          "type": "string",
          "format": "uuid"
        },
        "webhook_id": {
          "type": "string",
          "format": "uuid"
        },
        "team_id": {
          "type": [
            "string",
            "null"
          ],
          "format": "uuid"
        },
        "type": {
          "type": "string",
          "enum": [
            "delivery",
            "verification"
          ]
        },
        "event": {
          "type": [
            "string",
            "null"
          ],
          "description": "Event name (e.g. `webhook.test`); `verification` for handshake runs."
        },
        "url": {
          "type": "string"
        },
        "status": {
          "type": "string",
          "enum": [
            "success",
            "failed"
          ]
        },
        "status_code": {
          "type": [
            "integer",
            "null"
          ],
          "description": "HTTP status of the latest attempt; null on a transport error."
        },
        "attempts": {
          "type": [
            "integer",
            "null"
          ],
          "description": "Number of attempts made so far (including async retries)."
        },
        "created_at": {
          "type": "string",
          "format": "date-time"
        },
        "updated_at": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        }
      }
    },
    "WebhookAttempt": {
      "type": "object",
      "description": "A single HTTP attempt within a delivery (including async retries).",
      "required": [
        "attempt",
        "status",
        "created_at"
      ],
      "properties": {
        "attempt": {
          "type": "integer",
          "description": "1-based attempt number."
        },
        "status": {
          "type": "string",
          "enum": [
            "success",
            "failed"
          ]
        },
        "status_code": {
          "type": [
            "integer",
            "null"
          ]
        },
        "error": {
          "type": [
            "string",
            "null"
          ],
          "description": "Failure reason, when status is failed."
        },
        "request_body": {
          "type": [
            "string",
            "null"
          ],
          "description": "Body sent to the endpoint (delivery only); may be truncated."
        },
        "response_body": {
          "type": [
            "string",
            "null"
          ],
          "description": "Body returned by the endpoint; may be truncated."
        },
        "created_at": {
          "type": "string",
          "format": "date-time"
        }
      }
    },
    "Error": {
      "type": "object",
      "description": "Canonical JSON error envelope for every non-2xx v2 API response. `error.code` is the machine-readable error code, `error.message` is the human-readable summary, and `error.request_id` identifies the request for support. When supplied, `error.errors` contains field-level validation issues.",
      "required": [
        "error"
      ],
      "properties": {
        "error": {
          "type": "object",
          "required": [
            "code",
            "message",
            "request_id"
          ],
          "properties": {
            "code": {
              "type": "string",
              "description": "Stable machine-readable code. Branch on this, not on the HTTP status, to handle specific failure modes.",
              "example": "invalid_request"
            },
            "message": {
              "type": "string",
              "description": "Human-readable summary suitable for logs. Not localized; do not display verbatim to end users."
            },
            "request_id": {
              "type": [
                "string",
                "null"
              ],
              "description": "Echo of the x-request-id response header. Include in support requests."
            },
            "errors": {
              "type": "array",
              "description": "Optional structured field-level validation issues when the server provides them.",
              "items": {
                "type": "object",
                "properties": {
                  "field": {
                    "type": "string",
                    "description": "JSON path of the offending property (e.g. \".body.default.email\")."
                  },
                  "message": {
                    "type": "string"
                  },
                  "code": {
                    "type": "string",
                    "description": "Validator-specific code (e.g. \"required.openapi.validation\")."
                  }
                },
                "required": [
                  "message"
                ]
              }
            },
            "details": {
              "type": "object",
              "description": "Optional bag of error-specific context. Shape varies by code; clients should treat fields as opaque unless documented."
            }
          }
        }
      }
    }
  },
  "responses": {
    "Unauthorized": {
      "description": "Missing or invalid credentials. API Gateway maps a missing or invalid `x-api-key` to HTTP 401 with this envelope (including `request_id`). A 403 here means the key was accepted but the caller is not permitted.",
      "headers": {
        "x-request-id": {
          "$ref": "#/components/headers/XRequestId"
        }
      },
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    },
    "Forbidden": {
      "description": "Authenticated but not permitted to perform this action.",
      "headers": {
        "x-request-id": {
          "$ref": "#/components/headers/XRequestId"
        }
      },
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    },
    "NotFound": {
      "description": "Resource or route does not exist.",
      "headers": {
        "x-request-id": {
          "$ref": "#/components/headers/XRequestId"
        }
      },
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    }
  }
}
```
