---
title: "Complete a visit"
method: POST
path: "/api/v1/field-providers/appointments/{appointment_id}/complete/"
tags: ["Field Providers", "Field API — Visits"]
---

# Complete a visit

`POST /api/v1/field-providers/appointments/{appointment_id}/complete/`

## Request

- Base URL: `https://api.cloverhealth.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.cloverhealth.com/api/v1/field-providers/appointments/{appointment_id}/complete/`
- Auth: HTTP bearer

Marks the visit completed. If no visit exists yet (exit without a recorded
entry), synthesizes a start from this same event first, so a start always
precedes an end. Idempotent: an already-completed visit is a no-op.

## Path parameters

- `appointment_id` string, required

## Request body

- VisitTransitionRequest
  - `trigger` string, required
  - `occurred_at` string, date-time, required
  - `latitude` number, nullable
  - `longitude` number, nullable
  - `client_event_id` string, required

## Response `200`

OK

- VisitTransitionResponse
  - `appointment_id` string, required
  - `status` string, required
  - `started_at` string, date-time, nullable
  - `completed_at` string, date-time, nullable

## Other responses

- `404`: Not Found

---

[API](https://skmtc.dev/cloverhealth/apis/clover-api.md) - [All operations](https://skmtc.dev/cloverhealth/apis/clover-api/llms.txt) - [OpenAPI document](https://skmtc.dev/cloverhealth/apis/clover-api/revisions/824d541751f2?raw)
