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
string
required
ID of the availability to claim
string
required
Claim start time (ISO 8601 format, must be within the availability window)
string
required
Claim end time (ISO 8601 format, must be within the availability window)
Response
object
required
Created claim object
Show Claim Object
Show Claim Object
string
required
Unique claim identifier (UUID)
string
required
ID of the claimed availability
string
required
ID of the user who made the claim (authenticated user)
string
required
Claim start time (ISO 8601)
string
required
Claim end time (ISO 8601)
string
required
Claim status (always “active” on creation)
string
required
Claim creation timestamp (ISO 8601)
string
required
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"
}