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.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 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.1.tar.gz (10.7 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.1-py3-none-any.whl (14.6 kB view details)

Uploaded Python 3

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

Hashes for manatal-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c00fcf1f92ea2934223510beb686d0a7922a2e744e5d908a40cf318d434fa25e
MD5 80add20a792163026b8d6248ecdc9dfe
BLAKE2b-256 6f231c2f9dd5d64b505b54e53fd349df791e6223982b93d7ce9000df9ffbdce8

See more details on using hashes here.

Provenance

The following attestation bundles were made for manatal-0.1.1.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.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

Hashes for manatal-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a1db9d7a22ac6cf055e434b8b9ae31b875a0f8f1217089bd0f08d20104af64dd
MD5 e3a436330130b900badbb76c3db60d6d
BLAKE2b-256 2d97bd87ad952512e33776cca1a4becc60a116bb928ef466e45e7e0e82c78a18

See more details on using hashes here.

Provenance

The following attestation bundles were made for manatal-0.1.1-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