bymundi API

List quotes

GET/v1/quotes

Lists the agency's quotes on live trips, most recently changed first. Filter by tripId, status, updatedSince, acceptedSince and up to 5 metadata[key]=value pairs, which must all match. For an 'accepted quote' polling trigger (n8n, Zapier), pass status=accepted and the last acceptedAt you saw as acceptedSince: a decision does not change updatedAt. Follow nextCursor until it is null.

Permissions: quotes:read · Kind: read · Cost: 1 unit · MCP tool list_quotes

Path parameters

None.

Query parameters

Field Type Required Description
tripId uuid
limit integer 1–100, default 25
cursor string max 500 chars
sort "updatedAt" | "-updatedAt" | "createdAt" | "-createdAt" default "-updatedAt"
status "draft" | "sent" | "accepted" | "rejected" | "expired" | "superseded"
updatedSince datetime
acceptedSince datetime Only quotes accepted at or after this instant — the 'quote accepted' polling trigger.
metadata object

Response 200

Field Type Required Description
object "list" yes
data object[] yes
data[].object "quote" yes
data[].id uuid yes
data[].tripId uuid yes
data[].code string yes
data[].name string yes
data[].mode "package" | "per_item" yes
data[].status "draft" | "sent" | "accepted" | "rejected" | "expired" | "superseded" yes
data[].travelers integer yes
data[].marginPct number yes
data[].finalPriceOverride string | null yes
data[].validUntil string | null yes
data[].ctaUrl string | null yes
data[].templateId string | null yes
data[].packages object[] yes
data[].packages[].id string yes
data[].packages[].name string yes
data[].lines object | object | object[] yes
data[].totals object yes
data[].totals.currency "EUR" yes
data[].totals.net string yes
data[].totals.marginAmount string yes
data[].totals.total string yes
data[].totals.finalPrice string yes
data[].totals.perPax string yes
data[].totals.finalMargin string yes
data[].totals.packages object[] yes
data[].textOverrides object yes
data[].imageOverrides object yes
data[].sentAt string | null yes
data[].modifiedSinceSent boolean yes
data[].acceptedAt string | null yes
data[].acceptedVia "prospect_link" | "agent" | null yes
data[].acceptedPackageId string | null yes
data[].acceptedLineIds string[] yes
data[].acceptance object | null yes What the customer typed when accepting on the quote page — personal data: present only for a key holding travelers:read, only on quote reads (a write's response carries null; read the quote), and every such read is audited.
data[].acceptance.name string | null yes
data[].acceptance.email string | null yes
data[].acceptance.phone string | null yes
data[].acceptance.message string | null yes
data[].engagement object yes
data[].engagement.views integer yes
data[].engagement.uniqueSessions integer yes
data[].engagement.activeSeconds integer yes
data[].engagement.ctaClicks integer yes
data[].engagement.maxScrollPct number yes
data[].engagement.sectionsSeen integer yes
data[].engagement.interactions integer yes
data[].engagement.lastSeenAt string | null yes
data[].engagement.lastCtaAt string | null yes
data[].metadata object yes
data[].appUrl string | null yes
data[].publicUrl string | null yes
data[].createdAt string yes
data[].updatedAt string yes
nextCursor string | null yes

Errors

Errors are problem details. Besides the refusals described above, any call like this one can return: