{"id":21762844,"url":"https://github.com/visavi/openrtb","last_synced_at":"2025-10-12T05:46:57.803Z","repository":{"id":48649648,"uuid":"216783324","full_name":"visavi/openrtb","owner":"visavi","description":"OpenRTB 2.5 Specification","archived":false,"fork":false,"pushed_at":"2024-03-25T20:32:02.000Z","size":105,"stargazers_count":5,"open_issues_count":0,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-10-12T05:46:53.751Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/visavi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-10-22T10:11:07.000Z","updated_at":"2025-08-30T20:57:41.000Z","dependencies_parsed_at":"2024-11-26T12:13:27.375Z","dependency_job_id":"02403b45-0f85-433b-9600-52f2ce53bc7d","html_url":"https://github.com/visavi/openrtb","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/visavi/openrtb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visavi%2Fopenrtb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visavi%2Fopenrtb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visavi%2Fopenrtb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visavi%2Fopenrtb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/visavi","download_url":"https://codeload.github.com/visavi/openrtb/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/visavi%2Fopenrtb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279010329,"owners_count":26084737,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-26T12:13:18.445Z","updated_at":"2025-10-12T05:46:57.786Z","avatar_url":"https://github.com/visavi.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenRTB\niab, RTB Project, OpenRTB Specification 2.5\n\n## Example\n```php\n$imp = new Imp();\n$imp-\u003esetId('1');\n\n$video = new Video();\n$video-\u003esetMimes([\n        'video/mp4',\n        'application/x-shockwave-flash',\n        'application/javascript',\n        'video/webm',\n        'video/mpg',\n    ])\n    -\u003esetMinduration(1)\n    -\u003esetMaxduration(120)\n    -\u003esetProtocols([2, 3, 5, 6, 7, 8])\n    -\u003esetW(576)\n    -\u003esetH(320)\n    -\u003esetLinearity(2)\n    -\u003esetSkip(1)\n    -\u003esetSkipmin(10)\n    -\u003esetSkipafter(10)\n    -\u003esetSequence(1)\n    -\u003esetMaxextended(-1)\n    -\u003esetApi([1,2])\n    -\u003esetPlacement(3);\n\n$deals = new Deal();\n$deals-\u003esetId('id')\n    -\u003esetBidfloor(120)\n    -\u003esetBidfloorcur('RUB')\n    -\u003esetAt(3);\n\n$pmp = new Pmp();\n$pmp-\u003esetPrivate_auction(0)\n    -\u003eaddDeals($deals);\n\n$imp-\u003esetVideo($video)\n    -\u003esetBidfloor(100)\n    -\u003esetBidfloorcur('RUB')\n    -\u003esetSecure(1)\n    -\u003esetPmp($pmp);\n\n$site = new Site();\n$site-\u003esetId('1234')\n    -\u003esetDomain('test.ru')\n    -\u003esetCat([\n        'IAB0',\n        'IAB0-0',\n    ])\n    -\u003esetPublisher((new Publisher())-\u003esetId('test'))\n    -\u003esetPage('https://test.ru');\n\n$geo = new Geo();\n$geo-\u003esetLat(47.2361)\n    -\u003esetLon(39.7189)\n    -\u003esetType(2)\n    -\u003esetCountry('RUS')\n    -\u003esetRegion('RU-ROS')\n    -\u003esetCity('Rostov-on-Don')\n    -\u003esetZip('344000');\n\n$device = new Device();\n$device-\u003esetUa('Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0')\n    -\u003esetGeo($geo)\n    -\u003esetIp('127.0.0.1')\n    -\u003esetDevicetype(2)\n    -\u003esetMake('unknown')\n    -\u003esetModel('unknown')\n    -\u003esetOs('Windows')\n    -\u003esetLanguage('ru');\n\n$user = new User();\n$user-\u003esetId('test1')\n    -\u003esetBuyeruid('xxxxxxxxx');\n\n$bidRequest = new BidRequest();\n$bidRequest\n    -\u003esetId('test-3')\n    -\u003eaddImp($imp)\n    -\u003esetSite($site)\n    -\u003esetDevice($device)\n    -\u003esetUser($user)\n    -\u003esetAt(2)\n    -\u003esetTmax(300)\n    -\u003esetCur(['RUB']);\n\n$request = $bidRequest-\u003egetBidRequest();\n```\n#### Response\n```php\n$object = new BidResponse();\n\nforeach ($responses as $response) {\n    /** @var BidResponse $result */\n    $result = Hydrator::hydrate(json_decode($response, true), $object);\n\n    /** @var Seatbid $bid */\n    $seatBid = $result-\u003egetSeatbid()-\u003efirst();\n\n    /** @var Bid $bid */\n    $bid = $seatBid-\u003egetBid()-\u003efirst();\n\n    $nurls[] = $bid-\u003egetNurl();\n}\n\n// or\n$result = json_decode($response, true);\n$nurl = $result['seatbid'][0]['bid'][0]['nurl'] ?? null;\n```\n\n### Async request\n```php\n$bidders = [\n    'segmento' =\u003e 'https://bider1',\n    'weborama' =\u003e 'https://bider2',\n    'otm'      =\u003e 'https://bider3',\n];\n\n$promises = (function () use ($bidders) {\n    foreach ($bidders as $service =\u003e $bidder) {\n        $buyer   = $this-\u003egetBuyer($service);\n        $request = $this-\u003ebuildRequest($buyer);\n\n        if (!$request) {\n            continue;\n        }\n\n        yield $this-\u003eclient-\u003erequestAsync('POST', $bidder, ['body' =\u003e $request]);\n    }\n})();\n\n$responses = [];\n\nif (!$promises) {\n    return '';\n}\n\n$each = new EachPromise($promises, [\n    'concurrency' =\u003e 4,\n    'fulfilled' =\u003e static function (ResponseInterface $response) use (\u0026$responses) {\n\n        $content = (string) $response-\u003egetBody();\n\n        if ($content \u0026\u0026 200 === $response-\u003egetStatusCode()) {\n            $responses[] = $content;\n        }\n    },\n]);\n\n$each-\u003epromise()-\u003ewait();\n\nvar_dump($responses);\n```\n\n## Install\n`composer require visavi/openrtb`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvisavi%2Fopenrtb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvisavi%2Fopenrtb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvisavi%2Fopenrtb/lists"}