---
title: "Create an access sheet"
method: POST
path: "/api/agent/fiches"
---

# Create an access sheet

`POST /api/agent/fiches`

## Request

- Base URL: `https://sesapp.fr`
- URL: `https://sesapp.fr/api/agent/fiches`
- Auth: HTTP bearer

Beyond plan quota, returns 402 for overage (0.50 USDC Agent / 0.25 Fleet). Retry with PAYMENT-SIGNATURE. Write the guest flip-book in `instructions` (Markdown). Full playbook: /llms.txt.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `name` string, required
  - `formattedAddress` string, required
  - `instructions` string: Markdown flip-book shown to the guest (this field). Cover (map, name, formattedAddress, accessCode) is generated — do not repeat it here. Split pages with a line containing only --- . Supported: # ## ### headings, paragraphs, **bold**, *italic*, - / 1. lists, [label](https://...), ![alt](https://...). Photos: https URLs (GCS via the host app, or your own CDN). Agents send URLs, no file upload. Never put wifiPassword in Markdown; it is unlocked only within 150 m via GPS. Intent hrefs: sesapp:wifi (needs wifiName + wifiPassword) and sesapp:contact (needs phoneNumber). Guest-facing labels: [Ajouter le WiFi] / [Ajouter le contact]. If you omit those links but set the fields, SesApp appends WiFi/contact pages. Example: # Bienvenue Parking au fond à gauche. ![Façade](https://example.com/facade.jpg) --- ## Arrivée Sonnette à gauche. [Itinéraire](https://maps.google.com/?q=48.8566,2.3522) --- [Ajouter le WiFi](sesapp:wifi) --- [Ajouter le contact](sesapp:contact)
  - `lat` number: Latitude for the cover map and WiFi geofence.
  - `lon` number: Longitude for the cover map and WiFi geofence.
  - `wifiName` string: SSID. Required for sesapp:wifi. Hidden until the guest is within 150 m if wifiPassword is set.
  - `wifiPassword` string: Never put this in instructions. Unlocked on the guest link within 150 m of lat/lon.
  - `accessCode` string: Shown on the generated cover page.
  - `phoneNumber` string: Required for sesapp:contact. E.164 preferred.
  - `locale` 'fr' | 'en': Guest chrome language. Markdown stays as written. Omit to follow Accept-Language / ?lang=.

## Response `200`

Created

## Other responses

- `400`: INVALID_PARAMS
- `401`: UNAUTHORIZED — missing or invalid Bearer
- `402`: x402 payment required (expired plan or overage). Body is not ApiError.
- `403`: FORBIDDEN or QUOTA_EXCEEDED (host plans without overage)

---

[API](https://skmtc.dev/sesapp/apis/sesapp-agent-api.md) · [All operations](https://skmtc.dev/sesapp/apis/sesapp-agent-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sesapp/apis/sesapp-agent-api/revisions/8d819a96c5bf?raw)
