Personalize Sports Inventory
The Sports Inventory API lets a sportsbook send its current sports catalog to Optimove Personalize. Personalize uses that inventory to resolve the hierarchy around a selection, filter unavailable content, build recommendation candidates, order results, and return useful display metadata.
This guide covers the standard Sports Inventory integration only. Your Optimove implementation team will provide the environment-specific base URL and credentials.
At a glance
| Item | Contract |
|---|---|
| Resource | https://api.opti-x.optimove.net/sports-inventory/v1/records |
| Authentication | x-api-key: {{service_api_key}} and x-brand-key: {{brand_key}} |
| Request format | JSON array; POST and PUT contain 1–500 records. Use one parent record per DELETE request when relying on cascade behavior |
| Create | POST /records; full-row upsert/replace by entity key |
| Update | PUT /records; partial update of supplied top-level fields |
| Delete | DELETE /records; delete by entity key |
| Success status | 202 Accepted; processing continues asynchronously |
| Optional expiry | X-Expires-After on POST and PUT, in seconds, minimum 60 |
| Detailed acceptance response | Accept: application/vnd.optimove.optix.inventory.records.v2+json |
Inventory hierarchy
Every record belongs to one of six levels:
Category
└── Class
└── Type
└── Event
└── Market
└── SelectionExample:
Football
└── England
└── Premier League
└── Arsenal v Chelsea
└── Match Result
└── ArsenalThe keys linking these levels must be stable and consistent within a brand. Create parents before their children, and order a mixed POST batch as Category, Class, Type, Event, Market, then Selection.
The same keys must appear in Bet Placement and Bet Settled events. Review the shared Identifiers and data flow crosswalk before finalising your source mappings.
How requests are processed
Your integration
→ authenticated API request
→ synchronous request validation
→ asynchronous processing
→ Personalize inventory used by recommendation and search experiences202 Accepted confirms that the request was accepted for asynchronous processing. It does not confirm that every entity is already available to Personalize. There is currently no public processing-status endpoint.
Important behavioral rules
- Treat every entity key as immutable. To change a key, create the replacement and remove the old entity.
- POST is a full-row upsert. Posting an existing key replaces its stored row; omitted optional fields are not preserved.
- PUT changes only supplied top-level fields. If a supplied field is an object, such as
extraor a translation map, the object replaces the previous object rather than merging individual nested keys. - PUT does not create a missing entity. Create it with POST first.
- Avoid duplicate records with the same entity type and key in one batch. The first occurrence wins.
- For parent deletes, send one parent record per DELETE request. This is the safe way to preserve descendant cascading behavior.
- A request may be retried after an ambiguous transport failure, but concurrent or out-of-order retries can overwrite newer state.
Documentation map
- Quickstart—send a complete six-level example.
- Hierarchy: concepts and conventions—what each entity means, how Personalize uses it, and the conventions and gotchas. (The field-by-field contract, including POST/PUT/DELETE behavior, is in the API Reference.)
- Reliability and troubleshooting—asynchronous acceptance, retries, errors, and diagnostics.
- Identifiers and data flow—the Inventory-to-Real-Time Event key crosswalk.
Values that require onboarding agreement
The API accepts several provider-specific fields without publishing a universal vocabulary. Agree these with your Optimove implementation team before relying on them:
- the serialized format of
participants; - allowed
selectionPriceTypevalues; - the meaning and allowed values of
classSortCode,eventSort,marketSort, andoutcomeMeaningMajorCode; - locale codes used as keys in translation objects;
- permitted content, size, and privacy rules for
extra.
Only fields listed in this guide form the supported public contract. Do not rely on undeclared properties even if a test request appears to accept them.
Updated about 2 hours ago
