Skip to main content

Official Python SDK for the Pilot Status public API.

Project description

pilot-status (Python SDK)

Official Python SDK for the Pilot Status public API.

Installation

pip install pilot-status

Quickstart

Create an API key in the dashboard and use it only on the backend.

import os

from pilot_status import PilotStatusClient

client = PilotStatusClient(
    api_key=os.environ["PILOT_STATUS_API_KEY"],
)

accepted = client.messages.send(
    {
        "templateId": "onboarding-test",
        "destinationNumber": "+5511999999999",
        "variables": {"name": "John"},
    }
)

message = client.messages.get(accepted["id"])
print(message["status"])

Management (projects, API keys, numbers)

These endpoints create resources within the scope (project + environment) of the current api_key.

Projects

project = client.projects.create(
    {
        "name": "My Project",
        "description": "Optional description",
    }
)

projects = client.projects.list()

API keys

key = client.api_keys.create(
    {
        "name": "Backend Key",
        "retentionDays": 30,
    }
)

keys = client.api_keys.list()

Numbers (WhatsApp)

all_numbers = client.numbers.list()
# JSON array: id, instanceName, primaryLink/secondaryLink, apiKeys refs — no upstream tokens

created = client.numbers.create(
    {
        "name": "My WhatsApp",
        "number": "+5511999999999",
    }
)
# created["qrcodeBase64"], created["pairingCode"] (letter code or None)

refreshed = client.numbers.connect(created["instance"]["id"])
# refreshed["qrcodeBase64"], refreshed["pairingCode"]

status = client.numbers.get_status(created["instance"]["id"])
print(status["state"])

Opt-in check (destination authorization)

In LIVE, sending may require opt-in when using the Pilot Status WhatsApp number. You can check whether a destination is already authorized for your project:

opt_in = client.messages.check_opt_in("+5511999999999")
if not opt_in["authorized"]:
    raise Exception(f"Missing opt-in: {opt_in['reason']}")

Analytics

stats = client.analytics.get_dashboard_stats(tz="America/Sao_Paulo")
print(stats["totalSent"], stats["failureRate"])

Webhooks (parse / validation)

from pilot_status import parse_customer_webhook

def handler(payload: dict):
    event = parse_customer_webhook(payload)

    if event["event"] == "message.failed":
        print(event["data"]["errorMessage"])

Notes:

  • Customer webhook payloads do not include: projectSlug, lastMessageId. Optional correlationId (same as HTTP 202 when present) may appear on outbound status events and on message.reply / message.received when correlated to a prior send.
  • message.received includes fromMe (boolean).
  • message.group is delivered for inbound group messages (includes groupName).
  • message.newsletter is delivered for inbound channel messages (JID ending in @newsletter).
  • Supported events in the parser: message.sent, message.delivered, message.read, message.failed, message.reply, message.received, message.group, message.newsletter, optin.created.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pilot_status-1.0.8.tar.gz (18.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pilot_status-1.0.8-py3-none-any.whl (22.9 kB view details)

Uploaded Python 3

File details

Details for the file pilot_status-1.0.8.tar.gz.

File metadata

  • Download URL: pilot_status-1.0.8.tar.gz
  • Upload date:
  • Size: 18.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pilot_status-1.0.8.tar.gz
Algorithm Hash digest
SHA256 22d485b2e58002bb70298f2e8a12b3581d46bcb635fda6c96b4bac9b2306bd1c
MD5 e45c61805881ffff640fc2c6fb04ec5f
BLAKE2b-256 e3897e4f127f1b5223e29801728a87c5a75d2ae6f6e0eca11ab46febb64bdbc3

See more details on using hashes here.

Provenance

The following attestation bundles were made for pilot_status-1.0.8.tar.gz:

Publisher: publish-pypi.yml on oismaelash/pilot-status-nextjs-typescript-frontend-backend

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pilot_status-1.0.8-py3-none-any.whl.

File metadata

  • Download URL: pilot_status-1.0.8-py3-none-any.whl
  • Upload date:
  • Size: 22.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pilot_status-1.0.8-py3-none-any.whl
Algorithm Hash digest
SHA256 904028b093bc4d6b60a31a957e76ffc45ddae44d6f4c2105ea45a43489ff1f52
MD5 83c7cb357e7ac17933ba0597bd3043d8
BLAKE2b-256 21a0f502d84f697c4645d99ca87385854bd09bc0cb60ceb67ce695276e9de504

See more details on using hashes here.

Provenance

The following attestation bundles were made for pilot_status-1.0.8-py3-none-any.whl:

Publisher: publish-pypi.yml on oismaelash/pilot-status-nextjs-typescript-frontend-backend

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page