amazon-sp-api-python
This is a python version of the Amazon Seller API
https://developer-docs.amazon.com/sp-api/docs/
We use the openapi generator https://openapi-generator.tech/ to convert the amazon sp-api
swagger api models https://github.com/amzn/selling-partner-api-models.git into a python package.
This creates a requests
based API with pydantic
types. Awesome!
This project consists of tweaks I had to make to aws auth schemes to get things working
with the openapi generator client, the generator script that creates the models and a
little bit of documentation. Nothing fancy.
Prerequisites
Installation
pip install amazon-sp-api-python
Usage
import os
import dotenv
dotenv.load_dotenv()
from py_sp_api.generated.productPricingV0 import ProductPricingApi, SPAPIClient as PricingClient
from py_sp_api.generated.notifications import NotificationsApi, SPAPIClient as NotificationsClient
from py_sp_api import SPAPIConfig
def test_get_pricing(asin: str, marketplace_id="ATVPDKIKX0DER"):
spapi_config = SPAPIConfig(
client_id=os.getenv("SPAPI_CLIENT_ID"),
client_secret=os.getenv("SPAPI_CLIENT_SECRET"),
refresh_token=os.getenv("SPAPI_TOKEN"),
region="NA",
)
product_pricing = ProductPricingApi(PricingClient(spapi_config))
response = product_pricing.get_pricing(marketplace_id=marketplace_id, item_type="Asin", asins=[asin])
print("pricing", response)
def test_notifications():
grantless_config = SPAPIConfig(
client_id=os.getenv("SPAPI_CLIENT_ID"),
client_secret=os.getenv("SPAPI_CLIENT_SECRET"),
refresh_token=os.getenv("SPAPI_TOKEN"),
region="NA",
grant_type="client_credentials",
scope="sellingpartnerapi::notifications",
)
notifications = NotificationsApi(NotificationsClient(grantless_config))
response = notifications.get_destinations()
print("destinations", response)
test_notifications()
test_get_pricing(asin="B0DP7GSWC8")
Development
This is a poetry project so do the normal poetry install
type things to set up your environment.
We use a Makefile for build automation.
make clean
removes the generated code
make generate
generates the schemas
make test
runs unit tests
make lint-fix
fixes linting issues and checks compliance with linting standards
Project Structure
.
βββ Makefile - make scripts
βββ README.md - this file
βββ notebooks
β βββ api_test.ipynb - example usage
βββ poetry.lock
βββ pyproject.toml
βββ selling-partner-api-models - git submodule from <https://github.com/amzn/selling-partner-api-models.git>
βββ scripts
β βββ generate_schemas.py - script to generate api
βββ tests - unit tests. (just enough to make sure things generated without error)
βββ src
βββ py_sp_api
βββ auth - copied from selling-partner-api-models/clients/sellingpartner-api-aa-python/auth
β βββ LwaException.py - unchanged
β βββ LwaExceptionErrorCode.py - unchanged
β βββ LwaRequest.py - import paths modified
β βββ credentials.py - tweaked to allow grantless operations
|ββ base_client.py - client that gets copied into each package in generated/
βββ generated - the generated api files created when generate_schemas.py is run