OFFERSBEAT API

Build on traveler intent.
Integrate real offers.

A secure REST API for enterprise, white-label and travel-platform integrations.

REST / JSON Bearer auth Scoped access Signed webhooks

Production credentials are issued only after partner approval.

POST /api/v1/enterprise/intents
curl -X POST \
  https://offersbeat.com/api/v1/enterprise/intents \
  -H "Authorization: Bearer <YOUR_API_TOKEN>" \
  -H "X-OffersBeat-Anonymous-Token: <SESSION_TOKEN>" \
  -H "Idempotency-Key: hotel-intent-001" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "vertical": "travel.hotel",
    "request": {
      "destination": {"country":"GR","city":"Athens"},
      "stay": {"check_in":"2026-10-20","check_out":"2026-10-22"},
      "occupancy": {"rooms":1,"adults":2,"children":0}
    },
    "response_rules": {"max_offers":10}
  }'
ONE API, CONTROLLED CONTEXT

Your credential resolves the tenant, brand and channel server-side.

Enterprise credentials are bound to a specific partner context and scopes.

INTEGRATION MODES

Choose the surface that matches your role.

01 ENTERPRISE / WHITE-LABEL

Server-to-server Enterprise API

For enterprise partners that want OffersBeat inside their own product.

  • Bearer credential with immutable scopes
  • Anonymous session + intent lifecycle
  • Offer retrieval, selection and handoff
  • Optional signed lifecycle webhooks
02 HOTEL / SUPPLY PARTNERS

Managed supplier connectivity

For PMS, channel managers, CRS, booking engines and hotel technology providers.

  • Provider-specific onboarding and certification
  • Normalized offer contract
  • Signed callbacks and idempotency
  • No traveler PII in booking callbacks
DEVELOPER SANDBOX

Test the complete lifecycle without touching production.

Sandbox credentials are separate from production.

Open Sandbox Console → · Sandbox OpenAPI

QUICK START

A complete hotel intent flow in six steps.

The examples below describe the approved server-to-server Enterprise API surface.

01
Request credentials

OffersBeat provisions a client bound to your partner context.

02
Verify context

GET /api/v1/enterprise/context

03
Create an anonymous session

POST /api/v1/enterprise/anonymous-sessions

04
Submit the hotel intent

POST /api/v1/enterprise/intents + Idempotency-Key

05
Finalize and read offers

POST .../finalize → GET .../offers

06
Select and hand off

POST .../selections → POST .../booking-handoff

TUTORIAL

From credential to selected offer.

Use the downloadable Postman collection for a runnable version.

Download Postman + OpenAPI kit →
1GET /context
curl https://offersbeat.com/api/v1/enterprise/context \
  -H "Authorization: Bearer <YOUR_API_TOKEN>" \
  -H "Accept: application/json"
2POST /anonymous-sessions
curl -X POST https://offersbeat.com/api/v1/enterprise/anonymous-sessions \
  -H "Authorization: Bearer <YOUR_API_TOKEN>" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{}'
3POST /intents
curl -X POST https://offersbeat.com/api/v1/enterprise/intents \
  -H "Authorization: Bearer <YOUR_API_TOKEN>" \
  -H "X-OffersBeat-Anonymous-Token: <SESSION_TOKEN>" \
  -H "Idempotency-Key: intent-20261020-001" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d @examples/create-intent.json
4Finalize + offers
curl -X POST https://offersbeat.com/api/v1/enterprise/intents/<INTENT_ID>/finalize \
  -H "Authorization: Bearer <YOUR_API_TOKEN>" \
  -H "X-OffersBeat-Anonymous-Token: <SESSION_TOKEN>" \
  -H "Accept: application/json"

curl https://offersbeat.com/api/v1/enterprise/intents/<INTENT_ID>/offers \
  -H "Authorization: Bearer <YOUR_API_TOKEN>" \
  -H "X-OffersBeat-Anonymous-Token: <SESSION_TOKEN>" \
  -H "Accept: application/json"
5Select + booking handoff
curl -X POST https://offersbeat.com/api/v1/enterprise/intents/<INTENT_ID>/selections \
  -H "Authorization: Bearer <YOUR_API_TOKEN>" \
  -H "X-OffersBeat-Anonymous-Token: <SESSION_TOKEN>" \
  -H "Idempotency-Key: selection-001" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"offer_id":"<OFFER_UUID>"}'

curl -X POST https://offersbeat.com/api/v1/enterprise/intents/<INTENT_ID>/booking-handoff \
  -H "Authorization: Bearer <YOUR_API_TOKEN>" \
  -H "X-OffersBeat-Anonymous-Token: <SESSION_TOKEN>" \
  -H "Idempotency-Key: handoff-001" \
  -H "Accept: application/json"
CORE ENDPOINTS

Enterprise API v1 reference.

MethodEndpointScopePurpose
GET/contextcontext.readVerify server-resolved partner context
POST/anonymous-sessionssessions.writeCreate an anonymous journey token
POST/intentsintents.writeCreate and route traveler intent
GET/intents/{intentId}intents.readRead intent lifecycle status
POST/intents/{intentId}/finalizeoffers.finalizeFinalize the current offer collection
GET/intents/{intentId}/offersoffers.readRead normalized eligible offers
POST/intents/{intentId}/selectionsselections.writeSelect an eligible offer
POST/intents/{intentId}/booking-handoffhandoffs.writeIssue a controlled booking handoff

Base URL https://offersbeat.com/api/v1/enterprise

WEBHOOKS

Lifecycle events without polling.

Approved enterprise clients can receive signed lifecycle notifications.

intent.createdoffer.receivedoffer.selectedhandoff.completedconversion.reported
SIGNATURE CONTRACT

HMAC-SHA256 · v1

v1\n{timestamp}\n{delivery_id}\n{sha256(body)}
  • X-OffersBeat-Webhook-Id
  • X-OffersBeat-Webhook-Timestamp
  • X-OffersBeat-Webhook-Signature
  • X-OffersBeat-Webhook-Profile

The Integration Kit includes a verification example.

SECURITY & PRIVACY

Designed around minimum disclosure.

Anonymous by default

Hotel search and matching can operate with an anonymous journey token.

Least privilege

Each enterprise credential carries immutable scopes.

Idempotent writes

Sensitive writes use Idempotency-Key.

No public secrets

Bearer tokens and signing secrets are issued out-of-band.

DOWNLOADS

Everything a technical team needs to start the review.

The kit contains OpenAPI, Postman, examples and webhook verification code.

API ACCESS

Ready to connect your platform?

Tell us your use case and preferred integration mode.

Request API access →