SmartBook

SmartBook API

Samme REST som gjestesidene bruker. Ikke et tredjeparts agent-SDK.

Base URL: https://smartbook.now/api/v1

JSON med mindre annet er oppgitt. POST /bookings, /bookings/cancel og /payments/create-intent krever Origin på smartbook.now og x-csrf-token som matcher csrf-token-cookien. Feltnavn er camelCase (serviceId, startTime, bookingId).

Maskinlesbare spesifikasjoner: openapi.json · llms-full.txt · llms.txt

Booking
Offentlig katalog og bestilling for en kjent bedrifts-slug. POST krever Origin på smartbook.now og CSRF-cookie.
GET/api/v1/services?slug={businessSlug}

Aktive, offentlige tjenester for en kjent slug. Partneroppføringer er utelatt. Pris er price_nok (NOK).

Respons

{
  "data": [
    {
      "id": "uuid",
      "name": "Herreklipp",
      "duration_minutes": 30,
      "price_nok": 499,
      "is_multi_day": false,
      "confirmation_mode": "auto",
      "capacity": 1
    }
  ]
}
GET/api/v1/packages?slug={businessSlug}

Aktive pakker for bedriften.

Respons

{
  "data": [
    {
      "id": "uuid",
      "name": "Weekend stay",
      "primaryServiceId": "uuid",
      "totalPriceNok": 3200,
      "items": []
    }
  ]
}
GET/api/v1/availability?serviceId={id}&date={YYYY-MM-DD}

Tidsluker for én dato. data er en liste av objekter (startTime, endTime, available), ikke klokkeslett-strenger. Bruk range for overnatting.

Respons

{
  "data": [
    {
      "startTime": "2026-10-03T08:00:00.000Z",
      "endTime": "2026-10-03T08:30:00.000Z",
      "available": true,
      "remaining": 1
    }
  ],
  "timezone": "Europe/Oslo"
}
GET/api/v1/availability/range?serviceId={id}&checkIn={YYYY-MM-DD}&checkOut={YYYY-MM-DD}

Tilgjengelighet og pris for flerdagers opphold (is_multi_day).

Respons

{
  "data": {
    "available": true,
    "nights": 2,
    "startTime": "2026-10-03T14:00:00.000Z",
    "endTime": "2026-10-05T11:00:00.000Z",
    "totalPriceNok": 2400,
    "pricePerNightNok": 1200,
    "availableResources": [],
    "conflicts": []
  },
  "timezone": "Europe/Oslo"
}
POST/api/v1/bookings

Opprett bestilling. Krever Origin + x-csrf-token (cookie csrf-token). startTime er ISO-8601, ikke date+time. customerPhone er påkrevd. Betaling skjer i et senere steg.

Request body

{
  "serviceId": "uuid",
  "startTime": "2026-10-03T08:00:00.000Z",
  "customerName": "Ola Nordmann",
  "customerEmail": "ola@example.com",
  "customerPhone": "+4791234567"
}

Respons

{
  "data": {
    "id": "uuid",
    "status": "pending",
    "start_time": "2026-10-03T08:00:00.000Z",
    "end_time": "2026-10-03T08:30:00.000Z",
    "price_nok": 499,
    "org_id": "uuid"
  },
  "manageToken": "opaque-guest-token"
}
POST/api/v1/bookings/cancel

Kanseller med manageToken fra opprettelse, ikke booking-id. CSRF påkrevd.

Request body

{
  "token": "opaque-guest-token"
}

Respons

{
  "data": {
    "status": "cancelled",
    "refundAmount": 0
  }
}
Betaling
Stripe-økt for en eksisterende ubetalt bestilling. Ikke et frittstående betalings-API.
POST/api/v1/payments/create-intent

Stripe-økt for en ubetalt bestilling. Body er bookingId. Beløp beregnes på server. Krever innlogget gjest eller header x-management-token, pluss CSRF. Vipps er av.

Request body

{
  "bookingId": "uuid"
}

Respons

{
  "data": {
    "provider": "stripe",
    "kind": "embedded",
    "clientSecret": "pi_xxx_secret_xxx"
  }
}
AI
Chatboten på gjestesiden. Ikke et generelt chat-completions-API.
POST/api/v1/ai/chat

Gjestechat på booking-siden. Feltet heter slug (ikke business_slug). CSRF-unntatt. Svaret er en Vercel AI SDK-datastrøm, ikke SSE med {"content"}.

Request body

{
  "messages": [
    {
      "role": "user",
      "content": "Hvilke tjenester tilbyr dere?"
    }
  ],
  "slug": "min-bedrift"
}

Respons

Vercel AI SDK data stream (toDataStreamResponse). Intended for the booking widget.
SmartBook API — REST booking, betaling og AI-integrasjon