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 rate limiting 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, page loops, and 429 throttling yourself. manatal wraps that into a small, predictable client:
- One line to authenticate
- Simple resource methods (
candidates,jobs,matches, …) - Automatic pagination
- Built-in protection against rate limits
- 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.get("position_name"))
# Fetch one record
job = client.jobs.retrieve(123)
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 results across pages (page_size=100).
Need a single page?
page = client.candidates.list_page(page=1, page_size=50)
print(page.count) # total matching records
print(len(page.results)) # records on this page
Rate limiting & retries
Manatal allows about 100 requests per minute per API token.
This client is designed to be gentle on the API:
- Soft client-side limit (~90 requests/minute by default)
- Automatic retry on
429using theRetry-Afterheader - Sensible timeouts and connection reuse
- Identifies itself with
User-Agent: manatal-python/...
You can tune the soft limit if needed:
client = Manatal(api_key="...", rate_limit=60) # slower scripts
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 as exc:
print("Still throttled after retries:", exc.retry_after)
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.1.tar.gz.
File metadata
- Download URL: manatal-0.1.1.tar.gz
- Upload date:
- Size: 10.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c00fcf1f92ea2934223510beb686d0a7922a2e744e5d908a40cf318d434fa25e
|
|
| MD5 |
80add20a792163026b8d6248ecdc9dfe
|
|
| BLAKE2b-256 |
6f231c2f9dd5d64b505b54e53fd349df791e6223982b93d7ce9000df9ffbdce8
|
Provenance
The following attestation bundles were made for manatal-0.1.1.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.1.tar.gz -
Subject digest:
c00fcf1f92ea2934223510beb686d0a7922a2e744e5d908a40cf318d434fa25e - Sigstore transparency entry: 2467384739
- Sigstore integration time:
-
Permalink:
TasfiqulGhani/manatal-python@65dcc94982544df9592ec7251feea2b07060c9f8 -
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@65dcc94982544df9592ec7251feea2b07060c9f8 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file manatal-0.1.1-py3-none-any.whl.
File metadata
- Download URL: manatal-0.1.1-py3-none-any.whl
- Upload date:
- Size: 14.6 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 |
a1db9d7a22ac6cf055e434b8b9ae31b875a0f8f1217089bd0f08d20104af64dd
|
|
| MD5 |
e3a436330130b900badbb76c3db60d6d
|
|
| BLAKE2b-256 |
2d97bd87ad952512e33776cca1a4becc60a116bb928ef466e45e7e0e82c78a18
|
Provenance
The following attestation bundles were made for manatal-0.1.1-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.1-py3-none-any.whl -
Subject digest:
a1db9d7a22ac6cf055e434b8b9ae31b875a0f8f1217089bd0f08d20104af64dd - Sigstore transparency entry: 2467384769
- Sigstore integration time:
-
Permalink:
TasfiqulGhani/manatal-python@65dcc94982544df9592ec7251feea2b07060c9f8 -
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@65dcc94982544df9592ec7251feea2b07060c9f8 -
Trigger Event:
workflow_dispatch
-
Statement type: