{"id":29273670,"url":"https://github.com/simplifi/appnexusapi","last_synced_at":"2026-02-20T00:02:44.522Z","repository":{"id":3976891,"uuid":"5072164","full_name":"simplifi/appnexusapi","owner":"simplifi","description":"An unofficial Ruby API Wrapper for the Appnexus Service Console APIs.","archived":false,"fork":false,"pushed_at":"2019-02-08T13:09:51.000Z","size":179,"stargazers_count":14,"open_issues_count":4,"forks_count":21,"subscribers_count":67,"default_branch":"master","last_synced_at":"2025-11-29T20:46:21.098Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/simplifi.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-07-16T19:17:21.000Z","updated_at":"2019-03-18T20:38:50.000Z","dependencies_parsed_at":"2022-08-31T14:11:45.709Z","dependency_job_id":null,"html_url":"https://github.com/simplifi/appnexusapi","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"purl":"pkg:github/simplifi/appnexusapi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simplifi%2Fappnexusapi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simplifi%2Fappnexusapi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simplifi%2Fappnexusapi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simplifi%2Fappnexusapi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simplifi","download_url":"https://codeload.github.com/simplifi/appnexusapi/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simplifi%2Fappnexusapi/sbom","scorecard":{"id":825694,"data":{"date":"2025-08-11","repo":{"name":"github.com/simplifi/appnexusapi","commit":"596ad5d0cf5102e0c1117e8ca74f390a609674e0"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.6,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":4,"reason":"Found 2/5 approved changesets -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 27 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T16:35:54.444Z","repository_id":3976891,"created_at":"2025-08-23T16:35:54.444Z","updated_at":"2025-08-23T16:35:54.444Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29637400,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-19T22:32:43.237Z","status":"ssl_error","status_checked_at":"2026-02-19T22:32:38.330Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":"2025-07-05T02:36:32.626Z","updated_at":"2026-02-20T00:02:44.507Z","avatar_url":"https://github.com/simplifi.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Appnexus API Wrapper\n\nAn unofficial Ruby API Wrapper for the Appnexus Service Console APIs.\n\n_If you use the Appnexus Service Impression Bus API's, you may be more interested in this project:\nhttps://github.com/simplifi/appnexusapi-impbus_\n\n\n## Installation\n\nAdd this line to your application's Gemfile:\n\n    gem 'appnexusapi'\n\nAnd then execute:\n\n    $ bundle\n\nOr install it yourself as:\n\n    $ gem install appnexusapi\n\n## Usage\n\n#### Configure defaults\n```ruby\nAppnexusApi.configure do |config|\n  config.logger = Logger.new('/path/to/log.log')\nend\n```\n\n#### Establish a connection:\n\n```ruby\nconnection = AppnexusApi::Connection.new(\n  'username' =\u003e 'username',\n  'password' =\u003e 'password',\n  'logger'   =\u003e Logger.new(STDOUT) # defaults to STDOUT\n\n  # Defaults to connecting to https://api.appnexus.com/ but you can optionally pass a uri to\n  # connect to another endpoint, e.g. the staging site could be\n  # \"uri\" =\u003e 'http://api-test.appnexus.com',\n)\n```\n\n#### Use a Service:\n\n```ruby\nmember_service = AppnexusApi::MemberService.new(connection)\n# get always returns an array of results\n# and defaults \"num_elements\" to 100 and \"start_element\" to 0\n# and returns an AppnexusApi::Resource object which is a wrapper around the JSON\nmember = member_service.get.first\n\nline_item_service = AppnexusApi::LineItemService.new(connection)\nline_item = line_item_service.get.first\nline_item = line_item_service.get({advertiser_id: 12345}).first\n\n# create a new object\nurl_params  = { advertiser_id: 12345 }\nbody_params = { name: \"some line item\", code: \"line item code\"}\n\nline_item = line_item_service.create(url_params, body_params)\nline_item.state\n\n\n# update an object\nupdate_params = { state: \"inactive\" }\njson_result = line_item.update(url_params, update_params)\n\n# delete an object\nline_item.delete(url_params)\n\n# save an object that you modified locally\nline_item.raw_json[:state] = 'active'\nline_item.save\n\n# this raises an AppnexusApi::UnprocessableEntity, not a 404 as it should\nline_item_service.get(line_item.id)\n\nnew_creative = {\n  \"content\"   =\u003e \"\u003ciframe src='helloword.html'\u003e\u003c/iframe\u003e\",\n  \"width\" =\u003e \"300\",\n  \"height\" =\u003e \"250\",\n  \"template\"  =\u003e{ \"id\" =\u003e 7 }\n}\ncreative = creative_service.create(new_creative)\ncreative.update(\"campaign\" =\u003e \"Testing\")\n```\n\n#### Downloading Log Level Data:\n\n```ruby\ndownload_service = AppnexusApi::LogLevelDataService.new(\n  connection,\n  downloaded_files_path: '/example/local/path',\n  siphon_name: 'standard_feed'\n)\n\ndownloaded_files = data_service.download_new_files_since('2016-02-01'.to_time)\n```\n\n## Testing\n\n### Running Existing Specs\n```\nbundle exec rspec\n```\n\n### Writing New Specs or Updating Old Ones\nThis library uses [VCR](https://github.com/vcr/vcr) and Webmock to record API call HTTP data and play it back when you run the specs.  To write new specs or update old ones, however, you will need to actually provide a valid login/password in a `.env` file (see [`env_example`](env_example) for an example) before launching the specs.\n\nTo update a spec, simply remove the relevant file from [spec/fixtures/vcr](spec/fixtures/vcr) (and setup the username/password as above) before launching `rspec`; the changes will be recorded automatically by VCR.\n\n## Debugging\n\nTo trigger full Faraday request/respone logging, set the `APPNEXUS_API_DEBUG` environment variable before launching\nyour application\n```\nexport APPNEXUS_API_DEBUG=true\n```\n\n## Contributing\n\n1. Fork it\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Make changes (with tests -- at least integration tests, please)\n3. Commit your changes (`git commit -am 'Added some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create new Pull Request\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimplifi%2Fappnexusapi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimplifi%2Fappnexusapi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimplifi%2Fappnexusapi/lists"}