# AI Cards API (Sportsbook v3)
## Validations
- Feature flag for Ai Cards is enabled (Configurator)
- Bet has been settled after a configured date (Configurator)
- Bet is settled as won
## Display CTA
This will be implemented as an extra field `displayAiCards` in the bet history response for each settled bet in the Sportsbook v3 - Betting API
## Response status values
- `1 - NotFound` - There are no generated images or cards for this bet (On Boarding),
- `2 - PendingImageGeneration` - Image generation is in progress (Image Loader),
- `3 - CompletedImageGeneration` - Image generation is completed and user must select an image (Select card),
- `4 - PreviewCards` - User selected an image and previews the generated cards (Final cards),
- `5 - PendingVideoGeneration` - Video generation is in progress (Video Loader),
- `6 - CompletedVideoGeneration` - Video generation is completed and user can share the video (Final video)
- `7 - PendingNFTMinting` - NFT Minting is in progress (Loader) (Not live yet)
- `8 - CompletedNFTMinting` - NFT Minting is completed and user can see the NFT details (Not live yet)
## Generate images
Request
```
POST /api/ai-cards
{
"betId": 123
}
```
Success Response
_See response with status 2 in [Get result](#Get-result)_
## Create cards
Request
```
POST /api/ai-cards/{betId}/cards
{
"selectedImageId": "id"
}
```
Success Response
_See response with status 4 in [Get result](#Get-result)_
## Create video
Request
```
POST /api/ai-cards/{betId}/video
{
"hideAmounts": true
}
```
Success Response
_See response with status 5 in [Get result](#Get-result)_
## Mint NFT (Not live yet)
Request
```
POST /api/ai-cards/{betId}/nft
```
Success Response
_See response with status 7 in [Get result](#Get-result)_
## Get result
Request
```
GET /api/ai-cards/{betId}
```
Success Response (Status 1 - No generated images)
```
200 OK
{
"status": 1
}
```
Success Response (Status 2 - Image generation pending)
```
200 OK
{
"status": 2,
"loaderRemainingSecs": 30
}
```
Success Response (Status 3 - Image generation still pending after loader completed)
```
200 OK
{
"status": 3,
"numberOfImagesToGenerate": 2,
"generatedImages": [],
"defaultImages": [
{
"id": "1",
"url": "https://staging-cards.gmlinteractive.com/default/betano-202311/_01fa9f07-b968-4d60-9a22-70505f75b4e5_thumb.jpeg"
},
{
"id": "2",
"url": "https://staging-cards.gmlinteractive.com/default/betano-202311/_031dc4e5-13e7-4830-b7fb-d33926b8753d_thumb.jpeg"
},
{
"id": "3",
"url": "https://staging-cards.gmlinteractive.com/default/betano-202311/_2052acf3-da14-450b-a9a0-f033e9d5ce07_thumb.jpeg"
}
]
}
```
Success Response (Status 3 - Image generation partially completed)
```
200 OK
{
"status": 3,
"numberOfImagesToGenerate": 2,
"generatedImages": [
{
"id": "52",
"url": "https://staging-cards.gmlinteractive.com/0025/0007/2500071341/2500071341_1_455b88d4093c43fc8b200063ba8b274f_thumb.jpg"
}
],
"defaultImages": [
{
"id": "1",
"url": "https://staging-cards.gmlinteractive.com/default/betano-202311/_01fa9f07-b968-4d60-9a22-70505f75b4e5_thumb.jpeg"
},
{
"id": "2",
"url": "https://staging-cards.gmlinteractive.com/default/betano-202311/_031dc4e5-13e7-4830-b7fb-d33926b8753d_thumb.jpeg"
},
{
"id": "3",
"url": "https://staging-cards.gmlinteractive.com/default/betano-202311/_2052acf3-da14-450b-a9a0-f033e9d5ce07_thumb.jpeg"
}
]
}
```
Success Response (Status 3 - Image generation completed)
```
200 OK
{
"status": 3,
"numberOfImagesToGenerate": 2,
"generatedImages": [
{
"id": "53",
"url": "https://staging-cards.gmlinteractive.com/0025/0007/2500071341/2500071341_1_455b88d4093c43fc8b200063ba8b274f_thumb.jpg"
},
{
"id": "52",
"url": "https://staging-cards.gmlinteractive.com/0025/0007/2500071341/2500071341_1_2eca4584f64d4146953c6e40ee5b6c08_thumb.jpg"
}
],
"defaultImages": [
{
"id": "1",
"url": "https://staging-cards.gmlinteractive.com/default/betano-202311/_01fa9f07-b968-4d60-9a22-70505f75b4e5_thumb.jpeg"
},
{
"id": "2",
"url": "https://staging-cards.gmlinteractive.com/default/betano-202311/_031dc4e5-13e7-4830-b7fb-d33926b8753d_thumb.jpeg"
},
{
"id": "3",
"url": "https://staging-cards.gmlinteractive.com/default/betano-202311/_2052acf3-da14-450b-a9a0-f033e9d5ce07_thumb.jpeg"
}
]
}
```
Success Response (Status 4 - Cards generation completed)
```
200 OK
{
"status": 4,
"numberOfImagesToGenerate": 2,
"generatedImages": [
{
"id": "52",
"url": "https://staging-cards.gmlinteractive.com/0025/0007/2500071341/2500071341_1_455b88d4093c43fc8b200063ba8b274f_thumb.jpg"
},
{
"id": "53",
"url": "https://staging-cards.gmlinteractive.com/0025/0007/2500071341/2500071341_1_2eca4584f64d4146953c6e40ee5b6c08_thumb.jpg"
}
],
"defaultImages": [
{
"id": "1",
"url": "https://staging-cards.gmlinteractive.com/default/betano-202311/_01fa9f07-b968-4d60-9a22-70505f75b4e5_thumb.jpeg"
},
{
"id": "2",
"url": "https://staging-cards.gmlinteractive.com/default/betano-202311/_031dc4e5-13e7-4830-b7fb-d33926b8753d_thumb.jpeg"
},
{
"id": "3",
"url": "https://staging-cards.gmlinteractive.com/default/betano-202311/_2052acf3-da14-450b-a9a0-f033e9d5ce07_thumb.jpeg"
}
],
"previewCards": [
"https://staging-cards.gmlinteractive.com/0025/0007/2500071341/f5b6099cb4279aa9d285d06ae8444c57_00.svg",
"https://staging-cards.gmlinteractive.com/0025/0007/2500071341/f5b6099cb4279aa9d285d06ae8444c57_01.svg",
"https://staging-cards.gmlinteractive.com/0025/0007/2500071341/f5b6099cb4279aa9d285d06ae8444c57_02.svg"
]
}
```
Success Response (Status 5 - Video generation pending)
```
200 OK
{
"status": 5,
"loaderRemainingSecs": 10,
"rarityOddRanges": [
{
"color": "#9d9d9d",
"name": "COMMON",
"minOdds": "2.00",
"maxOdds": "99.99",
"nft": false (not live yet)
},
{
"color": "#0070dd",
"name": "RARE",
"minOdds": "100.00",
"maxOdds": "999.99",
"nft": false (not live yet)
},
{
"color": "#a335ee",
"name": "EPIC",
"minOdds": "1000.00",
"maxOdds": "9999.99",
"nft": false (not live yet)
},
{
"color": "#ff8000",
"name": "LEGENDARY",
"minOdds": "10000.00",
"maxOdds": "∞",
"nft": true (not live yet)
}
]
}
```
Success Response (Status 6 - Video generation completed)
```
200 OK
{
"status": 6,
"finalCard": "https://staging-cards.gmlinteractive.com/0025/0007/2500071341/f5b6099cb4279aa9d285d06ae8444c57...mp4",
"isEligibleForNFT": true (Not live yet)
}
```
Success Response (Status 7 - NFT Minting Pending, Not live yet)
```
200 OK
{
"status": 7,
"loaderRemainingSecs": 20
}
```
Success Response (Status 8 - NFT Minting Completed, Not live yet)
```
200 OK
{
"status": 8,
"nftUrl": "....."
}
```