---
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/`

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.net/cloverhealth/apis/clover-api.md) · [All operations](https://skmtc.net/cloverhealth/apis/clover-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/cloverhealth/clover-api/revisions/28797307aae6/schema)
