Image Operations
Warp (perspective correct) an image
Creates a task to apply perspective correction (warp) to an image based on detected document boundaries.
x-api-key
<token>
API Key for authentication
In: header
inputrequired
string
The id of the file or task to operate on.
name
string
The name of the image to be saved
verticesrequired
array<unknown>
Coordinates of the 4 vertices of the quadrilateral to warp the image to.
callback_url
string
The URL to call when the task is completed or failed. If you want to receive events, you probably prefer to use webhooks
instead.
Format
uri
Response Body
curl -X POST "https://api.scan-documents.com/v1/image-operations/warp" \
-H "Content-Type: application/json" \
-d '{
"input": "file_avyrvozb9302uwhq",
"vertices": [
{
"x": 0,
"y": 0
},
{
"x": 100,
"y": 10
},
{
"x": 100,
"y": 100
},
{
"x": 0,
"y": 90
}
]
}'
const body = JSON.stringify({
"input": "file_avyrvozb9302uwhq",
"vertices": [
{
"x": 0,
"y": 0
},
{
"x": 100,
"y": 10
},
{
"x": 100,
"y": 100
},
{
"x": 0,
"y": 90
}
]
})
fetch("https://api.scan-documents.com/v1/image-operations/warp", {
body
})
package main
import (
"fmt"
"net/http"
"io/ioutil"
"strings"
)
func main() {
url := "https://api.scan-documents.com/v1/image-operations/warp"
body := strings.NewReader(`{
"input": "file_avyrvozb9302uwhq",
"vertices": [
{
"x": 0,
"y": 0
},
{
"x": 100,
"y": 10
},
{
"x": 100,
"y": 100
},
{
"x": 0,
"y": 90
}
]
}`)
req, _ := http.NewRequest("POST", url, body)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
import requests
url = "https://api.scan-documents.com/v1/image-operations/warp"
body = {
"input": "file_avyrvozb9302uwhq",
"vertices": [
{
"x": 0,
"y": 0
},
{
"x": 100,
"y": 10
},
{
"x": 100,
"y": 100
},
{
"x": 0,
"y": 90
}
]
}
response = requests.request("POST", url, json = body, headers = {
"Content-Type": "application/json"
})
print(response.text)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandlers;
import java.time.Duration;
import java.net.http.HttpRequest.BodyPublishers;
var body = BodyPublishers.ofString("""{
"input": "file_avyrvozb9302uwhq",
"vertices": [
{
"x": 0,
"y": 0
},
{
"x": 100,
"y": 10
},
{
"x": 100,
"y": 100
},
{
"x": 0,
"y": 90
}
]
}""");
HttpClient client = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.build();
HttpRequest.Builder requestBuilder = HttpRequest.newBuilder()
.uri(URI.create("https://api.scan-documents.com/v1/image-operations/warp"))
.header("Content-Type", "application/json")
.POST(body)
.build();
try {
HttpResponse<String> response = client.send(requestBuilder.build(), BodyHandlers.ofString());
System.out.println("Status code: " + response.statusCode());
System.out.println("Response body: " + response.body());
} catch (Exception e) {
e.printStackTrace();
}
using System;
using System.Net.Http;
using System.Text;
var body = new StringContent("""
{
"input": "file_avyrvozb9302uwhq",
"vertices": [
{
"x": 0,
"y": 0
},
{
"x": 100,
"y": 10
},
{
"x": 100,
"y": 100
},
{
"x": 0,
"y": 90
}
]
}
""", Encoding.UTF8, "application/json");
var client = new HttpClient();
var response = await client.PostAsync("https://api.scan-documents.com/v1/image-operations/warp", body);
var responseBody = await response.Content.ReadAsStringAsync();
{
"id": "task_euyrvozb9302uwhq",
"operation": "warp",
"parameters": {
"input": "file_avyrvozb9302uwhq",
"name": "Example Image",
"vertices": [
{
"x": 0,
"y": 0
},
{
"x": 100,
"y": 10
},
{
"x": 100,
"y": 100
},
{
"x": 0,
"y": 90
}
],
"callback_url": "https://example.com/callback"
},
"status": "completed",
"result": {
"generated_files": [
{
"id": "file_euyrvozb9302uwhq",
"name": "Example Image",
"type": "image/png",
"properties": {
"size": 1024,
"width": 800,
"height": 600
},
"task_id": "task_euyrvozb9302uwhq",
"created_at": "2021-05-01T12:00:00Z"
}
]
},
"callback_url": "https://example.com/callback",
"created_at": "2021-05-01T12:00:00Z",
"updated_at": "2021-05-01T12:00:00Z"
}
{
"type": "https://scan-documents.com/docs/errors/not-found",
"title": "Not Found",
"status": 404,
"message": "{resource} with id {id} not found."
}
{
"type": "https://scan-documents.com/docs/errors/validation-error",
"title": "Validation Error",
"status": 422,
"errors": {
"{field}": [
"{error}."
]
}
}
{
"type": "https://scan-documents.com/docs/errors/rate-limit-error",
"title": "Rate Limit Exceeded",
"status": 429,
"message": "Rate limit exceeded. Please try again later or contact support."
}
{
"type": "https://scan-documents.com/docs/errors/internal-error",
"title": "An unexpected error occurred. Contact support if the problem persists.",
"status": 500,
"message": "An unexpected error occurred. Contact support if the problem persists."
}