API Quickstart
Used for sending data on Woosmap servers
Presentation
Public and Private keys
Upon signing up to Woosmap, you will have access to the API key management interface in each project.
| key | Description |
|---|---|
| private_key1 | A private key is used for server api calls (POST, PUT and DELETE) where modification of the data occurs. |
| key | A public key is used client side to fetch your project data. |
REST API
Where possible the API strives to use appropriate HTTP verbs for each action.
| Verb | Description |
|---|---|
GET |
Used for retrieving resources. |
POST |
Used for creating resources. |
PUT |
Used for replacing resources or collections. |
DELETE |
Used for deleting resources. |
Error Handling
| Code | Description |
|---|---|
20X |
Indicates success or object creation. |
403 |
if Unauthorized |
400 |
if the request data is wrong. |
Additionally the answer might contain a message key, with a human error message as the value.
Structure of requests
All data sent and received are in JSON format.
Data sent
The data sent through POST and PUT methods should be in the following format:
{
"stores": [
{
"storeId": "unique identifier",
"name": "Store Name",
"location": {
"lat": 43.600,
"lng": 3.883
}
}
]
}
Each element of the stores array must be in the format
explained here .
Managing assets data
The restrictions on POST and PUT on storeIds are made to ensure identifier stability.
Create assets data
Used to create assets in batch.
Warning: storeId must not exist when using POST method, if one store already exists, the batch will be refused.
https://api.woosmap.com/stores
?private_key=YOUR_PRIVATE_API_KEY
curl -L 'https://api.woosmap.com/stores?private_key=YOUR_PRIVATE_API_KEY' \
-H 'content-type: application/json' \
-d '{
"stores": [
{
"storeId": "store_123",
"name": "My first cool store",
"location": {
"lat": 43.61,
"lng": 3.88
}
}
]
}'
const axios = require('axios');
let data = JSON.stringify({
"stores": [
{
"storeId": "store_123",
"name": "My first cool store",
"location": {
"lat": 43.61,
"lng": 3.88
}
}
]
});
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://api.woosmap.com/stores?private_key=YOUR_PRIVATE_API_KEY',
headers: {
'content-type': 'application/json'
},
data : data
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
import requests
import json
url = "https://api.woosmap.com/stores?private_key=YOUR_PRIVATE_API_KEY"
payload = json.dumps({
"stores": [
{
"storeId": "store_123",
"name": "My first cool store",
"location": {
"lat": 43.61,
"lng": 3.88
}
}
]
})
headers = {
'content-type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"stores\": [\n {\n \"storeId\": \"store_123\",\n \"name\": \"My first cool store\",\n \"location\": {\n \"lat\": 43.61,\n \"lng\": 3.88\n }\n }\n ]\n}");
Request request = new Request.Builder()
.url("https://api.woosmap.com/stores?private_key=YOUR_PRIVATE_API_KEY")
.method("POST", body)
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
require "uri"
require "json"
require "net/http"
url = URI("https://api.woosmap.com/stores?private_key=YOUR_PRIVATE_API_KEY")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["content-type"] = "application/json"
request.body = JSON.dump({
"stores": [
{
"storeId": "store_123",
"name": "My first cool store",
"location": {
"lat": 43.61,
"lng": 3.88
}
}
]
})
response = https.request(request)
puts response.read_body
Updating assets data
Used to update assets.
Warning: storeId must exist when using PUT method, if one asset does not exist, the batch will be refused.
https://api.woosmap.com/stores
?private_key=YOUR_PRIVATE_API_KEY
curl -L -X PUT 'https://api.woosmap.com/stores?private_key=YOUR_PRIVATE_API_KEY' \
-H 'content-type: application/json' \
-d '{
"stores": [
{
"storeId": "store_123",
"name": "My amazing store",
"location": {
"lat": 43.61,
"lng": 3.88
}
}
]
}'
const axios = require('axios');
let data = JSON.stringify({
"stores": [
{
"storeId": "store_123",
"name": "My amazing store",
"location": {
"lat": 43.61,
"lng": 3.88
}
}
]
});
let config = {
method: 'put',
maxBodyLength: Infinity,
url: 'https://api.woosmap.com/stores?private_key=YOUR_PRIVATE_API_KEY',
headers: {
'content-type': 'application/json'
},
data : data
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
import requests
import json
url = "https://api.woosmap.com/stores?private_key=YOUR_PRIVATE_API_KEY"
payload = json.dumps({
"stores": [
{
"storeId": "store_123",
"name": "My amazing store",
"location": {
"lat": 43.61,
"lng": 3.88
}
}
]
})
headers = {
'content-type': 'application/json'
}
response = requests.request("PUT", url, headers=headers, data=payload)
print(response.text)
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"stores\": [\n {\n \"storeId\": \"store_123\",\n \"name\": \"My amazing store\",\n \"location\": {\n \"lat\": 43.61,\n \"lng\": 3.88\n }\n }\n ]\n}");
Request request = new Request.Builder()
.url("https://api.woosmap.com/stores?private_key=YOUR_PRIVATE_API_KEY")
.method("PUT", body)
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
require "uri"
require "json"
require "net/http"
url = URI("https://api.woosmap.com/stores?private_key=YOUR_PRIVATE_API_KEY")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Put.new(url)
request["content-type"] = "application/json"
request.body = JSON.dump({
"stores": [
{
"storeId": "store_123",
"name": "My amazing store",
"location": {
"lat": 43.61,
"lng": 3.88
}
}
]
})
response = https.request(request)
puts response.read_body
Deleting assets
You can delete one or more assets using the following example, the storeId is the id you defined. To delete several
assets, use the comma as a separator.
https://api.woosmap.com/stores/
?private_key=YOUR_PRIVATE_API_KEY
&query=idstore%3A%3Dstore_123
curl -L -X DELETE 'https://api.woosmap.com/stores/?query=idstore%3A%3Dstore_123&private_key=YOUR_PRIVATE_API_KEY'
const axios = require('axios');
let config = {
method: 'delete',
maxBodyLength: Infinity,
url: 'https://api.woosmap.com/stores/?query=idstore%3A%3Dstore_123&private_key=YOUR_PRIVATE_API_KEY',
headers: { }
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
import requests
url = "https://api.woosmap.com/stores/?query=idstore%3A%3Dstore_123&private_key=YOUR_PRIVATE_API_KEY"
payload = {}
headers = {}
response = requests.request("DELETE", url, headers=headers, data=payload)
print(response.text)
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
.url("https://api.woosmap.com/stores/?query=idstore%3A%3Dstore_123&private_key=YOUR_PRIVATE_API_KEY")
.method("DELETE", body)
.build();
Response response = client.newCall(request).execute();
require "uri"
require "net/http"
url = URI("https://api.woosmap.com/stores/?query=idstore%3A%3Dstore_123&private_key=YOUR_PRIVATE_API_KEY")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Delete.new(url)
response = https.request(request)
puts response.read_body
Replace all assets
You can replace all assets of a Project using the following example.
https://api.woosmap.com/stores/replace
?private_key=YOUR_PRIVATE_API_KEY
curl -L 'https://api.woosmap.com/stores/replace?private_key=YOUR_PRIVATE_API_KEY' \
-H 'content-type: application/json' \
-d '{
"stores": [
{
"storeId": "store_123",
"name": "My first cool store",
"location": {
"lat": 43.61,
"lng": 3.88
}
}
]
}'
const axios = require('axios');
let data = JSON.stringify({
"stores": [
{
"storeId": "store_123",
"name": "My first cool store",
"location": {
"lat": 43.61,
"lng": 3.88
}
}
]
});
let config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://api.woosmap.com/stores/replace?private_key=YOUR_PRIVATE_API_KEY',
headers: {
'content-type': 'application/json'
},
data : data
};
axios.request(config)
.then((response) => {
console.log(JSON.stringify(response.data));
})
.catch((error) => {
console.log(error);
});
import requests
import json
url = "https://api.woosmap.com/stores/replace?private_key=YOUR_PRIVATE_API_KEY"
payload = json.dumps({
"stores": [
{
"storeId": "store_123",
"name": "My first cool store",
"location": {
"lat": 43.61,
"lng": 3.88
}
}
]
})
headers = {
'content-type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\n \"stores\": [\n {\n \"storeId\": \"store_123\",\n \"name\": \"My first cool store\",\n \"location\": {\n \"lat\": 43.61,\n \"lng\": 3.88\n }\n }\n ]\n}");
Request request = new Request.Builder()
.url("https://api.woosmap.com/stores/replace?private_key=YOUR_PRIVATE_API_KEY")
.method("POST", body)
.addHeader("content-type", "application/json")
.build();
Response response = client.newCall(request).execute();
require "uri"
require "json"
require "net/http"
url = URI("https://api.woosmap.com/stores/replace?private_key=YOUR_PRIVATE_API_KEY")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Post.new(url)
request["content-type"] = "application/json"
request.body = JSON.dump({
"stores": [
{
"storeId": "store_123",
"name": "My first cool store",
"location": {
"lat": 43.61,
"lng": 3.88
}
}
]
})
response = https.request(request)
puts response.read_body
This command will delete all previous assets and import assets from the json file.
During the operation previous assets could always be displayed on map.
If the import failed previous assets will not be deleted.
Usage limits
The following usage limits are in place for the Data API on the stores request:
- Maximum of 10 queries per second (QPS) per Project (so possibly the sum of client-side and server-side queries)
-
The private key holds destructive power hence it should remain private, the public key can be made public since it’s used client side. ↩