v1

latestOpenAPI 3.0.02026-07-24161215397.4 KB
Checkout

Execute checkout

Execute a checkout for memberships, fees, or bookings. Provide either memberships/fees or a booking, but not both. This endpoint creates billable items and may trigger invoice generation, payment charging, email notifications, and legal document signing depending on the provided options and the organization's billing flow.

Memberships/Fees flow: Creates memberships and/or fees for the member. The checkout options control whether an invoice is generated immediately, whether the member is charged, and whether a credit card is required. If shouldRequestApproval is true, the order is created but payment is deferred and an approval request email is sent instead of the standard checkout confirmation.

Booking flow: Creates a booking for the specified resource and time slot. If the booking produces fees, an invoice is generated and processed automatically. This flow simulates the booking experience from the members portal or public calendar.

Required scopes: flex.billing.checkout.create

post/api/v2/organizations/{orgSlug}/checkout

Path parameters

orgSlugstring required

organization slug

Query parameters

enforceBookingPolicyboolean
Example:true

Whether to enforce the booking policy and member validation rules when the request contains a booking. If true, member validations and booking-policy-driven tentative/approval flagging are applied to the booking checkout, and reflected in the checkout summary preview (note: policy-violation rejection is only applied at checkout, not in the summary preview). If false or not passed at all, the request behaves as it does today. Has no effect on memberships/fees checkouts.

Request body

memberstring required

The _id of the member who is purchasing. Used to resolve the member's billing context, location, and company.

locationstring

Overrides the location for the order. If omitted, resolved from the member's assigned location.

discountCodestring

A plan-level discount code. Applies the discount to all eligible plans in the order. Only one discount code is supported per checkout.

documentsstring[]

Legal document _ids to sign during checkout. Must be provided together with signatureMeta for document signing to occur.

signatureMetastring

Base64-encoded signature data used when signing the legal documents specified in documents. Both fields must be provided together for document signing to occur.

shouldRequestApprovalboolean

When true, the checkout creates the order but does not process payment. An approval request email is sent instead of the standard checkout confirmation. Payment validation is skipped in this mode.

Example request

{
  "member": "507f1f77bcf86cd799439011",
  "location": "507f1f77bcf86cd799439012",
  "memberships": [
    {
      "plan": "507f1f77bcf86cd799439011",
      "startDate": "2026-03-01",
      "location": "507f1f77bcf86cd799439012",
      "name": "Hot Desk Monthly",
      "price": 200,
      "addOns": [
        "507f1f77bcf86cd799439013"
      ]
    }
  ],
  "fees": [
    {
      "plan": "507f1f77bcf86cd799439011",
      "date": "2026-03-01",
      "location": "507f1f77bcf86cd799439012"
    }
  ],
  "booking": {
    "start": "2026-03-01T09:00:00.000Z",
    "end": "2026-03-01T10:00:00.000Z",
    "resource": "507f1f77bcf86cd799439011",
    "member": "507f1f77bcf86cd799439012",
    "company": "507f1f77bcf86cd799439013",
    "price": 50,
    "extras": [
      {
        "_id": "507f1f77bcf86cd799439011",
        "count": 2
      }
    ],
    "description": "Team standup meeting",
    "title": "Daily Standup"
  },
  "discountCode": "DISCOUNT10",
  "documents": [
    "507f1f77bcf86cd799439013"
  ],
  "options": {
    "shouldSendInvoice": true,
    "shouldInvoiceImmediately": true
  },
  "paymentProvider": {
    "cardType": "visa",
    "setupIntent": "seti_xxx",
    "paymentIntent": "pi_xxx"
  },
  "notifications": {
    "member": true,
    "admin": true
  },
  "signatureMeta": "base64-signature-data"
}

Response

Example response

{
  "memberships": [
    {
      "_id": "603dfbc260f4054084125d30",
      "name": "Private Office",
      "isPersonal": false,
      "status": "approved",
      "calculatedStatus": "active",
      "type": "month-to-month",
      "location": "603dfbc260f4054084125d33",
      "plan": "603dfbc260f4054084125d33",
      "company": "603dfbc260f4054084125d33",
      "member": "603dfbc260f4054084125d33",
      "startDate": "2026-03-01T00:00:00.000Z",
      "endDate": "2027-03-01T00:00:00.000Z",
      "intervalLength": "month",
      "intervalCount": 6,
      "isLocked": false,
      "price": 200,
      "deposit": 100,
      "discount": "603dfbc260f4054084125d33",
      "discountAmount": 5,
      "calculatedDiscountAmount": 5,
      "discountedPrice": 195,
      "contract": "603dfbc260f4054084125d33",
      "source": "admin",
      "createdAt": "2026-03-01T08:00:00.000Z",
      "createdBy": "6080186f490fcf6e0537ec27",
      "modifiedAt": "2026-03-01T08:05:00.000Z",
      "modifiedBy": "6080186f490fcf6e0537ec54"
    }
  ],
  "fees": [
    {
      "_id": "603dfbc260f4054084125d30",
      "name": "Day Pass",
      "price": 20,
      "quantity": 2,
      "company": "603dfbc260f4054084125d30",
      "member": "603dfbc260f4054084125d30",
      "location": "603dfbc260f4054084125d30",
      "plan": "603dfbc260f4054084125d30",
      "planType": "plan",
      "issueDate": "2026-03-01T00:00:00.000Z",
      "status": "approved",
      "discount": "603dfbc260f4054084125d33",
      "discountAmount": 5,
      "calculatedDiscountAmount": 5,
      "discountedPrice": 15,
      "isRefundable": true,
      "isPersonal": true,
      "shouldBillInAdvance": false,
      "shouldUseCoins": false,
      "payment": {
        "_id": "603dfbc260f4054084125d30",
        "status": "paid",
        "creditNote": "603dfbc260f4054084125d30"
      },
      "source": "admin",
      "createdAt": "2026-03-01T08:00:00.000Z",
      "createdBy": "6080186f490fcf6e0537ec27",
      "modifiedAt": "2026-03-01T08:05:00.000Z",
      "modifiedBy": "6080186f490fcf6e0537ec54"
    }
  ],
  "booking": {
    "properties": {
      "customProperty1": "value1",
      "customProperty2": "value2"
    },
    "_id": "603dfbc260f4054084125d39",
    "timezone": "Europe/London",
    "start": "2024-10-31T13:00:00.000Z",
    "end": "2024-10-31T13:30:00.000Z",
    "recurrence": {
      "rrule": "FREQ=WEEKLY;BYDAY=MO,WE,FR;COUNT=10",
      "exdates": [
        "2024-10-31T13:00:00.000Z"
      ]
    },
    "seriesStart": "2024-10-31T13:00:00.000Z",
    "seriesEnd": "2024-10-31T13:30:00.000Z",
    "location": "603dfbc260f4054084125d39",
    "company": "603dfbc260f4054084125d39",
    "member": "603dfbc260f4054084125d39",
    "resource": "603dfbc260f4054084125d39",
    "fees": [
      {
        "date": "2017-10-31T00:00:00.000Z",
        "extraFees": [],
        "credits": [
          {
            "count": 2,
            "credit": "594932ea518f3f150d306c89"
          }
        ],
        "customPrice": 100
      }
    ],
    "reference": "81LCV6S",
    "title": "Meeting with John",
    "rate": "603dfbc260f4054084125d39",
    "description": "Meeting with John at the office.",
    "isTentative": true,
    "extras": [
      {
        "_id": "603dfbc260f4054084125d39",
        "count": 2
      }
    ],
    "visitors": [
      "603dfbc260f4054084125d36",
      "603dfbc260f4054084125d37"
    ],
    "members": [
      "603dfbc260f4054084125d36",
      "603dfbc260f4054084125d37"
    ],
    "serviceSlots": {
      "before": 10,
      "after": 10
    },
    "source": "admin",
    "createdAt": "2022-02-07T10:03:33.169Z",
    "createdBy": "5bbb155174321f100085eac1",
    "modifiedAt": "2022-02-08T10:03:33.169Z",
    "modifiedBy": "5bbb155174321f100085eac1"
  },
  "invoice": {
    "properties": {
      "customProperty1": "value1",
      "customProperty2": "value2"
    },
    "_id": "6780f1ba1a2b3c4d5e6f7a8b",
    "number": "INV-123",
    "date": "2025-01-01T00:00:00.000Z",
    "dueDate": "2025-01-01T00:00:00.000Z",
    "company": "6780f1ba3c4d5e6f7a8b9c0d",
    "member": "6780f1ba2b3c4d5e6f7a8b9c",
    "location": "6780f1ba4d5e6f7a8b9c0d1e",
    "reference": "Payment for the membership fee.",
    "allocations": [],
    "lines": [
      {
        "description": "Membership fee",
        "quantity": 2,
        "account": "6780f1ba5e6f7a8b9c0d1e2f",
        "plan": "6780f1ba6f7a8b9c0d1e2f3a",
        "fee": "6780f1ba7a8b9c0d1e2f3a4b",
        "membership": "6780f1ba9c0d1e2f3a4b5c6d",
        "location": "6780f1ba4d5e6f7a8b9c0d1e",
        "taxRate": "6780f1ba1e2f3a4b5c6d7e8f",
        "taxPercent": 25,
        "taxAmount": 25.7,
        "discountAmount": 10,
        "price": 60,
        "unitPrice": 30,
        "unitDiscount": 5,
        "subTotal": 60,
        "baseUnitPrice": 70,
        "baseTotal": 60,
        "total": 60,
        "startDate": "2025-01-01T00:00:00.000Z",
        "endDate": "2025-01-01T00:00:00.000Z",
        "convertedAmounts": {
          "price": 60,
          "discountAmount": 10,
          "baseUnitPrice": 70,
          "subTotal": 60,
          "unitPrice": 30,
          "taxAmount": 12,
          "taxPercent": 15,
          "baseTotal": 60,
          "total": 60
        },
        "addons": [
          {
            "name": "Addon 1",
            "unitPrice": 10,
            "description": "Addon description"
          },
          {
            "name": "Addon 2",
            "unitPrice": 20,
            "description": "Addon description"
          }
        ],
        "fees": [
          "6780f1ba7a8b9c0d1e2f3a4b",
          "6780f1ba8b9c0d1e2f3a4b5c"
        ],
        "memberships": [
          "6780f1ba9c0d1e2f3a4b5c6d"
        ]
      }
    ],
    "processingFeeLine": {
      "taxPercent": 12,
      "taxAmount": 15,
      "price": 60,
      "discountAmount": 10,
      "unitPrice": 30,
      "baseUnitPrice": 70,
      "subTotal": 60,
      "baseTotal": 60,
      "total": 60,
      "convertedAmounts": {
        "taxPercent": 12,
        "taxAmount": 15,
        "price": 60,
        "discountAmount": 10,
        "unitPrice": 30,
        "baseUnitPrice": 70,
        "subTotal": 60,
        "baseTotal": 60,
        "total": 60
      },
      "description": "Membership fee",
      "account": "6780f1ba5e6f7a8b9c0d1e2f",
      "plan": "6780f1ba6f7a8b9c0d1e2f3a",
      "fee": "6780f1ba7a8b9c0d1e2f3a4b",
      "location": "6780f1ba4d5e6f7a8b9c0d1e",
      "membership": "6780f1ba9c0d1e2f3a4b5c6d",
      "taxRate": "6780f1ba1e2f3a4b5c6d7e8f",
      "discount": 10,
      "unitDiscount": 5,
      "quantity": 2,
      "startDate": "2023-01-01T00:00:00.000Z",
      "endDate": "2023-01-01T00:00:00.000Z",
      "addOns": {
        "name": "Basic addon",
        "unitPrice": 10,
        "description": "Addon description"
      },
      "fees": [
        "6780f1ba7a8b9c0d1e2f3a4b",
        "6780f1ba8b9c0d1e2f3a4b5c"
      ],
      "memberships": [
        "6780f1ba9c0d1e2f3a4b5c6d",
        "6780f1ba0d1e2f3a4b5c6d7e"
      ]
    },
    "taxAmounts": [
      {
        "percent": 25,
        "total": 25.7,
        "taxRate": "6780f1ba1e2f3a4b5c6d7e8f"
      }
    ],
    "subTotal": 60,
    "amount": 60,
    "payableAmount": 60,
    "accounting": {
      "provider": "xero",
      "providerId": "123456789",
      "externalOrgId": "987654321",
      "deepLink": "https://quickbooks.com/123456789",
      "lastSync": "2025-01-01T00:00:00.000Z",
      "error": "An error occurred while syncing with Xero"
    },
    "baseTotal": 60,
    "total": 80,
    "paidAmount": 40,
    "pendingAmount": 40,
    "allocatedAmount": 40,
    "currency": "USD",
    "currencyConversionRate": 0.98567,
    "isPaid": true,
    "chargeMethod": "Credit Card",
    "createdAt": "2025-01-01T00:00:00.000Z",
    "createdBy": "6780f1ba4b5c6d7e8f9a0b1c",
    "modifiedAt": "2025-01-01T00:00:00.000Z",
    "modifiedBy": "6780f1ba4b5c6d7e8f9a0b1c"
  }
}