{
"status": "success",
"message": "SignedURL Pro API is running.",
"time": "2026-07-16T13:47:13.632Z"
}
curl --location --request GET 'https://zylalabs.com/api/13197/securegate+dynamic+asset+access+api/26929/health+check' --header 'Authorization: Bearer YOUR_API_KEY'
{
"status": "success",
"accessUrl": "https://signedurl-gatekeeper.cancap.workers.dev/access/eyJmaWxlVXJsIjoiaHR0cHM6Ly9weXBpLm9yZy9weXBpL3JlcXVlc3RzL2pzb24iLCJmaWxlSWQiOiJzYW1wbGUtZmlsZS0xIiwiaXAiOm51bGwsInVhSGFzaCI6bnVsbCwiZXhwIjoxNzg0MTQ5NTcxLCJtYXhVc2VzIjoyLCJub25jZSI6Ijg4YzllMDJmYjU0MGYyYjZjNzA2MGMzMWY1NmJjMDM4In0.feba462a71fbe444d3b78bf7c204c815ee37579a1a7c476c02aad12038a48a49",
"fileId": "sample-file-1",
"expiresAt": "2026-07-15T21:06:11.000Z",
"maxUses": 2,
"ipBound": false,
"clientBound": false
}
curl --location --request POST 'https://zylalabs.com/api/13197/securegate+dynamic+asset+access+api/26930/generate+signed+access+link' --header 'Authorization: Bearer YOUR_API_KEY'
--data-raw '{
"fileUrl": "https://pypi.org/pypi/requests/json",
"fileId": "sample-file-1",
"ttlSeconds": 900,
"maxUses": 2,
"bindIp": false,
"bindClient": false
}'
{"info":{"author":null,"author_email":"Kenneth Reitz <[email protected]>","bugtrack_url":null,"classifiers":["Development Status :: 5 - Production/Stable","Environment :: Web Environment","Intended Audience :: Developers","License :: OSI Approved :: Apache Software License","Natural Language :: English","Operating System :: OS Independent","Programming Language :: Python","Programming Language :: Python :: 3","Programming Language :: Python :: 3 :: Only","Programming Language :: Python :: 3.10","Programming Language :: Python :: 3.11","Programming Language :: Python :: 3.12","Programming Language :: Python :: 3.13","Programming Language :: Python :: 3.14","Programming Language :: Python :: 3.15","Programming Language :: Python :: Free Threading :: 2 - Beta","Programming Language :: Python :: Implementation :: CPython","Programming Language :: Python :: Implementation :: PyPy","Topic :: Internet :: WWW/HTTP","Topic :: Software Development :: Libraries"],"description":"# Requests\n\n[](https://pypi.org/project/requests/)\n[](https://pypi.org/project/requests)\n[](https://pepy.tech/project/requests)\n[](https://github.com/psf/requests/graphs/contributors)\n[](https://requests.readthedocs.io)\n\n**Requests** is a simple, yet elegant, HTTP library.\n\n```python\n>>> import requests\n>>> r = requests.get('https://httpbin.org/basic-auth/user/pass', auth=('user', 'pass'))\n>>> r.status_code\n200\n>>> r.headers['content-type']\n'application/json; charset=utf8'\n>>> r.encoding\n'utf-8'\n>>> r.text\n'{\"authenticated\": true, ...'\n>>> r.json()\n{'authenticated': True, ...}\n```\n\nRequests allows you to send HTTP/1.1 requests extremely easily. There’s no need to manually add query strings to your URLs, or to form-encode your `PUT` & `POST` data — but nowadays, just use the `json` method!\n\nRequests is one of the most downloaded Python packages today, pulling in around `300M downloads / week` — according to GitHub, Requests is currently [depended upon](https://github.com/psf/requests/network/dependents?package_id=UGFja2FnZS01NzA4OTExNg%3D%3D) by `4,000,000+` repositories.\n\n## Installing Requests and Supported Versions\n\nRequests is available on PyPI:\n\n```console\n$ python -m pip install requests\n```\n\nRequests officially supports Python 3.10+.\n\n## Supported Features & Best–Practices\n\nRequests is ready for the demands of building robust and reliable HTTP–speaking applications, for the needs of today.\n\n- Keep-Alive & Connection Pooling\n- International Domains and URLs\n- Sessions with Cookie Persistence\n- Browser-style TLS/SSL Verification\n- Basic & Digest Authentication\n- Familiar `dict`–like Cookies\n- Automatic Content Decompression and Decoding\n- Multi-part File Uploads\n- SOCKS Proxy Support\n- Connection Timeouts\n- Streaming Downloads\n- Automatic honoring of `.netrc`\n- Chunked HTTP Requests\n\n## Cloning the repository\n\nWhen cloning the Requests repository, you may need to add the `-c\nfetch.fsck.badTimezone=ignore` flag to avoid an error about a bad commit timestamp (see\n[this issue](https://github.com/psf/requests/issues/2690) for more background):\n\n```shell\ngit clone -c fetch.fsck.badTimezone=ignore https://github.com/psf/requests.git\n```\n\nYou can also apply this setting to your global Git config:\n\n```shell\ngit config --global fetch.fsck.badTimezone ignore\n```\n\n---\n\n[](https://kennethreitz.org) [](https://www.python.org/psf)\n","description_content_type":"text/markdown","docs_url":null,"download_url":null,"downloads":{"last_day":-1,"last_month":-1,"last_week":-1},"dynamic":["License-File"],"home_page":null,"keywords":null,"license":"Apache-2.0","license_expression":null,"license_files":["LICENSE","NOTICE"],"maintainer":null,"maintainer_email":"Ian Stapleton Cordasco <[email protected]>, Nate Prewitt <[email protected]>","name":"requests","package_url":"https://pypi.org/project/requests/","platform":null,"project_url":"https://pypi.org/project/requests/","project_urls":{"Documentation":"https://requests.readthedocs.io","Source":"https://github.com/psf/requests"},"provides_extra":["security","socks","use-chardet-on-py3"],"release_url":"https://pypi.org/project/requests/2.34.2/","requires_dist":["charset_normalizer<4,>=2","idna<4,>=2.5","urllib3<3,>=1.26","certifi>=2023.5.7","PySocks!=1.5.7,>=1.5.6; extra == \"socks\"","chardet<8,>=3.0.2; extra == \"use-chardet-on-py3\""],"requires_python":">=3.10","summary":"Python HTTP for Humans.","version":"2.34.2","yanked":false,"yanked_reason":null},"last_serial":37059094,"ownership":{"organization":null,"roles":[{"role":"Owner","user":"Lukasa"},{"role":"Owner","user":"graffatcolmingov"},{"role":"Owner","user":"nateprewitt"}]},"releases":{"0.0.1":[],"0.10.0":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"62350230421b8c4efad6624518028163329ad0c2df9e58e6b3bee013427bf8f6","md5":"c90a48af18eb4170dbe4832c1104440c","sha256":"210a82e678c45d433a4ad1f105974b3102a8ab5198872dc0a3238a8750d4c65e"},"downloads":-1,"filename":"requests-0.10.0.tar.gz","has_sig":false,"md5_digest":"c90a48af18eb4170dbe4832c1104440c","packagetype":"sdist","python_version":"source","requires_python":null,"size":62046,"upload_time":"2012-01-22T05:08:17","upload_time_iso_8601":"2012-01-22T05:08:17.091441Z","url":"https://files.pythonhosted.org/packages/62/35/0230421b8c4efad6624518028163329ad0c2df9e58e6b3bee013427bf8f6/requests-0.10.0.tar.gz","yanked":false,"yanked_reason":null}],"0.10.1":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"b456ba2d803383ec32d70f8faa7df5eb37ee9b3fc662ff68b7ab01ad9740b83a","md5":"699147d2143bff95238befa58980b912","sha256":"da6031575a30c7b65ea99465183468349b3645e6bf5322e49d53f565b27ed2b5"},"downloads":-1,"filename":"requests-0.10.1.tar.gz","has_sig":false,"md5_digest":"699147d2143bff95238befa58980b912","packagetype":"sdist","python_version":"source","requires_python":null,"size":63234,"upload_time":"2012-01-23T08:22:52","upload_time_iso_8601":"2012-01-23T08:22:52.352375Z","url":"https://files.pythonhosted.org/packages/b4/56/ba2d803383ec32d70f8faa7df5eb37ee9b3fc662ff68b7ab01ad9740b83a/requests-0.10.1.tar.gz","yanked":false,"yanked_reason":null}],"0.10.2":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"581e6b84552b6553f5beaf7cb0fe15115e7e4673326ed9188ad5338559ee8285","md5":"47c3cf85a0112d423137b43989663bef","sha256":"1546ef1e291ae337086369b621096fb0f69f88f6f67f60b1f6b7c18d1ca278e1"},"downloads":-1,"filename":"requests-0.10.2.tar.gz","has_sig":false,"md5_digest":"47c3cf85a0112d423137b43989663bef","packagetype":"sdist","python_version":"source","requires_python":null,"size":60158,"upload_time":"2012-02-15T09:48:52","upload_time_iso_8601":"2012-02-15T09:48:52.830436Z","url":"https://files.pythonhosted.org/packages/58/1e/6b84552b6553f5beaf7cb0fe15115e7e4673326ed9188ad5338559ee8285/requests-0.10.2.tar.gz","yanked":false,"yanked_reason":null}],"0.10.3":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"014439988315e036b79fe70428273053617266bf20d1363e91082346fae8450d","md5":"a055af00593f4828c3becd0ccfab503f","sha256":"8eeb24328304b015cbd59a49670e2738b77034b225b566729ddb19941899e490"},"downloads":-1,"filename":"requests-0.10.3.tar.gz","has_sig":false,"md5_digest":"a055af00593f4828c3becd0ccfab503f","packagetype":"sdist","python_version":"source","requires_python":null,"size":60493,"upload_time":"2012-02-20T20:10:57","upload_time_iso_8601":"2012-02-20T20:10:57.584946Z","url":"https://files.pythonhosted.org/packages/01/44/39988315e036b79fe70428273053617266bf20d1363e91082346fae8450d/requests-0.10.3.tar.gz","yanked":false,"yanked_reason":null}],"0.10.4":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"94ac5fa21e435ba8050d14db92ce29763c28196b727d4079dc608d39177fbf9b","md5":"5e465e9e739bcc9f71935ca4e9706168","sha256":"2ad4cc51d7595ca6f97373a0d697999e0cbdbbf1ba665d18f0f3dcec12b8be77"},"downloads":-1,"filename":"requests-0.10.4.tar.gz","has_sig":false,"md5_digest":"5e465e9e739bcc9f71935ca4e9706168","packagetype":"sdist","python_version":"source","requires_python":null,"size":60889,"upload_time":"2012-02-20T22:21:31","upload_time_iso_8601":"2012-02-20T22:21:31.091713Z","url":"https://files.pythonhosted.org/packages/94/ac/5fa21e435ba8050d14db92ce29763c28196b727d4079dc608d39177fbf9b/requests-0.10.4.tar.gz","yanked":false,"yanked_reason":null}],"0.10.6":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"b41f8f5430040fcf4391dc5bd324424a569e2e0d96595952b21eb82403602d98","md5":"c889401445de3cbbac98509208a73b83","sha256":"31134b4f35951730dcce59f2af334478b68caa5728902a1d6bd5e115ec677d8b"},"downloads":-1,"filename":"requests-0.10.6.tar.gz","has_sig":false,"md5_digest":"c889401445de3cbbac98509208a73b83","packagetype":"sdist","python_version":"source","requires_python":null,"size":61673,"upload_time":"2012-02-26T05:17:54","upload_time_iso_8601":"2012-02-26T05:17:54.135905Z","url":"https://files.pythonhosted.org/packages/b4/1f/8f5430040fcf4391dc5bd324424a569e2e0d96595952b21eb82403602d98/requests-0.10.6.tar.gz","yanked":false,"yanked_reason":null}],"0.10.7":[{"comment_text":"","core-metadata":false,"digests":{"blake2b_256":"c5cd0597f9c040db24ca6d23cc74faa102554cb0a93bdbffb855d7749547921f","md5":"a3ac9d431981dcfd592fd0f35c499e4a","sha256":"80f32a74bed8cf081a3a25512f8725e09ceda217101ea706efced262bb05aec6"},"downloads":-1,"filename":"requests-0.10.7.tar.gz","has_sig":false,"md5_digest":"a3ac9d431981dcfd592fd0f35c499e4a"}]},"_note":"Response truncated for documentation purposes"}
curl --location --request GET 'https://zylalabs.com/api/13197/securegate+dynamic+asset+access+api/26931/access+protected+file' --header 'Authorization: Bearer YOUR_API_KEY'
--data-raw 'eyJmaWxlVXJsIjoiaHR0cHM6Ly9weXBpLm9yZy9weXBpL3JlcXVlc3RzL2pzb24iLCJmaWxlSWQiOiJzYW1wbGUtZmlsZS0xIiwiaXAiOm51bGwsInVhSGFzaCI6bnVsbCwiZXhwIjoxNzg0MTQ5NTcxLCJtYXhVc2VzIjoyLCJub25jZSI6Ijg4YzllMDJmYjU0MGYyYjZjNzA2MGMzMWY1NmJjMDM4In0.feba462a71fbe444d3b78bf7c204c815ee37579a1a7c476c02aad12038a48a49'
{
"status": "success",
"valid": true,
"fileId": "sample-file-1",
"expiresAt": "2026-07-15T21:06:11.000Z",
"secondsRemaining": 395,
"usesRemaining": 1,
"ipBound": false,
"clientBound": false
}
curl --location --request GET 'https://zylalabs.com/api/13197/securegate+dynamic+asset+access+api/26932/verify+link+status' --header 'Authorization: Bearer YOUR_API_KEY'
--data-raw 'eyJmaWxlVXJsIjoiaHR0cHM6Ly9weXBpLm9yZy9weXBpL3JlcXVlc3RzL2pzb24iLCJmaWxlSWQiOiJzYW1wbGUtZmlsZS0xIiwiaXAiOm51bGwsInVhSGFzaCI6bnVsbCwiZXhwIjoxNzg0MTQ5NTcxLCJtYXhVc2VzIjoyLCJub25jZSI6Ijg4YzllMDJmYjU0MGYyYjZjNzA2MGMzMWY1NmJjMDM4In0.feba462a71fbe444d3b78bf7c204c815ee37579a1a7c476c02aad12038a48a49'
After signing up, every developer is assigned a personal API access key, a unique combination of letters and digits provided to access to our API endpoint. To authenticate with the SecureGate Dynamic Asset Access API simply include your bearer token in the Authorization header.
| Header | Description |
|---|---|
Authorization
|
Required
Should be Bearer access_key. See "Your API Access Key" above when you are subscribed.
|
No long-term commitment. Upgrade, downgrade, or cancel anytime. Free Trial includes up to 50 requests.
(Save 2 months with annual billing 🎉)
Trusted by leading companies
This API generates signed access tokens that gate access to a file, protecting it from being freely shared or redistributed.
Endpoints and functionality:
Typical use cases: protecting premium video/course content, gated digital downloads, temporary file-sharing links, license-key delivery, and any scenario where a platform needs to stop a paid link from being freely redistributed.
Send a POST request to /generate with the real file URL, the end user's IP address, expiration time, and maximum number of uses. The API returns a signed access link that can be safely given to that user — the real file location is never exposed.
Each link is bound to the specific IP address and browser signature it was issued for, expires after a set time, and can only be used a limited number of times. If the link is opened from a different network or device, or after it expires or reaches its use limit, access is denied.
Yes. Send a GET request to /verify/:token to see the remaining time and use count without consuming an access attempt. This is useful for showing the user a countdown or remaining-downloads indicator before they click.
No. The API retrieves the file server-side and streams it back through the signed link. The actual file location never appears in the browser's address bar, network requests, or page source, so it cannot be bookmarked or reused after the link expires.
Every token is cryptographically signed. Any modification to the link — including attempts to extend its expiration or increase its use limit — invalidates the signature, and the request is rejected immediately.
The Generate Signed Access Link endpoint returns a JSON object containing the status of the request, the signed access URL, the file ID, expiration time, maximum uses allowed, and whether the link is IP or client bound.
The Access Protected File endpoint requires a signed token as a parameter. This token contains all necessary information for validation, including signature, expiry, and usage limits.
The Verify Link Status endpoint returns a JSON object structured with fields indicating the status of the request, validity of the token, file ID, expiration time, seconds remaining, uses remaining, and binding information.
Key fields include "status" (indicating success), "accessUrl" (the signed link), "fileId" (identifier for the file), "expiresAt" (expiration timestamp), "maxUses" (maximum allowed uses), and binding flags for IP and client.
The Verify Link Status endpoint provides information about the token's validity, remaining time until expiration, remaining uses, and whether the link is IP or client bound, without consuming a use.
Users can customize requests by specifying the real file URL, the end user's IP address, desired expiration duration, and maximum number of uses when sending a POST request to the Generate Signed Access Link endpoint.
If the Access Protected File endpoint receives an invalid token (expired, tampered, IP-mismatched, or fully-used), it will reject the request and not stream the file, ensuring secure access control.
Typical use cases include protecting premium video content, gated digital downloads, temporary file-sharing links, and secure license-key delivery, ensuring that access is controlled and monitored.
To obtain your API key, first sign in to your account and navigate to the API you want to use. From the API's Pricing section, choose a plan and complete the subscription process. Once subscribed, return to the API page and you will see your API Access Key displayed at the top of the documentation page. You can use this key to authenticate your requests.
You can’t switch APIs during the free trial. If you subscribe to a different API, your trial will end and the new subscription will start as a paid plan.
The free trial lasts for 7 days and allows you to make up to 50 API requests.
No, the free trial is available only once, so we recommend using it on the API that interests you the most. Most of our APIs offer a free trial, but some may not include this option.
Yes. If the API offers a free trial, you will see a "Free 7-Day Trial" option in its Pricing section. The trial lasts for 7 days and allows up to 50 API requests, enabling you to evaluate the API before subscribing to a paid plan.
Zyla API Hub is like a big store for APIs, where you can find thousands of them all in one place. We also offer dedicated support and real-time monitoring of all APIs. Once you sign up, you can pick and choose which APIs you want to use. Just remember, each API needs its own subscription. But if you subscribe to multiple ones, you'll use the same key for all of them, making things easier for you.
You can monitor your API usage through the response headers included with every request:
x-zyla-api-calls-monthly-used: Shows the total number of API requests you have used during the current billing period.
x-zyla-api-calls-monthly-remaining: Shows the number of API requests you have remaining for the current billing period.
Yes, you can cancel your subscription at any time. Simply go to the Pricing section of the API you're subscribed to and click the "Unsubscribe" button.
Please note that upgrades, downgrades, and cancellations take effect immediately. Once your subscription is canceled, access to the service will end immediately, regardless of any remaining API calls in your quota.
Please have a look at our Refund Policy: https://zylalabs.com/terms#refund