Skip to content

PrintiPy Reference

Technical documentation on the Python interface for PrintiPy.

PrintiPy

Used to access all Printify APIs

!!! examples To use the same Shop ID for each call >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...', shop_id='...') >>> artwork = api.artwork.upload_artwork(filename='...')

To use a differnt Shop ID for each call
>>> from printipy.api import PrintiPy
>>> api = PrintiPy(api_token='...')
>>> shop123_products = api.products.get_products(shop_id='shop123')
>>> shop456_products = api.products.get_products(shop_id='shop456')

__init__(self, api_token, shop_id=None) special

Entrypoint needed to access all Printify APIs

Parameters:

Name Type Description Default
api_token str

Every instance of PrintiPy requires an API Token. Follow

required
shop_id Optional[Union[int, str]]

The ID of a specific Printify shop. If none is given, some APIs will still

None
Show source code in printipy/api.py
def __init__(self, api_token: str, shop_id: Optional[Union[str, int]] = None):
    """
    Entrypoint needed to access all [Printify APIs](https://developers.printify.com/)

    Args:
        api_token (str): Every instance of PrintiPy requires an API Token. Follow
        [these steps](https://help.printify.com/hc/en-us/articles/4483626447249-How-can-I-generate-an-API-token-)
        to generate a token
        shop_id (Optional[str]): The ID of a specific Printify shop. If none is given, some APIs will still
        work (as they do not require a Shop) while others will require a Shop ID to be passed upon a function call
    """
    self.shops = PrintiPyShop(api_token=api_token)
    self.catalog = PrintiPyCatalog(api_token=api_token)
    self.products = PrintiPyProducts(api_token=api_token, shop_id=shop_id)
    self.orders = PrintiPyOrders(api_token=api_token, shop_id=shop_id)
    self.artwork = PrintiPyArtwork(api_token=api_token)
    self.webhooks = PrintiPyWebhooks(api_token=api_token, shop_id=shop_id)

PrintiPyArtwork

Used to access the Printify Uploads APIs

!!! examples >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...') >>> artwork = api.artwork.upload_artwork(filename='...')

archive_artwork(self, image_id)

Archives a specific artwork/image for an account in Printify

!!! examples >>> from printipy.api import PrintiPy >>> from printipy.data_objects import Shop >>> api = PrintiPy(api_token='...') >>> artworks = api.artwork.get_artwork_uploads() >>> api.artwork.archive_artwork(artworks[0].id)

Exceptions:

Type Description
InvalidScopeException

If the API keys isn't permitted to perform this operation

InvalidRequestException

If the Artwork ID does not exist in Printify

PrintifyException

If Printify returned an error - usually contains information regarding malformed input

Show source code in printipy/api.py
def archive_artwork(self, image_id: str) -> True:
    """
    Archives a specific artwork/image for an account in Printify

    Examples:
        >>> from printipy.api import PrintiPy
        >>> from printipy.data_objects import Shop
        >>> api = PrintiPy(api_token='...')
        >>> artworks = api.artwork.get_artwork_uploads()
        >>> api.artwork.archive_artwork(artworks[0].id)

    Raises:
        InvalidScopeException: If the API keys isn't permitted to perform this operation
        InvalidRequestException: If the Artwork ID does not exist in Printify
        PrintifyException: If Printify returned an error - usually contains information regarding malformed input
    """
    # post / v1 / uploads / {image_id} / archive.json
    archive_artwork_url = f'{self.api_url}/v1/uploads/{image_id}/archive.json'
    self._post(archive_artwork_url)
    return True

get_artwork(self, image_id)

Pulls information for a speciic artwork/image for an account in Printify.

!!! examples >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...') >>> artwork = api.artwork.get_artwork(image_id='...')

Parameters:

Name Type Description Default
image_id str

The ID of the specific artwork for an account in Printify.

required

Returns:

Type Description
Artwork

Artwork printipy.data_objects.Artwork object

Exceptions:

Type Description
ParseException

If unable to parse Printify's response

InvalidScopeException

If the API keys isn't permitted to perform this operation

Show source code in printipy/api.py
def get_artwork(self, image_id: str) -> Artwork:
    """
    Pulls information for a speciic artwork/image for an account in Printify.

    Examples:
        >>> from printipy.api import PrintiPy
        >>> api = PrintiPy(api_token='...')
        >>> artwork = api.artwork.get_artwork(image_id='...')

    Args:
        image_id: The ID of the specific artwork for an account in Printify.
    Returns:
        Artwork `printipy.data_objects.Artwork` object

    Raises:
        ParseException: If unable to parse Printify's response
        InvalidScopeException: If the API keys isn't permitted to perform this operation
    """
    # GET / v1 / uploads / {image_id}.json
    artwork_url = f'{self.api_url}/v1/uploads/{image_id}.json'
    artwork_information = self._get(artwork_url)
    return self._parse(Artwork, artwork_information)

get_artwork_uploads(self, max_pages=1)

Pulls artwork/image information for an account in Printify.

!!! examples >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...') >>> artworks = api.artwork.get_artwork_uploads()

Parameters:

Name Type Description Default
max_pages int

Printify's API is paginated for requests. This will set the maximum number of pages to ingest.

1

Returns:

Type Description
List[printipy.data_objects.Artwork]

List of artwork printipy.data_objects.Artwork object

Exceptions:

Type Description
ParseException

If unable to parse Printify's response

InvalidScopeException

If the API keys isn't permitted to perform this operation

InvalidRequestException

If the Artwork ID does not exist in Printify

PrintifyException

If Printify returned an error - usually contains information regarding malformed input

Show source code in printipy/api.py
def get_artwork_uploads(self, max_pages: int = 1) -> List[Artwork]:
    """
    Pulls artwork/image information for an account in Printify.

    Examples:
        >>> from printipy.api import PrintiPy
        >>> api = PrintiPy(api_token='...')
        >>> artworks = api.artwork.get_artwork_uploads()

    Args:
        max_pages: Printify's API is paginated for requests. This will set the maximum number of pages to ingest.
    Returns:
        List of artwork `printipy.data_objects.Artwork` object

    Raises:
        ParseException: If unable to parse Printify's response
        InvalidScopeException: If the API keys isn't permitted to perform this operation
        InvalidRequestException: If the Artwork ID does not exist in Printify
        PrintifyException: If Printify returned an error - usually contains information regarding malformed input
    """
    # GET / v1 / uploads.json
    initial_url = f'{self.api_url}/v1/uploads.json'
    artwork_url = deepcopy(initial_url)
    all_artworks = []
    for _ in range(max_pages):
        if artwork_url is None:
            break
        artwork_information = self._get(artwork_url)
        all_artworks.extend(self._parse(Artwork, artwork_information['data']))
        artwork_url = self._get_next_page_url(initial_url, artwork_information)
    return all_artworks

upload_artwork(self, filename=None, url=None)

Uploads a new image/artwork to an account in Printify

!!! examples Using a local file >>> from printipy.api import PrintiPy >>> from printipy.data_objects import Shop >>> api = PrintiPy(api_token='...') >>> filename = '...' >>> artwork = api.artwork.upload_artwork(filename=filename)

Using a URL
>>> from printipy.api import PrintiPy
>>> from printipy.data_objects import Shop
>>> api = PrintiPy(api_token='...')
>>> url = '...'
>>> artwork = api.artwork.upload_artwork(url=url)

Exceptions:

Type Description
InvalidScopeException

If the API keys isn't permitted to perform this operation

InvalidRequestException

If the artwork isn't transmissible to Printify

PrintifyException

If Printify returned an error - usually contains information regarding malformed input

PrintiPyException

If neither or both filename and url are presented. Only one must be given.

Show source code in printipy/api.py
def upload_artwork(self, filename: Optional[str] = None, url: Optional[str] = None) -> Artwork:
    """
    Uploads a new image/artwork to an account in Printify

    Examples:
        Using a local file
        >>> from printipy.api import PrintiPy
        >>> from printipy.data_objects import Shop
        >>> api = PrintiPy(api_token='...')
        >>> filename = '...'
        >>> artwork = api.artwork.upload_artwork(filename=filename)

        Using a URL
        >>> from printipy.api import PrintiPy
        >>> from printipy.data_objects import Shop
        >>> api = PrintiPy(api_token='...')
        >>> url = '...'
        >>> artwork = api.artwork.upload_artwork(url=url)

    Raises:
        InvalidScopeException: If the API keys isn't permitted to perform this operation
        InvalidRequestException: If the artwork isn't transmissible to Printify
        PrintifyException: If Printify returned an error - usually contains information regarding malformed input
        PrintiPyException: If neither or both filename and url are presented. Only one must be given.
    """
    if filename and url:
        raise PrintiPyException("Must provide a local filename or url for upload, not both.")

    # POST / v1 / uploads / images.json
    upload_artwork_url = f'{self.api_url}/v1/uploads/images.json'
    if url:
        artwork_data = {
            "file_name": url.split('/')[-1],
            "url": url,
        }
    elif filename:
        with open(filename, 'rb') as f:
            b64data = base64.b64encode(f.read())
        artwork_data = {
            "file_name": os.path.basename(filename),
            "contents": b64data.decode('utf-8'),
        }
    else:
        raise PrintiPyException("Must provide at least a local filename or url for upload.")

    artwork_information = self._post(upload_artwork_url, data=artwork_data)
    return self._parse(Artwork, artwork_information)

PrintiPyCatalog

Used to access the Printify Catalog APIs

!!! examples >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...') >>> print_providers = api.catalog.get_print_providers()

get_blueprint(self, blueprint_id)

Pulls a specific blueprint from Printify.

!!! examples >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...') >>> blueprint = api.catalog.get_blueprint('...')

Returns:

Type Description
Blueprint

Blueprint printipy.data_objects.Blueprint object

Exceptions:

Type Description
ParseException

If unable to parse Printify's response

InvalidScopeException

If the API keys isn't permitted to perform this operation

InvalidRequestException

If the Blueprint ID does not exist in Printify

Show source code in printipy/api.py
def get_blueprint(self, blueprint_id: Union[str, int]) -> Blueprint:
    """
    Pulls a specific blueprint from Printify.

    Examples:
        >>> from printipy.api import PrintiPy
        >>> api = PrintiPy(api_token='...')
        >>> blueprint = api.catalog.get_blueprint('...')

    Returns:
        Blueprint `printipy.data_objects.Blueprint` object

    Raises:
        ParseException: If unable to parse Printify's response
        InvalidScopeException: If the API keys isn't permitted to perform this operation
        InvalidRequestException: If the Blueprint ID does not exist in Printify
    """
    # GET / v1 / catalog / blueprints / {blueprint_id}.json
    blueprint_url = f'{self.api_url}/v1/catalog/blueprints/{blueprint_id}.json'
    blueprint_information = self._get(blueprint_url)
    return self._parse(Blueprint, blueprint_information)

get_blueprints(self)

Pulls a list of all blueprints available from Printify.

!!! examples >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...') >>> blueprints = api.catalog.get_blueprints()

Returns:

Type Description
List[printipy.data_objects.Blueprint]

List of printipy.data_objects.Blueprint objects

Exceptions:

Type Description
ParseException

If unable to parse Printify's response

InvalidScopeException

If the API keys isn't permitted to perform this operation

Show source code in printipy/api.py
def get_blueprints(self) -> List[Blueprint]:
    """
    Pulls a list of all blueprints available from Printify.

    Examples:
        >>> from printipy.api import PrintiPy
        >>> api = PrintiPy(api_token='...')
        >>> blueprints = api.catalog.get_blueprints()

    Returns:
        List of `printipy.data_objects.Blueprint` objects

    Raises:
        ParseException: If unable to parse Printify's response
        InvalidScopeException: If the API keys isn't permitted to perform this operation
    """
    blueprint_url = f'{self.api_url}/v1/catalog/blueprints.json'
    blueprint_information = self._get(blueprint_url)
    return self._parse(Blueprint, blueprint_information)

get_print_provider(self, print_provider_id)

Pulls a specific print provider from Printify.

!!! examples >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...') >>> print_provider = api.catalog.get_print_provider('...')

Returns:

Type Description
PrintProvider

Print Provider printipy.data_objects.PrintProvider object

Exceptions:

Type Description
ParseException

If unable to parse Printify's response

InvalidScopeException

If the API keys isn't permitted to perform this operation

InvalidRequestException

If the Print Provider ID does not exist in Printify

PrintifyException

If Printify returned an error - usually contains information regarding malformed input

Show source code in printipy/api.py
def get_print_provider(self, print_provider_id: Union[str, int]) -> PrintProvider:
    """
    Pulls a specific print provider from Printify.

    Examples:
        >>> from printipy.api import PrintiPy
        >>> api = PrintiPy(api_token='...')
        >>> print_provider = api.catalog.get_print_provider('...')

    Returns:
        Print Provider `printipy.data_objects.PrintProvider` object

    Raises:
        ParseException: If unable to parse Printify's response
        InvalidScopeException: If the API keys isn't permitted to perform this operation
        InvalidRequestException: If the Print Provider ID does not exist in Printify
        PrintifyException: If Printify returned an error - usually contains information regarding malformed input
    """
    # GET / v1 / catalog / print_providers / {print_provider_id}.json
    print_provider_url = f'{self.api_url}/v1/catalog/print_providers/{print_provider_id}.json'
    print_provider_information = self._get(print_provider_url)
    return self._parse(PrintProvider, print_provider_information)

get_print_providers(self)

Pulls a list of all print providers from Printify.

!!! examples >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...') >>> print_providers = api.catalog.get_print_providers()

Returns:

Type Description
List[printipy.data_objects.PrintProvider]

List of printipy.data_objects.PrintProvider objects

Exceptions:

Type Description
ParseException

If unable to parse Printify's response

InvalidScopeException

If the API keys isn't permitted to perform this operation

PrintifyException

If Printify returned an error - usually contains information regarding malformed input

Show source code in printipy/api.py
def get_print_providers(self) -> List[PrintProvider]:
    """
    Pulls a list of all print providers from Printify.

    Examples:
        >>> from printipy.api import PrintiPy
        >>> api = PrintiPy(api_token='...')
        >>> print_providers = api.catalog.get_print_providers()

    Returns:
        List of `printipy.data_objects.PrintProvider` objects

    Raises:
        ParseException: If unable to parse Printify's response
        InvalidScopeException: If the API keys isn't permitted to perform this operation
        PrintifyException: If Printify returned an error - usually contains information regarding malformed input
    """
    # GET / v1 / catalog / print_providers.json
    print_providers_url = f'{self.api_url}/v1/catalog/print_providers.json'
    print_provider_information = self._get(print_providers_url)
    return self._parse(PrintProvider, print_provider_information)

get_print_providers_for_blueprint(self, blueprint_id)

Pulls a list of print providers for a given blueprint from Printify.

!!! examples >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...') >>> blueprint = api.catalog.get_blueprint('...') >>> print_providers = api.catalog.get_print_providers_for_blueprint(blueprint.id)

Returns:

Type Description
List[printipy.data_objects.PrintProvider]

List of printipy.data_objects.PrintProvider objects

Exceptions:

Type Description
ParseException

If unable to parse Printify's response

InvalidScopeException

If the API keys isn't permitted to perform this operation

InvalidRequestException

If the Blueprint ID does not exist in Printify

PrintifyException

If Printify returned an error - usually contains information regarding malformed input

Show source code in printipy/api.py
def get_print_providers_for_blueprint(self, blueprint_id: Union[str, int]) -> List[PrintProvider]:
    """
    Pulls a list of print providers for a given blueprint from Printify.

    Examples:
        >>> from printipy.api import PrintiPy
        >>> api = PrintiPy(api_token='...')
        >>> blueprint = api.catalog.get_blueprint('...')
        >>> print_providers = api.catalog.get_print_providers_for_blueprint(blueprint.id)

    Returns:
        List of `printipy.data_objects.PrintProvider` objects

    Raises:
        ParseException: If unable to parse Printify's response
        InvalidScopeException: If the API keys isn't permitted to perform this operation
        InvalidRequestException: If the Blueprint ID does not exist in Printify
        PrintifyException: If Printify returned an error - usually contains information regarding malformed input
    """
    # GET / v1 / catalog / blueprints / {blueprint_id} / print_providers.json
    print_providers_url = f'{self.api_url}/v1/catalog/blueprints/{blueprint_id}/print_providers.json'
    print_provider_information = self._get(print_providers_url)
    return self._parse(PrintProvider, print_provider_information)

get_shipping_info(self, blueprint_id, print_provider_id)

Pulls a shipping information a given blueprint and print provider from Printify.

!!! examples >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...') >>> blueprint = api.catalog.get_blueprint('...') >>> print_providers = api.catalog.get_print_providers_for_blueprint(blueprint.id) >>> shipping_info = api.catalog.get_shipping_info(blueprint.id, print_providers[0].id)

Returns:

Type Description
ShippingInfo

Shipping information printipy.data_objects.ShippingInfo object

Exceptions:

Type Description
ParseException

If unable to parse Printify's response

InvalidScopeException

If the API keys isn't permitted to perform this operation

InvalidRequestException

If the Blueprint ID or Print Provider ID does not exist in Printify

PrintifyException

If Printify returned an error - usually contains information regarding malformed input

Show source code in printipy/api.py
def get_shipping_info(self, blueprint_id: Union[str, int], print_provider_id: Union[str, int]) -> ShippingInfo:
    """
    Pulls a shipping information a given blueprint and print provider from Printify.

    Examples:
        >>> from printipy.api import PrintiPy
        >>> api = PrintiPy(api_token='...')
        >>> blueprint = api.catalog.get_blueprint('...')
        >>> print_providers = api.catalog.get_print_providers_for_blueprint(blueprint.id)
        >>> shipping_info = api.catalog.get_shipping_info(blueprint.id, print_providers[0].id)

    Returns:
        Shipping information `printipy.data_objects.ShippingInfo` object

    Raises:
        ParseException: If unable to parse Printify's response
        InvalidScopeException: If the API keys isn't permitted to perform this operation
        InvalidRequestException: If the Blueprint ID or Print Provider ID does not exist in Printify
        PrintifyException: If Printify returned an error - usually contains information regarding malformed input
    """
    # GET / v1 / catalog / blueprints / {blueprint_id} / print_providers / {print_provider_id} / shipping.json
    shipping_url = f'{self.api_url}/v1/catalog/blueprints/{blueprint_id}/' \
                   f'print_providers/{print_provider_id}/shipping.json'
    shipping_information = self._get(shipping_url)
    return self._parse(ShippingInfo, shipping_information)

get_variants(self, blueprint_id, print_provider_id)

Pulls a list of variants for a given blueprint and print provider from Printify.

!!! examples >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...') >>> blueprint = api.catalog.get_blueprint('...') >>> print_providers = api.catalog.get_print_providers_for_blueprint(blueprint.id) >>> variants = api.catalog.get_variants(blueprint.id, print_providers[0].id)

Returns:

Type Description
PrintProviderVariants

Variant printipy.data_objects.PrintProviderVariants object

Exceptions:

Type Description
ParseException

If unable to parse Printify's response

InvalidScopeException

If the API keys isn't permitted to perform this operation

InvalidRequestException

If the Blueprint ID or Print Provider ID does not exist in Printify

PrintifyException

If Printify returned an error - usually contains information regarding malformed input

Show source code in printipy/api.py
def get_variants(self, blueprint_id: Union[str, int], print_provider_id: Union[str, int]) -> PrintProviderVariants:
    """
    Pulls a list of variants for a given blueprint and print provider from Printify.

    Examples:
        >>> from printipy.api import PrintiPy
        >>> api = PrintiPy(api_token='...')
        >>> blueprint = api.catalog.get_blueprint('...')
        >>> print_providers = api.catalog.get_print_providers_for_blueprint(blueprint.id)
        >>> variants = api.catalog.get_variants(blueprint.id, print_providers[0].id)

    Returns:
        Variant `printipy.data_objects.PrintProviderVariants` object

    Raises:
        ParseException: If unable to parse Printify's response
        InvalidScopeException: If the API keys isn't permitted to perform this operation
        InvalidRequestException: If the Blueprint ID or Print Provider ID does not exist in Printify
        PrintifyException: If Printify returned an error - usually contains information regarding malformed input
    """
    # GET / v1 / catalog / blueprints / {blueprint_id} / print_providers / {print_provider_id} / variants.json
    variants_url = f'{self.api_url}/v1/catalog/blueprints/{blueprint_id}/' \
                   f'print_providers/{print_provider_id}/variants.json'
    variant_information = self._get(variants_url)
    return self._parse(PrintProviderVariants, variant_information)

PrintiPyOrders

Used to access the Printify Orders APIs

!!! examples >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...', shop_id='...') >>> shop_orders = api.orders.get_orders()

PrintiPyProducts

Used to access the Printify Products APIs

!!! examples >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...', shop_id='...') >>> shop_products = api.products.get_products()

PrintiPyShop

Used to access the Printify Shops APIs

!!! examples >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...') >>> shops = api.shops.get_shops()

delete_shop(self, shop)

Deletes a shop from a Printify account

!!! examples By pass in data pulled from printipy.api.PrintiPyShop.get_shops >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...', shop_id='...') >>> shops = api.shops.get_shops() >>> api.shops.delete_shop(shops[0])

By passing in specific shop information
>>> from printipy.api import PrintiPy
>>> from printipy.data_objects import Shop
>>> api = PrintiPy(api_token='...', shop_id='...')
>>> api.shops.delete_shop(shop)

Parameters:

Name Type Description Default
shop Shop

A Shop to delete. Pull all shops using :func:get_shops <printipy.api.PrintiPyShop.get_shops>

required

Exceptions:

Type Description
InvalidScopeException

If the API keys isn't permitted to perform this operation

PrintifyException

If Printify returned an error - usually contains information regarding malformed input

Show source code in printipy/api.py
def delete_shop(self, shop: Shop) -> None:
    """
    Deletes a shop from a Printify account

    Examples:
        By pass in data pulled from `printipy.api.PrintiPyShop.get_shops`
        >>> from printipy.api import PrintiPy
        >>> api = PrintiPy(api_token='...', shop_id='...')
        >>> shops = api.shops.get_shops()
        >>> api.shops.delete_shop(shops[0])

        By passing in specific shop information
        >>> from printipy.api import PrintiPy
        >>> from printipy.data_objects import Shop
        >>> api = PrintiPy(api_token='...', shop_id='...')
        >>> api.shops.delete_shop(shop)

    Args:
        shop (Shop): A Shop to delete. Pull all shops using :func:`get_shops <printipy.api.PrintiPyShop.get_shops>`

    Raises:
        InvalidScopeException: If the API keys isn't permitted to perform this operation
        PrintifyException: If Printify returned an error - usually contains information regarding malformed input
    """
    delete_url = f'{self.api_url}/v1/shops/{shop.id}/connection.json'
    self._delete(delete_url)

get_shops(self)

Pulls a list of shops for a Printify account. Returns empty list if no shops exist for account.

!!! examples >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...', shop_id='...') >>> shops = api.shops.get_shops()

Returns:

Type Description
List[printipy.data_objects.Shop]

List of printipy.data_objects.Shop objects

Exceptions:

Type Description
ParseException

If unable to parse Printify's response

InvalidScopeException

If the API keys isn't permitted to perform this operation

PrintifyException

If Printify returned an error - usually contains information regarding malformed input

Show source code in printipy/api.py
def get_shops(self) -> List[Shop]:
    """
    Pulls a list of shops for a Printify account. Returns empty list if no shops exist for account.

    Examples:
        >>> from printipy.api import PrintiPy
        >>> api = PrintiPy(api_token='...', shop_id='...')
        >>> shops = api.shops.get_shops()

    Returns:
        List of `printipy.data_objects.Shop` objects

    Raises:
        ParseException: If unable to parse Printify's response
        InvalidScopeException: If the API keys isn't permitted to perform this operation
        PrintifyException: If Printify returned an error - usually contains information regarding malformed input
    """
    shops_url = f'{self.api_url}/v1/shops.json'
    shop_information = self._get(shops_url)
    return self._parse(Shop, shop_information)

PrintiPyWebhooks

Used to access the Printify Webhooks APIs

!!! examples >>> from printipy.api import PrintiPy >>> api = PrintiPy(api_token='...', shop_id='...') >>> webhooks = api.webhooks.get_webhooks()