List Workspace Forms
curl --request GET \
--url https://api.opnform.com/open/workspaces/{workspaceId}/forms \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.opnform.com/open/workspaces/{workspaceId}/forms"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.opnform.com/open/workspaces/{workspaceId}/forms', 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://api.opnform.com/open/workspaces/{workspaceId}/forms",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.opnform.com/open/workspaces/{workspaceId}/forms"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.opnform.com/open/workspaces/{workspaceId}/forms")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.opnform.com/open/workspaces/{workspaceId}/forms")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": 123,
"slug": "<string>",
"title": "<string>",
"visibility": "public",
"tags": [
"<string>"
],
"views_count": 123,
"submissions_count": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"last_edited_human": "<string>",
"closes_at": "2023-11-07T05:31:56Z",
"is_closed": true,
"max_submissions_count": 2,
"max_number_of_submissions_reached": true,
"is_pro": true,
"workspace_id": 123,
"share_url": "<string>"
}
],
"links": {
"first": "<string>",
"last": "<string>",
"prev": "<string>",
"next": "<string>"
},
"meta": {
"current_page": 123,
"from": 123,
"last_page": 123,
"per_page": 123,
"to": 123,
"total": 123
}
}Forms
List Workspace Forms
Retrieve all forms within a specific workspace. Returns lightweight form summaries (excludes properties). Use the Get Form endpoint to retrieve the full form with all fields. Requires forms-read ability.
GET
/
open
/
workspaces
/
{workspaceId}
/
forms
List Workspace Forms
curl --request GET \
--url https://api.opnform.com/open/workspaces/{workspaceId}/forms \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.opnform.com/open/workspaces/{workspaceId}/forms"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.opnform.com/open/workspaces/{workspaceId}/forms', 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://api.opnform.com/open/workspaces/{workspaceId}/forms",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.opnform.com/open/workspaces/{workspaceId}/forms"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.opnform.com/open/workspaces/{workspaceId}/forms")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.opnform.com/open/workspaces/{workspaceId}/forms")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": 123,
"slug": "<string>",
"title": "<string>",
"visibility": "public",
"tags": [
"<string>"
],
"views_count": 123,
"submissions_count": 123,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"last_edited_human": "<string>",
"closes_at": "2023-11-07T05:31:56Z",
"is_closed": true,
"max_submissions_count": 2,
"max_number_of_submissions_reached": true,
"is_pro": true,
"workspace_id": 123,
"share_url": "<string>"
}
],
"links": {
"first": "<string>",
"last": "<string>",
"prev": "<string>",
"next": "<string>"
},
"meta": {
"current_page": 123,
"from": 123,
"last_page": 123,
"per_page": 123,
"to": 123,
"total": 123
}
}Retrieve all forms within a specific workspace.
This endpoint returns lightweight form summaries optimized for listing. The
properties array (form fields and blocks) is excluded to reduce response size. Use the Get Form endpoint to retrieve the complete form with all fields.Authentication & Scope
This request must be authenticated using a Personal Access Token that includes theforms-read ability.
Authorization: Bearer <token>
Request
GET /open/workspaces/{workspaceId}/forms HTTP/1.1
Host: api.opnform.com
Authorization: Bearer <token>
Path Parameters
| Parameter | Type | Description |
|---|---|---|
| workspaceId | number | ID of the workspace to retrieve forms from. |
Query Parameters
| Parameter | Type | Description | Default |
|---|---|---|---|
| page | number | Page number for pagination. | 1 |
| per_page | number | Number of forms per page (minimum 1, maximum 100). | 10 |
Response
200 OK – Returns a paginated JSON response containing lightweight form summaries.
{
"data": [
{
"id": 42,
"slug": "customer-feedback",
"title": "Customer Feedback",
"visibility": "public",
"tags": ["feedback", "support"],
"views_count": 1250,
"submissions_count": 15,
"created_at": "2024-11-15T10:30:00+00:00",
"updated_at": "2025-01-02T14:25:00+00:00",
"last_edited_human": "2 hours ago",
"closes_at": null,
"is_closed": false,
"max_submissions_count": null,
"max_number_of_submissions_reached": false,
"is_pro": true,
"workspace_id": 1,
"share_url": "https://opnform.com/forms/customer-feedback"
}
],
"meta": {
"current_page": 1,
"per_page": 10,
"total": 1
}
}
To get the full form including fields (
properties), call the Get Form endpoint with the form’s slug or id.403 Forbidden – The token does not include the required forms-read ability, or you do not have access to the workspace.
404 Not Found – The workspace does not exist.Authorizations
Personal Access Token
Path Parameters
ID of the workspace to retrieve forms from.
Query Parameters
Pagination page number
Required range:
x >= 1Number of forms per page
Required range:
1 <= x <= 100Was this page helpful?