Fetch is a digital delivery application that makes selling downloadable products simple. It seamlessly integrates with popular carts and payment systems like Shopify, FoxyCart, PayPal, Google Checkout, and more. Fetch is hosted software so there's nothing to install and works on any platform.
Additional documentation is available at fetchapp.com/api.
If easy_install is available, you can use:
easy_install https://github.com/hiidef/FetchApp-API/tarball/develop
To run unit tests, copy config.py.sample to config.py and modify with your account information.
Instantiate FetchApp.
fa = FetchApp(key, token)
Create a new account. url is a URL slug, example: "example_url".
fa.account_create(name, first_name, last_name, email, url)
{ 'api_key': '24771755c6d',
'api_token': 'egheijahkal4',
'billing_email': '[email protected]',
'download_limit_per_item': 3,
'email': '[email protected]',
'id': '2357',
'name': 'b0185600-532e-4305-8c8a-8abbadd03977',
'order_expiration_in_hours': None,
'url': '24771755c6d.fetchapp.com'}
Information about your account.
fa.account()
{ 'api_key': '398dd38d04d',
'api_token': 'na4yuwaekeey',
'billing_email': '[email protected]',
'created_at': datetime.datetime(2014, 2, 11, 18, 48, 12, tzinfo=tzutc()),
'currency': 'USD',
'download_limit_per_item': 3,
'email': '[email protected]',
'id': 103176,
'name': '61b22110-c223-41eb-a1d0-1a163682ea18',
'order_expiration_in_hours': None,
'url': '398dd38d04d.fetchapp.com'}
Generate a new API token (this replaces your existing one).
fa.new_token()
'example_token'
List your downloads.
fa.downloads(per_page=None, page=None)
[ { 'downloaded_at': datetime.datetime(2014, 2, 7, 21, 56, 53, tzinfo=tzutc()),
'filename': 'me.jpg',
'id': 10890012,
'ip_address': '72.133.39.230',
'order_id': None,
'order_item_id': None,
'product_sku': None,
'size_bytes': 182808}]
List your products.
fa.items(per_page=None, page=None, sku=None)
[ { 'created_at': datetime.datetime(2014, 1, 28, 20, 13, 40, tzinfo=tzutc()),
'description': 'test',
'download_count': 0,
'downloads_uri': 'https://accountname.fetchapp.com/api/v2/products/test/downloads',
'files_count': 1,
'files_uri': 'https://accountname.fetchapp.com/api/v2/products/test/files',
'id': 'test',
'image_url': None,
'name': 'test',
'order_count': 28,
'paypal_add_to_cart_link': '/sell/ohgofood/ppc',
'paypal_buy_now_link': '/sell/ohgofood',
'paypal_view_cart_link': '/cart/pp',
'price': 1.0,
'sku': 'test',
'store_url': 'test-site.com'},
{ 'created_at': datetime.datetime(2014, 2, 11, 16, 15, 47, tzinfo=tzutc()),
'description': 'test product',
'download_count': 0,
'downloads_uri': 'https://accountname.fetchapp.com/api/v2/products/sku/downloads',
'files_count': 1,
'files_uri': 'https://accountname.fetchapp.com/api/v2/products/sku/files',
'id': 'sku',
'image_url': None,
'name': 'Title',
'order_count': 18,
'paypal_add_to_cart_link': '/sell/mthievoo/ppc',
'paypal_buy_now_link': '/sell/mthievoo',
'paypal_view_cart_link': '/cart/pp',
'price': 3.0,
'sku': 'sku',
'store_url': None}]
List details of a specified product.
fa.item_details(sku)
{ 'created_at': datetime.datetime(2014, 2, 11, 18, 48, 14, tzinfo=tzutc()),
'description': '54571bb1-f2d7-45d4-b463-f37ed2840980',
'download_count': 0,
'downloads_uri': 'https://accountname.fetchapp.com/api/v2/products/ac346f7e-93af-470f-80b8-d154442ad8b7/downloads',
'files_count': 0,
'files_uri': 'https://accountname.fetchapp.com/api/v2/products/ac346f7e-93af-470f-80b8-d154442ad8b7/files',
'id': 'ac346f7e-93af-470f-80b8-d154442ad8b7',
'image_url': None,
'name': '927d9f94-1b45-4af0-8514-a3324968c4af',
'order_count': 0,
'paypal_add_to_cart_link': '/sell/xwngohgh/ppc',
'paypal_buy_now_link': '/sell/xwngohgh',
'paypal_view_cart_link': '/cart/pp',
'price': 86.95,
'sku': 'ac346f7e-93af-470f-80b8-d154442ad8b7',
'store_url': None}
Delete a specified product.
fa.item_delete(sku)
True
Create a specified product.
fa.item_create(sku, name, price, description=None)
{ 'created_at': datetime.datetime(2014, 2, 11, 18, 48, 14, tzinfo=tzutc()),
'description': '54571bb1-f2d7-45d4-b463-f37ed2840980',
'download_count': 0,
'downloads_uri': 'https://accountname.fetchapp.com/api/v2/products/ac346f7e-93af-470f-80b8-d154442ad8b7/downloads',
'files_count': 0,
'files_uri': 'https://accountname.fetchapp.com/api/v2/products/ac346f7e-93af-470f-80b8-d154442ad8b7/files',
'id': 'ac346f7e-93af-470f-80b8-d154442ad8b7',
'image_url': None,
'name': '927d9f94-1b45-4af0-8514-a3324968c4af',
'order_count': 0,
'paypal_add_to_cart_link': '/sell/xwngohgh/ppc',
'paypal_buy_now_link': '/sell/xwngohgh',
'paypal_view_cart_link': '/cart/pp',
'price': 86.95,
'sku': 'ac346f7e-93af-470f-80b8-d154442ad8b7',
'store_url': None}
Update a specified product.
fa.item_update(sku, new_sku=None, name=None, price=None, description=None)
{ 'created_at': datetime.datetime(2014, 2, 11, 18, 48, 14, tzinfo=tzutc()),
'description': 'a1f389b2-f095-441a-a884-2f499d6b4ae6',
'download_count': 0,
'downloads_uri': 'https://accountname.fetchapp.com/api/v2/products/c4b1e380-c6db-44a0-960a-d7e28880aac1/downloads',
'files_count': 0,
'files_uri': 'https://accountname.fetchapp.com/api/v2/products/c4b1e380-c6db-44a0-960a-d7e28880aac1/files',
'id': 'c4b1e380-c6db-44a0-960a-d7e28880aac1',
'image_url': None,
'name': '4a9b1d0b-4827-44a4-b673-04850a41a8cf',
'order_count': 0,
'paypal_add_to_cart_link': '/sell/xwngohgh/ppc',
'paypal_buy_now_link': '/sell/xwngohgh',
'paypal_view_cart_link': '/cart/pp',
'price': 38.53,
'sku': 'c4b1e380-c6db-44a0-960a-d7e28880aac1',
'store_url': None}
List all the files for a product.
fa.item_list_files(sku)
[ { 'filename': 'sample.txt',
'size_bytes': 13.0,
'content_type': 'binary/octet-stream',
'permalink': '/permalink/werwa',
'permalink_full': 'http://accountname.fetchapp.com/permalink/werwa'}]
List all the downloads for an item.
fa.item_list_downloads(sku)
[ { 'filename': 'sample.txt',
'id': '23570',
'item_sku': 'example_sku',
'ip_address': '76.128.69.128',
'order_id': '1002',
'size_bytes': 13.0,
'downloaded_at': datetime.datetime(2011, 2, 8, 4, 19, 17, tzinfo=tzutc())}]
List statistics about a product.
fa.item_stats(sku)
{ 'currency': 'USD',
'download_count': 0,
'files_count': 0,
'id': 'ec273d73-c154-44c0-93f1-042a8cc4d3a3',
'order_count': 0,
'price': 61.34,
'sku': 'ec273d73-c154-44c0-93f1-042a8cc4d3a3'}
List all your orders.
# By default only shows most recent 25 orders
fa.orders(per_page=None, page=None, status=None)
[ { 'created_at': datetime.datetime(2014, 2, 11, 11, 4, 28, tzinfo=tzoffset(None, -28800)),
'currency': 'USD',
'custom_1': '7349633a-0d7b-40e3-b105-ef8206252372',
'custom_2': '96b06cd0-816f-40fa-afe7-8919433bf2ae',
'custom_3': 'fd07bb07-06f9-4cee-ba74-0b8e671f7f4d',
'download_count': 0,
'download_limit': None,
'downloads_uri': 'https://accountname.fetchapp.com/api/v2/orders/f4d6f507-86b5-4b68-985b-7f252d196ae4/downloads',
'email': '[email protected]',
'expiration_date': datetime.datetime(2014, 2, 11, 11, 3, 34, tzinfo=tzoffset(None, -28800)),
'first_name': 'e452eed3-9a40-4cc2-9e67-a60e3edce424',
'id': 'f4d6f507-86b5-4b68-985b-7f252d196ae4',
'last_name': '6ad5a0a2-9638-4bf6-849a-09848d29a0f4',
'link': '/get/adenax',
'order_items_uri': 'https://accountname.fetchapp.com/api/v2/orders/f4d6f507-86b5-4b68-985b-7f252d196ae4/order_items',
'product_count': 2,
'status': 'expired',
'total': 4.0,
'vendor_id': 'f4d6f507-86b5-4b68-985b-7f252d196ae4'},
{ 'created_at': datetime.datetime(2014, 2, 10, 15, 22, 33, tzinfo=tzoffset(None, -28800)),
'currency': 'USD',
'custom_1': '35180e14-b29a-4374-9b95-d40ced4d1aa5',
'custom_2': '41d24219-56c3-4202-98f8-e13d15dcf4b2',
'custom_3': 'c554b450-f67d-4391-82d2-ba9df328889b',
'download_count': 0,
'download_limit': None,
'downloads_uri': 'https://accountname.fetchapp.com/api/v2/orders/f11d937a-c09d-4c8a-a16f-a72f2c009ca8/downloads',
'email': '[email protected]',
'expiration_date': None,
'first_name': '7d6407d2-16ad-4b1e-bc70-1227af119edd',
'id': 'f11d937a-c09d-4c8a-a16f-a72f2c009ca8',
'last_name': '47ce45d2-da16-4a94-8386-4b11870666b5',
'link': '/get/nhijab',
'order_items_uri': 'https://accountname.fetchapp.com/api/v2/orders/f11d937a-c09d-4c8a-a16f-a72f2c009ca8/order_items',
'product_count': 1,
'status': 'open',
'total': 1.0,
'vendor_id': 'f11d937a-c09d-4c8a-a16f-a72f2c009ca8'}]
Details of a specified order.
fa.order_details(order_id)
{ 'created_at': datetime.datetime(2014, 2, 11, 14, 7, 8, tzinfo=tzoffset(None, -18000)),
'currency': 'USD',
'custom_1': '245c7cbd-be82-417b-990f-e872ca0eaaad',
'custom_2': '74e0b82c-ec03-4ff6-9905-918b35342d48',
'custom_3': 'b894fd6a-30d7-4ae6-ad14-2d716db54354',
'download_count': 0,
'download_limit': 5,
'downloads_uri': 'https://accountname.fetchapp.com/api/v2/orders/9b48baef-a8bf-4ee9-b8f4-9da107b2a18e/downloads',
'email': '[email protected]',
'expiration_date': datetime.datetime(2014, 2, 12, 8, 7, 9, tzinfo=tzoffset(None, -18000)),
'first_name': '653f2018-65fb-4373-9649-0d26ae65e07f',
'id': '9b48baef-a8bf-4ee9-b8f4-9da107b2a18e',
'last_name': '292d3866-1daf-4578-bad4-c94fdbb99eac',
'link': '/get/rfbahs',
'order_items_uri': 'https://accountname.fetchapp.com/api/v2/orders/9b48baef-a8bf-4ee9-b8f4-9da107b2a18e/order_items',
'product_count': 2,
'status': 'open',
'total': 4.0,
'vendor_id': '9b48baef-a8bf-4ee9-b8f4-9da107b2a18e'}
Delete a specified order.
fa.order_delete(order_id)
True
Expire a specified order.
fa.order_expire(order_id)
True
Send download email of a specified order.
fa.order_send_email(order_id)
True
List downloads for a specified order.
fa.order_downloads(order_id)
[ { 'filename': 'sample.txt',
'id': '23570',
'item_sku': 'example_sku',
'ip_address': '76.128.69.128',
'order_id': '1002',
'size_bytes': 13.0,
'downloaded_at': datetime.datetime(2011, 2, 8, 4, 19, 17, tzinfo=tzutc())}]
Display stats for a specified order.
fa.order_stats(order_id)
{ 'currency': 'USD',
'download_count': 0,
'id': '9b48baef-a8bf-4ee9-b8f4-9da107b2a18e',
'product_count': 2,
'total': 4.0,
'vendor_id': '9b48baef-a8bf-4ee9-b8f4-9da107b2a18e'}
List all order items for a specified order.
fa.order_list_items(order_id)
[ { 'created_at': datetime.datetime(2014, 2, 11, 11, 7, 9, tzinfo=tzoffset(None, -28800)),
'custom_1': None,
'custom_2': None,
'custom_3': None,
'download_count': 0,
'downloads_uri': 'https://accountname.fetchapp.com/api/v2/orders/9b48baef-a8bf-4ee9-b8f4-9da107b2a18e/order_items/10795832/downloads',
'files_uri': 'https://accountname.fetchapp.com/api/v2/orders/9b48baef-a8bf-4ee9-b8f4-9da107b2a18e/order_items/10795832/files',
'id': 10795832,
'license_key': None,
'order_id': '9b48baef-a8bf-4ee9-b8f4-9da107b2a18e',
'price': 1.0,
'product_name': 'test',
'sku': 'test'},
{ 'created_at': datetime.datetime(2014, 2, 11, 11, 7, 10, tzinfo=tzoffset(None, -28800)),
'custom_1': None,
'custom_2': None,
'custom_3': None,
'download_count': 0,
'downloads_uri': 'https://accountname.fetchapp.com/api/v2/orders/9b48baef-a8bf-4ee9-b8f4-9da107b2a18e/order_items/10795833/downloads',
'files_uri': 'https://accountname.fetchapp.com/api/v2/orders/9b48baef-a8bf-4ee9-b8f4-9da107b2a18e/order_items/10795833/files',
'id': 10795833,
'license_key': None,
'order_id': '9b48baef-a8bf-4ee9-b8f4-9da107b2a18e',
'price': 3.0,
'product_name': 'Title',
'sku': 'sku'}]
Display details of a specified order's specified item.
fa.order_item_details(order_id, sku)
{ 'created_at': datetime.datetime(2014, 2, 11, 11, 7, 9, tzinfo=tzoffset(None, -28800)),
'custom_1': None,
'custom_2': None,
'custom_3': None,
'download_count': 0,
'downloads_uri': 'https://accountname.fetchapp.com/api/v2/orders/9b48baef-a8bf-4ee9-b8f4-9da107b2a18e/order_items/10795832/downloads',
'files_uri': 'https://accountname.fetchapp.com/api/v2/orders/9b48baef-a8bf-4ee9-b8f4-9da107b2a18e/order_items/10795832/files',
'id': 10795832,
'license_key': None,
'order_id': '9b48baef-a8bf-4ee9-b8f4-9da107b2a18e',
'price': 1.0,
'product_name': 'test',
'sku': 'test'}
Display the files of a specified order's specified item.
fa.order_item_files(order_id, sku)
[ { 'download_count': 0,
'downloads': [],
'downloads_remaining': None,
'filename': 'me.jpg',
'guid': 'vgpaij',
'link': '/files/vgpaij',
'type': 'file'}]
Display the downloads of a specified order's specified item.
fa.order_item_downloads(order_id, sku)
[ { 'filename': 'sample.txt',
'id': '23570',
'item_sku': 'example_sku',
'ip_address': '76.128.69.128',
'order_id': '1002',
'size_bytes': 13.0,
'downloaded_at': datetime.datetime(2011, 2, 8, 4, 19, 17, tzinfo=tzutc())}]
Create an order. skus should be a list of SKUs to update. expiration_date can be a string or a datetime. send_email should be a boolean.
fa.order_create(order_id, first_name, last_name, email, skus, custom_fields=None, expiration_date=None, send_email=None, download_limit=None, ignore_items=None)
{ 'created_at': datetime.datetime(2014, 2, 11, 14, 30, 10, tzinfo=tzoffset(None, -18000)),
'currency': 'USD',
'custom_1': '3a3ee5fb-fa71-44b6-957e-bf20be252681',
'custom_2': '3fc75c85-34a6-4e57-9cd7-7a34087c4e21',
'custom_3': None,
'download_count': 0,
'download_limit': 5,
'downloads_uri': 'https://accountname.fetchapp.com/api/v2/orders/1c4f5a71-545c-4a99-84a5-7ce9c41cb0fa/downloads',
'email': '[email protected]',
'expiration_date': datetime.datetime(2014, 2, 12, 8, 30, 10, tzinfo=tzoffset(None, -18000)),
'first_name': '956bcf07-cf61-449f-b091-46a302af50af',
'id': '1c4f5a71-545c-4a99-84a5-7ce9c41cb0fa',
'last_name': '785dcb79-bec8-4f89-bc19-7ba8d3ff4ddb',
'link': '/get/mmkaix',
'order_items_uri': 'https://accountname.fetchapp.com/api/v2/orders/1c4f5a71-545c-4a99-84a5-7ce9c41cb0fa/order_items',
'product_count': 2,
'status': 'open',
'total': 4.0,
'vendor_id': '1c4f5a71-545c-4a99-84a5-7ce9c41cb0fa'}
Update a specified order. skus should be a list of SKUs to update. expiration_date can be a string or a datetime. send_email should be a boolean.
fa.order_update(
order_id=None,
first_name=None,
last_name=None,
email=None,
skus=None,
custom_fields=None,
expiration_date=None,
send_email=None,
download_limit=None,
ignore_items=None)
{ 'created_at': datetime.datetime(2014, 2, 11, 14, 30, 10, tzinfo=tzoffset(None, -18000)),
'currency': 'USD',
'custom_1': '5dd1030b-ea09-46b4-9506-b376e2bd0fd3',
'custom_2': 'ddbd1bdc-97e8-4824-9ca1-cccc0f5a527e',
'custom_3': 'e30f6ef3-fd1a-4e2a-abde-c91f0f5d4d2c',
'download_count': 0,
'download_limit': 5,
'downloads_uri': 'https://accountname.fetchapp.com/api/v2/orders/1c4f5a71-545c-4a99-84a5-7ce9c41cb0fa/downloads',
'email': '[email protected]',
'expiration_date': datetime.datetime(2014, 2, 12, 8, 30, 11, tzinfo=tzoffset(None, -18000)),
'first_name': '16590042-b55b-4fdd-ace9-7ca1c713699f',
'id': '1c4f5a71-545c-4a99-84a5-7ce9c41cb0fa',
'last_name': '6376ffe1-9ba3-4139-ab76-3b01c245bb4b',
'link': '/get/mmkaix',
'order_items_uri': 'https://accountname.fetchapp.com/api/v2/orders/1c4f5a71-545c-4a99-84a5-7ce9c41cb0fa/order_items',
'product_count': 2,
'status': 'open',
'total': 4.0,
'vendor_id': '1c4f5a71-545c-4a99-84a5-7ce9c41cb0fa'}
List your files.
fa.files(per_page=None, page=None)
[ { 'content_type': 'binary/octet-stream',
'filename': 'me.jpg',
'id': 289258,
'permalink': '/permalink/dnooma',
'size_bytes': 182808,
'type': 'file',
'url': None}]