# Connector SDK

Give your services named, centrally managed connections to any system that has a Python client.

## Get started

Build a complete connector - wrap a client library and call it from a service.

[Your first connector](https://zato.io/docs/sdk/tutorial.html)

connector.py

```
# Any Python client as a connection type
class CRMConnector(Connector):
    type = 'crm'
    host = Field.Text()
    api_key = Field.Secret()

# .. then use it in any service
conn = self.out.crm['My CRM']
conn.get_customer('CUST-001')
```

## Get started

[Tutorial Build a complete connector - wrap a client library and call it from a service.](https://zato.io/docs/sdk/tutorial.html) [SDK reference Field types, lifecycle methods and the behavior of every invocation.](https://zato.io/docs/sdk/reference.html) [Command-line tools Run one-shot commands and long-lived tools as connections.](https://zato.io/docs/sdk/cli-tools.html)

## How-to

[Fire-and-forget Send events without waiting for replies and deliver the buffered remainder on stop.](https://zato.io/docs/sdk/fire-and-forget.html) [Foreign runtimes Run a Java or .NET client as a supervised process and call it like a connection.](https://zato.io/docs/sdk/foreign-runtimes.html) [Multiplexed requests Send many requests over one socket and match replies by correlation ID.](https://zato.io/docs/sdk/multiplexed-requests.html) [Stateful sockets Pool connections to systems that require a logon handshake.](https://zato.io/docs/sdk/stateful-sockets.html) [Subscriptions Receive pushed messages and deliver them to services and topics.](https://zato.io/docs/sdk/subscriptions.html) [Python in a separate interpreter Run a Python library in an interpreter of its own and call it from services.](https://zato.io/docs/sdk/python-cannot-run-in-server.html)
