Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Short-io/client-python

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

short-io-api-client

A Python client library for the Short.io API, auto-generated from the OpenAPI specification using openapi-python-client.

Requirements

  • Python 3.10+
  • httpx >= 0.23.0

Installation

Using pip

pip install short-io-api-client

Using Poetry

poetry add short-io-api-client

Quick Start

Authentication

All Short.io API endpoints require an API key. Create an AuthenticatedClient with your key passed via the Authorization header:

from short_io_api_client import AuthenticatedClient

client = AuthenticatedClient(
    base_url="https://api.short.io",
    token="YOUR_API_KEY",
    prefix="",  # Short.io uses a raw API key, not "Bearer <token>"
)

Create a Short Link

from short_io_api_client import AuthenticatedClient
from short_io_api_client.api.link_management import post_links
from short_io_api_client.models import PostLinksBody

client = AuthenticatedClient(
    base_url="https://api.short.io",
    token="YOUR_API_KEY",
    prefix="",
)

with client as c:
    result = post_links.sync(
        client=c,
        body=PostLinksBody(
            original_url="https://example.com/my-long-url",
            domain="your-domain.short.gy",
            path="my-custom-slug",
            title="My Link",
            tags=["marketing", "campaign"],
        ),
    )
    print(result)

List Domains

from short_io_api_client.api.domains import get_api_domains

with client as c:
    domains = get_api_domains.sync(client=c)
    if domains:
        for domain in domains:
            print(domain)

List Links for a Domain

from short_io_api_client.api.link_queries import get_api_links

with client as c:
    result = get_api_links.sync(client=c, domain_id=123456)
    print(result)

Update a Link

from short_io_api_client.api.link_management import post_links_link_id
from short_io_api_client.models import PostLinksLinkIdBody

with client as c:
    result = post_links_link_id.sync(
        link_id="lnk_abc123",
        client=c,
        body=PostLinksLinkIdBody(
            original_url="https://example.com/updated-url",
            title="Updated Title",
        ),
    )
    print(result)

Delete a Link

from short_io_api_client.api.link_management import delete_links_link_id

with client as c:
    result = delete_links_link_id.sync(link_id="lnk_abc123", client=c)
    print(result)

Get Link by Original URL

from short_io_api_client.api.link_queries import get_links_by_original_url

with client as c:
    result = get_links_by_original_url.sync(
        client=c,
        domain="your-domain.short.gy",
        original_url="https://example.com/my-long-url",
    )
    print(result)

Async Usage

Every endpoint has async variants. Replace .sync() with .asyncio():

import asyncio
from short_io_api_client import AuthenticatedClient
from short_io_api_client.api.link_management import post_links
from short_io_api_client.models import PostLinksBody

client = AuthenticatedClient(
    base_url="https://api.short.io",
    token="YOUR_API_KEY",
    prefix="",
)

async def main():
    async with client as c:
        result = await post_links.asyncio(
            client=c,
            body=PostLinksBody(
                original_url="https://example.com",
                domain="your-domain.short.gy",
            ),
        )
        print(result)

asyncio.run(main())

Detailed Responses

Use the _detailed variants to get full HTTP response information:

from short_io_api_client.api.link_management import post_links
from short_io_api_client.types import Response

with client as c:
    response: Response = post_links.sync_detailed(
        client=c,
        body=PostLinksBody(
            original_url="https://example.com",
            domain="your-domain.short.gy",
        ),
    )
    print(response.status_code)  # HTTPStatus enum
    print(response.headers)      # dict
    print(response.parsed)       # parsed model or None
    print(response.content)      # raw bytes

Error Handling

Enable raise_on_unexpected_status to raise on undocumented status codes:

client = AuthenticatedClient(
    base_url="https://api.short.io",
    token="YOUR_API_KEY",
    prefix="",
    raise_on_unexpected_status=True,
)

Documented error responses (400, 401, 402, 403, 404, 409, 500) are returned as typed model objects. Check the response type to handle errors:

from short_io_api_client.models import PostLinksResponse200, PostLinksResponse409

result = post_links.sync(client=c, body=body)

if isinstance(result, PostLinksResponse200):
    print("Created:", result)
elif isinstance(result, PostLinksResponse409):
    print("Conflict: link path already exists")

API Modules

Module Description
api.link_management Create, update, delete, archive, bulk operations, QR codes, permissions
api.link_queries List links, get by ID/URL, folders, OpenGraph data
api.link_targeting Country and region-based link targeting
api.domains List, get, create, and configure domains

Link Management Endpoints

Function Description
post_links Create a new short link
post_links_link_id Update a link by ID
delete_links_link_id Delete a link by ID
delete_links_delete_bulk Bulk delete links
post_links_bulk Bulk create links
post_links_archive Archive a link
post_links_unarchive Unarchive a link
post_links_archive_bulk Bulk archive links
post_links_unarchive_bulk Bulk unarchive links
post_links_duplicate_link_id Duplicate a link
post_links_qr_link_id_string Generate QR code for a link
post_links_qr_bulk Bulk generate QR codes
post_links_public Create a public link
post_links_examples Get link examples
post_tags_bulk Bulk tag operations
put_links_opengraph_domain_id_link_id Update OpenGraph data
get_links_permissions_domain_id_link_id Get link permissions
post_links_permissions_domain_id_link_id_user_id Set link permissions
delete_links_permissions_domain_id_link_id_user_id Remove link permissions
get_links_tweetbot Tweetbot integration

Link Query Endpoints

Function Description
get_api_links List links for a domain
get_links_link_id Get link by ID
get_links_by_original_url Get link by original URL
get_links_expand Expand a short link
get_links_multiple_by_url Get multiple links by URL
get_links_opengraph_domain_id_link_id Get OpenGraph data
get_links_folders_domain_id List folders for a domain
get_links_folders_domain_id_folder_id Get folder by ID
post_links_folders Create a folder

Domain Endpoints

Function Description
get_api_domains List all domains
get_domains_domain_id Get domain by ID
post_domains Create a new domain
post_domains_settings_domain_id Update domain settings

Link Targeting Endpoints

Function Description
get_link_country_link_id Get country targeting rules
post_link_country_link_id Set country targeting
post_link_country_bulk_link_id Bulk set country targeting
delete_link_country_link_id_country Delete country targeting rule
get_link_region_link_id Get region targeting rules
post_link_region_link_id Set region targeting
post_link_region_bulk_link_id Bulk set region targeting
delete_link_region_link_id_country_region Delete region targeting rule
get_link_region_list_country List regions for a country

Advanced Configuration

Custom Timeout

import httpx

client = AuthenticatedClient(
    base_url="https://api.short.io",
    token="YOUR_API_KEY",
    prefix="",
    timeout=httpx.Timeout(30.0),
)

Request/Response Logging

client = AuthenticatedClient(
    base_url="https://api.short.io",
    token="YOUR_API_KEY",
    prefix="",
    httpx_args={
        "event_hooks": {
            "request": [lambda r: print(f"-> {r.method} {r.url}")],
            "response": [lambda r: print(f"<- {r.status_code}")],
        }
    },
)

Custom SSL Certificate

client = AuthenticatedClient(
    base_url="https://api.short.io",
    token="YOUR_API_KEY",
    prefix="",
    verify_ssl="/path/to/certificate_bundle.pem",
)

Function Variants

Every endpoint module provides four functions:

Function Description
sync Blocking call, returns parsed response model or None
sync_detailed Blocking call, returns Response with status, headers, and parsed body
asyncio Async call, returns parsed response model or None
asyncio_detailed Async call, returns Response with status, headers, and parsed body

Building / Publishing

This project uses Poetry for dependency management and packaging:

# Build a wheel
poetry build -f wheel

# Publish to PyPI
poetry publish --build

# Publish to a private repository
poetry config repositories.my-repo https://my-repo.example.com/simple/
poetry publish --build -r my-repo

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.