manatal
The easiest way to use the Manatal Open API from Python.
Manatal is an AI-powered ATS built for modern recruiting teams. Use this SDK to connect Manatal with your own tools — sync candidates and jobs, automate workflows, and integrate one of the best ATS platforms into your stack — with auth, pagination, and retries handled for you.
Note: Community-maintained package. Not affiliated with or officially supported by Manatal.
Why use this package?
Whether you are extending an AI-powered ATS workflow or connecting Manatal to HRIS/payroll systems, calling the Open API raw means handling tokens, pagination, and retries yourself. manatal wraps that into a small, predictable client:
- One line to authenticate
- Simple resource methods (
candidates,jobs,matches, …) - Automatic pagination
- Automatic retries on temporary errors
- Clear Python exceptions for common API errors
Installation
pip install manatal
Requires Python 3.9+.
How to get an Open API token
Open API access depends on your Manatal plan. Follow the official guide: Manatal Open API.
1. Enable Open API
- Sign in to Manatal.
- Go to Administration → Features → Open API, or open
Open API settings. - If it is not enabled yet, click Contact our support to request access.
Open API is available by default on the Enterprise Plus plan. See the support article for details.
2. Generate a token
- Open the same Open API settings page.
- Click Generate new token.
- Copy the token and store it securely (you will use it as
api_key).
You can also copy or delete existing tokens from that page.
3. Use the token in Python
from manatal import Manatal
client = Manatal(api_key="YOUR_OPEN_API_TOKEN")
Or set an environment variable:
export MANATAL_API_KEY="YOUR_OPEN_API_TOKEN"
from manatal import Manatal
client = Manatal() # reads MANATAL_API_KEY
Quick start
from manatal import Manatal
client = Manatal(api_key="YOUR_OPEN_API_TOKEN")
# Create a candidate
candidate = client.candidates.create(
full_name="Jane Doe",
email="jane@example.com",
)
print(candidate.id)
# List jobs (automatically walks every page)
for job in client.jobs.list():
print(job.id, job.position_name)
# Fetch one record
job = client.jobs.retrieve(123)
print(job.id)
API responses support both styles:
job = client.jobs.create(organization=2208123, position_name="pyp")
print(job.id) # recommended
print(job["id"]) # still works
print(job.position_name)
What you can access
| Resource | Example |
|---|---|
| Candidates | client.candidates.list(email="jane@example.com") |
| Jobs | client.jobs.create(organization=1, position_name="Engineer") |
| Organizations | client.organizations.list() |
| Matches | client.matches.create(candidate=123, job=456) |
| Contacts | client.contacts.list() |
| Users | client.users.list() |
| Skills & lookups | client.skills.list(), client.currencies.list(), client.match_stages.list() |
Nested data works the same way:
client.candidates.notes(123).create(info="Called candidate")
client.candidates.experiences(123).list()
client.jobs.attachments(456).list()
Pagination
By default, .list() returns all matching results. Need a single page?
page = client.candidates.list_page(page=1)
print(page.count) # total matching records
print(len(page.results)) # records on this page
Error handling
from manatal import (
Manatal,
AuthenticationError,
NotFoundError,
RateLimitError,
ValidationError,
)
client = Manatal(api_key="...")
try:
client.candidates.retrieve(999999)
except NotFoundError as exc:
print("Missing record:", exc.status_code, exc.body)
except ValidationError as exc:
print("Invalid payload:", exc.body)
except RateLimitError:
print("Too many requests — try again later")
except AuthenticationError:
print("Check your API token")
Useful links
| Resource | Link |
|---|---|
| Manatal app | https://app.manatal.com/ |
| Enable Open API & generate tokens | https://support.manatal.com/docs/manatal-api |
| Open API settings | https://app.manatal.com/administration/features/open-api |
| API reference (developers) | https://developers.manatal.com/reference/getting-started |
| Base URL used by this client | https://api.manatal.com/open/v3 |
Contributing
Issues and pull requests are welcome:
https://github.com/TasfiqulGhani/manatal-python
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file manatal-0.1.3.tar.gz.
File metadata
- Download URL: manatal-0.1.3.tar.gz
- Upload date:
- Size: 11.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6599d16be6f2545340e12b1964b89e72ac1509b71db1c70ff5f0a110adccf69
|
|
| MD5 |
70eefe80004c43731f440a629c8f1d1b
|
|
| BLAKE2b-256 |
9222de3b5b54dc4a8f2a4b8f3d083e579b34096fbc14bea04a50bc310f6871dc
|
Provenance
The following attestation bundles were made for manatal-0.1.3.tar.gz:
Publisher:
publish.yml on TasfiqulGhani/manatal-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
manatal-0.1.3.tar.gz -
Subject digest:
f6599d16be6f2545340e12b1964b89e72ac1509b71db1c70ff5f0a110adccf69 - Sigstore transparency entry: 2494994516
- Sigstore integration time:
-
Permalink:
TasfiqulGhani/manatal-python@ab20eb87d38aadbacff6231a25dad50f47248102 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/TasfiqulGhani
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ab20eb87d38aadbacff6231a25dad50f47248102 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file manatal-0.1.3-py3-none-any.whl.
File metadata
- Download URL: manatal-0.1.3-py3-none-any.whl
- Upload date:
- Size: 15.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4398bfa6ca646ca50eabd3dcbc723a9917680c2eb8f917241adb0a1f0fb53aa
|
|
| MD5 |
b110676752ae44db177ccdbad2a1ea7a
|
|
| BLAKE2b-256 |
d6bc2e5276f996ac9950eafd542efcefd9cd43aa2cbdec8923c8a0f4bdb12a7c
|
Provenance
The following attestation bundles were made for manatal-0.1.3-py3-none-any.whl:
Publisher:
publish.yml on TasfiqulGhani/manatal-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
manatal-0.1.3-py3-none-any.whl -
Subject digest:
f4398bfa6ca646ca50eabd3dcbc723a9917680c2eb8f917241adb0a1f0fb53aa - Sigstore transparency entry: 2494994522
- Sigstore integration time:
-
Permalink:
TasfiqulGhani/manatal-python@ab20eb87d38aadbacff6231a25dad50f47248102 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/TasfiqulGhani
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ab20eb87d38aadbacff6231a25dad50f47248102 -
Trigger Event:
workflow_dispatch
-
Statement type: