# SiteVisit by HappyCo > API and developer documentation for SiteVisit — video-first site visits for multifamily. ## Docs - [Introduction](https://docs.sitevisit.app/introduction.md): Programmatic access to your SiteVisit data — properties, visits, action items. - [Quickstart](https://docs.sitevisit.app/quickstart.md): Get an API key and make your first call in under five minutes. - [Authentication](https://docs.sitevisit.app/authentication.md): How to authenticate requests with an API key. - [Pagination](https://docs.sitevisit.app/pagination.md): How to page through list endpoints with cursors. - [Idempotency](https://docs.sitevisit.app/idempotency.md): Safe retries on POST + PATCH + DELETE via the Idempotency-Key header. - [Errors](https://docs.sitevisit.app/errors.md): Error envelope, status codes, and what each code means. - [Versioning](https://docs.sitevisit.app/versioning.md): How we evolve the API without breaking your integration. - [Team workspaces](https://docs.sitevisit.app/teams.md): How Enterprise team accounts work in SiteVisit — invites, roles, billing, and switching between team and personal context. - [MCP server](https://docs.sitevisit.app/mcp.md): Connect Claude, Cursor, or any MCP-compatible AI to your SiteVisit data. - [Webhooks](https://docs.sitevisit.app/webhooks.md): Receive HTTPS POSTs when something happens in a SiteVisit account. - [List properties](https://docs.sitevisit.app/api-reference/list-properties.md): Returns the properties owned by the authenticated account. - [Create a property](https://docs.sitevisit.app/api-reference/create-a-property.md): Create a property on the authenticated user's account. Returns 402 with an upgrade URL when the user's plan property limit is reached. - [List site visits](https://docs.sitevisit.app/api-reference/list-site-visits.md) - [Create a site visit](https://docs.sitevisit.app/api-reference/create-a-site-visit.md): Create a site visit on a property the caller owns. Starts in DRAFT status. Returns 402 with upgrade URL if the plan visit limit is hit, 404 if the property doesn't exist or isn't owned. - [List action items](https://docs.sitevisit.app/api-reference/list-action-items.md) - [Create an action item](https://docs.sitevisit.app/api-reference/create-an-action-item.md): Manually create an action item attached to a site visit the caller owns. Useful for filing items from natural language (email, chat, voice) without going through the AI extraction flow on uploaded videos. - [Fetch an action item](https://docs.sitevisit.app/api-reference/fetch-an-action-item.md): Fetch a single action item the caller owns. Includes evidence image URLs and completion fields. Useful after receiving an action_item.* webhook to hydrate the full record. - [Delete an action item](https://docs.sitevisit.app/api-reference/delete-an-action-item.md): Permanently delete an action item the caller owns. Cascades to attached evidence images. Returns 204 No Content on success. - [Update an action item](https://docs.sitevisit.app/api-reference/update-an-action-item.md): Patch any subset of (title, description, category, location, priority, status, assignee). Closing with attribution + note + photo uses POST /action-items/{id}/complete instead. - [Issue a capture-link token](https://docs.sitevisit.app/api-reference/issue-a-capture-link-token.md): Issue a short-lived URL/QR token granting media-upload access to a single resource (today: an action item's evidence or completion photo). The capture URL renders a phone-friendly camera view at /c/ with no sign-in required. 24h TTL by default, capped at 7 days. Pass an Idempotency-Key for sa… - [Fetch a property](https://docs.sitevisit.app/api-reference/fetch-a-property.md): Fetch a single property the caller owns. The canonical post-webhook fetch — when an integrator receives a property.* event with an id, this is how they pull the full record. - [Delete a property](https://docs.sitevisit.app/api-reference/delete-a-property.md): Permanently delete a property the caller owns. Cascades to all site visits, action items, evidence images, and uploaded videos on the property. Returns 204 No Content on success. Irreversible — there's no undo. - [Update a property](https://docs.sitevisit.app/api-reference/update-a-property.md): Patch any subset of (name, address, notes, icon_emoji). Returns the updated property. - [Fetch a site visit](https://docs.sitevisit.app/api-reference/fetch-a-site-visit.md): Fetch a single site visit the caller owns. Includes the public-report URL the asset manager would share with the team. Useful after receiving a site_visit.* webhook. - [Delete a site visit](https://docs.sitevisit.app/api-reference/delete-a-site-visit.md): Permanently delete a site visit the caller owns. Cascades to all action items, evidence, and uploaded videos on the visit. Returns 204 No Content on success. - [Update a site visit](https://docs.sitevisit.app/api-reference/update-a-site-visit.md): Patch any subset of (title, visit_date, summary, notes). Status transitions are driven by the video pipeline and aren't editable via the API. To close a visit use POST /site-visits/{id}/complete instead. - [Complete a site visit](https://docs.sitevisit.app/api-reference/complete-a-site-visit.md): Mark a visit complete without sending a report. Idempotent — calling on an already-completed visit returns the existing record without changing the original timestamp. Mirrors the dashboard's 'Mark Complete' button. - [Complete an action item](https://docs.sitevisit.app/api-reference/complete-an-action-item.md): Mark an action item DONE with attribution + an optional note + completion photo storage key. Idempotent at the domain level — completing an already-done item returns the existing record without changing the original timestamp. - [List webhook endpoints](https://docs.sitevisit.app/api-reference/list-webhook-endpoints.md): Return every webhook endpoint owned by the authenticated account. Signing secrets are **never** included on read — they're shown exactly once at creation. Not paginated; the per-account endpoint count is small enough to ship as a single response. - [Create a webhook endpoint](https://docs.sitevisit.app/api-reference/create-a-webhook-endpoint.md): Subscribe a new URL to events for this account. The `signingSecret` is included in the response **exactly once** — store it now. To rotate, delete the endpoint and create a new one. URLs must be HTTPS in production (HTTP allowed only for `localhost` during local development). Pass an `Idempotency-Ke… - [Fetch a webhook endpoint](https://docs.sitevisit.app/api-reference/fetch-a-webhook-endpoint.md): Fetch a single webhook endpoint by ID. Signing secret is **not** included — it's shown only at creation. - [Delete a webhook endpoint](https://docs.sitevisit.app/api-reference/delete-a-webhook-endpoint.md): Hard-delete the endpoint and all of its delivery rows. Returns 204 No Content on success. To pause without losing history, PATCH with `disabled: true` instead. - [Update a webhook endpoint](https://docs.sitevisit.app/api-reference/update-a-webhook-endpoint.md): Patch any subset of `name`, `url`, `events`, or `disabled`. To rotate the signing secret, delete the endpoint and create a new one. ## OpenAPI Specs - [openapi](https://docs.sitevisit.app/api-reference/openapi.json)