---
title: "Create a visit access grant"
method: POST
path: "/v1/visits/{visit_id}/access_grants"
tags: ["Visits"]
---

# Create a visit access grant

`POST /v1/visits/{visit_id}/access_grants`

## Request

- Base URL: `https://api.navigateai.co`
- URL: `https://api.navigateai.co/v1/visits/{visit_id}/access_grants`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/navigate/apis/navigateai-api/docs/v1/visits/:visit_id/access_grants/post.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `visit_id` string, required

## Request body

- CreateVisitAccessGrantRequest
  - `recipient_name` string, nullable: Display name shown as the guest's identity on the visit (e.g. the reviewer's name).
  - `recipient_email` string, nullable: Contact email recorded for the guest. Not used for authentication.
  - `metadata` object, nullable: Arbitrary structured data to attach to this grant (e.g. your own user or task ids). Echoed back verbatim in the create response. Never interpreted by NavigateAI.
  - `expires_at` string, date-time, nullable: When the access link stops working, as an ISO 8601 UTC timestamp (e.g. `2026-12-31T23:59:59Z`). Must be in the future and timezone-aware. Omit for a link that never expires.
  - `access_level` 'edit' | 'view': What the recipient can do with the visit. `edit` lets them change the visit's data and share the visit onward; `view` is read-only. Defaults to `edit`.

## Response `200`

OK

- VisitAccessGrantResponse
  - `visit_access_grant_id` string, required
  - `visit_id` string, required
  - `token` string, required
  - `deeplink_url` string, required
  - `expires_at` string, date-time, nullable, required
  - `metadata` object, nullable, required: The arbitrary structured data attached at creation, echoed back verbatim.
  - `access_level` 'edit' | 'view', required: What the recipient can do with the visit.

## Changes

- **2026-09-17** `9c9de149d8b0`: 2 info
  - added the new optional request property `access_level`
  - added the required property `access_level` to the response with the `200` status

[Operation history](https://skmtc.dev/navigate/apis/navigateai-api/changes/v1/visits/:visit_id/access_grants/post.md)

---

[API](https://skmtc.dev/navigate/apis/navigateai-api.md) - [All operations](https://skmtc.dev/navigate/apis/navigateai-api/llms.txt) - [OpenAPI document](https://skmtc.dev/navigate/apis/navigateai-api/revisions/354d82f8ecfc?raw)
