Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Fireinthebellyy/ftb-web/llms.txt

Use this file to discover all available pages before exploring further.

The Internships API allows you to create, retrieve, update, and delete internship listings on FTB Hustle.

Authentication

Most internship endpoints require authentication:
  • GET /api/internships: Public endpoint (optional authentication for admin features)
  • GET /api/internships/: Public endpoint
  • POST /api/internships: Requires authentication (ingest user)
  • PUT /api/internships/: Requires authentication (owner or admin)
  • DELETE /api/internships/: Requires authentication (owner or admin)

List Internships

curl -X GET "https://ftbhustle.com/api/internships?limit=10&offset=0&type=remote"
Retrieve a paginated list of internships with optional filtering.

Query Parameters

limit
number
default:"10"
Number of internships to return per page
offset
number
default:"0"
Number of internships to skip for pagination
Search term to filter by title, description, or hiring organization
types
string
Comma-separated list of internship types: remote, hybrid, onsite
tags
string
Comma-separated list of tags to filter by (case-insensitive)
location
string
Filter by location (partial match)
minStipend
number
Minimum stipend amount in rupees
maxStipend
number
Maximum stipend amount in rupees

Response

success
boolean
Indicates if the request was successful
internships
array
Array of internship objects
pagination
object
Pagination metadata
{
  "success": true,
  "internships": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440001",
      "title": "Software Engineering Intern",
      "description": "Join our team to build scalable web applications",
      "type": "remote",
      "timing": "full_time",
      "link": "https://example.com/apply",
      "tags": ["web development", "react", "nodejs"],
      "stipend": 25000,
      "duration": "6 months",
      "experience": "0-1 years",
      "location": "Remote",
      "deadline": "2024-06-30",
      "hiringOrganization": "TechCorp India",
      "hiringManager": "Jane Smith",
      "isVerified": true,
      "isActive": true,
      "userId": "user123",
      "user": {
        "id": "user123",
        "name": "John Doe",
        "image": "https://example.com/avatar.jpg",
        "role": "member"
      },
      "createdAt": "2024-03-01T10:00:00Z",
      "updatedAt": "2024-03-01T10:00:00Z"
    }
  ],
  "pagination": {
    "limit": 10,
    "offset": 0,
    "total": 245,
    "hasMore": true
  }
}

Get Single Internship

curl -X GET "https://ftbhustle.com/api/internships/550e8400-e29b-41d4-a716-446655440001"
Retrieve detailed information about a specific internship.

Path Parameters

id
string
required
The unique identifier of the internship

Response

success
boolean
Indicates if the request was successful
internship
object
The internship object with all details
{
  "success": true,
  "internship": {
    "id": "550e8400-e29b-41d4-a716-446655440001",
    "title": "Software Engineering Intern",
    "description": "Join our team to build scalable web applications",
    "type": "remote",
    "timing": "full_time",
    "link": "https://example.com/apply",
    "tags": ["web development", "react", "nodejs"],
    "location": "Remote",
    "deadline": "2024-06-30",
    "stipend": 25000,
    "hiringOrganization": "TechCorp India",
    "hiringManager": "Jane Smith",
    "experience": "0-1 years",
    "duration": "6 months",
    "createdAt": "2024-03-01T10:00:00Z",
    "updatedAt": "2024-03-01T10:00:00Z",
    "isVerified": true,
    "isActive": true,
    "userId": "user123",
    "user": {
      "id": "user123",
      "name": "John Doe",
      "image": "https://example.com/avatar.jpg",
      "role": "member"
    }
  }
}

Create Internship

curl -X POST "https://ftbhustle.com/api/internships" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Data Science Intern",
    "description": "Work on machine learning projects",
    "type": "hybrid",
    "timing": "full_time",
    "link": "https://example.com/apply",
    "hiringOrganization": "DataCorp",
    "tags": ["machine learning", "python", "data analysis"],
    "stipend": 30000,
    "duration": "6 months",
    "location": "Bangalore, India",
    "deadline": "2024-07-15"
  }'
Create a new internship listing. This endpoint supports both single and batch creation.

Request Body

For single internship:
title
string
required
Internship title
Application link URL
hiringOrganization
string
required
Name of the hiring organization
description
string
Detailed description
type
string
Work type: remote, hybrid, or onsite
timing
string
Work timing: full_time or part_time
tags
array
Array of tag strings
stipend
number
Monthly stipend in rupees
duration
string
Duration (e.g., “3 months”, “6 months”)
experience
string
Required experience level
location
string
Location
deadline
string
Application deadline (ISO 8601 format or YYYY-MM-DD)
hiringManager
string
Hiring manager name

Batch Creation

To create multiple internships at once, send an array of internship objects:
[
  { "title": "Internship 1", ... },
  { "title": "Internship 2", ... }
]

Response

success
boolean
Indicates if the creation was successful
count
number
Number of internships created
data
object | array
The created internship object(s)
{
  "success": true,
  "count": 1,
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440002",
    "title": "Data Science Intern",
    "description": "Work on machine learning projects",
    "type": "hybrid",
    "timing": "full_time",
    "link": "https://example.com/apply",
    "tags": ["machine learning", "python", "data analysis"],
    "stipend": 30000,
    "duration": "6 months",
    "experience": null,
    "location": "Bangalore, India",
    "deadline": "2024-07-15",
    "hiringOrganization": "DataCorp",
    "hiringManager": null,
    "isVerified": false,
    "isActive": true,
    "createdAt": "2024-03-15T14:30:00Z",
    "updatedAt": "2024-03-15T14:30:00Z",
    "deletedAt": null,
    "userId": "ingest-user-id"
  }
}

Update Internship

curl -X PUT "https://ftbhustle.com/api/internships/550e8400-e29b-41d4-a716-446655440001" \
  -H "Cookie: session=YOUR_SESSION_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Updated Software Engineering Intern",
    "stipend": 30000,
    "isActive": true
  }'
Update an existing internship. Only the owner or admin can update internships.

Path Parameters

id
string
required
The unique identifier of the internship to update

Request Body

All fields are optional. Only provided fields will be updated.
title
string
Internship title
description
string
Description
type
string
Work type: remote, hybrid, or onsite
timing
string
Work timing: full_time or part_time
Application link URL
tags
array
Array of tag strings
location
string
Location
deadline
string
Application deadline
stipend
number
Monthly stipend
hiringOrganization
string
Hiring organization
hiringManager
string
Hiring manager
experience
string
Required experience
duration
string
Duration
isVerified
boolean
Verification status (admin only)
isActive
boolean
Active status (admin only)

Response

success
boolean
Indicates if the update was successful
internship
object
The updated internship object

Error Responses

  • 401 Unauthorized: User is not authenticated
  • 403 Forbidden: User doesn’t have permission to edit this internship
  • 404 Not Found: Internship not found
  • 400 Bad Request: Validation error

Delete Internship

curl -X DELETE "https://ftbhustle.com/api/internships/550e8400-e29b-41d4-a716-446655440001" \
  -H "Cookie: session=YOUR_SESSION_TOKEN"
Soft delete an internship. Only the owner or admin can delete internships.

Path Parameters

id
string
required
The unique identifier of the internship to delete

Response

success
boolean
Indicates if the deletion was successful
{
  "success": true
}

Error Responses

  • 401 Unauthorized: User is not authenticated
  • 403 Forbidden: User doesn’t have permission to delete this internship
  • 404 Not Found: Internship not found

Error Handling

All API endpoints return appropriate HTTP status codes and error messages:
Error Response Example
{
  "error": "Failed to fetch internships"
}
For validation errors:
Validation Error Response
{
  "error": [
    {
      "code": "invalid_type",
      "path": ["title"],
      "message": "Title is required"
    }
  ]
}

Build docs developers (and LLMs) love