テンプレート一覧 GET /api/v1/templates
curl Python JavaScript
curl https://imagetotable.ai/api/v1/templates \
-H "Authorization: Bearer $API_KEY"import os
import requests
response = requests.get(
"https://imagetotable.ai/api/v1/templates",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
)
print(response.json())const response = await fetch("https://imagetotable.ai/api/v1/templates", {
headers: { "Authorization": `Bearer ${process.env.API_KEY}` },
});
console.log(await response.json());レスポンス {
"data": [
{
"id": 42,
"name": "Invoice Template",
"created_at": "2026-06-01T10:00:00+00:00",
"fields": [
{
"id": 101,
"name": "invoice_number",
"format_requirement": "",
"sort_order": 1,
"template_id": 42,
"created_at": "2026-06-01T10:00:00+00:00"
},
{
"id": 102,
"name": "invoice_date",
"format_requirement": "YYYY-MM-DD",
"sort_order": 2,
"template_id": 42,
"created_at": "2026-06-01T10:00:00+00:00"
}
],
"global_format_requirement": "",
"merge_enabled": false,
"merge_mode": null,
"merge_field_name": null,
"merge_trigger_type": null,
"merge_trigger_value": null,
"merge_fixed_count": null,
"merge_conflict_policy": null,
"merge_conflict_separator": null,
"merge_skip_preview": false
}
],
"has_more": false,
"next_page_token": null
}テンプレートの作成 — ゼロから POST /api/v1/templates
2つの方法のうちの1つ目 — nameだけで、フィールドはまだありません。 フィールドは後からフィールドの一覧と作成 で追加するか、同じ呼び出し内でbase_template_idを使って別のテンプレートのフィールドを複製できます。
curl Python JavaScript
curl -X POST https://imagetotable.ai/api/v1/templates \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "My Invoice Template"}'import os
import requests
response = requests.post(
"https://imagetotable.ai/api/v1/templates",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={"name": "My Invoice Template"},
)
print(response.json())const response = await fetch("https://imagetotable.ai/api/v1/templates", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ name: "My Invoice Template" }),
});
console.log(await response.json());レスポンス {
"template": {
"id": 44,
"name": "My Invoice Template",
"created_at": "2026-07-16T09:00:00+00:00",
"fields": [],
"global_format_requirement": "",
"merge_enabled": false,
"merge_mode": null,
"merge_field_name": null,
"merge_trigger_type": null,
"merge_trigger_value": null,
"merge_fixed_count": null,
"merge_conflict_policy": null,
"merge_conflict_separator": null,
"merge_skip_preview": false
}
}テンプレートの作成 — プリセットから POST /api/v1/templates
curl Python JavaScript
curl -X POST https://imagetotable.ai/api/v1/templates \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"preset_id": "finance_invoice_general"}'import os
import requests
response = requests.post(
"https://imagetotable.ai/api/v1/templates",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={"preset_id": "finance_invoice_general"},
)
print(response.json())const response = await fetch("https://imagetotable.ai/api/v1/templates", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ preset_id: "finance_invoice_general" }),
});
console.log(await response.json());レスポンス {
"template": {
"id": 43,
"name": "Invoice",
"created_at": "2026-07-16T09:00:00+00:00",
"fields": [
{
"id": 201,
"name": "Merchant Name",
"format_requirement": "String",
"sort_order": 1,
"template_id": 43,
"created_at": "2026-07-16T09:00:00+00:00"
}
],
"global_format_requirement": "",
"merge_enabled": false,
"merge_mode": null,
"merge_field_name": null,
"merge_trigger_type": null,
"merge_trigger_value": null,
"merge_fixed_count": null,
"merge_conflict_policy": null,
"merge_conflict_separator": null,
"merge_skip_preview": false
}
}テンプレート設定の更新 — マルチページ結合を有効化 PUT /api/v1/templates/{id}/settings
curl Python JavaScript
curl -X PUT https://imagetotable.ai/api/v1/templates/43/settings \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"merge_enabled": true,
"merge_mode": "fixed_count",
"merge_fixed_count": 3
}'import os
import requests
response = requests.put(
"https://imagetotable.ai/api/v1/templates/43/settings",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={
"merge_enabled": True,
"merge_mode": "fixed_count",
"merge_fixed_count": 3,
},
)
print(response.json())const response = await fetch("https://imagetotable.ai/api/v1/templates/43/settings", {
method: "PUT",
headers: {
"Authorization": `Bearer ${process.env.API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
merge_enabled: true,
merge_mode: "fixed_count",
merge_fixed_count: 3,
}),
});
console.log(await response.json());レスポンス {
"template": {
"id": 43,
"name": "Invoice",
"created_at": "2026-07-16T09:00:00+00:00",
"fields": [
{
"id": 201,
"name": "Merchant Name",
"format_requirement": "String",
"sort_order": 1,
"template_id": 43,
"created_at": "2026-07-16T09:00:00+00:00"
}
],
"global_format_requirement": "",
"merge_enabled": true,
"merge_mode": "fixed_count",
"merge_field_name": null,
"merge_trigger_type": null,
"merge_trigger_value": null,
"merge_fixed_count": 3,
"merge_conflict_policy": null,
"merge_conflict_separator": null,
"merge_skip_preview": false
}
}テンプレートを削除 DELETE /api/v1/templates/{id}
curl Python JavaScript
curl -X DELETE https://imagetotable.ai/api/v1/templates/43 \
-H "Authorization: Bearer $API_KEY"import os
import requests
response = requests.delete(
"https://imagetotable.ai/api/v1/templates/43",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
)
print(response.status_code)const response = await fetch("https://imagetotable.ai/api/v1/templates/43", {
method: "DELETE",
headers: { "Authorization": `Bearer ${process.env.API_KEY}` },
});
console.log(response.status);レスポンス 204 No Content — 空のボディ。
プリセット一覧 GET /api/v1/presets
curl Python JavaScript
curl "https://imagetotable.ai/api/v1/presets?category=Finance%20%26%20Accounting" \
-H "Authorization: Bearer $API_KEY"import os
import requests
response = requests.get(
"https://imagetotable.ai/api/v1/presets",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
params={"category": "Finance & Accounting"},
)
print(response.json())const url = new URL("https://imagetotable.ai/api/v1/presets");
url.searchParams.set("category", "Finance & Accounting");
const response = await fetch(url, {
headers: { "Authorization": `Bearer ${process.env.API_KEY}` },
});
console.log(await response.json());レスポンス {
"data": [
{
"id": "finance_invoice_general",
"category": "Finance & Accounting",
"name": "Invoice",
"fields": [
{"name": "Invoice Number", "format_requirement": "DocumentNumber"},
{"name": "Invoice Date", "format_requirement": "YYYY-MM-DD"},
{"name": "Total Amount", "format_requirement": "Number"}
]
}
],
"has_more": false,
"next_page_token": null
}フィールドの一覧・作成 POST /api/v1/templates/{id}/fields
curl Python JavaScript
curl -X POST https://imagetotable.ai/api/v1/templates/42/fields \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "vendor_name", "format_requirement": "String"}'import os
import requests
response = requests.post(
"https://imagetotable.ai/api/v1/templates/42/fields",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={"name": "vendor_name", "format_requirement": "String"},
)
print(response.json())const response = await fetch("https://imagetotable.ai/api/v1/templates/42/fields", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ name: "vendor_name", format_requirement: "String" }),
});
console.log(await response.json());レスポンス {
"field": {
"id": 103,
"name": "vendor_name",
"format_requirement": "String",
"sort_order": 103,
"template_id": 42,
"created_at": "2026-07-16T09:05:00+00:00"
}
}フィールドの更新 PUT /api/v1/templates/{id}/fields/{field_id}
curl Python JavaScript
curl -X PUT https://imagetotable.ai/api/v1/templates/42/fields/103 \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "vendor_name", "format_requirement": "Company name, no suffix"}'curl -X PATCH https://imagetotable.ai/api/v1/templates/42/fields/order \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"field_ids": [103, 101, 102]}'import os
import requests
response = requests.patch(
"https://imagetotable.ai/api/v1/templates/42/fields/order",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={"field_ids": [103, 101, 102]},
)
print(response.json())const response = await fetch("https://imagetotable.ai/api/v1/templates/42/fields/order", {
method: "PATCH",
headers: {
"Authorization": `Bearer ${process.env.API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ field_ids: [103, 101, 102] }),
});
console.log(await response.json());Response {
"fields": [
{ "id": 103, "name": "vendor_name", "sort_order": 1 },
{ "id": 101, "name": "invoice_number", "sort_order": 2 },
{ "id": 102, "name": "invoice_date", "sort_order": 3 }
]
}Notes Reorder is a full replace, not a partial patch — the field_ids array must contain every field in the template. Fields not listed in field_ids are silently ignored. The sort_order values are reassigned automatically based on array position (1-based). List fields GET /api/v1/templates/{id}/fields
curl Python JavaScript
curl https://imagetotable.ai/api/v1/templates/42/fields \
-H "Authorization: Bearer $API_KEY"import os
import requests
response = requests.get(
"https://imagetotable.ai/api/v1/templates/42/fields",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
)
print(response.json())const response = await fetch("https://imagetotable.ai/api/v1/templates/42/fields", {
headers: { "Authorization": `Bearer ${process.env.API_KEY}` },
});
console.log(await response.json());Response {
"fields": [
{
"id": 101,
"name": "invoice_number",
"format_requirement": "String",
"sort_order": 1,
"template_id": 42,
"created_at": "2026-07-16T09:05:00+00:00"
},
{
"id": 102,
"name": "invoice_date",
"format_requirement": "YYYY-MM-DD",
"sort_order": 2,
"template_id": 42,
"created_at": "2026-07-16T09:05:00+00:00"
},
{
"id": 103,
"name": "vendor_name",
"format_requirement": "Company name, no suffix",
"sort_order": 3,
"template_id": 42,
"created_at": "2026-07-16T09:05:00+00:00"
}
]
}Notes Fields are returned in sort_order ascending order. Use the page_token / next_page_token mechanism for pagination when the field list is long. Create a field POST /api/v1/templates/{id}/fields
curl Python JavaScript
curl -X POST https://imagetotable.ai/api/v1/templates/42/fields \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "total_amount", "format_requirement": "Number"}'import os
import requests
response = requests.post(
"https://imagetotable.ai/api/v1/templates/42/fields",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={"name": "total_amount", "format_requirement": "Number"},
)
print(response.json())const response = await fetch("https://imagetotable.ai/api/v1/templates/42/fields", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ name: "total_amount", format_requirement: "Number" }),
});
console.log(await response.json());Response {
"field": {
"id": 104,
"name": "total_amount",
"format_requirement": "Number",
"sort_order": 4,
"template_id": 42,
"created_at": "2026-07-16T09:05:00+00:00"
}
}Notes name is required and must be unique within the template.format_requirement is optional — if omitted, the field accepts any value.New fields are appended to the end of the field list. Update a field PUT /api/v1/templates/{id}/fields/{field_id}
curl Python JavaScript
curl -X PUT https://imagetotable.ai/api/v1/templates/42/fields/103 \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "vendor_name", "format_requirement": "Company name, no suffix"}'import os
import requests
response = requests.put(
"https://imagetotable.ai/api/v1/templates/42/fields/103",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={"name": "vendor_name", "format_requirement": "Company name, no suffix"},
)
print(response.json())const response = await fetch("https://imagetotable.ai/api/v1/templates/42/fields/103", {
method: "PUT",
headers: {
"Authorization": `Bearer ${process.env.API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ name: "vendor_name", format_requirement: "Company name, no suffix" }),
});
console.log(await response.json());Response {
"field": {
"id": 103,
"name": "vendor_name",
"format_requirement": "Company name, no suffix",
"sort_order": 103,
"template_id": 42,
"created_at": "2026-07-16T09:05:00+00:00"
}
}Delete a field DELETE /api/v1/templates/{id}/fields/{field_id}
curl Python JavaScript
curl -X DELETE https://imagetotable.ai/api/v1/templates/42/fields/103 \
-H "Authorization: Bearer $API_KEY"import os
import requests
response = requests.delete(
"https://imagetotable.ai/api/v1/templates/42/fields/103",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
)
print(response.status_code)const response = await fetch("https://imagetotable.ai/api/v1/templates/42/fields/103", {
method: "DELETE",
headers: { "Authorization": `Bearer ${process.env.API_KEY}` },
});
console.log(response.status);Response 204 No Content — empty body.
Reorder fields PATCH /api/v1/templates/{id}/fields/order
curl Python JavaScript
curl -X PATCH https://imagetotable.ai/api/v1/templates/42/fields/order \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"field_ids": [103, 101, 102]}'import os
import requests
response = requests.patch(
"https://imagetotable.ai/api/v1/templates/42/fields/order",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={"field_ids": [103, 101, 102]},
)
print(response.json())const response = await fetch("https://imagetotable.ai/api/v1/templates/42/fields/order", {
method: "PATCH",
headers: {
"Authorization": `Bearer ${process.env.API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ field_ids: [103, 101, 102] }),
});
console.log(await response.json());Response {
"fields": [
{ "id": 103, "name": "vendor_name", "sort_order": 1 },
{ "id": 101, "name": "invoice_number", "sort_order": 2 },
{ "id": 102, "name": "invoice_date", "sort_order": 3 }
]
}Notes Reorder is a full replace, not a partial patch — the field_ids array must contain every field in the template. Fields not listed in field_ids are silently ignored. The sort_order values are reassigned automatically based on array position (1-based). List fields GET /api/v1/templates/{id}/fields
curl Python JavaScript
curl https://imagetotable.ai/api/v1/templates/42/fields \
-H "Authorization: Bearer $API_KEY"import os
import requests
response = requests.get(
"https://imagetotable.ai/api/v1/templates/42/fields",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
)
print(response.json())const response = await fetch("https://imagetotable.ai/api/v1/templates/42/fields", {
headers: { "Authorization": `Bearer ${process.env.API_KEY}` },
});
console.log(await response.json());Response {
"fields": [
{
"id": 101,
"name": "invoice_number",
"format_requirement": "String",
"sort_order": 1,
"template_id": 42,
"created_at": "2026-07-16T09:05:00+00:00"
},
{
"id": 102,
"name": "invoice_date",
"format_requirement": "YYYY-MM-DD",
"sort_order": 2,
"template_id": 42,
"created_at": "2026-07-16T09:05:00+00:00"
},
{
"id": 103,
"name": "vendor_name",
"format_requirement": "Company name, no suffix",
"sort_order": 3,
"template_id": 42,
"created_at": "2026-07-16T09:05:00+00:00"
}
]
}Notes Fields are returned in sort_order ascending order. Use the page_token / next_page_token mechanism for pagination when the field list is long. Create a field POST /api/v1/templates/{id}/fields
curl Python JavaScript
curl -X POST https://imagetotable.ai/api/v1/templates/42/fields \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"name": "total_amount", "format_requirement": "Number"}'import os
import requests
response = requests.post(
"https://imagetotable.ai/api/v1/templates/42/fields",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={"name": "total_amount", "format_requirement": "Number"},
)
print(response.json())const response = await fetch("https://imagetotable.ai/api/v1/templates/42/fields", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ name: "total_amount", format_requirement: "Number" }),
});
console.log(await response.json());Response {
"field": {
"id": 104,
"name": "total_amount",
"format_requirement": "Number",
"sort_order": 4,
"template_id": 42,
"created_at": "2026-07-16T09:05:00+00:00"
}
}Notes name is required and must be unique within the template.format_requirement is optional — if omitted, the field accepts any value.New fields are appended to the end of the field list. curl -X PATCH https://imagetotable.ai/api/v1/templates/42/fields/order \ -H "Authorization: Bearer $API_KEY" \ -H "Content-Type: application/json" \ -d '{"field_ids": [102, 101, 103]}'
import os
import requests
response = requests.patch(
"https://imagetotable.ai/api/v1/templates/42/fields/order",
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
json={"field_ids": [102, 101, 103]},
)
print(response.json())const response = await fetch("https://imagetotable.ai/api/v1/templates/42/fields/order", {
method: "PATCH",
headers: {
"Authorization": `Bearer ${process.env.API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ field_ids: [102, 101, 103] }),
});
console.log(await response.json());レスポンス {
"data": [
{"id": 102, "name": "invoice_date", "format_requirement": "YYYY-MM-DD", "sort_order": 1, "template_id": 42, "created_at": "2026-06-01T10:00:00+00:00"},
{"id": 101, "name": "invoice_number", "format_requirement": "", "sort_order": 2, "template_id": 42, "created_at": "2026-06-01T10:00:00+00:00"},
{"id": 103, "name": "vendor_name", "format_requirement": "Company name, no suffix", "sort_order": 3, "template_id": 42, "created_at": "2026-07-16T09:05:00+00:00"}
],
"has_more": false,
"next_page_token": null
}