XML Scores and Odds Feed
Betting odds and final scores to power your sports website.
After your no-obligation free trial period is over you will have the option of subscribing. All payments come with a no-questions-asked money-back guarantee. You may cancel at any time.
For just $289/mo you get every betting odd and every final score in the Pick Monitor database. Similar services sell for upwards of $8,000 per month.
Do I Get Historic Odds and Scores?
We may negotiate separately a price for historic odds and scores, but the standard XML odds feed only gives you access to future odds and scores.
Am I Guaranteed to Get Final Scores for Every Single Betting Event?
Not necessarily. We provide final scores for all major events plus final scores for any event that a pickmonitor.com member has made a pick on. If there is an obscure event that no Pick Monitor users have placed picks on then there is a chance that we won't provide the final score.
Create Your Pick Monitor Account
Documentation - Input
Variable Name | Description |
---|---|
uid required Type: integer | Tells us who you are, so we can give you permission and customize your call to your specific needs. |
key required Type: string | This string authorizes your usage of the api. DO NOT give this key out to anyone. If you suspect that your key has been compromised, please contact us ASAP. |
sports optional Type: string Default: NULL | If specified, your result will be limited to the sport(s) and optionally league(s) specified. Include multiple string separated by commas. Separate sporttype and sportsubtype by hyphens. Examples: sports=basketball - shows all Basketball games. sports=basketball-nba - shows all NBA Basketball games. sports=basketball,baseball-mlb,soccer - show all Basketball and Soccer games, and all MLB Baseball games. |
graded optional Type: integer Default: 0 | Specifies whether to show games that have been graded, games that have yet to be graded, or both. 0 - Ungraded games only. 1 - Graded games only. 2 - All games. |
odd_type optional Type: char Default: a | Specify whether you want odds displayed in American or Decimal odds. a - Default. American. d - Decimal. |
full_call optional Type: integer Default: 0 | By default, our feed only pushes the changes that have been made since your last call. If you set this value to "1" then you'll get the entire feed, not just the changes. As this option greatly increases the tax on our server and is usually unnecessary, we ask that you use this option a maximum of once per hour. |
Documentation - Output
Output is a standards compliant XML file.Path | Description |
---|---|
lines->game->id Type: integer | The unique identifier for each game. |
lines->game->header Type: string | A textual description of the game. |
lines->game->sporttype Type: string | The general description of the sport. Eg 'Baseball' |
lines->game->sportsubtype Type: string | The more specific description of the sport. In many cases, this is also known as the 'league'. Eg 'MLB' |
lines->game->gamedate Type: datetime | The start time for the game - presented as YYYY-MM-DD HH:ii:ss. Eg '2011-04-05 19:05:00' |
lines->game->last_update Type: datetime | The last time this line was updated - presented as YYYY-MM-DD HH:ii:ss. Eg '2011-04-05 19:05:00' |
lines->game->team1->rotnum Type: integer | The rotation number for the first team. Eg '706' |
lines->game->team1->name Type: string | The team name for the first team. Eg 'Atlanta Braves' |
lines->game->team1->pitcher Type: string | The pitcher for the first team, if applicable. Eg 'Derek Lowe' |
lines->game->team2->rotnum Type: integer | The rotation number for the first team. Eg '707' |
lines->game->team2->name Type: string | The team name for the second team. Eg 'Philadelphia Phillies' |
lines->game->team2->pitcher Type: string | The pitcher for the second team, if applicable. Eg 'Roy Oswalt' |
lines->game->line->periodnum Type: integer | The integer representation of perioddesc. |
lines->game->line->perioddesc Type: string | The period for which the lines refer. Eg '1st Half' |
lines->game->line->wagercutoff Type: datetime | The last time that a bet will be accepted - presented as YYYY-MM-DD HH:ii:ss. Eg '2011-04-05 19:05:00' |
lines->game->line->money->team1 Type: integer | Team1 moneyline, if applicable. Eg -145 |
lines->game->line->money->team2 Type: integer | Team2 moneyline, if applicable. Eg 128 |
lines->game->line->money->drawline Type: integer | The "draw" payout, if applicable. Eg 128 |
lines->game->line->spread->points Type: float | The spread, if applicable, with respect to team 2. Eg '-3.5' means that team 2 is favored by 3.5. |
lines->game->line->spread->team1 Type: integer | The team 1 line for the spread, if applicable. Eg '-110' |
lines->game->line->spread->team2 Type: integer | The team 2 line for the spread, if applicable. Eg '-110' |
lines->game->line->total->points Type: float | The game's total, if applicable. Eg '9.5' |
lines->game->line->total->over Type: integer | The line for the 'over', if applicable. Eg '-120' |
lines->game->line->total->under Type: integer | The line for the 'under', if applicable. Eg '100' |
lines->game->line->teamtotal->team1->points Type: integer | The line for the 'under', if applicable. Eg '100' |
lines->game->line->teamtotal->team1->over Type: integer | The line for the 'under', if applicable. Eg '100' |
lines->game->line->teamtotal->team1->under Type: integer | The line for the 'under', if applicable. Eg '100' |
lines->game->line->teamtotal->team2->points Type: integer | The line for the 'under', if applicable. Eg '100' |
lines->game->line->teamtotal->team2->over Type: integer | The line for the 'under', if applicable. Eg '100' |
lines->game->line->teamtotal->team2->under Type: integer | The line for the 'under', if applicable. Eg '100' |
lines->game->line->score->team1 Type: integer | The final score for team 1, if applicable. Eg '3' |
lines->game->line->score->team2 Type: integer | The final score for team 2, if applicable. Eg '4' |
lines->game->line->score->team1_alt Type: integer | The number of games won in a tennis match for team 1, if applicable. Eg '23' |
lines->game->line->score->team2_alt Type: integer | The number of games won in a tennis match for team 2, if applicable. Eg '12' |
lines->game->line->score->winner Type: string | The name of the winning team, if applicable. Eg. 'Atlanta Braves' |
Document Structure
<lines>
<game>
<id>VAR</id>
<header>VAR</header>
<sporttype>VAR</sporttype>
<sportsubtype>VAR</sportsubtype>
<gamedate>VAR</gamedate>
<last_update>VAR</last_update>
<team1>
<rotnum>VAR</rotnum>
<name>VAR</name>
<pitcher>VAR</pitcher>
</team1>
<team2>
<rotnum>VAR</rotnum>
<name>VAR</name>
<pitcher>VAR</pitcher>
</team2>
<line>
<periodnum>VAR</periodnum>
<perioddesc>VAR</perioddesc>
<wagercutoff>VAR</wagercutoff>
<money>
<team1>VAR</team1>
<team2>VAR</team2>
</money>
<spread>
<points>VAR</points>
<team1>VAR</team1>
<team2>VAR</team2>
</spread>
<total>
<points>VAR</points>
<over>VAR</over>
<under>VAR</under>
</total>
<teamtotal>
<team1>
<points>VAR</points>
<over>VAR</over>
<under>VAR</under>
</team1>
<team2>
<points>VAR</points>
<over>VAR</over>
<under>VAR</under>
</team2>
</teamtotal>
<score>
<team1>VAR</team1>
<team2>VAR</team2>
<team1_alt>VAR</team1_alt>
<team2_alt>VAR</team2_alt>
<winner>VAR</winner>
</score>
</line>
</game>
<game>...</game>
.
.
.
</lines>
Example Calls
https://api.pickmonitor.com/lines.php?uid=UID&key=KEY
Output: Example 1 - Generated Dec 28th, 2011 at 5:00PM EST
https://api.pickmonitor.com/lines.php?uid=UID&key=KEY&sports=Basketball-NBA,Basketball-NCAA&graded=1
Output: Example 2 - Generated Dec 28th, 2011 at 5:09PM EST
https://api.pickmonitor.com/lines.php?uid=UID&key=KEY&odd_type=d
Output: Example 3 - Generated Dec 28th, 2011 at 5:11PM EST
Example Code
This example code uses PHP and MySQL, but could be easily adapted to other languages and/or databases.
<?php
/*
Author: Pick Monitor.
License: GPL
Tested with: PHP v5.3.4 - MySQL v5.0.7 - Apache v2.2.17 - Mac OS X v10.6.7
For this example we assume that we are running an online sportsbook.
We need to get and update future lines for our clients to wager on.
We need to get past lines and scores to grade our clients' wagers.
*/
//get your database credentials
require_once('database.php');
//establish your connection
$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
//set the variables which you will send to the api call
$data = array();
$data['uid'] = 'YOUR_UID';
$data[key'] = 'YOUR_KEY';
$data['graded'] = 2; //get both graded and ungraded games
$data['sports'] = 'Baseball-MLB,Basketball-NCAA,Basketball-NBA,Football-NCAA,Football-NFL,Hockey-NHL';
$target_url = 'https://api.pickmonitor.com/lines.php';
$response = http($target = $target_url,'','GET',$data,EXCL_HEAD);
$content = $response['FILE'];
if($content == false)
{
echo 'An error has occured.';
exit();
}
else
{
//use the simplexml library to do wonderous things
$xml = simplexml_load_string($content);
$lines = array();
foreach ($xml->lines->game as $game)
{
if($game->line->score->winner)
{
//the game has been graded, so let's process all of the bets on the game
}
else
{
//the game hasn't been graded, so let's update the lines
//you could do various checks like checking to make sure te game hasn't already started,
//but as long as you don't pass full_call = 1 then we do those checks for you on our side
//first let's check to see if the game is already in our datbase.
$result = $mysqli->query("SELECT id FROM games WHERE id = ".$game->id);
if($result->num_rows == 0)
{
//the game isn't in our databse, so let's insert it
$mysql->real_query("INSERT INTO lines VALUES(
'$game->id',
'$game->sporttype',
'$game->sportsubtype',
'$game->gamedate',
'$game->last_update',
'$game->team1->rotnum',
'$game->team1->name',
'$game->team1->pitcher',
'$game->team2->rotnum',
'$game->team2->name',
'$game->team2->pitcher',
'".$game->line->periodnum."',
'".$game->line->perioddesc."',
'".$game->line->wagercutoff."',
'".$game->line->money->team1."',
'".$game->line->money->team2."',
'".$game->line->spread->points."',
'".$game->line->spread->team1."',
'".$game->line->spread->team2."',
'".$game->line->total->points."',
'".$game->line->total->team1."',
'".$game->line->total->team2."',
'".$game->line->score->team1."',
'".$game->line->score->team2."',
'".$game->line->score->team1_alt."',
'".$game->line->score->team2_alt."',
'".$game->line->score->winner."'
)");
}
else
{
//we already have the game, so let's just update the lines
$mysql->real_query("UPDATE lines SET
sporttype = '$game->sporttype',
sportsubtype = '$game->sportsubtype',
gamedate = '$game->gamedate',
last_update = '$game->last_update',
team1rotnum = '$game->team1->rotnum',
team1name = '$game->team1->name',
team1pitcher = '$game->team1->pitcher',
team2rotnum = '$game->team2->rotnum',
team2'$game->team2->name',
'$game->team2->pitcher',
'".$game->line->periodnum."',
'".$game->line->perioddesc."',
'".$game->line->wagercutoff."',
'".$game->line->money->team1."',
'".$game->line->money->team2."',
'".$game->line->spread->points."',
'".$game->line->spread->team1."',
'".$game->line->spread->team2."',
'".$game->line->total->points."',
'".$game->line->total->team1."',
'".$game->line->total->team2."',
'".$game->line->score->team1."',
'".$game->line->score->team2."',
'".$game->line->score->team1_alt."',
'".$game->line->score->team2_alt."',
'".$game->line->score->winner."'
WHERE id = ".$game->id);
}
}
}
}
/*
Some additional notes:
- You should always secure data before inserting it into your database, even if it's from a trusted source.
- mysqli::real_escape_string() may be enough or you may wish to further protect yourself.
- This code does not include such security measures.
- The function 'http' was taken from Webbots, Spiders, and Screen Scrapers: A Guide to Developing
Internet Agents with PHP/CURL by Michael Schrenk
- I HIGHLY recommend this book for those just getting started with PHP/cURL.
*/
?>