PlanRadar Forms API

Get your PlanRadar forms

Operations 5

GET /api/v1/{customer_id}/ticket_types/{ticket_type_id} Returns specific ticket type
PUT /api/v1/{customer_id}/ticket_types/{ticket_type_id} Updates specific ticket type
DELETE /api/v1/{customer_id}/ticket_types/{ticket_type_id} Deletes specific ticket type
POST /api/v1/{customer_id}/ticket_types Creates ticket type
GET /api/v1/{customer_id}/ticket_types Returns all ticket types

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/planradar-forms-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

planradar-forms-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: PlanRadar's API Documentation Approval Requests V2 Forms API
  version: '2.0'
  description: "Welcome to PlanRadar's API documentation, here you can find all the details about our APIs as well as test them online.<br />\n        <h5>Rate Limits</h5>30 requests per minute per account, aggregated across all tokens.<br />\n        If the threshold is exceeded, a 5-minute cooldown is applied to the account, aggregated across all tokens.<br />\n        During the cooldown period, further requests may be rejected until the cooldown ends.<br />\n        In rare cases, an endpoint may have a different rate limit than the default. When that happens, the differing limit will be explicitly stated in the API documentation for that endpoint.<br />\n        <h5>Access Key</h5>In order to be able to access any API you have to create an access token.Therefore you have to follow these steps:-\n        <ul>\n          <li>Go to your profile page and click on Personal Access Tokens on the left side bar</li><li>Click on the 'Create Access Token' top right button in order to create a new access token.</li><li>Copy the created token and paste it into the field that pops up when you click on the 'Authorize' button </li><li>Note: you can copy the token only once.</li><li>Now you can easily access any API</li>\n        </ul>\n        <h5>V2 APIs</h5>We are currently working on upgrading all our APIs to v2, and we recommend that you use v2 APIs if it is available.\n        <p>V2 APIs are faster, robust and more flexible than v1 APIs</p>"
servers:
- url: /
tags:
- name: Forms
  description: Get your PlanRadar forms
paths:
  /api/v1/{customer_id}/ticket_types/{ticket_type_id}:
    get:
      summary: Returns specific ticket type
      tags:
      - Forms
      description: This API returns a specific ticket type based on its id.
      parameters:
      - name: customer_id
        in: path
        required: true
        schema:
          type: string
      - name: ticket_type_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '404':
          description: Ticket Type Not found
    put:
      summary: Updates specific ticket type
      tags:
      - Forms
      description: This API is used for updating a specific ticket type based on its id.
      security:
      - apiKey: []
      parameters:
      - name: customer_id
        in: path
        required: true
        schema:
          type: string
      - name: ticket_type_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '404':
          description: Ticket Type Not Found
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  type: object
                  properties:
                    attributes:
                      $ref: '#/components/schemas/TicketType'
              required:
              - title
              - content
    delete:
      summary: Deletes specific ticket type
      tags:
      - Forms
      description: This API is used for deleting a specific ticket type based on its id.
      security:
      - apiKey: []
      parameters:
      - name: customer_id
        in: path
        required: true
        schema:
          type: string
      - name: ticket_type_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '404':
          description: Ticket Type Not Found
  /api/v1/{customer_id}/ticket_types:
    post:
      summary: Creates ticket type
      tags:
      - Forms
      description: "This API is used for creating a ticket type.\n       <br />\n       <b>Example:</b>\n       <br />\n\n        {\n        \"data\": {\n          \"attributes\": {\n            \"name\": \"tickettypeone\",\n            \"capabilities\": {\n              \"has-media\": true,\n              \"has-plan-position\": true,\n              \"store-geolocation-data\": false,\n              \"has-comments\": false,\n              \"has-due-date-extension\": true,\n              \"has-recurring-reminders\": false,\n              \"has-signature\": true,\n              \"has-locking\": true,\n              \"has_sign_as_someone_else\": true\n            },\n            \"typed-fields\": {\n              \"bda0b598-ddbf-48c8-8da5-60d2c5983e89\": {\n                \"name\": \"fieldname\",\n                \"type\": \"CustomFields::IntegerType\",\n                \"order\": 1,\n                \"visible-to\": [\"xmy\",\"yen\",\"lwm\",\"lm\",\"yn\"],\n                \"editable-by\": [\"xmy\",\"yen\",\"lwm\",\"lm\"]\n              }\n            },\n            \"static-fields\": {\n              \"progress\": {\n                \"order\": 1,\n                \"visible-to\": [\"xmy\",\"yen\",\"lwm\",\"lm\",\"yn\"],\n                \"editable-by\": [\"xmy\",\"yen\",\"lwm\",\"lm\",\"yn\"]\n              }\n            },\n            \"form-decorators\":{\n                \"b6cd699b-668f-4360-b6ac-5de4404a094b\":{\n                    \"name\":\"seperator\",\n                    \"visible-to\":[\n                        762, \"lm\"\n                    ],\n                    \"order\":2,\n                    \"type\":\"FormDecorators::Separator\",\n                    \"description\": \"\",\n                    \"check-all-roles\": false,\n                    \"default_value\": \"\",\n                    \"required\": false\n                },\"b6cd699b-668f-4360-b6ac-5de4404a095b\":{\n                    \"name\":\"group\",\n                    \"order\":3,\n                    \"type\":\"FormDecorators::Group\",\n                    \"description\": \"\",\n                    \"visible_to\": [],\n                    \"check_all_roles\": true,\n                    \"fields\":[\n                        \"cc376c7d-054a-4901-98bb-4069d4e4aa74\",\n                        \"cc376c0d-054a-4901-98bb-4069d4e4aa74\",\n                        \"parent-id\"\n                    ]\n                }\n            }\n          }\n        }\n      }\n\n       <br /><br />\n       <b>CheckListType Field Example:</b>\n       <br />\n       The CheckListType field provides a checklist with configurable response options, attachments, and notes.\n       <br /><br />\n       <b>Configuration Options:</b>\n       <ul>\n         <li><b>response-label</b>: Display labels for responses. Valid values: 1 (Yes/No/N/A), 2 (True/False/N/A), 3 (Pass/Fail/N/A). Default: 1</li>\n         <li><b>response-color</b>: Color scheme for responses. Valid values: 1 (Green/Red/Blue), 2 (Red/Green/Blue), 3 (Blue for all). Default: 1</li>\n         <li><b>enable-attachments</b>: Enable attachment support. Default: true</li>\n         <li><b>max-attachments</b>: Maximum attachments per item (requires enable-attachments: true). Default: 1</li>\n         <li><b>required-attachments-for</b>: Require attachments for specific answers (requires enable-attachments: true AND max-attachments set). Valid values: [1, 2, 3]</li>\n         <li><b>enable-notes</b>: Enable notes for checklist items. Default: true</li>\n         <li><b>required-notes-for</b>: Require notes for specific answers (requires enable-notes: true). Valid values: [1, 2, 3]</li>\n       </ul>\n       <br />\n       <b>Answer Values:</b>\n       <ul>\n         <li><b>1</b>: First response option (Yes/True/Pass depending on response-label)</li>\n         <li><b>2</b>: Second response option (No/False/Fail depending on response-label)</li>\n         <li><b>3</b>: Third response option (N/A for all response-labels)</li>\n       </ul>\n       <br />\n       <b>conditional-config for CheckListType:</b>\n       <ul>\n         <li><b>answered</b>: Field has any response (no values required)</li>\n         <li><b>not_answered</b>: Field has no response (no values required)</li>\n         <li><b>includes_any</b>: Response matches any of the specified values (values required: [1, 2, 3])</li>\n         <li><b>includes_all</b>: Response matches all specified values (values required: [1, 2, 3])</li>\n       </ul>\n       <br />\n       <b>Full CheckListType Example:</b>\n       <br />\n\n        {\n        \"data\": {\n          \"attributes\": {\n            \"name\": \"Safety Inspection Form\",\n            \"capabilities\": {\n              \"has-media\": true,\n              \"has-plan-position\": true\n            },\n            \"typed-fields\": {\n              \"checklist-field-uuid\": {\n                \"name\": \"Safety Checklist\",\n                \"type\": \"CustomFields::CheckListType\",\n                \"order\": 1,\n                \"visible-to\": [\"lm\", \"yn\"],\n                \"editable-by\": [\"lm\"],\n                \"response-label\": 1,\n                \"response-color\": 1,\n                \"enable-attachments\": true,\n                \"max-attachments\": 3,\n                \"required-attachments-for\": [1, 2],\n                \"enable-notes\": true,\n                \"required-notes-for\": [2, 3]\n              },\n              \"conditional-text-field-uuid\": {\n                \"name\": \"Additional Notes\",\n                \"type\": \"CustomFields::ShortTextType\",\n                \"order\": 2,\n                \"visible-to\": [\"lm\"],\n                \"editable-by\": [\"lm\"],\n                \"conditional-config\": {\n                  \"condition-type\": \"any\",\n                  \"conditions\": {\n                    \"checklist-field-uuid\": {\n                      \"predicate\": \"includes_any\",\n                      \"values\": [1, 2]\n                    }\n                  }\n                }\n              }\n            }\n          }\n        }\n      }\n\n       <br /><br />\n       <b>Minimal CheckListType (uses defaults):</b>\n       <br />\n\n        {\n        \"typed-fields\": {\n          \"checklist-field-uuid\": {\n            \"name\": \"Quick Checklist\",\n            \"type\": \"CustomFields::CheckListType\",\n            \"order\": 1,\n            \"visible-to\": [\"lm\"],\n            \"editable-by\": [\"lm\"]\n          }\n        }\n      }"
      security:
      - apiKey: []
      parameters:
      - name: customer_id
        in: path
        required: true
        schema:
          type: string
      responses:
        '404':
          description: Ticket Type Not Created
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  type: object
                  properties:
                    attributes:
                      $ref: '#/components/schemas/TicketType'
    get:
      summary: Returns all ticket types
      tags:
      - Forms
      description: This API returns all ticket types of the logged in customer.
      parameters:
      - name: customer_id
        in: path
        required: true
        schema:
          type: string
      - name: last_sync_date
        in: query
        description: is a Unix Timestamp. If it is set, only ticket types that were created after that timestamp will be returned
        schema:
          type: string
      - name: page
        in: query
        description: sets the number of pages for the returned ticket types
        schema:
          type: integer
      - name: pagesize
        in: query
        description: sets the number of ticket types that should be returned per page <br/>Maximum is 500, default is 100
        schema:
          type: integer
      - name: apply_form_display_permission
        in: query
        required: false
        description: (KFT-338) when <code>true</code>, filters to forms the caller's role(s) can see via <code>capabilities.visible_to</code>. Watchers bypass. Default <code>false</code>.
        schema:
          type: boolean
      - name: apply_form_edit_permission
        in: query
        required: false
        description: (KFT-338) when <code>true</code>, filters to forms the caller's role(s) can edit via <code>capabilities.editable_by</code>. Watchers bypass. Default <code>false</code>.
        schema:
          type: boolean
      responses:
        '406':
          description: Unsupported Accept Header
components:
  schemas:
    TicketType:
      type: object
      properties:
        name:
          type: string
          example: tickettypeone
          description: sets the name of the ticket type
        capabilities:
          type: object
          properties:
            has-media:
              type: boolean
              example: true
            has-plan-position:
              type: boolean
              example: true
            store-geolocation-data:
              type: boolean
              example: false
            has-comments:
              type: boolean
              example: false
            has-due-date-extension:
              type: boolean
              example: true
            has-recurring-reminders:
              type: boolean
              example: false
            has-signature:
              type: boolean
              example: false
            has-locking:
              type: boolean
              example: false
            has-sign-as-someone-else:
              type: boolean
              example: false
            has-form-sequence:
              type: boolean
              example: false
            has-form-sequence-prefix:
              type: string
              example: RFI
              description: sets the prefix of the form sequence - is optional if has-form-sequence is set to true
            has-form-sequence-number:
              type: number
              example: 1
              description: sets the number of the form sequence - is required if has-form-sequence is set to true and it must be greater than 1
          description: 'sets whether or not media, plan position, comments, due date extensions, reminder repetitions and store geolocations are displayed in the ticket '
        typed-fields:
          type: object
          properties:
            field_key:
              type: object
              properties:
                name:
                  type: string
                  example: fieldname
                  description: name of the ticket type
                type:
                  type: string
                  example: CustomFields::IntegerType
                  description: 'sets the type of the field - allowed values: CustomFields::FloatType, CustomFields::DateType, CustomFields::IntegerType, CustomFields::LongTextType, CustomFields::ShortTextType, CustomFields::ListType, CustomFields::SubscriptionType, CustomFields::CheckListType'
                order:
                  type: integer
                  description: sets the order of the field e.g 1 = first typed field
                visible-to:
                  type: array
                  items:
                    type: string
                    description: sets to which roles this field is visible - array that takes the ids of the roles
                editable-by:
                  type: array
                  items:
                    type: string
                    description: sets who has the permission to edit this field - array that takes the ids of the roles
                multiple:
                  type: boolean
                  example: true
                  description: sets whether user field can have multiple assignments
                response-label:
                  type: integer
                  example: 1
                  description: 'Display labels for responses. Valid values: 1 (Yes/No/N/A), 2 (True/False/N/A), 3 (Pass/Fail/N/A). Only for CheckListType.'
                response-color:
                  type: integer
                  example: 1
                  description: 'Color scheme for responses. Valid values: 1 (Green/Red/Blue), 2 (Red/Green/Blue), 3 (Blue for all). Only for CheckListType.'
                enable-attachments:
                  type: boolean
                  example: true
                  description: Enable attachment support for checklist items. Only for CheckListType.
                enable-notes:
                  type: boolean
                  example: true
                  description: Enable notes for checklist items. Only for CheckListType.
                max-attachments:
                  type: integer
                  example: 3
                  description: 'Maximum attachments per checklist item (requires enable-attachments: true). Only for CheckListType.'
                required-attachments-for:
                  type: array
                  items:
                    type: integer
                  description: Require attachments for specific answers (e.g. [1, 2]). Only for CheckListType.
                required-notes-for:
                  type: array
                  items:
                    type: integer
                  description: Require notes for specific answers (e.g. [1, 2]). Only for CheckListType.
          description: typed-fields are the customer's custom created fields
        static-fields:
          type: object
          properties:
            field_key:
              type: object
              properties:
                order:
                  type: integer
                  description: sets the order of the field e.g 1 = first static field
                visible-to:
                  type: array
                  items:
                    type: string
                    description: sets to which roles this field is visible - array that takes the ids of the roles
                editable-by:
                  type: array
                  items:
                    type: string
                    description: sets who has the permission to edit this field - array that takes the ids of the roles
  securitySchemes:
    apiKey:
      type: apiKey
      name: X-PlanRadar-API-Key
      in: header
externalDocs:
  description: Find out more about our development portal
  url: https://www.planradar.com/knowledge-base-overview/