{
  "$schema": "https://plus.solberg.is/schema/manifest.json",
  "site": "airbnb.com",
  "title": "Airbnb (Hosting)",
  "description": "Host schedule and money on airbnb.com: reservations table, per-listing earnings, booking stats, payout rows.",
  "version": "0.1.0",
  "author": "jokull <https://github.com/jokull>",
  "license": "MIT",
  "tags": [
    "travel",
    "hosting",
    "bookings",
    "payouts"
  ],
  "identities": [
    "owner",
    "cohost"
  ],
  "auth": [
    {
      "id": "browser-session",
      "type": "session",
      "description": "agent-browser session (--session <key> --restore); human logs in once in a headed window. Fetch ops run inside the page context via eval because Airbnb's SCA airlock state is not reproducible from exported cookies.",
      "default": true,
      "ttl": "24h",
      "probe": "IsHostQuery (viewer.user present)",
      "credentials": [
        "AB_AIRBNB_EMAIL",
        "AB_AIRBNB_PASSWORD"
      ],
      "loginUrl": "https://www.airbnb.com/login?redirect_url=%2Fhosting",
      "successUrl": "https://www.airbnb.com/hosting",
      "flow": "handoff"
    },
    {
      "id": "form",
      "type": "form",
      "refuse": "Automated form login risks Airbnb fraud flags; use the headed browser handoff instead.",
      "flow": "handoff"
    }
  ],
  "ops": [
    {
      "id": "reservations",
      "kind": "dom",
      "title": "Reservations table",
      "description": "Upcoming/Completed/Canceled reservations with guest, party, check-in/out, confirmation code and total payout. SCA-free.",
      "tags": [
        "bookings",
        "schedule"
      ],
      "risk": "read-only",
      "auth": {
        "identity": "owner|cohost",
        "tier": "sca-free"
      },
      "input": {
        "type": "object",
        "properties": {
          "tab": {
            "type": "string",
            "enum": [
              "Upcoming",
              "Completed",
              "Canceled"
            ]
          }
        }
      },
      "output": {
        "$ref": "#/schemas/ReservationRow"
      },
      "canary": {
        "urlPattern": "**/hosting/reservations"
      },
      "lastVerified": "2026-08-14"
    },
    {
      "id": "listing-earnings",
      "kind": "graphql",
      "title": "Per-listing earnings",
      "description": "FetchSegmentedHostTransactionStats — gross earnings, adjustments, tax withholding, payout total per listing. SCA-free.",
      "tags": [
        "earnings",
        "payouts"
      ],
      "risk": "read-only",
      "auth": {
        "identity": "owner|cohost",
        "tier": "sca-free"
      },
      "input": {
        "type": "object",
        "properties": {
          "months": {
            "type": "integer",
            "minimum": 1,
            "maximum": 24,
            "default": 12
          }
        }
      },
      "output": {
        "$ref": "#/schemas/ListingEarnings"
      },
      "lastVerified": "2026-08-14"
    },
    {
      "id": "booking-stats",
      "kind": "graphql",
      "title": "Booking stats",
      "description": "HostBookingStats — nights/occupancy aggregated and by listing for a window. SCA-free.",
      "tags": [
        "bookings",
        "occupancy"
      ],
      "risk": "read-only",
      "auth": {
        "identity": "owner|cohost",
        "tier": "sca-free"
      },
      "input": {
        "type": "object",
        "properties": {
          "months": {
            "type": "integer",
            "minimum": 1,
            "maximum": 24,
            "default": 12
          }
        }
      },
      "output": {
        "$ref": "#/schemas/BookingStat"
      },
      "lastVerified": "2026-08-14"
    },
    {
      "id": "payouts",
      "kind": "graphql",
      "title": "Payout transactions",
      "description": "FetchPayoutTransactions — row-level payouts with guest names and stay details. Gated by Airbnb's payments SCA airlock (OTP + security question); a human must complete it in the browser session once.",
      "tags": [
        "payouts"
      ],
      "risk": "read-only",
      "auth": {
        "identity": "owner",
        "tier": "sca-gated"
      },
      "requires": "sca-airlock",
      "input": {
        "type": "object",
        "properties": {
          "months": {
            "type": "integer",
            "minimum": 1,
            "maximum": 24,
            "default": 12
          }
        }
      },
      "output": {
        "$ref": "#/schemas/PayoutTxn"
      },
      "lastVerified": null
    }
  ],
  "schemas": {
    "ReservationRow": {
      "type": "object",
      "properties": {
        "status": {
          "type": [
            "string",
            "null"
          ]
        },
        "guest": {
          "type": [
            "string",
            "null"
          ]
        },
        "party": {
          "type": [
            "string",
            "null"
          ]
        },
        "phone": {
          "type": [
            "string",
            "null"
          ]
        },
        "checkIn": {
          "type": [
            "string",
            "null"
          ]
        },
        "checkOut": {
          "type": [
            "string",
            "null"
          ]
        },
        "bookedAt": {
          "type": [
            "string",
            "null"
          ]
        },
        "listing": {
          "type": [
            "string",
            "null"
          ]
        },
        "confirmationCode": {
          "type": [
            "string",
            "null"
          ]
        },
        "payout": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "ListingEarnings": {
      "type": "object",
      "properties": {
        "listingId": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "grossEarnings": {
          "type": [
            "string",
            "null"
          ]
        },
        "grossEarningsMicros": {
          "type": [
            "string",
            "null"
          ]
        },
        "taxWithholding": {
          "type": [
            "string",
            "null"
          ]
        },
        "adjustments": {
          "type": [
            "string",
            "null"
          ]
        },
        "payoutTotal": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "BookingStat": {
      "type": "object",
      "properties": {
        "label": {
          "type": "string"
        },
        "value": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "PayoutTxn": {
      "type": "object",
      "properties": {
        "confirmationCode": {
          "type": "string"
        },
        "guest": {
          "type": [
            "string",
            "null"
          ]
        },
        "party": {
          "type": [
            "string",
            "null"
          ]
        },
        "checkIn": {
          "type": [
            "string",
            "null"
          ]
        },
        "checkOut": {
          "type": [
            "string",
            "null"
          ]
        },
        "listing": {
          "type": [
            "string",
            "null"
          ]
        },
        "status": {
          "type": [
            "string",
            "null"
          ]
        },
        "payout": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    }
  },
  "origins": [
    "https://www.airbnb.com"
  ]
}
