Create Claim
curl --request POST \
--url https://harbor-parking.vercel.app/api/claims \
--header 'Content-Type: application/json' \
--data '
{
"availability_id": "<string>",
"start_time": "<string>",
"end_time": "<string>"
}
'import requests
url = "https://harbor-parking.vercel.app/api/claims"
payload = {
"availability_id": "<string>",
"start_time": "<string>",
"end_time": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({availability_id: '<string>', start_time: '<string>', end_time: '<string>'})
};
fetch('https://harbor-parking.vercel.app/api/claims', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://harbor-parking.vercel.app/api/claims",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'availability_id' => '<string>',
'start_time' => '<string>',
'end_time' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://harbor-parking.vercel.app/api/claims"
payload := strings.NewReader("{\n \"availability_id\": \"<string>\",\n \"start_time\": \"<string>\",\n \"end_time\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://harbor-parking.vercel.app/api/claims")
.header("Content-Type", "application/json")
.body("{\n \"availability_id\": \"<string>\",\n \"start_time\": \"<string>\",\n \"end_time\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://harbor-parking.vercel.app/api/claims")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"availability_id\": \"<string>\",\n \"start_time\": \"<string>\",\n \"end_time\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"claim": {
"id": "abc123de-e89b-12d3-a456-426614174003",
"availability_id": "789e0123-e89b-12d3-a456-426614174002",
"claimer_id": "456e7890-e89b-12d3-a456-426614174001",
"start_time": "2024-01-16T09:00:00Z",
"end_time": "2024-01-16T17:00:00Z",
"status": "active",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
}
}
Claims
Create Claim
Claim an available parking spot
POST
/
api
/
claims
Create Claim
curl --request POST \
--url https://harbor-parking.vercel.app/api/claims \
--header 'Content-Type: application/json' \
--data '
{
"availability_id": "<string>",
"start_time": "<string>",
"end_time": "<string>"
}
'import requests
url = "https://harbor-parking.vercel.app/api/claims"
payload = {
"availability_id": "<string>",
"start_time": "<string>",
"end_time": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({availability_id: '<string>', start_time: '<string>', end_time: '<string>'})
};
fetch('https://harbor-parking.vercel.app/api/claims', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://harbor-parking.vercel.app/api/claims",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'availability_id' => '<string>',
'start_time' => '<string>',
'end_time' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://harbor-parking.vercel.app/api/claims"
payload := strings.NewReader("{\n \"availability_id\": \"<string>\",\n \"start_time\": \"<string>\",\n \"end_time\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://harbor-parking.vercel.app/api/claims")
.header("Content-Type", "application/json")
.body("{\n \"availability_id\": \"<string>\",\n \"start_time\": \"<string>\",\n \"end_time\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://harbor-parking.vercel.app/api/claims")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"availability_id\": \"<string>\",\n \"start_time\": \"<string>\",\n \"end_time\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"claim": {
"id": "abc123de-e89b-12d3-a456-426614174003",
"availability_id": "789e0123-e89b-12d3-a456-426614174002",
"claimer_id": "456e7890-e89b-12d3-a456-426614174001",
"start_time": "2024-01-16T09:00:00Z",
"end_time": "2024-01-16T17:00:00Z",
"status": "active",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
}
}
Overview
This endpoint allows users to claim an available parking spot for a specific time period.Authentication
Request Body
ID of the availability to claim
Claim start time (ISO 8601 format, must be within the availability window)
Claim end time (ISO 8601 format, must be within the availability window)
Response
Created claim object
Show Claim Object
Show Claim Object
Unique claim identifier (UUID)
ID of the claimed availability
ID of the user who made the claim (authenticated user)
Claim start time (ISO 8601)
Claim end time (ISO 8601)
Claim status (always “active” on creation)
Claim creation timestamp (ISO 8601)
Claim last update timestamp (ISO 8601)
Example Request
curl -X POST "https://harbor-parking.vercel.app/api/claims" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"availability_id": "789e0123-e89b-12d3-a456-426614174002",
"start_time": "2024-01-16T09:00:00Z",
"end_time": "2024-01-16T17:00:00Z"
}'
const response = await fetch('https://harbor-parking.vercel.app/api/claims', {
method: 'POST',
headers: {
'Authorization': `Bearer ${yourJwtToken}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
availability_id: "789e0123-e89b-12d3-a456-426614174002",
start_time: "2024-01-16T09:00:00Z",
end_time: "2024-01-16T17:00:00Z"
})
});
const result = await response.json();
Example Response
{
"claim": {
"id": "abc123de-e89b-12d3-a456-426614174003",
"availability_id": "789e0123-e89b-12d3-a456-426614174002",
"claimer_id": "456e7890-e89b-12d3-a456-426614174001",
"start_time": "2024-01-16T09:00:00Z",
"end_time": "2024-01-16T17:00:00Z",
"status": "active",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
}
}
Validation Rules
- The availability must not already be claimed
- Claim times must be within the availability window
start_timemust be in the futureend_timemust be afterstart_time- You cannot claim your own parking spots
Error Responses
{
"error": "This availability has already been claimed"
}
{
"error": "Claim times must be within the availability window"
}
{
"error": "You cannot claim your own parking spot"
}
⌘I