Skip to main content
OCTO (Open Connectivity for Tours and OTAs) is an open standard for distributing activity and experience inventory. Seyaha implements OCTO as its inbound catalog protocol — if your platform exposes an OCTO-compatible API, Seyaha can sync it with minimal configuration.

What Seyaha reads from your OCTO endpoint

During a sync, Seyaha calls GET {base_url}/products on your endpoint and maps the response to its internal data model:
OCTO conceptSeyaha conceptNotes
productActivityOne-to-one mapping
option (booking option)VariationVariations represent different packages/options for an activity
availabilitySlotEach availability record becomes a bookable time slot
product.internalNameInternal referenceNot displayed to end customers; used for deduplication
product.titleactivity_titleShown to customers
option.titleVariation title
option.pricing[].unitTypeGuest pricing unit typee.g. ADULT, CHILD
internalName is used as the deduplication key across syncs. If you rename a product’s internalName, Seyaha treats it as a new product and creates a duplicate. Always keep internalName stable; use title for display-facing renames.

Authentication to your endpoint

Seyaha authenticates to your OCTO endpoint using the auth_type you configured:
auth_typeHeader sent by Seyaha
bearerAuthorization: Bearer <auth_key>
api_keyAuthorization: <auth_key>
Make sure your OCTO endpoint accepts one of these formats.

Hash deduplication

Seyaha computes a hash of your full products payload on each sync. If the hash matches the previous sync’s last_sync_hash, the sync is marked skipped: true and no database writes occur. This keeps sync operations cheap for large catalogs that change infrequently.
{
  "success": 1,
  "data": { "synced": 0, "skipped": true }
}

Minimal OCTO products response

Your GET /products endpoint must return at minimum:
[
  {
    "id": "product_abc",
    "internalName": "desert-safari-standard",
    "title": "Desert Safari Adventure",
    "options": [
      {
        "id": "option_xyz",
        "internalName": "standard-option",
        "title": "Standard Package",
        "pricing": [
          { "unitType": "ADULT", "original": 25000 },
          { "unitType": "CHILD", "original": 15000 }
        ]
      }
    ]
  }
]
OCTO prices are in the smallest currency unit (e.g. halalas for SAR). Seyaha converts to display units when showing prices to customers.

Availability

Seyaha also reads GET /availability for each product/option pair to populate time slots. The availability response maps to Seyaha’s slot model:
OCTO fieldSeyaha slot field
idavailability_id
localDateTimeStartdate + time
statusstatus (AVAILABLE / LIMITED / SOLD_OUT / CLOSED)
vacanciesvacancies
capacitycapacity