{"id":18103140,"url":"https://github.com/jue58/kintone","last_synced_at":"2025-04-09T14:14:27.891Z","repository":{"id":13707301,"uuid":"16401246","full_name":"jue58/kintone","owner":"jue58","description":"kintone REST API client for Ruby","archived":false,"fork":false,"pushed_at":"2024-02-16T01:16:59.000Z","size":187,"stargazers_count":43,"open_issues_count":10,"forks_count":25,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-04-02T12:11:13.253Z","etag":null,"topics":["kintone","ruby"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jue58.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-01-31T06:20:21.000Z","updated_at":"2025-02-21T14:31:52.000Z","dependencies_parsed_at":"2024-06-19T01:44:54.181Z","dependency_job_id":null,"html_url":"https://github.com/jue58/kintone","commit_stats":{"total_commits":124,"total_committers":11,"mean_commits":"11.272727272727273","dds":"0.29032258064516125","last_synced_commit":"6308d7ade1f7d40ddbba10df6a0386306ed22147"},"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jue58%2Fkintone","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jue58%2Fkintone/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jue58%2Fkintone/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jue58%2Fkintone/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jue58","download_url":"https://codeload.github.com/jue58/kintone/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248054193,"owners_count":21039952,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kintone","ruby"],"created_at":"2024-10-31T22:10:28.387Z","updated_at":"2025-04-09T14:14:27.867Z","avatar_url":"https://github.com/jue58.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# kintone\n\n[![Build Status](https://travis-ci.org/jue58/kintone.svg?branch=master)](https://travis-ci.org/jue58/kintone)\n[![codebeat badge](https://codebeat.co/badges/7f66de05-57a4-4712-9706-0f33169f530b)](https://codebeat.co/projects/github-com-jue58-kintone)\n[![Coverage Status](https://coveralls.io/repos/github/jue58/kintone/badge.svg?branch=add-coveralls-settings)](https://coveralls.io/github/jue58/kintone?branch=add-coveralls-settings)\n[![Inline docs](http://inch-ci.org/github/jue58/kintone.svg?branch=master\u0026style=shields)](http://inch-ci.org/github/jue58/kintone)\n[![Gem Version](https://badge.fury.io/rb/kintone.svg)](https://badge.fury.io/rb/kintone)\n\nA Ruby gem for communicating with the [kintone](https://kintone.cybozu.com/us/) REST API\n\n## Requirements\n\n- ruby 2.1.0 or later\n\n## Installation\n\n    gem install kintone\n\nor execute `bundle install` command after you insert the following into Gemfile\n\n    gem 'kintone'\n\n## Usage\n\n```ruby\nrequire 'kintone'\n\n# Use password authentication\napi = Kintone::Api.new(\"example.cybozu.com\", \"Administrator\", \"cybozu\")\n\n# Use token authentication\napi = Kintone::Api.new(\"example.cybozu.com\", \"authtoken\")\n```\n\n### Supported API\n- [Record retrieval](#record_retrieval)\n- [Record register](#record_register)\n- [Record update](#record_update)\n- [Record delete](#record_delete)\n- [Bulk request](#bulk_request)\n- [File](#file)\n- [Permissions](#permissions)\n- [Space management](#space_management)\n- [Guests](#guests)\n- [Application information](#application_information)\n- [Form structure](#form_structure)\n- [API information](#api_information)\n\n### \u003ca name=\"record_retrieval\"\u003e Record retrieval\n\n```ruby\n# Record retrieval(Assign by Record Number)\napp = 8; id = 100\napi.record.get(app, id) # =\u003e {\"record\" =\u003e {\"record_id\" =\u003e {\"type\" =\u003e \"RECORD_NUMBER\", \"value\" =\u003e \"1\"}}}\n\n# Records retrieval(Assign by Conditions by Query Strings)\napp = 8; fields = [\"record_id\", \"created_time\", \"dropdown\"]\nquery = \"updated_time \u003e \\\"2012-02-03T09:00:00+0900\\\" and updated_time \u003c \\\"2012-02-03T10:00:00+0900\\\" order by record_id asc limit 10 offset 20\"\napi.records.get(app, query, fields) # =\u003e {\"records\" =\u003e [{...}, ...]}\n```\n\nQuery helper\n\n```ruby\nquery =\n  Kintone::Query.new do\n    field(:updated_time) \u003e \"2012-02-03T09:00:00+0900\"\n    and!\n    field(:updated_time) \u003c \"2012-02-03T10:00:00+0900\"\n    order_by(:record_id)\n    limit(10)\n    offset(20)\n  end\n# or\nquery =\n  Kintone::Query.new do\n    f(:updated_time) \u003e \"2012-02-03T09:00:00+0900\"\n    and!\n    f(:updated_time) \u003c \"2012-02-03T10:00:00+0900\"\n    order_by(:record_id)\n    limit(10)\n    offset(20)\n  end\nquery.to_s # =\u003e \"updated_time \u003e \\\"2012-02-03T09:00:00+0900\\\" and updated_time \u003c \\\"2012-02-03T10:00:00+0900\\\" order by record_id asc limit 10 offset 20\"\napi.records.get(app, query, fields)\n\n# Example\nKintone::Query.new do\n  field(:Created_datetime) \u003e= last_month\n  and!\n  precede do\n    field(:text).like(\"Hello\")\n    and!\n    field(:number) == 200\n  end\n  or!\n  precede do\n    field(:number) \u003e 100\n    and!\n    field(:Created_by).in([login_user])\n  end\n  order_by(:record_id, :desc)\n  limit(10)\n  offset(20)\nend\n# =\u003e \"Created_datetime \u003e= LAST_MONTH() and (text like \\\"Hello\\\" and number = 200) or (number \u003e 100 and Created_by in (LOGINUSER())) order by record_id desc limit 10 offset 20\"\n```\n\noperator symbol | query helper\n--- | ---\n= | field(:code) == other\n!= | field(:code) != other\n\u0026gt; | field(:code) \u003e other\n\u003c | field(:code) \u003c other\n\u0026gt;= | field(:code) \u003e= other\n\u003c= | field(:code) \u003c= other\nin | field(:code).in([\"A\", \"B\"])\nnot in | field(:code).not_in([\"A\", \"B\"])\nlike | field(:code).like(\"Hello\")\nnot like | field(:code).not_like(\"Hello\")\nand | and!\nor | or!\n() | precede do; end\n\nfunction | query helper\n--- | ---\nLOGINUSER() | login_user\nPRIMARY_ORGANIZATION() | primary_organization\nNOW() | now\nTODAY() | today\nTHIS_MONTH() | this_month\nLAST_MONTH() | last_month\nTHIS_YEAR() | this_year\n\noption | query helper\n--- | ---\norder by | order_by(:code, :asc or :desc)\nlimit | limit(20)\noffset | offset(30)\n\n### \u003ca name=\"record_register\"\u003e Record register\n\n```ruby\n# Record register(single record)\n# Use Hash\napp = 7\nrecord = {\"number\" =\u003e {\"value\" =\u003e \"123456\"}}\napi.record.register(app, record) # =\u003e {\"id\" =\u003e \"100\", \"revision\" =\u003e \"1\"}\n\n# Use Kintone::Type::Record\napp = 7\nrecord = Kintone::Type::Record.new(number: \"123456\")\napi.record.register(app, record) # =\u003e {\"id\" =\u003e \"100\", \"revision\" =\u003e \"1\"}\n\n# Records register(batch)\n# Use Hash\napp = 7\nrecords = [\n  {\"number\" =\u003e {\"value\" =\u003e \"123456\"}},\n  {\"number\" =\u003e {\"value\" =\u003e \"7890\"}}\n]\napi.records.register(app, records) # =\u003e {\"ids\" =\u003e [\"100\", \"101\"], \"revisions\" =\u003e [\"1\", \"1\"]}\n\n# Use Kintone::Type::Record\napp = 7\nrecords = [\n  Kintone::Type::Record.new(number: \"123456\"),\n  Kintone::Type::Record.new(number: \"7890\")\n]\napi.records.register(app, records) # =\u003e {\"ids\" =\u003e [\"100\", \"101\"], \"revisions\" =\u003e [\"1\", \"1\"]}\n```\n\n### \u003ca name=\"record_update\"\u003e Record update\n\n```ruby\n# Record update(single record)\n# Use Hash\napp = 4; id = 1\nrecord = {\"string_multi\" =\u003e {\"value\" =\u003e \"changed!\"}}\napi.record.update(app, id, record) # =\u003e {\"revision\" =\u003e \"2\"}\n\n# Use Kintone::Type::Record\napp = 4; id = 1\nrecord = Kintone::Type::Record.new({string_multi: \"changed!\"})\napi.record.update(app, id, record) # =\u003e {\"revision\" =\u003e \"2\"}\n\n# With revision\napi.record.update(app, id, record, revision: 1)\n\n# Records update(batch)\n# Use Hash\napp = 4\nrecords = [\n  {\"id\" =\u003e 1, \"record\" =\u003e {\"string_multi\" =\u003e {\"value\" =\u003e \"abcdef\"}}},\n  {\"id\" =\u003e 2, \"record\" =\u003e {\"string_multi\" =\u003e {\"value\" =\u003e \"opqrstu\"}}}\n]\napi.records.update(app, records) # =\u003e {\"records\" =\u003e [{\"id\" =\u003e \"1\", \"revision\" =\u003e \"2\"}, {\"id\" =\u003e \"2\", \"revision\" =\u003e \"2\"}]}\n\n# Use Kintone::Type::Record\napp = 4\nrecords = [\n  {id: 1, record: Kintone::Type::Record.new(string_multi: \"abcdef\")},\n  {id: 2, record: Kintone::Type::Record.new(string_multi: \"opqrstu\")}\n]\napi.records.update(app, records) # =\u003e {\"records\" =\u003e [{\"id\" =\u003e \"1\", \"revision\" =\u003e \"2\"}, {\"id\" =\u003e \"2\", \"revision\" =\u003e \"2\"}]}\n\n# with revision\nrecords = [\n  {id: 1, revision: 1, record: Kintone::Type::Record.new(string_multi: \"abcdef\")},\n  {id: 2, revision: 1, record: Kintone::Type::Record.new(string_multi: \"opqrstu\")}\n]\napi.records.update(app, records)\n```\n\n### \u003ca name=\"record_delete\"\u003e Record delete\n\n```ruby\napp = 8; ids = [100, 80]\napi.records.delete(app, ids) # =\u003e {}\n\n# With revision\nrevisions = [1, 1]\napi.records.delete(app, ids, revisions: revisions)\n```\n\n### \u003ca name=\"bulk_request\"\u003e Bulk request\n\n```ruby\nrequests = [{\"method\" =\u003e \"POST\", ...}, {\"method\" =\u003e \"PUT\", ...}]\napi.bulk.request(requests) # =\u003e [...]\n```\n\n### \u003ca name=\"file\"\u003e File\n\n```ruby\n# File upload\nfile_key = api.file.register(\"/path/to/file\", \"text/plain\", \"file.txt\")\n\n# File download\nfile = api.file.get(file_key)\n```\n\n### \u003ca name=\"permissions\"\u003e Permissions\n\n```ruby\n# App\napp = 1\nrights = [{\"entity\" =\u003e {\"type\" =\u003e \"USER\", \"code\" =\u003e \"user1\"}, \"appEditable\" =\u003e true, ...}, ...]\napi.app_acl.update(app, rights) # =\u003e {}\n\n# Records\nid = 1\nrights = [{\"filterCond\" =\u003e \"...\", \"entities\" =\u003e [{\"entity\" =\u003e {...}, \"viewable\" =\u003e false, ...}, ...]}, ...]\napi.record_acl.update(id, rights) # =\u003e {}\n\n#Fields\nid = 1\nrights = [{\"code\" =\u003e \"Single_line_text_0\", \"entities\" =\u003e [{\"entity\" =\u003e {...}, \"accesibility\" =\u003e \"WRITE\"}, ...]}, ...]\napi.field_acl.update(id, rights) # =\u003e {}\n```\n\n### \u003ca name=\"space_management\"\u003e Space management\n\n```ruby\n# Space information\nid = 1\napi.space.get(id) # =\u003e { \"id\" =\u003e \"1\", \"name\" =\u003e \"space\", \"defaultThread\" =\u003e \"3\", \"isPrivate\" =\u003e true, ...}\n\n# Create space\nid = 1; name = \"sample space\"\nmembers = [{\"entity\" =\u003e {\"type\" =\u003e \"USER\", \"code\" =\u003e \"user1\"}, \"isAdmin\": true}, ...]\napi.template_space.create(id, name, members, is_guest: true, fixed_member: false) # =\u003e {\"id\" =\u003e \"1\"}\n\n# Space body update\nid = 1; body = \"\u003cb\u003eawesome space!\u003c/b\u003e\"\napi.space_body.update(id, body) # =\u003e {}\n\n# Space members\nid = 1\nmembers = api.space_members.get(id) # =\u003e {\"members\"=\u003e[{\"entity\"=\u003e{\"type\"=\u003e\"USER\", \"code\"=\u003e \"user1\"}, ...}, ...]}\nmembers \u003c\u003c {\"entity\" =\u003e {\"type\" =\u003e \"GROUP\", \"code\" =\u003e \"group1\"}}\nmembers = api.space_members.update(id, members) # =\u003e {}\n\n# Space thread update\nid = 1; name = \"thread name\"\nbody = \"\u003cb\u003eawesome thread!\u003c/b\u003e\"\napi.space_thread.update(id, name: name, body: body) # =\u003e {}\n\n# Space guests\nid = 1\nguests = [\"hoge@example.com\"]\napi.guest(1).space_guests.update(id, guests) # =\u003e {}\n\n# Space delete\nid = 1\napi.space.delete(id) # =\u003e {}\n```\n\n### \u003ca name=\"guests\"\u003e Guests\n\n```ruby\n# Add guest\nguests = [{code: \"hoge@example.com\", password: \"p@ssword\", timezone: \"Asia/Tokyo\", name: \"Tokyo, Saburo\", ...}, ...]\napi.guests.register(guests) # =\u003e {}\n\n# delete guest\nguests = [\"hoge@example.com\", \"fuga@example.com\"]\napi.guests.delete(guests) # =\u003e {}\n```\n\n### \u003ca name=\"application_information\"\u003e Application information\n\n```ruby\nid = 4\napi.app.get(id) # =\u003e {\"appId\" =\u003e \"4\", \"code\" =\u003e \"\", ...}\n\nname = \"test\"; codes = [\"FOO\", \"BAR\"]\napi.apps.get({ name: name, codes: codes }) # =\u003e { \"apps\" =\u003e [{...}, ...] }\n```\n\n### \u003ca name=\"form_structure\"\u003e Form structure\n\n```ruby\napp = 1\napi.form.get(app) # =\u003e {\"properties\" =\u003e [{...}, ...]}\n\napi.preview_form.get(app) # =\u003e {\"properties\" =\u003e [{...}, ...]}\n```\n\n### \u003ca name=\"api_information\"\u003e API information\n\n```ruby\napi.apis.get # =\u003e {\"baseUrl\" =\u003e \"https://example.cybozu.com/k/v1/\", \"apis\" =\u003e {\"records/get\" =\u003e {\"link\" =\u003e \"apis/records/get.json\"}}}\n\napi.apis.get_details_of(\"apis/records/get.json\") # =\u003e {\"id\" =\u003e \"GetRecords\", \"baseUrl\" =\u003e \"https://example.cybozu.com/k/v1/\", ...}\n\napi.apis.get_details_of_key(\"records/get\") # =\u003e {\"id\" =\u003e \"GetRecords\", \"baseUrl\" =\u003e \"https://example.cybozu.com/k/v1/\", ...}\n```\n\n### Other examples\n\n```ruby\n# Format retrieval\nurl = api.get_url(\"form\")\napi.get(url, {\"app\" =\u003e 4}) # =\u003e {\"properties\" =\u003e [{...}, ...]}\n\n# Batch record register\nurl = api.get_url(\"records\")\nbody = {\"app\" =\u003e 7, \"records\" =\u003e [{...}, ...]}\napi.post(url, body) # =\u003e {\"ids\" =\u003e [\"100\",\"101\"]}\n```\n\n### Access to guest spaces\n\n```ruby\napi.guest(1).record.get(8, 100)\n```\n\nsee also [kintone developers](http://developers.kintone.com/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjue58%2Fkintone","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjue58%2Fkintone","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjue58%2Fkintone/lists"}