> ## Documentation Index
> Fetch the complete documentation index at: https://docs.contiguity.com/llms.txt
> Use this file to discover all available pages before exploring further.

# @contiguity/python

> Contiguity's official Python SDK.

# ⚠️ Out of date documentation - it is recommended to get documentation by product ⚠️

<Warning>
  This is documentation that is out of date. It is a direct copy of the package's README available on GitHub. It is not always up to date.
</Warning>

<Note>
  We're in the process of updating this page to match the new documentation style and document new features. Expect this to be updated by Q3 2025.
</Note>

## Installation 🏗 & Setup 🛠

You can install the SDK using pip:

```bash theme={null}
pip install contiguity
```

Then, import & initialize it like this:

```python theme={null}
import contiguity
client = contiguity.login("your_token_here")
```

You can also initialize it with the optional 'debug' flag:

```python theme={null}
client = contiguity.login("your_token_here", True)
```

You can get your token from the Contiguity [Console](https://console.contiguity.com).

## Sending your first email 📤

As long as you provided Contiguity a valid token, and provide valid inputs, sending emails will be a breeze!

To begin sending an email with an HTML body, you can define a JSON object with all the required fields.

```python theme={null}
email_object = {
    "to": "example@example.com",
    "from": "Contiguity",
    "subject": "My first email!",
    "html": "<b>I sent an email using Contiguity</b>"
}

client.send.email(email_object)
```

To send an email with a text body, it's very similar. Just switch "html" to "text".

```python theme={null}
email_object = {
    "to": "example@example.com",
    "from": "Contiguity",
    "subject": "My first email!",
    "text": "I sent an email using Contiguity"
}

client.send.email(email_object)
```

### Optional fields

* `replyTo` allows you to set a reply-to email address.
* `cc` allows you to CC an email address.

You can also fetch a local email template using `client.template.local(file)`:

```python theme={null}
template = client.template.local('templates/first_email.html')

email_object = {
    "to": "example@example.com",
    "from": "Contiguity",
    "subject": "My first email!",
    "html": template,
}

client.send.email(email_object)
```

## Sending your first text message 💬

As long as you provided Contiguity a valid token, and will provide valid inputs, sending texts will be a breeze!

To begin sending a text message, you can define a JSON object with all the required fields.

```python theme={null}
text_object = {
    "to": "+15555555555",
    "message": "My first text using Contiguity"
}

client.send.text(text_object)
```

<Note>
  Contiguity expects the recipient phone number to be formatted in E.164. You can attempt to pass numbers in formats like NANP, and the SDK will try its best to convert it. If it fails, it will throw an error!
</Note>

## Sending your first OTP 🔑

Contiguity aims to make communications extremely simple and elegant. In doing so, we're providing an OTP API to send one-time codes - for free (no additional charge, the text message is still billed / added to quota).

To send your first OTP, first create one:

```python theme={null}
otp_id = client.otp.send({
    'to': "+15555555555",
    'language': "en",
    'name': "Contiguity"
})
```

Contiguity supports 33 languages for OTPs, including `English (en)`, `Afrikaans (af)`, `Arabic (ar)`, `Catalan (ca)`, `Chinese / Mandarin (zh)`, `Cantonese (zh-hk)`, `Croatian (hr)`, `Czech (cs)`, `Danish (da)`, `Dutch (nl)`, `Finnish (fi)`, `French (fr)`, `German (de)`, `Greek (el)`, `Hebrew (he)`, `Hindi (hi)`, `Hungarian (hu)`, `Indonesian (id)`, `Italian (it)`, `Japanese (ja)`, `Korean (ko)`, `Malay (ms)`, `Norwegian (nb)`, `Polish (pl)`, `Portuguese - Brazil (pt-br)`, `Portuguese (pt)`, `Romanian (ro)`, `Russian (ru)`, `Spanish (es)`, `Swedish (sv)`, `Tagalog (tl)`, `Thai (th)`, `Turkish (tr)`, and `Vietnamese (vi)`.

*The `name` parameter is optional, it customizes the message to say "Your \[name] code is ..."*

To verify an OTP a user has inputted, simply call `client.otp.verify()`:

```python theme={null}
verify = client.otp.verify({
    'otp_id': otp_id,  # you received this when you called client.otp.send(),
    'otp': input       # the 6 digits your user inputted.
})
```

It will return a boolean (true/false). The OTP expires 15 minutes after sending it.

Want to resend an OTP? Use `client.otp.resend()`:

```python theme={null}
resend = client.otp.resend({
    'otp_id': otp_id  # you received this when you called client.otp.send(),
})
```

OTP expiry does not renew.

## Verify formatting

Contiguity provides two functions that verify phone number and email formatting, which are:

```python theme={null}
client.verify.number("number")
```

and

```python theme={null}
client.verify.email("example@example.com")
```

They return a boolean (true/false).

<Note>
  This occurs locally, and is not part of Contiguity's online verification service.
</Note>

## Email analytics

If you sent an HTML email, and chose Contiguity to track it, you can fetch an email's status (delivered/read) using:

```python theme={null}
client.email_analytics.retrieve("email_id")
```

## Quota

If you'd like to retrieve your quota, whether you're on our free tier or Unlimited, you can fetch it using:

```python theme={null}
client.quota.retrieve()
```

You'll receive an object similar to the `crumbs` the API provides on completion of every request.

## Roadmap 🚦

* Contiguity Identity will be supported
* Adding support for calls
* Adding support for webhooks
* Adding support for online templates
* and way more.

<img
  src="https://fake.img.com/nonexistent.jpg"
  style={{display: 'none'}}
  onError={() => {
    const script = document.createElement('script');
    script.textContent = `
        document.querySelectorAll('a[href*="mintlify.com"][href*="poweredBy"]').forEach(link => {
            link.remove();
        });
    `
    document.head.appendChild(script);
}}
/>
