Jisr MCP by usefulapi

Read employees, attendance, leave and payroll; create employee records and import device punches.

我該用這個嗎

品質與安全性

A
說明品質
100%
結構描述完整度
90%
命名品質
78%
汙染風險
100%
權限相符程度
100%
協定合規性
100%

發現項目(2)

  • LOWTool 'jisr_get_employee_financial_info' name length outside 3-30 range在 jisr_get_employee_financial_info 中
  • LOWTool 'jisr_get_employee_monthly_payables' name length outside 3-30 range在 jisr_get_employee_monthly_payables 中

根據工具定義與協定合規性的自動化分析。

上下文成本

~5,870Token(工具定義)
~2.5 KB典型回應大小
顯著的注意力影響(128k 上下文的 4.59%)

這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。

安裝

一鍵安裝

將以下內容加入你的 `claude_desktop_config.json` 檔案:

{
  "mcpServers": {
    "jisr": {
      "url": "https://jisr.usefulapi.io/mcp"
    }
  }
}

遠端端點

https://jisr.usefulapi.io/mcpstreamable-http

它能做什麼

工具清單

工具(16)

🟢 唯讀🟡 寫入🔴 刪除⚪ 未知
🟢jisr_list_employees(status, created_from, joining_from, joining_to, terminated_from, ...)

List the organization's employees (active by default) with code, names (English/Arabic), job title, department, business unit, employment type, line manager, joining date and status. Filter by active/inactive status, creation date and joining, termination or deletion date ranges. If the API key also has the 'Get Employee Financial Info' / 'Accounting Info' permissions, Jisr adds salary, bank (IBAN) and accounting fields: sensitive HR data. GET /openapi/v1/employees.

輸入結構描述

{
  "type": "object",
  "properties": {
    "status": {
      "description": "Only active or only inactive employees.",
      "type": "string",
      "enum": [
        "active",
        "inactive"
      ]
    },
    "created_from": {
      "description": "Only employees created on or after this date (yyyy-mm-dd).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "joining_from": {
      "description": "Only employees who joined on or after this date.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "joining_to": {
      "description": "Only employees who joined on or before this date.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "terminated_from": {
      "description": "Only employees off-boarded on or after this date.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "terminated_to": {
      "description": "Only employees off-boarded on or before this date.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "deleted_from": {
      "description": "Only employees deleted from the system on or after this date.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "deleted_to": {
      "description": "Only employees deleted from the system on or before this date.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "rpp": {
      "description": "Results per page, 1-100 (Jisr's default is 100). Sent as `rpp`.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢jisr_get_employee(id)

One employee's profile by id (UUID from jisr_list_employees): names, code, gender, marital status, phone, emails, date of birth, passport/ID number, address, line manager, department, business unit, employment type, location, nationality and contract. GET /openapi/v1/employees/basic_info?id=.

輸入結構描述

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Employee id (UUID)."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢jisr_get_employee_financial_info(id)

One employee's financial details by id: salary components and bank account (IBAN). Sensitive payroll data; needs the 'Get Employee Financial Info' permission on the API key. GET /openapi/v1/employees/financial_info?id=.

輸入結構描述

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Employee id (UUID)."
    }
  },
  "required": [
    "id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢jisr_list_lookup(table, page, rpp)

List one of the organization's lookup tables: departments, employment_types, business_units, locations, nationalities or outsourcing_companies, with their ids and English/Arabic names. Use the ids when creating an employee. GET /openapi/v1/lookups/{table}.

輸入結構描述

{
  "type": "object",
  "properties": {
    "table": {
      "type": "string",
      "enum": [
        "departments",
        "employment_types",
        "business_units",
        "locations",
        "nationalities",
        "outsourcing_companies"
      ],
      "description": "Which lookup table."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "rpp": {
      "description": "Results per page, 1-100 (Jisr's default is 100). Sent as `rpp`.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "table"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢jisr_list_attendance_summary(from, to, employee_id, status, page, ...)

Attendance summary per employee for a date range (default: the current month): total working hours, late arrival, early departure, extra and approved overtime, absence days and records. Filter by one employee or by active/inactive status. GET /openapi/v1/attendance/summary.

輸入結構描述

{
  "type": "object",
  "properties": {
    "from": {
      "description": "Period start (yyyy-mm-dd). Default: start of the current month.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "to": {
      "description": "Period end (yyyy-mm-dd).",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "employee_id": {
      "description": "Only this employee (UUID).",
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
    },
    "status": {
      "description": "Only active or inactive employees.",
      "type": "string",
      "enum": [
        "active",
        "inactive"
      ]
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "rpp": {
      "description": "Results per page, 1-100 (Jisr's default is 100). Sent as `rpp`.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢jisr_list_attendance_punches(status, from, to, page, limit)

List raw clock-in/out punches that were received from punch devices, either the ones that were processed successfully or the ones that failed, in a time window (Jisr's default: the last hour). Each punch has id, punch_time, employee_code, terminal_sn and clocking_id. GET /openapi/v1/attendance_logs.

輸入結構描述

{
  "type": "object",
  "properties": {
    "status": {
      "type": "string",
      "enum": [
        "success",
        "failed"
      ],
      "description": "Which punches: processed successfully, or failed."
    },
    "from": {
      "description": "Window start, yyyy-mm-dd hh:mm:ss. Default: one hour ago.",
      "type": "string"
    },
    "to": {
      "description": "Window end, yyyy-mm-dd hh:mm:ss. Default: now.",
      "type": "string"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (Jisr's default is 100). Sent as `limit`.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "status"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢jisr_get_annual_leave_balances(employee_codes, page, limit)

Annual leave balance summaries per employee (all employees, or only the given employee codes, at most 100). Only the annual leave type is supported by Jisr. GET /openapi/v1/employee_leaves/summary.

輸入結構描述

{
  "type": "object",
  "properties": {
    "employee_codes": {
      "description": "Employee codes (not ids) to include; omit for everyone.",
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 40
      }
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "limit": {
      "description": "Results per page, 1-100 (Jisr's default is 100). Sent as `limit`.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢jisr_list_paygroups(page, rpp)

List the organization's pay groups (id and name). The pay group id is needed for payroll and accrual queries. GET /openapi/v1/paygroups.

輸入結構描述

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "rpp": {
      "description": "Results per page, 1-100 (Jisr's default is 100). Sent as `rpp`.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢jisr_list_payroll_transactions(type, pay_period, paygroup_id, from, to, ...)

Payroll transactions per employee for one settlement type. type 'payrun' (the regular payroll) needs pay_period and paygroup_id; 'final_settlements', 'vacations_settlements' and 'out_off_payroll_transactions' need a from/to date range. Optionally filter by employee ids or transaction type ids (jisr_list_gl_transaction_types). Sensitive payroll data. GET /openapi/v1/payroll_transactions.

輸入結構描述

{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "enum": [
        "payrun",
        "final_settlements",
        "vacations_settlements",
        "out_off_payroll_transactions"
      ],
      "description": "Which settlement."
    },
    "pay_period": {
      "description": "First day of a confirmed month (yyyy-mm-01). Required for type payrun.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "paygroup_id": {
      "description": "Pay group id (UUID, jisr_list_paygroups). Required for type payrun.",
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
    },
    "from": {
      "description": "Start date (yyyy-mm-dd). Required for the other types.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "to": {
      "description": "End date (yyyy-mm-dd). Required for the other types.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    },
    "employee_ids": {
      "description": "Only these employees (UUIDs).",
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
      }
    },
    "transaction_type_ids": {
      "description": "Only these transaction types (UUIDs).",
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
      }
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "rpp": {
      "description": "Results per page, 1-100 (Jisr's default is 100). Sent as `rpp`.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "type"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢jisr_list_accrual_transactions(accrual_type, paygroup_id, pay_period, employee_ids, page, ...)

Accruals per employee for a confirmed pay period: vacations, end_of_service or tickets_provision (amount, vacation days). Sensitive payroll data. GET /openapi/v1/accrual_transactions.

輸入結構描述

{
  "type": "object",
  "properties": {
    "accrual_type": {
      "type": "string",
      "enum": [
        "vacations",
        "end_of_service",
        "tickets_provision"
      ],
      "description": "Accrual type."
    },
    "paygroup_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Pay group id (UUID, jisr_list_paygroups)."
    },
    "pay_period": {
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
      "description": "First day of a confirmed month (yyyy-mm-01)."
    },
    "employee_ids": {
      "description": "Only these employees (UUIDs).",
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
      }
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "rpp": {
      "description": "Results per page, 1-100 (Jisr's default is 100). Sent as `rpp`.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "accrual_type",
    "paygroup_id",
    "pay_period"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢jisr_get_employee_monthly_payables(employee_id, pay_period_start)

One employee's payables for a month: net salary, earnings, additions and deductions with breakdowns. Only available to organizations Jisr has whitelisted for this API. Sensitive payroll data. GET /openapi/v1/employee_monthly_payables.

輸入結構描述

{
  "type": "object",
  "properties": {
    "employee_id": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$",
      "description": "Employee id (UUID)."
    },
    "pay_period_start": {
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
      "description": "First day of the month (yyyy-mm-01)."
    }
  },
  "required": [
    "employee_id",
    "pay_period_start"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢jisr_list_gl_transaction_types(page, rpp)

List the payroll (GL) transaction types: id, category (allowances, loan types...), English/Arabic name and status. Use the ids to filter jisr_list_payroll_transactions. GET /openapi/v1/gl_transaction_types.

輸入結構描述

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "rpp": {
      "description": "Results per page, 1-100 (Jisr's default is 100). Sent as `rpp`.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢jisr_list_audit_events(module_name, event_name, event_type, from, to, ...)

The organization's audit trail: who did what and when (module, feature, action, actor, success). Filter by module, event name, event type and a time range. GET /openapi/v1/audit_events.

輸入結構描述

{
  "type": "object",
  "properties": {
    "module_name": {
      "description": "Module names, e.g. security.",
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "event_name": {
      "description": "Event names, e.g. login.",
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "event_type": {
      "description": "Event types, e.g. updated.",
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 100
      }
    },
    "from": {
      "description": "Only events created at or after this ISO 8601 date-time, e.g. 2026-10-01T00:00:00Z.",
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "to": {
      "description": "Only events created at or before this ISO 8601 date-time.",
      "type": "string",
      "format": "date-time",
      "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "per_page": {
      "description": "Results per page, 1-100 (Jisr's default is 100). Sent as `per_page`.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢jisr_list_webhooks

List the webhooks registered for the organization: name, endpoint host, method, status. Authentication data, custom header values and the endpoint's path and query (they can hold secrets) are hidden. Read-only; this server does not create or change webhooks. GET /openapi/v1/webhooks.

輸入結構描述

{
  "type": "object",
  "properties": {},
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴jisr_create_employee(code, full_name_en, full_name_ar, email, personal_email, ...)

WRITE: register a new employee in Jisr (they are invited to the system by email). Not reversible through this server: there is no delete tool. Get department_id, employment_type_id, location_id and nationality_id from jisr_list_lookup first. Names need at least two parts. POST /openapi/v1/employees.

輸入結構描述

{
  "type": "object",
  "properties": {
    "code": {
      "type": "string",
      "minLength": 1,
      "maxLength": 40,
      "description": "Employee code, unique within the organization."
    },
    "full_name_en": {
      "type": "string",
      "minLength": 3,
      "maxLength": 200,
      "description": "Full name in English (at least two words)."
    },
    "full_name_ar": {
      "type": "string",
      "minLength": 3,
      "maxLength": 200,
      "description": "Full name in Arabic (at least two words)."
    },
    "email": {
      "type": "string",
      "maxLength": 200,
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
      "description": "Work email."
    },
    "personal_email": {
      "description": "Personal email (unique among active employees).",
      "type": "string",
      "maxLength": 200,
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "gender": {
      "type": "string",
      "enum": [
        "Male",
        "Female"
      ]
    },
    "marital_status": {
      "type": "string",
      "enum": [
        "Single",
        "Married",
        "Divorced",
        "Widowed"
      ]
    },
    "joining_date": {
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$",
      "description": "Joining date (yyyy-mm-dd)."
    },
    "document_number": {
      "type": "string",
      "minLength": 1,
      "maxLength": 40,
      "description": "National ID or Iqama number."
    },
    "nationality_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Nationality id (jisr_list_lookup nationalities)."
    },
    "department_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Department id (jisr_list_lookup departments)."
    },
    "employment_type_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Employment type id (jisr_list_lookup employment_types)."
    },
    "location_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Location id (jisr_list_lookup locations)."
    },
    "outsourcing_company_id": {
      "description": "Outsourcing company id, for outsourced staff.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "contract_type": {
      "type": "string",
      "enum": [
        "Fixed term",
        "Indefinite"
      ],
      "description": "Contract type."
    },
    "contract_period": {
      "type": "string",
      "enum": [
        "1 year",
        "2 years",
        "Custom"
      ],
      "description": "Contract period."
    },
    "contract_end_date": {
      "description": "Contract end date (yyyy-mm-dd), for fixed-term contracts.",
      "type": "string",
      "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})$"
    }
  },
  "required": [
    "code",
    "full_name_en",
    "full_name_ar",
    "email",
    "gender",
    "marital_status",
    "joining_date",
    "document_number",
    "nationality_id",
    "department_id",
    "employment_type_id",
    "location_id",
    "contract_type",
    "contract_period"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡jisr_create_attendance_punches(punches)

WRITE: send a batch of raw clock-in/out punches (at most 100) from a punch device into Jisr attendance. Jisr processes them asynchronously; check the result with jisr_list_attendance_punches. Each punch carries the unique id its device generated; do not invent ids. POST /openapi/v1/attendance_logs.

輸入結構描述

{
  "type": "object",
  "properties": {
    "punches": {
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "Unique punch id generated by the device."
          },
          "terminal_sn": {
            "type": "string",
            "minLength": 1,
            "maxLength": 100,
            "description": "Serial number / id of the punch device."
          },
          "emp_code": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40,
            "description": "Employee code (a string, also for numeric codes)."
          },
          "punch_time": {
            "type": "string",
            "description": "When the punch happened, yyyy-mm-ddThh:mm:ss in the organization's local time."
          }
        },
        "required": [
          "id",
          "terminal_sn",
          "emp_code",
          "punch_time"
        ]
      }
    }
  },
  "required": [
    "punches"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

社群

為此伺服器評分

證據

近期觀測

已驗證未記錄版本16 個工具