Certification Integration Checklist


Plum Guide API - Integration Certification Plan

Overview

This certification plan outlines the requirements for partners integrating with the Plum Guide API v2. The API supports two integration paths depending on your pricing and availability management approach.

Integration PathDescription
LoS MatrixCombined pricing/availability via CSV matrix upload
StandardGranular control via individual pricing & availability endpoints

Key Concept: If you use the Length of Stay (LoS) Matrix endpoint, you do NOT need to use the individual pricing and availability endpoints. The matrix handles both comprehensively. Choose one path based on your system's capabilities.

Integration Paths

Path A: LoS Matrix Integration

The LoS Matrix provides a single endpoint to manage both pricing and availability through a CSV-based matrix upload. This is the recommended approach if your system can generate pricing matrices.

What it replaces:

  • Custom nightly pricing endpoints
  • Seasonal pricing endpoints
  • Discount endpoints
  • Availability restrictions

What you still need:

  • Authentication
  • Listings management
  • Bookings management
  • Webhooks (recommended)

Path B: Standard Integration

Use individual endpoints for granular control over pricing and availability. This path requires implementing multiple endpoints but offers more flexibility.

Required endpoints:

  • Authentication
  • Listings management
  • Availability management (restrictions + blocked dates)
  • Custom nightly pricing
  • Seasonal pricing
  • Discounts
  • Fees (cleaning fee if applicable)
  • Bookings management
  • Webhooks (recommended)

Certification Requirements

Phase 1: Foundation (Required for ALL integrations)

1.1 Authentication

Test CaseEndpointExpected Result
Obtain access tokenPOST /authenticateReceive JWT token with expiry
Use valid tokenAny authenticated endpoint200 OK response
Handle expired tokenAny authenticated endpoint403, then re-authenticate
Handle invalid credentialsPOST /authenticate400 Bad Request

Acceptance Criteria:

  • Successfully authenticate with valid credentials

  • Store and reuse the token until expiry

  • Implement token refresh before expiry

  • Handle authentication errors gracefully

1.2 Listings Management

Test CaseEndpointExpected Result
Create a listingPOST /v2/listing201 Created with listingId
Retrieve listing detailsGET /v2/listing/{listingId}200 OK with listing data
Update listingPATCH /v2/listing/{listingId}200 OK
Retrieve all listingsGET /v2/listings200 OK with paginated results

Acceptance Criteria:

  • Create a listing with required fields (address, coordinates, currency)
  • Map external property IDs (Integration ID, Airbnb ID, PM ID)
  • Handle pagination correctly (limit 1-100, offset)
  • Update listing configuration as needed

1.3 Bookings Management

Test CaseEndpointExpected Result
Get bookings by listingGET /v2/bookings/{listingId}200 OK with bookings
Get booking by codeGET /v2/bookings/{bookingCode}200 OK with booking details
Get all host bookingsGET /v2/bookings200 OK paginated
Get booking activitiesGET /v2/bookings/activities200 OK with activity log
Filter by date rangeGET /v2/bookings?startDate=&endDate=Filtered results
Create test booking (sandbox)POST /testdata/booking201 Created

Booking Statuses to Handle:

  • Requested - Awaiting host approval (Request to Book)
  • Confirmed - Payment processed, booking active (Instant Book or Host Approved the booking)
  • Declined - Host rejected
  • Cancelled - Booking cancelled

Acceptance Criteria:

  • Retrieve and parse all booking fields correctly
  • Handle all booking statuses
  • Extract the guest proxy email for communication
  • Implement pagination for large result sets
  • Create test bookings in the sandbox for testing

1.4 Webhooks Configuration (Recommended)

Test CaseEndpointExpected Result
Create webhook configPOST /v2/webhooks/config201 Created
Get webhook configGET /v2/webhooks/config200 OK
Update webhook configPUT /v2/webhooks/config200 OK
Toggle webhook on/offPATCH /v2/webhooks/config/toggle200 OK
Delete webhook configDELETE /v2/webhooks/config204 No Content

Webhook Events to Handle:

  • Booking Requested
  • Booking Confirmed (Instant Book)
  • Booking Approved
  • Booking Declined
  • Booking Cancelled

Acceptance Criteria:

  • Configure webhook endpoint URL
  • Receive and process webhook payloads
  • Handle webhook delivery retries
  • Implement idempotency for duplicate events
  • Toggle webhooks without losing configuration

Phase 2A: LoS Matrix Integration Path

Complete this phase ONLY if using the LoS Matrix approach

2A.1 LoS Matrix Upload

Test CaseEndpointExpected Result
Upload pricing matrixPOST /v2/listings/{listingId}/pricing/matrix202 Accepted
Upload with breakdownPOST /v2/listings/{listingId}/pricing/matrix/breakdown202 Accepted
Get matrix metadataGET /v2/listings/{listingId}/pricing/matrix200 OK
Delete matrixDELETE /v2/listings/{listingId}/pricing/matrix204 No Content

Matrix Requirements:

  • CSV format with dates and length-of-stay columns
  • Idempotency key required (unique per matrix version)
  • Optional currency code parameter
  • Asynchronous processing (202 response)

Breakdown Matrix (Optional):

  • Includes accommodation, fees, and taxes separately
  • More detailed pricing breakdown for transparency

Acceptance Criteria:

  • Generate a valid CSV matrix format
  • Include all required date ranges
  • Generate unique idempotency keys per upload
  • Handle 202 async response correctly
  • Handle 422 validation errors
  • Verify matrix applied via the GET endpoint
  • Delete and replace the matrix when needed

Phase 2B: Standard Integration Path

Complete this phase ONLY if NOT using the LoS Matrix approach

2B.1 Availability Management

Test CaseEndpointExpected Result
Set availability restrictionsPOST /v2/listings/{listingId}/availability200 OK
Get availabilityGET /v2/listings/{listingId}/availability200 OK
Delete availabilityDELETE /v2/listings/{listingId}/availability204 No Content
Add blocked datesPOST /v2/listings/{listingId}/availability/blockeddates201 Created
Get blocked datesGET /v2/listings/{listingId}/availability/blockeddates200 OK
Delete blocked datesDELETE /v2/listings/{listingId}/availability/blockeddates204 No Content
Bulk delete blocked datesPOST /v2/listings/{listingId}/availability/blockeddates/deletebulk200 OK

Availability Restrictions:

  • minDaysBeforeCheckin - Minimum advance booking days
  • seasonalMinimumNights - Minimum night requirements
  • changeOverDays - Allowed check-in/check-out days

Bulk Operation Limits:

  • Maximum 100 date ranges per request
  • Maximum 730 individual dates per request

Acceptance Criteria:

  • Set seasonal availability restrictions
  • Block specific date ranges
  • Sync blocked dates from the external calendar
  • Handle bulk operations within limits
  • Remove availability when the property is delisted

2B.2 Custom Nightly Pricing

Test CaseEndpointExpected Result
Set custom pricesPOST /v2/listings/{listingId}/pricing/custom200 OK
Get custom pricesGET /v2/listings/{listingId}/pricing/custom200 OK paginated
Delete custom pricesDELETE /v2/listings/{listingId}/pricing/custom204 No Content
Bulk delete pricesPOST /v2/listings/{listingId}/pricing/custom/deletebulk200 OK

Acceptance Criteria:

  • Set nightly prices for specific date ranges
  • Override seasonal pricing with custom rates
  • Handle pagination for large date ranges
  • Bulk delete within limits (100 ranges / 730 dates)

2B.3 Seasonal Pricing

Test CaseEndpointExpected Result
Set seasonal pricingPOST /v2/listings/{listingId}/pricing/seasonal200 OK
Get seasonal pricingGET /v2/listings/{listingId}/pricing/seasonal200 OK paginated
Delete seasonal pricingDELETE /v2/listings/{listingId}/pricing/seasonal204 No Content

Seasonal Pricing Features:

  • Base nightly rate per season
  • Weekend rate differentiation
  • Guest fee configuration

Acceptance Criteria:

  • Define pricing seasons with date ranges
  • Set base rates and weekend rates
  • Configure additional guest fees
  • Handle overlapping seasons correctly

2B.4 Discounts

Test CaseEndpointExpected Result
Create discountPOST /v2/listings/{listingId}/pricing/discount201 Created
Get a discount configGET /v2/listings/{listingId}/pricing/discount200 OK
Delete discountDELETE /v2/listings/{listingId}/pricing/discount204 No Content

Discount Types:

  • Length of stay discounts (weekly, monthly)
  • Early Bird discounts
  • Last Minute discounts

Note: POST overrides any existing discount configuration

Acceptance Criteria:

  • Configure length-of-stay discounts
  • Set early bird / last minute promotions
  • Understand discount override behavior

2B.5 Cleaning Fee

Test CaseEndpointExpected Result
Set cleaning feePOST /v2/listings/{listingId}/pricing/fees/cleaningfee200 OK
Get the cleaning feeGET /v2/listings/{listingId}/pricing/fees/cleaningfee200 OK

Acceptance Criteria:

  • Set the cleaning fee amount
  • Update the cleaning fee when changes

Certification Checklist Summary

Path A: LoS Matrix Integration

  • Phase 1.1 - Authentication
  • Phase 1.2 - Listings Management
  • Phase 1.3 - Bookings Management
  • Phase 1.4 - Webhooks Configuration
  • Phase 2A.1 - LoS Matrix Upload

Path B: Standard Integration

  • Phase 1.1 - Authentication
  • Phase 1.2 - Listings Management
  • Phase 1.3 - Bookings Management
  • Phase 1.4 - Webhooks Configuration
  • Phase 2B.1 - Availability Management
  • Phase 2B.2 - Custom Nightly Pricing
  • Phase 2B.3 - Seasonal Pricing
  • Phase 2B.4 - Discounts
  • Phase 2B.5 - Cleaning Fee

Testing Environment

EnvironmentBase URL
Sandboxhttps://sandbox.api.plumguide.com
Productionhttps://api.plumguide.com

Sandbox Testing

  1. Use sandbox credentials for all testing
  2. Create test bookings via POST /testdata/booking
  3. Test all endpoints before production deployment
  4. Verify webhook delivery to your test endpoint

Error Handling Requirements

All integrations must handle these response codes:

Status CodeMeaningRequired Action
200 OKSuccessProcess response
201 CreatedResource createdStore returned ID
202 AcceptedAsync processingPoll or await webhook
204 No ContentDeletion successfulConfirm removal
400 Bad RequestValidation errorParse error details, fix request
401 UnauthorizedInvalid/expired tokenRe-authenticate
404 Not FoundResource missingHandle gracefully
422 UnprocessableInvalid dataReview payload format

Pagination Standards

For endpoints returning lists:

  • Default limit: 20 items
  • Maximum limit: 100 items
  • Use offset parameter for navigation
  • Always check for additional pages
GET /v2/bookings?limit=50&offset=0
GET /v2/bookings?limit=50&offset=50

Support & Resources


Certification Process

  1. Development - Implement against sandbox environment
  2. Self-Testing - Complete all applicable test cases above
  3. Review - Submit integration for Plum Guide review
  4. Certification - Receive approval and production credentials
  5. Go-Live - Deploy to production