Experience Bamfield
Plan and price trips to Bamfield, BC, and build the guest's cart link. Read-only; no key to connect.
Sollte ich dies verwenden
Qualität und Sicherheit
Befunde (1)
- LOWin price_cottages
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"experience-bamfield": {
"url": "https://experiencebamfield.com/mcp"
}
}
}Remote-Endpunkte
https://experiencebamfield.com/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (9)
🟢list_products(category, business)
Every product on sale — cottages, kayaks and canoes, parking, moorage, fishing charters — with its id, business, what it holds, how many there are, and its published price. Start here: every other tool takes a product id from this list. A cottage's price depends on the dates (price_cottages).
Eingabe-Schema
{
"type": "object",
"properties": {
"category": {
"type": "string",
"enum": [
"cottage",
"kayak",
"accessory",
"parking",
"moorage",
"charter"
],
"description": "Only this kind of product. kayak is boats (kayaks and canoes); accessory is lifejackets and paddles."
},
"business": {
"type": "string",
"maxLength": 60,
"description": "Only this business, by its slug: woods-end-landing, bamfield-adventure-center, save-paradise-parking, woods-end-marina, harbourside-lodge."
}
},
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"products": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"title",
"category",
"business"
],
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"category": {
"type": "string"
},
"business": {
"type": "string"
},
"page": {
"type": "string"
}
}
}
},
"count": {
"type": "integer"
},
"parkingSpacesTotal": {
"type": "integer",
"description": "Every parking space there is, across all sizes."
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"products",
"count"
]
}🟢get_product(productId)
Everything published about one product: description, what is included, amenities, rules, check-in and check-out, rate table, deposit, photographs and its page on the site.
Eingabe-Schema
{
"type": "object",
"properties": {
"productId": {
"type": "string",
"minLength": 2,
"maxLength": 80,
"pattern": "^[a-z0-9][a-z0-9:_-]{1,79}$",
"description": "A product id from list_products."
}
},
"required": [
"productId"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"category": {
"type": "string"
},
"description": {
"type": "string"
},
"pricing": {
"type": "object"
},
"rates": {
"type": "array",
"description": "Boats: each length of rental and its price.",
"items": {
"type": "object",
"properties": {
"rental": {
"type": "string"
},
"hours": {
"type": "number"
},
"priceCents": {
"type": "integer"
}
}
}
},
"details": {
"type": "object"
},
"facts": {
"type": "object"
},
"photos": {
"type": "array",
"items": {
"type": "object"
}
}
},
"required": [
"id",
"title",
"category"
]
}🟢check_availability(productId, startDate, endDate, boatLengthFt)
Day by day, whether a product is open between two dates, and how many are left where it is counted (boats, parking, charters; for moorage, feet free and the longest boat that fits). For a yes or no on exact dates and a number of units, quote_trip is the shorter road.
Eingabe-Schema
{
"type": "object",
"properties": {
"productId": {
"type": "string",
"minLength": 2,
"maxLength": 80,
"pattern": "^[a-z0-9][a-z0-9:_-]{1,79}$",
"description": "A product id from list_products."
},
"startDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD."
},
"endDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD."
},
"boatLengthFt": {
"type": "integer",
"minimum": 8,
"maximum": 200,
"description": "Moorage only: the boat's length in feet."
}
},
"required": [
"productId",
"startDate",
"endDate"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"productId": {
"type": "string"
},
"counted": {
"type": "boolean"
},
"days": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"soldOut": {
"type": "boolean"
},
"unitsLeft": {
"type": "integer"
},
"feetFree": {
"type": "integer"
},
"longestBoatThatFitsFt": {
"type": "integer"
}
}
}
},
"openEveryDay": {
"type": "boolean"
}
},
"required": [
"productId",
"days",
"openEveryDay"
]
}🟢price_cottages(startDate, endDate, guests)
Every cottage's price for a stay, whether it is free, and whether it sleeps the party. The figures are before the cleaning fee and taxes: quote_trip gives the all-in total.
Eingabe-Schema
{
"type": "object",
"properties": {
"startDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Check-in."
},
"endDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Check-out: the morning the guests leave."
},
"guests": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "How many people."
}
},
"required": [
"startDate",
"endDate"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"nights": {
"type": "integer"
},
"guests": {
"type": "integer"
},
"cottages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"productId": {
"type": "string"
},
"title": {
"type": "string"
},
"stayCents": {
"type": [
"integer",
"null"
]
},
"nightlyCents": {
"type": [
"integer",
"null"
]
},
"rateStatus": {
"type": "string"
},
"available": {
"type": "boolean"
},
"fitsGuests": {
"type": "boolean"
}
}
}
},
"ratesKnownThrough": {
"type": [
"string",
"null"
]
},
"note": {
"type": "string"
}
},
"required": [
"cottages"
]
}🟢quote_trip(lines)
The whole basket, the way checkout charges it. Each line: its price and whether it is free for those dates in that number. The basket: the cleaning fee, each tax, the refundable deposits, and totals.dueAtCheckoutCents — the amount the guest's card is charged. Saves nothing and holds nothing. A fishing charter line takes tripType (half-day or full-day).
Eingabe-Schema
{
"type": "object",
"properties": {
"lines": {
"type": "array",
"minItems": 1,
"maxItems": 20,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"productId",
"startDate",
"endDate"
],
"properties": {
"productId": {
"type": "string",
"minLength": 2,
"maxLength": 80,
"pattern": "^[a-z0-9][a-z0-9:_-]{1,79}$",
"description": "A product id from list_products."
},
"startDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First day: check-in for a stay, pick-up day for a rental."
},
"endDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last day: the morning the guests leave for a stay or moorage; the return day for a rental (the same date for a rental within one day)."
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "Boats, vehicles or charter trips. 1 for a cottage. Default 1."
},
"guests": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "How many people. Checked against how many a cottage sleeps. Default 2."
},
"boatLengthFt": {
"type": "integer",
"minimum": 8,
"maximum": 200,
"description": "Moorage only: the boat's length in feet."
},
"startTime": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Boats only: pick-up time, HH:MM, from 07:00. Send both times or neither."
},
"endTime": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Boats only: return time, HH:MM, by 20:00."
},
"tripType": {
"type": "string",
"enum": [
"half-day",
"full-day"
],
"description": "Fishing charters only. Full day when left out."
}
}
}
}
},
"required": [
"lines"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"lines": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"priced": {
"type": "boolean"
},
"totalCents": {
"type": [
"integer",
"null"
]
},
"available": {
"type": [
"boolean",
"null"
]
},
"reason": {
"type": "string"
},
"message": {
"type": "string"
}
}
}
},
"totals": {
"type": "object",
"properties": {
"totalCents": {
"type": "integer"
},
"refundableDepositCents": {
"type": "integer"
},
"dueAtCheckoutCents": {
"type": "integer"
},
"complete": {
"type": "boolean"
},
"bookable": {
"type": "boolean"
}
}
}
},
"required": [
"lines",
"totals"
]
}🟢build_cart_link(lines)
Builds the one link that puts the chosen lines in the guest's cart on experiencebamfield.com, and checks it: the lines it opens with, any that would be left out and why, and the totals. Give the guest the url. They review the cart and pay by card; the booking is confirmed the moment they pay. A fishing charter is not carried by the link: it is added from its own page.
Eingabe-Schema
{
"type": "object",
"properties": {
"lines": {
"type": "array",
"minItems": 1,
"maxItems": 12,
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"productId",
"startDate",
"endDate"
],
"properties": {
"productId": {
"type": "string",
"minLength": 2,
"maxLength": 80,
"pattern": "^[a-z0-9][a-z0-9:_-]{1,79}$",
"description": "A product id from list_products."
},
"startDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First day: check-in for a stay, pick-up day for a rental."
},
"endDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Last day: the morning the guests leave for a stay or moorage; the return day for a rental (the same date for a rental within one day)."
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "Boats, vehicles or charter trips. 1 for a cottage. Default 1."
},
"guests": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "How many people. Checked against how many a cottage sleeps. Default 2."
},
"boatLengthFt": {
"type": "integer",
"minimum": 8,
"maximum": 200,
"description": "Moorage only: the boat's length in feet."
},
"startTime": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Boats only: pick-up time, HH:MM, from 07:00. Send both times or neither."
},
"endTime": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Boats only: return time, HH:MM, by 20:00."
}
}
}
}
},
"required": [
"lines"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"url": {
"type": [
"string",
"null"
],
"description": "The link to give the guest. Null when no line would open: there is nothing to hand over."
},
"lines": {
"type": "array",
"items": {
"type": "object"
}
},
"totals": {
"type": "object"
},
"opensWith": {
"type": "integer"
},
"leftOut": {
"type": "integer"
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"url",
"lines",
"totals",
"opensWith"
]
}🟢camping_permits
Where a camping permit is needed (the Deer Group and the Broken Group Islands), who issues it, what it costs, the longest stay, how long it takes, the campsites that can be applied for, and where the guest applies. The permit is not a line in the cart.
Eingabe-Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"destinations": {
"type": "array",
"items": {
"type": "object"
}
},
"applyAt": {
"type": "string"
},
"notes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"destinations"
]
}🟢list_photos(business)
Photographs of a business and its products, each with a description and an address that can be shown to the guest.
Eingabe-Schema
{
"type": "object",
"properties": {
"business": {
"type": "string",
"maxLength": 60,
"description": "A business slug from list_products, e.g. woods-end-landing."
}
},
"required": [
"business"
],
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"business": {
"type": "string"
},
"photos": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"url": {
"type": "string"
}
}
}
},
"count": {
"type": "integer"
}
},
"required": [
"photos",
"count"
]
}🟢get_trip_summary(link, key)
After the booking. Takes the link a guest made for their assistant on their trip page (or just the key on the end of it) and returns a read-only summary of that one trip: whether it is ready to travel, what needs doing, by what date and who it is waiting on, each booked line with what it came to, and the money — payments received, refunds completed and pending, what is retained, the damage deposit and what is owing. Read it again each time you are asked (freshness.staleAfterSeconds). A fact that is not known is "unknown" and an amount that cannot be stated is null: never read those as yes, no or 0. When money.state is not_reconciled, tell the guest not to pay again on the strength of this and to call the desk. It includes nobody's name or contact details and can change nothing. A link that is wrong, expired or turned off is refused; ask the guest for a new one.
Eingabe-Schema
{
"type": "object",
"properties": {
"link": {
"type": "string",
"maxLength": 400,
"description": "The link the guest gave you, whole: it looks like https://experiencebamfield.com/api/assistant/trip/KEY. Send this or key."
},
"key": {
"type": "string",
"maxLength": 400,
"description": "Or only the 43-character key on the end of that link."
}
},
"additionalProperties": false
}Ausgabe-Schema
{
"type": "object",
"properties": {
"about": {
"type": "string"
},
"freshness": {
"type": "object",
"description": "The summary is the trip as recorded at checkedAt and is worked out again on every read. Read the link again before answering; do not answer from a copy older than staleAfterSeconds.",
"properties": {
"checkedAt": {
"type": "string"
},
"staleAfterSeconds": {
"type": "integer"
},
"readAgainBeforeAnswering": {
"type": "boolean"
},
"note": {
"type": "string"
}
}
},
"trip": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"startDate": {
"type": [
"string",
"null"
],
"description": "YYYY-MM-DD, or null."
},
"endDate": {
"type": [
"string",
"null"
],
"description": "YYYY-MM-DD, or null."
},
"stage": {
"type": "string",
"enum": [
"upcoming",
"under_way",
"finished",
"cancelled"
]
},
"testOrder": {
"type": "boolean",
"description": "Present, and true, only on an order made with a test code. A real trip does not carry this field."
}
}
},
"ready": {
"type": "object",
"properties": {
"answer": {
"type": "string",
"enum": [
"ready",
"not_ready",
"cannot_tell",
"not_applicable"
],
"description": "ready only when every line the trip depends on is ready, the payment record included. cannot_tell: nothing is waiting on anyone, and something the trip depends on could not be verified. not_applicable: the trip is over or cancelled."
},
"headline": {
"type": "string"
},
"detail": {
"type": "string"
},
"readyCount": {
"type": [
"integer",
"null"
],
"description": "null once the trip is over or cancelled."
},
"dependsOn": {
"type": [
"integer",
"null"
]
},
"rule": {
"type": "string"
},
"checkedAt": {
"type": "string"
}
}
},
"needsAttention": {
"type": "array",
"description": "Lines that need someone: a payment record to be checked first, then the guest's own, then the desk's, then what could not be verified, then what is waiting; within each, the earliest actBy first. Once the trip is over or cancelled, only money that still needs someone is listed (a payment record to check, a deposit not returned).",
"items": {
"type": "object",
"properties": {
"what": {
"type": "string",
"enum": [
"stay",
"parking",
"rental",
"charter",
"moorage",
"service",
"waivers",
"permits",
"payment",
"deposit",
"group"
]
},
"title": {
"type": "string"
},
"business": {
"type": [
"string",
"null"
],
"description": "The business as a guest knows it."
},
"state": {
"type": "string",
"enum": [
"ready",
"yours",
"waiting",
"unknown",
"failed",
"cancelled"
],
"description": "ready: nothing more is needed. yours: the guest has something to do. waiting: someone else does (waitingOn). unknown: the record that would say is missing — never treat it as ready. failed: the desk has to fix it. cancelled: no longer part of the trip. A booked and confirmed line whose order's payment record does not add up is waiting (on the desk), not ready."
},
"status": {
"type": "string"
},
"detail": {
"type": "string",
"description": "What to tell the guest, in words."
},
"waitingOn": {
"type": "string",
"enum": [
"guest",
"organiser",
"business",
"skipper",
"permit_office",
"desk",
"nobody"
]
},
"blocksTheTrip": {
"type": "boolean"
},
"actBy": {
"type": [
"string",
"null"
],
"description": "The date to act by. For a camping permit not yet applied for, two weeks before it is needed. For a payment record to check, today. null when nothing is left to do, and on a booked line that is only waiting on the payment check (the payment item carries the date)."
},
"neededBy": {
"type": [
"string",
"null"
],
"description": "The day the thing this line gates begins."
},
"urgency": {
"type": [
"string",
"null"
],
"enum": [
"now",
"overdue",
"this_week",
"later",
null
],
"description": "now: money that does not add up or has not come back — the guest should contact the desk today. Otherwise from actBy and the day in Bamfield at checkedAt; overdue: the date has passed."
},
"counts": {
"type": [
"object",
"null"
],
"properties": {
"done": {
"type": "integer"
},
"total": {
"type": "integer"
}
},
"description": "For waivers and permits: how many are done of how many are needed."
},
"recordLastChangedAt": {
"type": [
"string",
"null"
],
"description": "When the record this line was read from last changed. null when there is no record behind the line at all (for example, boats booked with nobody listed to paddle them)."
}
}
}
},
"booked": {
"type": "array",
"items": {
"type": "object",
"properties": {
"what": {
"type": "string",
"enum": [
"stay",
"parking",
"rental",
"charter",
"moorage",
"service",
"waivers",
"permits",
"payment",
"deposit",
"group"
]
},
"title": {
"type": "string"
},
"business": {
"type": [
"string",
"null"
],
"description": "The business as a guest knows it."
},
"state": {
"type": "string",
"enum": [
"ready",
"yours",
"waiting",
"unknown",
"failed",
"cancelled"
],
"description": "ready: nothing more is needed. yours: the guest has something to do. waiting: someone else does (waitingOn). unknown: the record that would say is missing — never treat it as ready. failed: the desk has to fix it. cancelled: no longer part of the trip. A booked and confirmed line whose order's payment record does not add up is waiting (on the desk), not ready."
},
"status": {
"type": "string"
},
"detail": {
"type": "string",
"description": "What to tell the guest, in words."
},
"waitingOn": {
"type": "string",
"enum": [
"guest",
"organiser",
"business",
"skipper",
"permit_office",
"desk",
"nobody"
]
},
"blocksTheTrip": {
"type": "boolean"
},
"actBy": {
"type": [
"string",
"null"
],
"description": "The date to act by. For a camping permit not yet applied for, two weeks before it is needed. For a payment record to check, today. null when nothing is left to do, and on a booked line that is only waiting on the payment check (the payment item carries the date)."
},
"neededBy": {
"type": [
"string",
"null"
],
"description": "The day the thing this line gates begins."
},
"urgency": {
"type": [
"string",
"null"
],
"enum": [
"now",
"overdue",
"this_week",
"later",
null
],
"description": "now: money that does not add up or has not come back — the guest should contact the desk today. Otherwise from actBy and the day in Bamfield at checkedAt; overdue: the date has passed."
},
"counts": {
"type": [
"object",
"null"
],
"properties": {
"done": {
"type": "integer"
},
"total": {
"type": "integer"
}
},
"description": "For waivers and permits: how many are done of how many are needed."
},
"recordLastChangedAt": {
"type": [
"string",
"null"
],
"description": "When the record this line was read from last changed. null when there is no record behind the line at all (for example, boats booked with nobody listed to paddle them)."
},
"startDate": {
"type": [
"string",
"null"
],
"description": "YYYY-MM-DD, or null."
},
"endDate": {
"type": [
"string",
"null"
],
"description": "YYYY-MM-DD, or null."
},
"booked": {
"type": "string",
"enum": [
"yes",
"no",
"unknown",
"not_applicable"
]
},
"paid": {
"type": "string",
"enum": [
"yes",
"no",
"unknown",
"not_applicable"
],
"description": "yes only when the order's payment record adds up. unknown when it does not. not_applicable on a cancelled line: what was paid for it is in the refunds."
},
"confirmedByTheBusiness": {
"type": "string",
"enum": [
"yes",
"not_yet",
"unknown",
"not_applicable"
],
"description": "not_yet means the business has not answered yet. It is not a refusal."
},
"amount": {
"type": [
"object",
"null"
],
"description": "What this line came to. null when the payment record does not add up, or the order is from before lines were itemised.",
"properties": {
"priceCents": {
"type": "integer",
"description": "Canadian cents."
},
"discountCents": {
"type": "integer",
"description": "Canadian cents."
},
"feesCents": {
"type": "integer",
"description": "Fees that are part of the cost, such as cleaning. Never the damage deposit."
},
"taxes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"label": {
"type": "string"
},
"amountCents": {
"type": "integer",
"description": "Canadian cents."
}
}
}
},
"taxCents": {
"type": "integer",
"description": "Canadian cents."
},
"totalCents": {
"type": "integer",
"description": "price − discount + fees + tax. The damage deposit is not in it."
},
"suppliedBy": {
"type": [
"string",
"null"
]
}
}
}
}
}
},
"money": {
"type": "object",
"description": "Read from the order's own payment record. Always present on this link.",
"properties": {
"state": {
"type": "string",
"enum": [
"reconciled",
"not_reconciled"
],
"description": "not_reconciled: what was received cannot be matched to what the order came to. No balance is stated, the trip is not ready, and the guest should not pay again on the strength of this summary."
},
"headline": {
"type": "string"
},
"detail": {
"type": "string"
},
"currency": {
"type": "string",
"enum": [
"CAD"
]
},
"bookingsTotalCents": {
"type": [
"integer",
"null"
],
"description": "What the bookings came to: the sum of booked[].amount.totalCents plus minimumChargeCents. The damage deposit is not in it. For a cancelled trip, what it came to before it was cancelled. null when not reconciled."
},
"minimumChargeCents": {
"type": "integer",
"description": "Added to reach the card network's smallest charge, when the order came to less. Usually 0."
},
"deposit": {
"type": "object",
"description": "The refundable damage deposit, held separately from the cost. When reconciled: paymentsReceivedCents = bookingsTotalCents + deposit.amountCents.",
"properties": {
"state": {
"type": "string",
"enum": [
"none",
"held",
"refund_processing",
"partly_returned",
"returned",
"unknown"
],
"description": "none: the order has no deposit. held: taken and not sent back. refund_processing: sent back, not finished. partly_returned: part was sent back and the rest was not. returned: all of it was sent back. unknown: the payment record does not add up and the order carries a deposit (or nothing says whether it does), so where it stands is not claimed."
},
"amountCents": {
"type": [
"integer",
"null"
],
"description": "The deposit on the order. null when state is unknown."
},
"returnedCents": {
"type": [
"integer",
"null"
],
"description": "Canadian cents. null means not known — never read null as 0."
},
"onItsWayBackCents": {
"type": [
"integer",
"null"
],
"description": "Canadian cents. null means not known — never read null as 0."
},
"notReturnedCents": {
"type": [
"integer",
"null"
],
"description": "Once a return has started: what was left out of it. The reason is not recorded: do not tell the guest it is refundable, and do not tell them it was kept — they contact the desk. null while the deposit is simply held (state held) — a held deposit is not money that has failed to come back — and when state is unknown."
},
"sentBackAt": {
"type": [
"string",
"null"
],
"description": "When the latest deposit return was sent. The bank can take 5 to 10 business days from then."
},
"sentBackWithinHours": {
"type": "integer",
"description": "Experience Bamfield sends the deposit back within this many hours of the return or check-out. The guest's bank can take 5 to 10 business days after that to show it."
},
"detail": {
"type": [
"string",
"null"
]
}
}
},
"paymentsReceivedCents": {
"type": [
"integer",
"null"
],
"description": "Every payment received. Refunds are not taken off. null when the order is marked paid and the amount charged is not on the record."
},
"refundsCompletedCents": {
"type": "integer",
"description": "Canadian cents."
},
"refundsPendingCents": {
"type": "integer",
"description": "Refunds sent and not finished."
},
"netRetainedCents": {
"type": [
"integer",
"null"
],
"description": "Net payments after completed refunds: paymentsReceivedCents − refundsCompletedCents. A refund that is still on its way (refundsPendingCents) has NOT been taken off yet — see netAfterPendingRefundsCents."
},
"netAfterPendingRefundsCents": {
"type": [
"integer",
"null"
],
"description": "netRetainedCents − refundsPendingCents: what will remain once the refunds on their way finish."
},
"events": {
"type": "array",
"description": "Each payment and refund with its date, oldest first.",
"items": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"payment",
"payment_registered",
"refund"
]
},
"at": {
"type": [
"string",
"null"
],
"description": "An ISO 8601 time in UTC (ending in Z), or null."
},
"amountCents": {
"type": [
"integer",
"null"
],
"description": "Canadian cents. null means not known — never read null as 0."
},
"status": {
"type": "string",
"enum": [
"completed",
"processing",
"failed"
]
},
"isDepositReturn": {
"type": "boolean"
}
}
}
},
"owingCents": {
"type": [
"integer",
"null"
],
"description": "What the guest still owes. null when not reconciled."
},
"notReconciledReason": {
"type": [
"string",
"null"
],
"enum": [
"not_paid",
"charge_missing",
"total_missing",
"line_total_missing",
"lines_do_not_add_up",
"charge_differs_from_total",
"refund_on_unitemised_order",
"nothing_recorded",
null
],
"description": "Which check failed, when state is not_reconciled; null when reconciled. For the desk and for testing: the guest is told the same thing whichever it is — do not pay again, contact the desk."
}
}
},
"finishes": {
"type": "object",
"description": "Three separate things: ready to travel, the trip being over, and the money being settled.",
"properties": {
"readyToTravel": {
"type": "boolean"
},
"tripFinished": {
"type": "boolean"
},
"moneySettled": {
"type": "string",
"enum": [
"settled",
"owing",
"refund_pending",
"deposit_held",
"deposit_part_not_returned",
"not_reconciled",
"not_shown"
],
"description": "deposit_held: taken and due back after the trip. deposit_part_not_returned: part went back and the rest did not, with no reason recorded — the guest contacts the desk."
}
}
},
"notIncluded": {
"type": "array",
"items": {
"type": "string"
}
},
"thisLink": {
"type": "object",
"properties": {
"readsOnly": {
"type": "boolean"
},
"cannot": {
"type": "string"
},
"expiresAt": {
"type": "string",
"description": "An ISO 8601 time in UTC. 30 days after the end of the trip's last day in Bamfield, and never sooner than 30 days after the link was made."
},
"expiryRule": {
"type": "string"
},
"timesRead": {
"type": [
"integer",
"null"
],
"description": "How many times this link has been read, this read included. Counted in one step in the database, so reads arriving together are all counted. Reads through the MCP tool get_trip_summary are counted here too, and count toward the same 30-a-minute limit."
},
"lastReadAt": {
"type": [
"string",
"null"
],
"description": "When it was read before this."
}
}
},
"contact": {
"type": "object",
"properties": {
"deskPhone": {
"type": "string"
},
"for": {
"type": "string"
}
}
}
},
"required": [
"about",
"freshness",
"trip",
"ready",
"needsAttention",
"booked",
"money",
"finishes",
"notIncluded",
"thisLink",
"contact"
]
}Community
Nachweis