Skip to main content

Projects API

Projects in QRForge provide a way to organize QR codes into logical workspaces within a single account.
They help teams structure their QR code assets by campaigns, clients, departments, or use cases.

The Projects API enables you to list, create, and retrieve project resources associated with your account.


Base Path​

All Project API endpoints are prefixed with:

/v1/projects

Example:

GET https://api.qrforge.link/v1/projects

Object: Project​

A project resource has the following shape:

{
"project_id": "sGzjb6FdGCWBP8focJ6T",
"name": "API Project Bravo",
"description": "Second test project created via API.",
"is_default": false,
"has_custom_domain": false,
"created_via": "api",
"created_at": "2025-11-19T14:45:29.750Z",
"updated_at": "2025-11-19T14:45:29.750Z"
}

Fields:

FieldTypeDescription
project_idstringUnique project identifier
namestringProject display name
descriptionstring (optional)Optional project description
is_defaultbooleanIndicates whether this is the user's default project
has_custom_domainbooleanWhether this project currently uses a custom domain
created_viastringSource of creation ("api" or "dashboard")
created_attimestampISO‑8601 creation time
updated_attimestampISO‑8601 last update time

List Projects

Retrieve all projects associated with the authenticated workspace.

GET /v1/projects

Example — cURL​

curl -X GET "https://api.qrforge.link/v1/projects" \
-H "x-api-key: api_live_xxxxxxxxxxxxxxxxxxxxx"

Example — Response​

{
"ok": true,
"version": "2025-11-14-v1",
"request_id": "700f700f-c01f-4986-8010-ecb15d520b68",
"items": [
{
"project_id": "sGzjb6FdGCWBP8focJ6T",
"name": "API Project Bravo",
"description": "Second test project created via API.",
"is_default": false,
"has_custom_domain": false,
"created_via": "api",
"created_at": "2025-11-19T14:45:29.750Z",
"updated_at": "2025-11-19T14:45:29.750Z"
},
{
"project_id": "NDcK35kvVopZCn26gTm3",
"name": "Default Project",
"description": "This is your initial workspace. You can rename or organize your QR codes here.",
"is_default": true,
"has_custom_domain": false,
"created_via": null,
"created_at": "2025-07-27T12:34:14.438Z",
"updated_at": "2025-07-27T12:34:14.438Z"
}
],
"next_page_token": null
}

See Pagination for details on page_size, page_token, and next_page_token.


Create a Project

Create a new project in your workspace.

POST /v1/projects
Content-Type: application/json

Body​

{
"name": "Client A",
"description": "QR codes for Client A marketing materials",
"set_as_default": false
}
FieldTypeDescription
namestringProject display name (required)
descriptionstring (optional)Optional project description
set_as_defaultboolean (optional)If true, marks the newly created project as the caller's default project, replacing any existing default. Defaults to false.

Example — cURL​

curl -X POST "https://api.qrforge.link/v1/projects" \
-H "x-api-key: api_live_xxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"name": "Client A",
"description": "QR codes for Client A marketing materials"
}'

Example — Response​

{
"ok": true,
"version": "2025-11-14-v1",
"request_id": "700f700f-c01f-4986-8010-ecb15d520b68",
"project_id": "sGzjb6FdGCWBP8focJ6T",
"name": "API Project Bravo",
"description": "Second test project created via API.",
"has_custom_domain": false,
"created_via": "api",
"created_at": "2025-11-19T14:45:29.750Z",
"updated_at": "2025-11-19T14:45:29.750Z"
}

Notes & Best Practices

  • A project typically corresponds to a client, campaign, or team.
  • We recommend keeping project names short and descriptive.
  • All QR code creation endpoints require a project_id (optional if you allow “default project” behavior).
  • Projects do have a real is_archived state internally: creating a QR under an archived project is rejected with 403 project_forbidden, and existing QR codes under an archived project stop resolving. There is currently no public API endpoint to archive or unarchive a project.

You can now continue to the next section: QR Codes API.