Zoho Creator API
Source: Backupticket-booking/ — config/zoho-v3.php, services/ZohoService.php, test-zoho.php
Tested: 2026-05-12 via curl against live houseoflegends-booking app
Doc Status: Good | ✓ Clear summary | ✓ Easy to read | ✓ Matches code | ✓ Good structure | ✓ Professional look | ✓ Visual components | ✓ No red herrings
Why This Matters
Zoho Creator is our system of record for inventory, bundles, and bookings. Before any booking is confirmed, we check live availability in Zoho to ensure accurate seat counts. After payment, we sync the booking back to Zoho so the team can manage reservations through their existing tools. Hamza’s perspective: Your existing Zoho system tracks what’s available and what you’ve sold. The new HOL system talks to Zoho to get real-time inventory, then writes bookings back after payment. This keeps both systems in sync without disrupting your current workflow.This integration is one-way sync from Zoho for reads. Write operations (booking creation, inventory updates) happen within HOL’s Convex backend, which then syncs back to Zoho.
How It Works
Reading Live Inventory (for guests booking)
- Guest selects a show and date on the booking page
- HOL backend calls Zoho Creator’s
ShowInventoryV4_Reportto get live seat availability - Zoho returns available counts by zone and price tier
- Guest sees accurate, real-time availability
Creating a Booking (after payment)
- Guest completes payment on OnePay
- HOL backend creates the reservation in Convex
- HOL backend calls Zoho Creator’s
Bookingform to create a booking record - HOL backend calls Zoho to update sold count in
ShowInventoryV4_Report - Both systems stay in sync
What We Tested
All API calls used the OAuth2 refresh token flow:https://creator.zoho.com/api/v2/thehouseoflegends/houseoflegends-booking
Token Scopes
Key Concepts
Report vs Form Endpoints
| Type | Endpoint Pattern | Purpose |
|---|---|---|
| Report | /report/<ReportName> | Read-only data retrieval |
| Form | /form/<FormName> | Create and update operations |
Record IDs
Zoho uses compound IDs like4910610000000220005 to identify records. These IDs are used in update operations via criteria filters.
Endpoints Tested
Read — ShowInventoryV4_Report
Read — BundleCatalog_Report
price_standard, price_best, price_chill per-zone pricing.
Read — ShowCatalog_Report
Read — All_Bookings
Create — Booking form
{"code":3000,"data":{"ID":"4910610000000233003"},"message":"Data Added Successfully"}
Works. Booking created with ID returned. Note: On-Success workflow scripts may trigger (the test showed a script warning but data was saved).
Update — Inventory (sold/held)
{"code":3000,"data":{"ID":"4910610000000220005"},"message":"Data Updated Successfully"}
Works. Inventory sold count updated. Verified sold went from 4 → 6.
Limitations
Cannot Delete Records
{"code":2945,"description":"This is an invalid oauthscope. Please regenerate the oauthtoken corresponding to the API with proper oauthscope."}
No delete permission. Token scope only allows create/update on forms and reports. Use status updates (e.g., marking as payment_status: "Failed") instead.
Wrong Scope for CRM and Books
Zoho CRM API — ReturnsOAUTH_SCOPE_MISMATCH. Token only has Creator scopes (ZohoCreator.form.CREATE, ZohoCreator.report.READ, etc.). No CRM scope.
Zoho Books API — Returns You are not authorized to perform this operation. Token has no Books scope. CRM and Books require separate OAuth scopes.
Technical Details
Zoho Credentials
Zoho Credentials
Credentials are stored in:
apps/frontend/raw/ticket-booking/.env(backup, read-only)- Convex env vars (set via
npx convex env set)
ZohoCreator.form.CREATE ZohoCreator.form.UPDATE ZohoCreator.report.READ ZohoCreator.report.UPDATEReport/Form Reference
Report/Form Reference
| Report/Form | Link Name | Fields |
|---|---|---|
| ShowInventoryV4_Report | ShowInventoryBeta | show_date, zone, price, capacity, held, sold, available, show_time, singer |
| BundleCatalog_Report | BundleCatalog | bundle_id, bundle_name, category, price_standard, price_best, price_chill, pax, is_active, applicable_days |
| All_Bookings | Booking | customer_name, customer_email, customer_phone, show_date, zone, bundle_pax, bundle_price, payment_status, payment_method, inventory_id, day_group |
| ShowCatalog_Report | ShowCatalog | show_name, subtitle, description, directors, actors, scriptwriter, time, image, is_active |
Conclusion
Creator token is sufficient for:- Reading live inventory (availability, pricing)
- Reading bundle catalog
- Reading show catalog (for landing pages)
- Creating booking records after payment
- Updating sold/held counts after payment
- Delete bookings (only mark as Failed)
- CRM contact/deal sync (wrong scope)
- Invoice generation (wrong scope)
See Also
Payments
OnePay payment integration
Notifications
Email and WhatsApp notifications
Booking Experience
Booking flow integration
Event Management
Event scheduling