{
  "data": {
    "a": {
      "slug": "factorial",
      "name": "Factorial",
      "vendor": "Everyday Software, S.L.",
      "vendorUrl": "https://factorial.com",
      "kind": "http-api",
      "category": "hr",
      "summary": "Factorial is an HR platform from Barcelona for employee records, time off, attendance, payroll data, recruiting and expenses. Agents reach it through a versioned REST API with API keys or OAuth 2.0, webhooks and a hosted MCP server.",
      "url": "https://www.anchorterminal.com/tools/factorial",
      "markdownUrl": "https://www.anchorterminal.com/tools/factorial.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/factorial.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/factorial.json",
      "repo": "https://github.com/factorialco/factorial-api-sdks",
      "license": "Proprietary service under Factorial's terms and conditions. The TypeScript and Python SDKs are MIT",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://api.factorialhr.com",
      "packages": [
        {
          "registry": "npm",
          "name": "@factorialco/api-client"
        },
        {
          "registry": "pypi",
          "name": "factorial-api-client"
        }
      ],
      "auth": "mixed",
      "authNotes": "A company administrator creates credentials in Factorial's settings, with no registration or approval queue for a company's own use. An API key goes in `x-api-key`, grants every scope and does not expire. OAuth 2.0 apps use the authorisation code grant through Factorial ID (PKCE for public clients), choose from 33 scopes and receive 1-hour company or user tokens with a refresh token. A user token is limited by that employee's permission group. Integrations for other companies must use OAuth, with scopes agreed with Factorial. The MCP server uses OAuth with dynamic client registration and runs as the signed-in employee.",
      "pricing": "paid",
      "pricingNotes": "The pricing page says Factorial starts at $8 per user per month and asks for a tailored quote for everything else. The terms describe a free trial of at most 15 days granted at Factorial's discretion, and the sign-up page is drawn by script, so its conditions were not read. The demo API environment is provisioned by an account manager, so an agent cannot start without a customer account. Factorial One requests through the MCP server consume plan credits (https://factorial.com/pricing, checked 2026-10-08).",
      "priceSummary": "$8 / seat-mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the developer docs, the OpenAPI definition, the terms or the pricing page (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 7,
        "npmWeekly": 1367,
        "pypiWeekly": 1075,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://apidoc.factorialhr.com",
      "llmsTxt": "https://apidoc.factorialhr.com/llms.txt",
      "openapi": "https://api.factorialhr.com/oas/",
      "capabilities": [
        "hr.employees",
        "hr.time-off",
        "hr.org",
        "hr.documents",
        "recruiting.applications",
        "recruiting.jobs",
        "recruiting.candidates",
        "spend.expenses",
        "tasks.create"
      ],
      "tags": [
        "hosted",
        "paid",
        "sales-led",
        "api-key",
        "oauth",
        "mcp",
        "openapi",
        "llms-txt",
        "webhooks",
        "sandbox",
        "typescript",
        "python",
        "status-page",
        "sla",
        "bug-bounty",
        "soc2",
        "eu"
      ],
      "lastRelease": "2026-10-05",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 66.3,
        "grade": "B",
        "agentReady": false,
        "rank": 239,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 2,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 58,
          "maintenance": 84,
          "payments": 10,
          "reliability": 88,
          "schema": 77,
          "security": 65,
          "transparency": 78
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "A public OpenAPI 3.1 definition covers 615 operations, including leave approval and employee termination, and OAuth apps can be limited to 33 scopes. API keys always grant every scope and never expire. No idempotency keys exist, and a request to an expired API version is answered in an older schema with no error.",
        "bestFor": "An agent working for a company that already runs Factorial and needs employee records, leave requests with approval, attendance clock-ins, recruiting or expenses through one API.",
        "strengths": [
          "OpenAPI 3.1.0 definition at `https://api.factorialhr.com/oas/` with 615 operations and 137 webhook events, plus `llms.txt` and a Markdown twin of every docs page",
          "OAuth 2.0 with 33 scopes, PKCE for public clients, 1-hour access tokens and a revoke endpoint. User tokens are bound to an employee's permission group",
          "Time off can be requested, approved and rejected through the API (`/timeoff/leaves/approve` and `/timeoff/leaves/reject`)",
          "Dated API versions ship each quarter and are supported for one year, with release notes that mark removed endpoints and fields",
          "A 99.9 per cent monthly uptime commitment with a 5 per cent service credit is published in the trust centre, and the status page shows no incident since 1 June 2026"
        ],
        "weaknesses": [
          "An API key grants every scope, cannot be narrowed and does not expire",
          "No idempotency keys. The docs say the API does not deduplicate requests, so a blind retry can create a duplicate record",
          "A request to an unsupported API version is served in the oldest supported schema with no error",
          "The only published rate limit is 200 `POST` requests a minute, and no `Retry-After` header is documented",
          "The terms prohibit benchmarking, competitive evaluation and monitoring of availability, and pricing beyond a $8 starting figure is by quote"
        ],
        "agentNotes": [
          "Send an API key in `x-api-key` and an OAuth token in `Authorization: Bearer`. The key is JWT-formatted but is rejected as a bearer token",
          "Pin the version in the path, such as `/api/2026-10-01/resources/...`, and migrate within a year. Expired versions answer in an older schema without an error",
          "Treat a 200 with an empty body as a credential from the other environment. Production is `api.factorialhr.com` and demo is `api.eu2.demo.factorial.dev`",
          "Page with `limit=100` and pass `meta.end_cursor` as `after_id`. A larger limit is capped at 100",
          "Check whether a record exists before retrying a create. Retry only 429 and 5xx with backoff, and branch on `code` for 422 because messages are localised"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 66.3
          }
        ],
        "editorialScores": {
          "ergonomics": 58,
          "maintenance": 84,
          "payments": 10,
          "reliability": 88,
          "schema": 77,
          "security": 65,
          "transparency": 73
        },
        "provenanceScore": 82
      },
      "connect": {
        "install": "npm install @factorialco/api-client",
        "http": "curl --request GET \\\n     --url 'https://api.factorialhr.com/api/2026-10-01/resources/api_public/credentials' \\\n     --header 'accept: application/json' \\\n     --header 'x-api-key: \u003capi_key\u003e'"
      },
      "letme": {
        "capability": "https://letme.dev/hr.employees",
        "tool": "https://letme.dev/factorial"
      },
      "area": "business",
      "unitPrices": [
        {
          "item": "Starting price",
          "unit": "seat-month",
          "usd": 8,
          "note": "Headline figure on the pricing page. Plans are quoted by modules and company size"
        }
      ],
      "provenance": {
        "legalEntity": "Everyday Software, S.L.",
        "domain": "factorialhr.com",
        "domainRegistered": "2016-11-10",
        "endpointOnVendorDomain": true,
        "terms": "https://factorial.com/terms-of-use",
        "privacy": "https://factorial.com/privacy",
        "statusPage": "https://status.factorialhr.com",
        "changelog": "https://apidoc.factorialhr.com/changelog",
        "securityTxt": "none",
        "checked": "2026-10-08",
        "notes": [
          "The terms and conditions of contract of the Factorial platform (last amended 12 December 2025) name EVERYDAY SOFTWARE, S.L., Carrer de Llacuna 56, Building C, 08005 Barcelona, tax number B-66854530, and its subsidiaries. They govern the platform and mention the public API in clause 13.8. No separate API terms were found.",
          "The privacy policy (last update January 2026) names the same company as controller and describes its role as processor for data that customers' employees enter on the platform. It refers to a Data Processing Agreement that we did not read.",
          "The API answers at api.factorialhr.com, OAuth at id.factorialhr.com and the MCP server at mcp.factorialhr.com. The marketing site factorialhr.com redirects to factorial.com.",
          "RDAP gives 2016-11-10 as the registration date of factorialhr.com and 1998-04-24 for factorial.com.",
          "factorialhr.com/.well-known/security.txt and factorial.com/.well-known/security.txt both returned 404. The trust centre has a vulnerability report form and names a HackerOne programme.",
          "The SLA linked from clause 11.2 of the terms resolves to the trust centre at trust.factorial.co."
        ],
        "score": 82
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/factorial.json",
      "live": {
        "slug": "factorial",
        "probe": {
          "target": "https://api.factorialhr.com",
          "method": "get",
          "lastAt": "2026-10-08T21:12:10.156668384Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 93,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 83,
          "p95ms24h": 165,
          "samples24h": 21,
          "samples30d": 21,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 21,
              "ok": 21
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.factorialhr.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-08T21:06:04.681965883Z"
        },
        "updatedAt": "2026-10-08T21:12:10.156668384Z"
      }
    },
    "answer": "Factorial scores 66.3 (B) on agent readiness against Zoho People's 55 (C), and leads in 6 of 7 scored categories. Zoho People leads on payments \u0026 pricing.",
    "b": {
      "slug": "zoho-people",
      "name": "Zoho People",
      "vendor": "Zoho",
      "vendorUrl": "https://www.zoho.com/people/",
      "kind": "http-api",
      "category": "hr",
      "summary": "Cloud HR system from Zoho covering employee records, leave, attendance, timesheets, onboarding, performance and learning. Agents reach it through a REST API with OAuth 2.0, available on paid plans.",
      "url": "https://www.anchorterminal.com/tools/zoho-people",
      "markdownUrl": "https://www.anchorterminal.com/tools/zoho-people.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/zoho-people.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/zoho-people.json",
      "license": "Proprietary service under the Zoho Terms of Service",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://people.zoho.com/api",
      "packages": [],
      "auth": "oauth",
      "authNotes": "OAuth 2.0 only in the current docs. A person registers a client in the Zoho API console (web, mobile, JavaScript, non-browser or a self client for one organisation) and approves scopes of the form `ZOHOPEOPLE.\u003carea\u003e.\u003coperation\u003e`. The access token lasts one hour and goes in `Authorization: Zoho-oauthtoken \u003ctoken\u003e`. The refresh token lasts until revoked. Each data centre (US, EU, India, Australia, Japan, China) has its own accounts host. Registration is self-serve, with no app review or sales approval for use inside one's own organisation. The authentication page still links to a legacy authentication token page, which returns 404.",
      "pricing": "paid",
      "pricingNotes": "Paid plans only for the API. Essential HR, Professional, Premium and Enterprise cost $1.25, $2, $3 and $4.50 a user a month billed yearly ($1.50, $2.50, $3.50 and $5 monthly), with a five-user minimum. A separate United States plan set costs $3 to $8 a user a month billed yearly. The Free plan covers five users and has no API access. A 30-day trial of any paid plan is self-serve, and the account drops to Free when it ends. Prices come from the feed the pricing page loads (https://www.zoho.com/people/zohopeople-pricing.html, checked 2026-10-08).",
      "priceSummary": "$1.25 / seat-mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the API docs, the pricing pages or the terms (checked 2026-10-08).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-10-08"
      },
      "docsUrl": "https://www.zoho.com/people/api/overview.html",
      "llmsTxt": "https://www.zoho.com/people/api/llms.txt",
      "capabilities": [
        "hr.employees",
        "hr.time-off",
        "hr.org",
        "hr.onboarding",
        "hr.documents"
      ],
      "tags": [
        "hosted",
        "closed-source",
        "paid",
        "free-trial",
        "oauth",
        "llms-txt",
        "webhooks",
        "status-page",
        "bug-bounty",
        "soc2"
      ],
      "lastRelease": "2026-08-01",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 55,
        "grade": "C",
        "agentReady": false,
        "rank": 523,
        "ranked": true,
        "rankOf": 722,
        "categoryRank": 6,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 48,
          "maintenance": 48,
          "payments": 30,
          "reliability": 77,
          "schema": 43,
          "security": 60,
          "transparency": 73
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-08"
        },
        "negative": 0,
        "verdict": "The REST API covers employee forms, leave, attendance, timesheets, files and learning, with per-endpoint rate limits and Markdown docs listed in an llms.txt. No OpenAPI spec, official SDK or dated API changelog was found, the Free plan has no API access, and several scopes come only as ALL.",
        "bestFor": "An agent working inside a company that already runs Zoho People on a paid plan, for directory reads, leave requests, attendance and timesheet entries at modest volume.",
        "strengths": [
          "OAuth 2.0 scopes name an area and an operation, such as `ZOHOPEOPLE.forms.READ` and `ZOHOPEOPLE.leave.CREATE`, with one-hour access tokens",
          "Every reference page states a per-minute threshold and a five-minute lock period, and daily call caps are published per plan",
          "An llms.txt at `/people/api/llms.txt` lists 339 reference pages, each served as Markdown",
          "Plan prices are public, from $1.25 a user a month billed yearly, with a 30-day trial of any paid plan",
          "security.txt valid to 30 June 2028, a bug bounty, SOC 2 Type 2 and ISO/IEC 27001, 27701, 27017 and 27018"
        ],
        "weaknesses": [
          "No OpenAPI spec, official SDK or dated API changelog found. The product What's New page has no API entries for 2026",
          "The Free plan has no API access. Paid plans cap calls at 5,000 to 25,000 a day",
          "Employee, attendance, time tracker, dashboard and automation scopes are listed only as ALL, with no read-only form",
          "Three URL styles coexist (unversioned form endpoints, v2 and v3), with different parameter names, paging and error formats",
          "The documented token refresh call carries the refresh token and client secret in the URL query string"
        ],
        "agentNotes": [
          "Use the accounts host and API host of the organisation's data centre. Tokens issued in one region fail in another",
          "Stay under each page's threshold, often 30 calls a minute. Exceeding it locks that endpoint for five minutes",
          "Page form records with `sIndex` and `limit`, at most 200 a call, and use `modifiedtime` to fetch only changes",
          "Look up form and field label names with `/api/forms` before writing. `inputData` takes label names, and lookup fields take record IDs",
          "Send the refresh token and client secret in the POST body, not the query string, and store the refresh token, which never expires"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 55
          }
        ],
        "editorialScores": {
          "ergonomics": 48,
          "maintenance": 48,
          "payments": 30,
          "reliability": 77,
          "schema": 43,
          "security": 60,
          "transparency": 51
        },
        "provenanceScore": 95
      },
      "connect": {
        "http": "curl --location 'https://people.zoho.com/api/forms' \\\n  --header \"Authorization: Zoho-oauthtoken $ZOHO_ACCESS_TOKEN\""
      },
      "letme": {
        "capability": "https://letme.dev/hr.employees",
        "tool": "https://letme.dev/zoho-people"
      },
      "sameCompany": [
        "zoho-books",
        "zoho-zeptomail",
        "zoho-crm",
        "zoho-recruit"
      ],
      "area": "business",
      "unitPrices": [
        {
          "item": "Essential HR",
          "unit": "seat-month",
          "usd": 1.25,
          "note": "billed yearly; $1.50 billed monthly; five-user minimum; API capped at 5,000 calls a day"
        },
        {
          "item": "Professional",
          "unit": "seat-month",
          "usd": 2,
          "note": "billed yearly; $2.50 billed monthly; API capped at 10,000 calls a day"
        },
        {
          "item": "Premium",
          "unit": "seat-month",
          "usd": 3,
          "note": "billed yearly; $3.50 billed monthly; API capped at 15,000 calls a day"
        },
        {
          "item": "Enterprise",
          "unit": "seat-month",
          "usd": 4.5,
          "note": "billed yearly; $5 billed monthly; API capped at 25,000 calls a day"
        }
      ],
      "provenance": {
        "legalEntity": "Zoho Corporation Private Limited",
        "domain": "zoho.com",
        "domainRegistered": "2004-01-16",
        "endpointOnVendorDomain": true,
        "terms": "https://www.zoho.com/terms.html",
        "privacy": "https://www.zoho.com/privacy.html",
        "statusPage": "https://status.zoho.com",
        "changelog": "https://www.zoho.com/people/whats-new.html",
        "securityTxt": "valid",
        "checked": "2026-10-08",
        "notes": [
          "The Terms of Service (last updated 2 March 2022) are the service agreement for Zoho's online services. The contracting entity depends on the customer's region, Zoho Corporation Private Limited for India and Zoho Corporation for the United States (https://www.zoho.com/legal/zoho-contracting-entities.html).",
          "The privacy policy was last updated on 22 December 2025. Its Part II covers data customers store in Zoho services. A separate Zoho People privacy notice at https://www.zoho.com/people/privacy-policy.html adds terms for facial recognition and location data in attendance.",
          "API calls go to people.zoho.com and its regional equivalents, on Zoho's own domains. OAuth runs on accounts.zoho.com.",
          "status.zoho.com redirects to us.zohostatus.com, which lists Zoho People as a component.",
          "security.txt at www.zoho.com gives a bug bounty contact, security@zohocorp.com, a policy link and an expiry of 30 June 2028.",
          "What's New is a product changelog dated by month, newest August 2026. No API changelog was found.",
          "RDAP for zoho.com gives a registration date of 2004-01-16."
        ],
        "score": 95
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/zoho-people.json",
      "live": {
        "slug": "zoho-people",
        "probe": {
          "target": "https://people.zoho.com/api",
          "method": "get",
          "lastAt": "2026-10-08T21:12:26.857117856Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 421,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 431,
          "p95ms24h": 460,
          "samples24h": 21,
          "samples30d": 21,
          "days": [
            {
              "date": "2026-10-08",
              "probes": 21,
              "ok": 21
            }
          ]
        },
        "updatedAt": "2026-10-08T21:12:26.857117856Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Everyday Software, S.L.",
        "b": "Zoho",
        "name": "Vendor"
      },
      {
        "a": "https://api.factorialhr.com",
        "b": "https://people.zoho.com/api",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "OAuth or key",
        "b": "OAuth",
        "name": "Auth"
      },
      {
        "a": "Paid",
        "b": "Paid",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Proprietary service under Factorial's terms and conditions. The TypeScript and Python SDKs are MIT",
        "b": "Proprietary service under the Zoho Terms of Service",
        "name": "Licence"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "llms.txt"
      },
      {
        "a": "2026-10-05",
        "b": "2026-08-01",
        "name": "Last release"
      },
      {
        "a": "no date given",
        "b": "2022-03-02",
        "name": "Terms last updated"
      },
      {
        "a": "2026-01-01",
        "b": "2025-12-22",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Customer content may train models"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms restrict automated access"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "not found in the text",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "7 stars, 1.4k npm/wk, 1.1k PyPI/wk",
        "b": "none",
        "name": "Popularity"
      }
    ],
    "faq": [
      {
        "answer": "Factorial scores 66.3 (B) on agent readiness against Zoho People's 55 (C), and leads in 6 of 7 scored categories. Zoho People leads on payments \u0026 pricing.",
        "question": "Which is better for AI agents, Factorial or Zoho People?"
      },
      {
        "answer": "Factorial takes an API key or an OAuth sign-in. Zoho People uses an OAuth sign-in.",
        "question": "Do Factorial and Zoho People need an API key?"
      },
      {
        "answer": "Yes. Factorial has a hosted endpoint at https://api.factorialhr.com and Zoho People at https://people.zoho.com/api.",
        "question": "Can an agent call Factorial and Zoho People without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 88 against 77",
          "Schema \u0026 documentation, 77 against 43",
          "Agent ergonomics, 58 against 48",
          "Security \u0026 auth, 65 against 60",
          "Maintenance \u0026 community, 84 against 48",
          "Transparency \u0026 trust, 78 against 73"
        ],
        "also": null,
        "goodFor": "An agent working for a company that already runs Factorial and needs employee records, leave requests with approval, attendance clock-ins, recruiting or expenses through one API.",
        "slug": "factorial",
        "watchFor": "An API key grants every scope, cannot be narrowed and does not expire"
      },
      {
        "aheadOn": [
          "Payments \u0026 pricing, 30 against 10"
        ],
        "also": null,
        "goodFor": "An agent working inside a company that already runs Zoho People on a paid plan, for directory reads, leave requests, attendance and timesheet entries at modest volume.",
        "slug": "zoho-people",
        "watchFor": "No OpenAPI spec, official SDK or dated API changelog found. The product What's New page has no API entries for 2026"
      }
    ],
    "job": {
      "capability": "hr.employees",
      "name": "Hr employees"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/bamboohr-vs-factorial.json",
        "title": "BambooHR vs Factorial",
        "url": "https://www.anchorterminal.com/compare/bamboohr-vs-factorial"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bamboohr-vs-zoho-people.json",
        "title": "BambooHR vs Zoho People",
        "url": "https://www.anchorterminal.com/compare/bamboohr-vs-zoho-people"
      },
      {
        "json": "https://www.anchorterminal.com/compare/deel-vs-factorial.json",
        "title": "Deel vs Factorial",
        "url": "https://www.anchorterminal.com/compare/deel-vs-factorial"
      },
      {
        "json": "https://www.anchorterminal.com/compare/deel-vs-zoho-people.json",
        "title": "Deel vs Zoho People",
        "url": "https://www.anchorterminal.com/compare/deel-vs-zoho-people"
      },
      {
        "json": "https://www.anchorterminal.com/compare/factorial-vs-hibob.json",
        "title": "Factorial vs HiBob",
        "url": "https://www.anchorterminal.com/compare/factorial-vs-hibob"
      },
      {
        "json": "https://www.anchorterminal.com/compare/factorial-vs-humaans.json",
        "title": "Factorial vs Humaans",
        "url": "https://www.anchorterminal.com/compare/factorial-vs-humaans"
      },
      {
        "json": "https://www.anchorterminal.com/compare/factorial-vs-rippling.json",
        "title": "Factorial vs Rippling",
        "url": "https://www.anchorterminal.com/compare/factorial-vs-rippling"
      },
      {
        "json": "https://www.anchorterminal.com/compare/hibob-vs-zoho-people.json",
        "title": "HiBob vs Zoho People",
        "url": "https://www.anchorterminal.com/compare/hibob-vs-zoho-people"
      },
      {
        "json": "https://www.anchorterminal.com/compare/humaans-vs-zoho-people.json",
        "title": "Humaans vs Zoho People",
        "url": "https://www.anchorterminal.com/compare/humaans-vs-zoho-people"
      },
      {
        "json": "https://www.anchorterminal.com/compare/rippling-vs-zoho-people.json",
        "title": "Rippling vs Zoho People",
        "url": "https://www.anchorterminal.com/compare/rippling-vs-zoho-people"
      }
    ],
    "scores": [
      {
        "by": 11,
        "edge": "factorial",
        "factorial": 88,
        "key": "reliability",
        "name": "Reliability",
        "weight": 16,
        "zoho-people": 77
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 34,
        "edge": "factorial",
        "factorial": 77,
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "weight": 13,
        "zoho-people": 43
      },
      {
        "by": 10,
        "edge": "factorial",
        "factorial": 58,
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "weight": 13,
        "zoho-people": 48
      },
      {
        "by": 5,
        "edge": "factorial",
        "factorial": 65,
        "key": "security",
        "name": "Security \u0026 auth",
        "weight": 14,
        "zoho-people": 60
      },
      {
        "by": 20,
        "edge": "zoho-people",
        "factorial": 10,
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "weight": 10,
        "zoho-people": 30
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 36,
        "edge": "factorial",
        "factorial": 84,
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "weight": 7,
        "zoho-people": 48
      },
      {
        "by": 5,
        "edge": "factorial",
        "factorial": 78,
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "weight": 7,
        "zoho-people": 73
      }
    ],
    "summary": "Factorial scores 66.3 (B) on agent readiness against Zoho People's 55 (C), and leads in 6 of 7 scored categories. Zoho People leads on payments \u0026 pricing. Both do hr employees.",
    "verdicts": {
      "factorial": "A public OpenAPI 3.1 definition covers 615 operations, including leave approval and employee termination, and OAuth apps can be limited to 33 scopes. API keys always grant every scope and never expire. No idempotency keys exist, and a request to an expired API version is answered in an older schema with no error.",
      "zoho-people": "The REST API covers employee forms, leave, attendance, timesheets, files and learning, with per-endpoint rate limits and Markdown docs listed in an llms.txt. No OpenAPI spec, official SDK or dated API changelog was found, the Free plan has no API access, and several scopes come only as ALL."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/factorial-vs-zoho-people",
    "json": "https://www.anchorterminal.com/compare/factorial-vs-zoho-people.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/factorial-vs-zoho-people.md",
    "slim": "https://www.anchorterminal.com/compare/factorial-vs-zoho-people.min.md"
  },
  "markdown": "Factorial scores 66.3 (B) on agent readiness against Zoho People's 55 (C), and leads in 6 of 7 scored categories. Zoho People leads on payments \u0026 pricing. Both do hr employees.\n\n- Factorial: grade B, 66.3/100, rank #239 of 722. Markdown https://www.anchorterminal.com/tools/factorial.md · JSON https://www.anchorterminal.com/api/v1/tools/factorial.json\n- Zoho People: grade C, 55/100, rank #523 of 722. Markdown https://www.anchorterminal.com/tools/zoho-people.md · JSON https://www.anchorterminal.com/api/v1/tools/zoho-people.json\n\n## Which one, for what\n\n### Factorial (B)\n\nGood for: An agent working for a company that already runs Factorial and needs employee records, leave requests with approval, attendance clock-ins, recruiting or expenses through one API.\n\nAhead on:\n- Reliability, 88 against 77\n- Schema \u0026 documentation, 77 against 43\n- Agent ergonomics, 58 against 48\n- Security \u0026 auth, 65 against 60\n- Maintenance \u0026 community, 84 against 48\n- Transparency \u0026 trust, 78 against 73\n\nWatch for: An API key grants every scope, cannot be narrowed and does not expire\n\n### Zoho People (C)\n\nGood for: An agent working inside a company that already runs Zoho People on a paid plan, for directory reads, leave requests, attendance and timesheet entries at modest volume.\n\nAhead on:\n- Payments \u0026 pricing, 30 against 10\n\nWatch for: No OpenAPI spec, official SDK or dated API changelog found. The product What's New page has no API entries for 2026\n\n\n## Score by category\n\n| Category | Weight | Factorial | Zoho People | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 88 | 77 | Factorial +11 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 77 | 43 | Factorial +34 |\n| Agent ergonomics | 13% (16.2 this run) | 58 | 48 | Factorial +10 |\n| Security \u0026 auth | 14% (17.5 this run) | 65 | 60 | Factorial +5 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 10 | 30 | Zoho People +20 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 84 | 48 | Factorial +36 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 78 | 73 | Factorial +5 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **66.3 · B** | **55 · C** | |\n\n## Facts side by side\n\n| Fact | Factorial | Zoho People |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Everyday Software, S.L. | Zoho |\n| Hosted endpoint | `https://api.factorialhr.com` | `https://people.zoho.com/api` |\n| Transports | HTTP | HTTP |\n| Auth | OAuth or key | OAuth |\n| Pricing | Paid | Paid |\n| x402 | no | no |\n| Licence | Proprietary service under Factorial's terms and conditions. The TypeScript and Python SDKs are MIT | Proprietary service under the Zoho Terms of Service |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| Last release | 2026-10-05 | 2026-08-01 |\n| Terms last updated | no date given | 2022-03-02 |\n| Privacy policy last updated | 2026-01-01 | 2025-12-22 |\n| Customer content may train models | not found in the text | yes |\n| Terms restrict automated access | not found in the text | not found in the text |\n| Terms restrict benchmarking | yes | yes |\n| Terms or service can change without notice | not found in the text | not found in the text |\n| Arbitration or class-action waiver | not found in the text | not found in the text |\n| Popularity | 7 stars, 1.4k npm/wk, 1.1k PyPI/wk | none |\n\n## Verdicts\n\n**Factorial.** A public OpenAPI 3.1 definition covers 615 operations, including leave approval and employee termination, and OAuth apps can be limited to 33 scopes. API keys always grant every scope and never expire. No idempotency keys exist, and a request to an expired API version is answered in an older schema with no error.\n\n**Zoho People.** The REST API covers employee forms, leave, attendance, timesheets, files and learning, with per-endpoint rate limits and Markdown docs listed in an llms.txt. No OpenAPI spec, official SDK or dated API changelog was found, the Free plan has no API access, and several scopes come only as ALL.\n\n## Before you call either\n\n### Factorial\n\n1. Send an API key in `x-api-key` and an OAuth token in `Authorization: Bearer`. The key is JWT-formatted but is rejected as a bearer token\n2. Pin the version in the path, such as `/api/2026-10-01/resources/...`, and migrate within a year. Expired versions answer in an older schema without an error\n3. Treat a 200 with an empty body as a credential from the other environment. Production is `api.factorialhr.com` and demo is `api.eu2.demo.factorial.dev`\n4. Page with `limit=100` and pass `meta.end_cursor` as `after_id`. A larger limit is capped at 100\n5. Check whether a record exists before retrying a create. Retry only 429 and 5xx with backoff, and branch on `code` for 422 because messages are localised\n\n### Zoho People\n\n1. Use the accounts host and API host of the organisation's data centre. Tokens issued in one region fail in another\n2. Stay under each page's threshold, often 30 calls a minute. Exceeding it locks that endpoint for five minutes\n3. Page form records with `sIndex` and `limit`, at most 200 a call, and use `modifiedtime` to fetch only changes\n4. Look up form and field label names with `/api/forms` before writing. `inputData` takes label names, and lookup fields take record IDs\n5. Send the refresh token and client secret in the POST body, not the query string, and store the refresh token, which never expires\n\n## Questions\n\n### Which is better for AI agents, Factorial or Zoho People?\n\nFactorial scores 66.3 (B) on agent readiness against Zoho People's 55 (C), and leads in 6 of 7 scored categories. Zoho People leads on payments \u0026 pricing.\n\n### Do Factorial and Zoho People need an API key?\n\nFactorial takes an API key or an OAuth sign-in. Zoho People uses an OAuth sign-in.\n\n### Can an agent call Factorial and Zoho People without installing anything?\n\nYes. Factorial has a hosted endpoint at https://api.factorialhr.com and Zoho People at https://people.zoho.com/api.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/factorial-vs-zoho-people.json, and with the fewest tokens: https://www.anchorterminal.com/compare/factorial-vs-zoho-people.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"factorial\", \"b\": \"zoho-people\"}`. From a terminal: `anchor compare factorial zoho-people`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/factorial.json and https://www.anchorterminal.com/api/v1/tools/zoho-people.json\n\n## Other comparisons with Factorial or Zoho People\n\n- [BambooHR vs Factorial](https://www.anchorterminal.com/compare/bamboohr-vs-factorial.md)\n- [BambooHR vs Zoho People](https://www.anchorterminal.com/compare/bamboohr-vs-zoho-people.md)\n- [Deel vs Factorial](https://www.anchorterminal.com/compare/deel-vs-factorial.md)\n- [Deel vs Zoho People](https://www.anchorterminal.com/compare/deel-vs-zoho-people.md)\n- [Factorial vs HiBob](https://www.anchorterminal.com/compare/factorial-vs-hibob.md)\n- [Factorial vs Humaans](https://www.anchorterminal.com/compare/factorial-vs-humaans.md)\n- [Factorial vs Rippling](https://www.anchorterminal.com/compare/factorial-vs-rippling.md)\n- [HiBob vs Zoho People](https://www.anchorterminal.com/compare/hibob-vs-zoho-people.md)\n- [Humaans vs Zoho People](https://www.anchorterminal.com/compare/humaans-vs-zoho-people.md)\n- [Rippling vs Zoho People](https://www.anchorterminal.com/compare/rippling-vs-zoho-people.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-08",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Factorial vs Zoho People",
        "url": ""
      }
    ],
    "description": "Factorial scores 66.3 (B) on agent readiness against Zoho People's 55 (C), and leads in 6 of 7 scored categories. Zoho People leads on payments \u0026 pricing. Both do hr employees. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Factorial B 66.3",
      "Zoho People C 55",
      "scores"
    ],
    "h1": "Factorial vs Zoho People",
    "image": "https://www.anchorterminal.com/assets/og/compare-factorial-vs-zoho-people.png",
    "path": "/compare/factorial-vs-zoho-people",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Factorial vs Zoho People for AI agents, B 66.3 vs C 55",
    "toc": null,
    "updated": "2026-10-08",
    "url": "https://www.anchorterminal.com/compare/factorial-vs-zoho-people"
  },
  "tokens": {
    "markdown": 2050,
    "slim": 630
  },
  "version": 1
}
