Skip to main content

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

  1. Sign in to Manatal.
  2. Go to Administration → Features → Open API, or open
    Open API settings.
  3. 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

  1. Open the same Open API settings page.
  2. Click Generate new token.
  3. 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 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 429 using the Retry-After header
  • 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

manatal-0.1.2.tar.gz (11.6 kB view details)

Uploaded Source

Built Distribution

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

manatal-0.1.2-py3-none-any.whl (15.5 kB view details)

Uploaded Python 3

File details

Details for the file manatal-0.1.2.tar.gz.

File metadata

  • Download URL: manatal-0.1.2.tar.gz
  • Upload date:
  • Size: 11.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for manatal-0.1.2.tar.gz
Algorithm Hash digest
SHA256 a1cc560562d6e3707d04441a775004b3a457d4ee923f2b056f02bb959d493660
MD5 d4ac5d5e5ae7e9d3f1a9cec7f3bdd352
BLAKE2b-256 54e0f1efcbc17543e8f31d7fed45169b932bd1be5aedab30b4e4af7e39b11ddf

See more details on using hashes here.

Provenance

The following attestation bundles were made for manatal-0.1.2.tar.gz:

Publisher: publish.yml on TasfiqulGhani/manatal-python

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

File details

Details for the file manatal-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: manatal-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 15.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for manatal-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 03f440ddbc362a47a3adf426237916ea3c9eb5b96eff6c08b89d1742d2e618c0
MD5 98e3a55004877fce75fe02725580fcd0
BLAKE2b-256 62b3b1cc9649da2aeba6dd407f1a0f81ab7c5e64b45cf34f5d74cce247d9b6c9

See more details on using hashes here.

Provenance

The following attestation bundles were made for manatal-0.1.2-py3-none-any.whl:

Publisher: publish.yml on TasfiqulGhani/manatal-python

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 Sentry Error logging StatusPage Status page