POST
/api/v1_2/documents/:document_id/repairSend document for repair (human verification - Document is queued for human review). Processing time is usually longer than automated document processing.
If user recognize errors in extracted data you can post back document for repair (repair description is optional). Call can be executed on created document in state Ready or Not_ready.
Path parameters
| Name | Example | Description |
|---|---|---|
document_id |
— | — |
Headers
| Name | Example | Description |
|---|---|---|
Authorization |
Bearer demo_access_token | — |
Request body
{
"repair_description": "YOUR_REPAIR_DESCRIPTION"
}Code examples
curl --request POST 'https://app.datamolino.com/api/v1_2/documents/98765/repair' \
--header 'Authorization: Bearer demo_access_token' \
--header 'Content-Type: application/json' \
--data '{
"repair_description": "YOUR_REPAIR_DESCRIPTION"
}'POST /api/v1_2/documents/98765/repair HTTP/1.1
Host: app.datamolino.com
Authorization: Bearer demo_access_token
Content-Type: application/json
{
"repair_description": "YOUR_REPAIR_DESCRIPTION"
}const response = await fetch("https://app.datamolino.com/api/v1_2/documents/98765/repair", {
method: "POST",
headers: {
"Authorization": "Bearer demo_access_token",
"Content-Type": "application/json"
},
body: JSON.stringify({
"repair_description": "YOUR_REPAIR_DESCRIPTION"
}),
});
const data = await response.json();import axios from "axios";
const response = await axios({
method: "post",
url: "https://app.datamolino.com/api/v1_2/documents/98765/repair",
headers: {
"Authorization": "Bearer demo_access_token",
"Content-Type": "application/json"
},
data: {
"repair_description": "YOUR_REPAIR_DESCRIPTION"
}
});
console.log(response.data);import requests
url = "https://app.datamolino.com/api/v1_2/documents/98765/repair"
headers = {
"Authorization": "Bearer demo_access_token",
"Content-Type": "application/json"
}
payload = {
"repair_description": "YOUR_REPAIR_DESCRIPTION"
}
response = requests.request("POST", url, headers=headers, json=payload)
response.raise_for_status()
print(response.json())require 'json'
require 'net/http'
uri = URI("https://app.datamolino.com/api/v1_2/documents/98765/repair")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer demo_access_token"
request["Content-Type"] = "application/json"
request.body = <<~JSON
{
"repair_description": "YOUR_REPAIR_DESCRIPTION"
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
http.request(request)
end
puts JSON.parse(response.body)# app/services/datamolino_client.rb
require 'json'
require 'net/http'
class DatamolinoClient
BASE_URL = "https://app.datamolino.com"
def initialize(access_token: Rails.application.credentials.dig(:datamolino, :access_token))
@access_token = access_token
end
def request_repair_document
uri = URI("#{BASE_URL}/api/v1_2/documents/98765/repair")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer #{@access_token}"
request["Content-Type"] = "application/json"
request.body = <<~JSON
{
"repair_description": "YOUR_REPAIR_DESCRIPTION"
}
JSON
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
JSON.parse(response.body)
end
end<?php
use GuzzleHttp\Client;
$client = new Client();
$response = $client->request('POST', 'https://app.datamolino.com/api/v1_2/documents/98765/repair', [
'headers' => json_decode('{"Authorization":"Bearer demo_access_token","Content-Type":"application/json"}', true),
'json' => json_decode('{"repair_description":"YOUR_REPAIR_DESCRIPTION"}', true)
]);
echo $response->getBody();OkHttpClient client = new OkHttpClient();
RequestBody body = RequestBody.create("{\n \"repair_description\": \"YOUR_REPAIR_DESCRIPTION\"\n}", MediaType.parse("application/json"));
Request request = new Request.Builder()
.url("https://app.datamolino.com/api/v1_2/documents/98765/repair")
.addHeader("Authorization", "Bearer demo_access_token")
.addHeader("Content-Type", "application/json")
.method("POST", body)
.build();
Response response = client.newCall(request).execute();using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://app.datamolino.com/api/v1_2/documents/98765/repair");
request.Headers.Add("Authorization", "Bearer demo_access_token");
request.Content = new StringContent("{\n \"repair_description\": \"YOUR_REPAIR_DESCRIPTION\"\n}", Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
Console.WriteLine(await response.Content.ReadAsStringAsync());client := &http.Client{}
req, err := http.NewRequest("POST", "https://app.datamolino.com/api/v1_2/documents/98765/repair", strings.NewReader("{\n \"repair_description\": \"YOUR_REPAIR_DESCRIPTION\"\n}"))
if err != nil { panic(err) }
req.Header.Add("Authorization", "Bearer demo_access_token")
req.Header.Add("Content-Type", "application/json")
res, err := client.Do(req)
if err != nil { panic(err) }
defer res.Body.Close()
body, err := io.ReadAll(res.Body)
if err != nil { panic(err) }
fmt.Println(string(body))import Foundation
var request = URLRequest(url: URL(string: "https://app.datamolino.com/api/v1_2/documents/98765/repair")!)
request.httpMethod = "POST"
request.setValue("Bearer demo_access_token", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = "{\n \"repair_description\": \"YOUR_REPAIR_DESCRIPTION\"\n}".data(using: .utf8)
let (data, _) = try await URLSession.shared.data(for: request)
print(String(data: data, encoding: .utf8)!)Responses
200 OK
Content type: application/json; charset=utf-8
{
"links": {
"back": {
"href": "https://beta.datamolino.com/api/v1_2/documents"
},
"self": {
"href": "https://beta.datamolino.com/api/v1_2/documents/315940/repair?access_token=demo_access_token"
}
},
"documents": [
{
"links": {
"self": {
"href": "https://beta.datamolino.com/api/v1_2/documents/315940"
}
},
"id": 315940,
"type": "PurchaseInvoice",
"created_at": "2019-11-05T10:41:06Z",
"last_modified_at": "2019-11-05T11:19:53Z",
"state": "repairing",
"view_detail": "summary",
"verificator_response": "ok",
"parent_document_id": null,
"preview": "/originals/preview/missing.png",
"original": "https://files.example.com/datamolino-demo/original/demo-supplier-invoice.pdf?expires=3600&signature=demo_signature",
"user_file_name": "12_20180427.000158.01.pdf",
"invoice_type": 0,
"bank_account": {
"bban": "",
"bank_code": "",
"bic": null,
"iban": null
},
"data": {
"header": {
"locale": "sk_SK",
"invoice_text": "Cloud Services Subscription",
"invoice_no": "INV-2026-00039",
"sepa_reference": "",
"variable_symbol": "",
"specific_symbol": "",
"issue_date": "2017-02-28",
"tax_date": null,
"due_date": null,
"currency": "EUR",
"currency_rate": "1.0",
"text": " Cloud Services Subscription Cloud Services Subscription",
"customer_no": "",
"purchase_order_no": "",
"reference": "",
"delivery_note_no": "",
"card_no": ""
}
},
"supplier": {
"name": "Demo Supplier Ltd",
"id": "",
"tax_id": "",
"vat_id": "IE6388047V",
"street": "",
"city": "",
"postal_code": "",
"country": ""
},
"customer": {
"name": "Demo Trading Ltd",
"id": "",
"tax_id": "",
"vat_id": "SK2023832976",
"street": "Zochova 6 - 8",
"city": "Bratislava",
"postal_code": "811 03",
"country": "SVK"
},
"summary": {
"shipping": 0,
"other_cost1": 0,
"other_cost2": 0,
"other_cost3": 0,
"total_discount": 0,
"payment_amount": 0,
"paid_deposits": 0,
"rounding": 0,
"sub_total": 102,
"vat_total": 0,
"total": 102
},
"tax_lines": [
{
"id": 238676,
"percent": 0,
"sub_total": 102,
"vat_total": 0,
"total": 102,
"paid_deposits": 0
}
],
"items": [
{
"id": 389633,
"code": "",
"name": "Demo Supplier Ltd",
"quantity": 0,
"unit": 0,
"unit_price": 0,
"tax_rate": 0,
"subtotal": 96,
"tax": 0,
"total": 0,
"discount_rate": 0,
"discount": 0
},
{
"id": 389634,
"code": "",
"name": "Demo Supplier Ltd",
"quantity": 0,
"unit": 0,
"unit_price": 0,
"tax_rate": 0,
"subtotal": 6,
"tax": 0,
"total": 0,
"discount_rate": 0,
"discount": 0
}
]
}
]
}