v1.0.0
OAS 3.0.3

Snowprob API

Professional snow removal service API connecting customers with contractors for on-demand snow clearing services. Features real-time weather integration, secure payments via Stripe, and comprehensive order management.

Production server

No authentication selected
Client Libraries

Auth

Authentication and authorization endpoints

Send verification code via email

Initiates the authentication process by sending a 6-digit verification code to the provided email address. Includes rate limiting to prevent spam (2-minute cooldown between requests).

Body
required
  • email
    Type: stringFormat: email
    required

    Valid email address

Responses
  • application/json
  • 400

    Invalid email format or rate limit exceeded

  • 500

    Failed to send verification code

Request Example for post/api/v1/auth/email
curl https://api.snowprob.com/api/v1/auth/email \
  --request POST \
  --header 'Content-Type: application/json' \
  --data '{
  "email": ""
}'
{
  "success": true,
  "message": "string"
}

Confirm verification code and authenticate

Confirms the verification code and completes user authentication. Creates new user accounts automatically and returns a JWT token for subsequent API calls.

Body
required
  • email
    Type: stringFormat: email
    required

    Email address used for verification

  • validationCode
    Type: string
    min:  
    6
    max:  
    6
    required

    6-digit verification code

Responses
  • application/json
  • 400

    Invalid or expired verification code

  • 401

    Authentication failed

Request Example for post/api/v1/auth/email/confirm
curl https://api.snowprob.com/api/v1/auth/email/confirm \
  --request POST \
  --header 'Content-Type: application/json' \
  --data '{
  "email": "",
  "validationCode": ""
}'
{
  "token": "string",
  "user": {
    "id": "string",
    "email": "string",
    "name": null,
    "stripeCustomerId": "string"
  }
}

User

Get user profile

Retrieves the authenticated user's complete profile information including email, name, user ID, and Stripe Connect account details.

Responses
  • application/json
  • 401

    Authentication required

Request Example for get/api/v1/user/profile
curl https://api.snowprob.com/api/v1/user/profile
{
  "id": "string",
  "email": "string",
  "name": null,
  "stripeCustomerId": "string",
  "stripeConnectId": null
}

Update user profile

Updates the authenticated user's profile information. Currently supports updating the display name with validation for length requirements.

Body
required
  • name
    Type: string
    min:  
    2
    max:  
    30
    required

    User's display name

Responses
  • 200

    Profile updated successfully

  • 400

    Invalid input data

  • 401

    Authentication required

Request Example for post/api/v1/user/profile
curl https://api.snowprob.com/api/v1/user/profile \
  --request POST \
  --header 'Content-Type: application/json' \
  --data '{
  "name": ""
}'
No Body

Get presigned URL for profile picture upload

Generates a presigned URL for uploading profile pictures directly to Linode Object Storage. The URL allows secure file uploads without exposing storage credentials.

Responses
  • application/json
  • 401

    Authentication required

Request Example for get/api/v1/user/profile/picture
curl https://api.snowprob.com/api/v1/user/profile/picture
{
  "url": "string",
  "fields": {}
}

Cards

List user's saved payment cards

Retrieves all saved payment cards for the authenticated user from their Stripe customer account. Returns card details without sensitive information.

Responses
  • application/json
  • 401

    Authentication required

Request Example for get/api/v1/user/cards
curl https://api.snowprob.com/api/v1/user/cards
{
  "cards": [
    {
      "id": "string",
      "brand": "string",
      "last4": "string",
      "expMonth": 1,
      "expYear": 1
    }
  ]
}

Add new payment card

Creates and saves a new payment card to the user's Stripe customer account. Card details are tokenized by Stripe for security.

Body
required
  • cardDetails
    Type: object
    required
Responses
  • 200

    Payment card added successfully

  • 400

    Invalid card details

  • 401

    Authentication required

Request Example for post/api/v1/user/cards
curl https://api.snowprob.com/api/v1/user/cards \
  --request POST \
  --header 'Content-Type: application/json' \
  --data '{
  "cardDetails": {
    "ccNumber": "",
    "ccExpirationDate": "",
    "ccCVC": ""
  }
}'
No Body

Create ephemeral key session

Creates an ephemeral key session for secure card management operations. Returns necessary Stripe client secrets for frontend card handling.

Responses
  • application/json
  • 401

    Authentication required

Request Example for get/api/v1/user/cards/session
curl https://api.snowprob.com/api/v1/user/cards/session
{
  "ephemeralKey": "string",
  "setupIntentSecret": "string",
  "customerId": "string"
}

Connect

Get Stripe Connect onboarding URL

Generates a Stripe Connect onboarding URL for contractors to set up their payout account. Creates a new Express account if one doesn't exist.

Responses
  • application/json
  • 401

    Authentication required

Request Example for get/api/v1/user/connect
curl https://api.snowprob.com/api/v1/user/connect
{
  "url": "string",
  "accountId": "string"
}

Check Stripe Connect account status

Checks the current status of the user's Stripe Connect account, including capability status and whether additional onboarding is required.

Responses
  • application/json
  • 401

    Authentication required

Request Example for get/api/v1/user/connect/status
curl https://api.snowprob.com/api/v1/user/connect/status
{
  "accountId": "string",
  "capabilities": {},
  "onboardingRequired": true,
  "onboardingUrl": null
}

Orders

Create order intent

Creates an initial order intent with automatic pricing calculation based on weather data. Fetches current snowfall predictions and applies first-order discounts when applicable.

Body
required
  • location
    Type: object
    required
  • areas
    Type: array string[]
    required
  • vehicle
    Type: string | null
    required
  • type
    Type: string
    required
Responses
  • application/json
  • 400

    Invalid order data

  • 401

    Authentication required

Request Example for post/api/v1/orders
curl https://api.snowprob.com/api/v1/orders \
  --request POST \
  --header 'Content-Type: application/json' \
  --data '{
  "location": {
    "latitude": 1,
    "longitude": 1,
    "address": ""
  },
  "areas": [
    ""
  ],
  "vehicle": null,
  "type": ""
}'
{
  "orderId": "string",
  "pricing": {},
  "snowfallAmount": 1,
  "expiresAt": "2025-07-10T22:38:21.384Z"
}

Submit order for contractor matching

Submits an order intent, making it active and available for contractors to claim. Sets the order TTL to 1 hour for automatic cleanup.

Body
required
  • order
    Type: object
    required
Responses
  • 200

    Order submitted successfully

  • 400

    Invalid order or payment method

  • 401

    Authentication required

Request Example for post/api/v1/orders/submit
curl https://api.snowprob.com/api/v1/orders/submit \
  --request POST \
  --header 'Content-Type: application/json' \
  --data '{
  "order": {
    "orderId": "",
    "note": null,
    "stripeCard": ""
  }
}'
No Body

List available orders for contractors

Retrieves all active orders available for contractors to claim. Only returns orders that haven't been claimed yet and are within the service area.

Responses
  • application/json
  • 401

    Authentication required

Request Example for get/api/v1/orders/available
curl https://api.snowprob.com/api/v1/orders/available
{
  "orders": [
    {
      "orderId": "string",
      "location": {},
      "pricing": {},
      "areas": [],
      "createdAt": "2025-07-10T22:38:21.384Z"
    }
  ]
}

Claim an available order

Allows a contractor to claim an available order. Creates a Stripe payment intent with hold and sets up automatic fund transfer upon completion.

Query Parameters
  • orderId
    Type: string
    required
Responses
  • 200

    Order claimed successfully

  • 400

    Order not available or already claimed

  • 401

    Authentication required

Request Example for get/api/v1/orders/claim
curl 'https://api.snowprob.com/api/v1/orders/claim?orderId='
No Body

Get contractor's orders

Retrieves all orders associated with the authenticated contractor, including current and historical orders (excludes payment hold failures).

Responses
  • application/json
  • 401

    Authentication required

Request Example for get/api/v1/orders/contractor
curl https://api.snowprob.com/api/v1/orders/contractor
{
  "orders": [
    {
      "orderId": "string",
      "status": "string",
      "customer": {},
      "location": {},
      "pricing": {}
    }
  ]
}

Mark order as begun

Updates order status when contractor arrives at the location and begins work. Changes state from 'Claimed' to 'InProgress'.

Body
required
  • orderId
    Type: string
    required
Responses
  • 200

    Order status updated successfully

  • 400

    Invalid order ID or state

  • 401

    Authentication required

Request Example for post/api/v1/orders/begun
curl https://api.snowprob.com/api/v1/orders/begun \
  --request POST \
  --header 'Content-Type: application/json' \
  --data '{
  "orderId": ""
}'
No Body

Complete order and capture payment

Marks an order as completed and captures the payment. Triggers automatic fund transfer to the contractor's Stripe Connect account.

Body
required
  • orderId
    Type: string
    required
Responses
  • 200

    Order completed and payment captured

  • 400

    Invalid order ID or payment capture failed

  • 401

    Authentication required

Request Example for post/api/v1/orders/complete
curl https://api.snowprob.com/api/v1/orders/complete \
  --request POST \
  --header 'Content-Type: application/json' \
  --data '{
  "orderId": ""
}'
No Body

Cancel order (customer)

Allows customers to cancel their active orders. Sets order state to 'UserCancelled' and handles payment refunds if applicable.

Path Parameters
  • orderId
    Type: string
    required
Responses
  • 200

    Order cancelled successfully

  • 400

    Order cannot be cancelled

  • 401

    Authentication required

Request Example for post/api/v1/orders/{orderId}/cancel/user
curl 'https://api.snowprob.com/api/v1/orders/{orderId}/cancel/user' \
  --request POST
No Body

Get order chat messages

Retrieves chat messages for an order. Only accessible by the customer or assigned contractor. Returns message history and shoveler information.

Path Parameters
  • orderId
    Type: string
    required
Responses
  • application/json
  • 401

    Authentication required

  • 403

    Access denied - not part of this order

Request Example for get/api/v1/orders/{orderId}/chat
curl 'https://api.snowprob.com/api/v1/orders/{orderId}/chat'
{
  "messages": [
    {
      "id": "string",
      "content": "string",
      "sender": "string",
      "timestamp": "2025-07-10T22:38:21.384Z"
    }
  ],
  "shovelerInfo": {}
}

Send chat message

Sends a chat message for an order. Messages are limited to 280 characters and only available to customers and contractors involved in the order.

Path Parameters
  • orderId
    Type: string
    required
Body
required
  • message
    Type: object
    required
Responses
  • 200

    Message sent successfully

  • 400

    Invalid message content or order state

  • 401

    Authentication required

  • 403

    Access denied - not part of this order

Request Example for post/api/v1/orders/{orderId}/chat
curl 'https://api.snowprob.com/api/v1/orders/{orderId}/chat' \
  --request POST \
  --header 'Content-Type: application/json' \
  --data '{
  "message": {
    "content": ""
  }
}'
No Body

Get user's order history

Retrieves the user's order history, showing the last 10 orders (excluding intents) sorted by creation date. Provides complete order details and status information.

Responses
  • application/json
  • 401

    Authentication required

Request Example for get/api/v1/user/orders
curl https://api.snowprob.com/api/v1/user/orders
{
  "orders": [
    {
      "orderId": "string",
      "status": "string",
      "createdAt": "2025-07-10T22:38:21.384Z",
      "location": {},
      "pricing": {}
    }
  ]
}

Get specific order details

Retrieves complete details for a specific order including location, pricing, contractor information, and current status.

Query Parameters
  • id
    Type: string
    required
Responses
  • application/json
  • 401

    Authentication required

  • 404

    Order not found

Request Example for get/api/v1/user/order
curl 'https://api.snowprob.com/api/v1/user/order?id='
{
  "orderId": "string",
  "status": "string",
  "location": {},
  "pricing": {},
  "contractor": null,
  "createdAt": "2025-07-10T22:38:21.384Z",
  "completedAt": null
}

Weather

Weather data and forecasting

Get weather forecast

Retrieves weather forecast for specific coordinates using Apple WeatherKit API. Filters for snowy conditions and converts metric to imperial units for snowfall predictions.

Query Parameters
  • lat
    Type: number
    required

    Latitude coordinate

  • long
    Type: number
    required

    Longitude coordinate

Responses
  • application/json
  • 400

    Invalid coordinates

  • 401

    Authentication required

Request Example for get/api/v1/weather/forecast
curl 'https://api.snowprob.com/api/v1/weather/forecast?lat=&long='
{
  "current": {
    "temperature": 1,
    "conditions": "string"
  },
  "forecast": [
    {
      "date": "2025-07-10",
      "snowfall": 1,
      "temperature": {}
    }
  ]
}

Models