openapi: 3.1.0 info: title: Formbricks API description: Manage Formbricks ressources programmatically. version: 2.0.0 servers: - url: https://app.formbricks.com/api description: Formbricks Cloud tags: - name: Responses description: Operations for managing responses. - name: Contacts description: Operations for managing contacts. - name: Contact Attributes description: Operations for managing contact attributes. - name: Contact Attributes Keys description: Operations for managing contact attributes keys. paths: /responses: get: operationId: getResponses summary: Get responses description: Gets responses from the database. tags: - responses parameters: - in: query name: limit schema: type: number minimum: 1 maximum: 100 default: 10 - in: query name: skip schema: type: number minimum: 0 default: 0 - in: query name: sortBy schema: type: string enum: - createdAt - updatedAt default: createdAt - in: query name: order schema: type: string enum: - asc - desc default: desc - in: query name: startDate schema: type: string required: true - in: query name: endDate schema: type: string required: true - in: query name: surveyId schema: type: string required: true - in: query name: contactId schema: type: string required: true responses: "200": description: Responses retrieved successfully. content: application/json: schema: type: array items: $ref: "#/components/schemas/response" post: operationId: createResponse summary: Create a response description: Creates a response in the database. tags: - responses requestBody: required: true description: The response to create content: application/json: schema: $ref: "#/components/schemas/responseCreate" responses: "201": description: Response created successfully. content: application/json: schema: $ref: "#/components/schemas/response" /responses/{id}: get: operationId: getResponse summary: Get a response description: Gets a response from the database. tags: - responses parameters: - in: path name: id description: The ID of the response schema: $ref: "#/components/schemas/responseId" required: true responses: "200": description: Response retrieved successfully. content: application/json: schema: $ref: "#/components/schemas/response" put: operationId: updateResponse summary: Update a response description: Updates a response in the database. tags: - responses parameters: - in: path name: id description: The ID of the response schema: $ref: "#/components/schemas/responseId" required: true requestBody: required: true description: The response to update content: application/json: schema: type: object properties: createdAt: type: string updatedAt: type: string environmentId: type: string surveyId: type: string userId: type: - string - "null" displayId: type: - string - "null" singleUseId: type: - string - "null" finished: type: boolean endingId: type: - string - "null" language: type: string data: type: object additionalProperties: anyOf: - type: string - type: number - type: array items: type: string - type: object additionalProperties: type: string variables: type: object additionalProperties: anyOf: - type: string - type: number ttc: type: object additionalProperties: type: number meta: type: object properties: source: type: string url: type: string userAgent: type: object properties: browser: type: string device: type: string os: type: string country: type: string action: type: string required: - environmentId - surveyId - finished - data responses: "200": description: Response updated successfully. content: application/json: schema: $ref: "#/components/schemas/response" delete: operationId: deleteResponse summary: Delete a response description: Deletes a response from the database. tags: - responses parameters: - in: path name: id description: The ID of the response schema: $ref: "#/components/schemas/responseId" required: true responses: "200": description: Response deleted successfully. content: application/json: schema: $ref: "#/components/schemas/response" /contacts: get: operationId: getContacts summary: Get contacts description: Gets contacts from the database. tags: - contacts parameters: - in: query name: limit schema: type: number minimum: 1 maximum: 100 default: 10 - in: query name: skip schema: type: number minimum: 0 default: 0 - in: query name: sortBy schema: type: string enum: - createdAt - updatedAt default: createdAt - in: query name: order schema: type: string enum: - asc - desc default: desc - in: query name: startDate schema: type: string - in: query name: endDate schema: type: string responses: "200": description: Contacts retrieved successfully. content: application/json: schema: type: array items: $ref: "#/components/schemas/contact" post: operationId: createContact summary: Create a contact description: Creates a contact in the database. tags: - contacts requestBody: required: true description: The contact to create content: application/json: schema: $ref: "#/components/schemas/contactCreate" responses: "201": description: Contact created successfully. content: application/json: schema: $ref: "#/components/schemas/contact" /contacts/{id}: get: operationId: getContact summary: Get a contact description: Gets a contact from the database. tags: - contacts parameters: - in: path name: contactId schema: type: string required: true responses: "200": description: Contact retrieved successfully. content: application/json: schema: $ref: "#/components/schemas/contact" put: operationId: updateContact summary: Update a contact description: Updates a contact in the database. tags: - contacts parameters: - in: path name: contactId schema: type: string required: true requestBody: required: true description: The response to update content: application/json: schema: $ref: "#/components/schemas/contactCreate" responses: "200": description: Response updated successfully. content: application/json: schema: $ref: "#/components/schemas/contact" delete: operationId: deleteContact summary: Delete a contact description: Deletes a contact from the database. tags: - contacts parameters: - in: path name: contactId schema: type: string required: true responses: "200": description: Contact deleted successfully. content: application/json: schema: $ref: "#/components/schemas/contact" /contact-attributes: get: operationId: getContactAttributes summary: Get contact attributes description: Gets contact attributes from the database. tags: - contact-attributes parameters: - in: query name: limit schema: type: number minimum: 1 maximum: 100 default: 10 - in: query name: skip schema: type: number minimum: 0 default: 0 - in: query name: sortBy schema: type: string enum: - createdAt - updatedAt default: createdAt - in: query name: order schema: type: string enum: - asc - desc default: desc - in: query name: startDate schema: type: string - in: query name: endDate schema: type: string responses: "200": description: Contact attributes retrieved successfully. content: application/json: schema: type: array items: $ref: "#/components/schemas/contactAttribute" post: operationId: createContactAttribute summary: Create a contact attribute description: Creates a contact attribute in the database. tags: - contact-attributes requestBody: required: true description: The contact attribute to create content: application/json: schema: $ref: "#/components/schemas/contactAttributeInput" responses: "201": description: Contact attribute created successfully. /contact-attributes/{id}: get: operationId: getContactAttribute summary: Get a contact attribute description: Gets a contact attribute from the database. tags: - contact-attributes parameters: - in: path name: contactAttributeId schema: type: string required: true responses: "200": description: Contact retrieved successfully. content: application/json: schema: $ref: "#/components/schemas/contactAttribute" put: operationId: updateContactAttribute summary: Update a contact attribute description: Updates a contact attribute in the database. tags: - contact-attributes parameters: - in: path name: contactAttributeId schema: type: string required: true requestBody: required: true description: The response to update content: application/json: schema: $ref: "#/components/schemas/contactAttributeInput" responses: "200": description: Response updated successfully. content: application/json: schema: $ref: "#/components/schemas/contactAttribute" delete: operationId: deleteContactAttribute summary: Delete a contact attribute description: Deletes a contact attribute from the database. tags: - contact-attributes parameters: - in: path name: contactAttributeId schema: type: string required: true responses: "200": description: Contact deleted successfully. content: application/json: schema: $ref: "#/components/schemas/contactAttribute" /contact-attribute-keys: get: operationId: getContactAttributeKeys summary: Get contact attribute keys description: Gets contact attribute keys from the database. tags: - contact-attribute-keys parameters: - in: query name: limit schema: type: number minimum: 1 maximum: 100 default: 10 - in: query name: skip schema: type: number minimum: 0 default: 0 - in: query name: sortBy schema: type: string enum: - createdAt - updatedAt default: createdAt - in: query name: order schema: type: string enum: - asc - desc default: desc - in: query name: startDate schema: type: string - in: query name: endDate schema: type: string responses: "200": description: Contact attribute keys retrieved successfully. content: application/json: schema: type: array items: $ref: "#/components/schemas/contactAttributeKey" post: operationId: createContactAttributeKey summary: Create a contact attribute key description: Creates a contact attribute key in the database. tags: - contact-attribute-keys requestBody: required: true description: The contact attribute key to create content: application/json: schema: $ref: "#/components/schemas/contactAttributeKeyInput" responses: "201": description: Contact attribute key created successfully. /contact-attribute-keys/{id}: get: operationId: getContactAttributeKey summary: Get a contact attribute key description: Gets a contact attribute key from the database. tags: - contact-attribute-keys parameters: - in: path name: contactAttributeKeyId schema: type: string required: true responses: "200": description: Contact attribute key retrieved successfully. content: application/json: schema: $ref: "#/components/schemas/contactAttributeKey" put: operationId: updateContactAttributeKey summary: Update a contact attribute key description: Updates a contact attribute key in the database. tags: - contact-attribute-keys parameters: - in: path name: contactAttributeKeyId schema: type: string required: true requestBody: required: true description: The contact attribute key to update content: application/json: schema: $ref: "#/components/schemas/contactAttributeKeyInput" responses: "200": description: Contact attribute key updated successfully. content: application/json: schema: $ref: "#/components/schemas/contactAttributeKey" delete: operationId: deleteContactAttributeKey summary: Delete a contact attribute key description: Deletes a contact attribute key from the database. tags: - contact-attribute-keys parameters: - in: path name: contactAttributeId schema: type: string required: true responses: "200": description: Contact attribute key deleted successfully. content: application/json: schema: $ref: "#/components/schemas/contactAttributeKey" components: schemas: response: type: object properties: id: type: string description: The ID of the response createdAt: type: string description: The date and time the response was created example: 2021-01-01T00:00:00.000Z updatedAt: type: string description: The date and time the response was last updated example: 2021-01-01T00:00:00.000Z finished: type: boolean description: Whether the response is finished example: true surveyId: type: string description: The ID of the survey contactId: type: - string - "null" description: The ID of the contact endingId: type: - string - "null" description: The ID of the ending data: type: object additionalProperties: anyOf: - type: string - type: number - type: array items: type: string - type: object additionalProperties: type: string description: The data of the response example: &a1 question1: answer1 question2: 2 question3: - answer3 - answer4 question4: subquestion1: answer5 variables: type: object additionalProperties: anyOf: - type: string - type: number description: The variables of the response example: &a2 variable1: answer1 variable2: 2 ttc: type: object additionalProperties: type: number description: The TTC of the response example: &a3 question1: 10 question2: 20 meta: type: object properties: source: type: string description: The source of the response example: https://example.com url: type: string description: The URL of the response example: https://example.com userAgent: type: object properties: browser: type: string os: type: string device: type: string country: type: string action: type: string description: The meta data of the response example: &a4 source: https://example.com url: https://example.com userAgent: browser: Chrome os: Windows device: Desktop country: US action: click contactAttributes: type: - object - "null" additionalProperties: type: string description: The attributes of the contact example: attribute1: value1 attribute2: value2 singleUseId: type: - string - "null" description: The single use ID of the response language: type: - string - "null" description: The language of the response example: en displayId: type: - string - "null" description: The display ID of the response required: - id - createdAt - updatedAt - finished - surveyId - contactId - endingId - data - variables - ttc - meta - contactAttributes - singleUseId - language - displayId contact: type: object properties: id: type: string description: Unique identifier for the contact userId: type: - string - "null" description: Optional external user identifier createdAt: type: string description: When the contact was created example: 2021-01-01T00:00:00.000Z updatedAt: type: string description: When the contact was last updated example: 2021-01-01T00:00:00.000Z environmentId: type: string description: The environment this contact belongs to required: - id - userId - createdAt - updatedAt - environmentId contactAttribute: type: object properties: id: type: string description: The ID of the contact attribute createdAt: type: string description: The date and time the contact attribute was created example: 2021-01-01T00:00:00.000Z updatedAt: type: string description: The date and time the contact attribute was last updated example: 2021-01-01T00:00:00.000Z attributeKeyId: type: string description: The ID of the attribute key contactId: type: string description: The ID of the contact value: type: string description: The value of the attribute example: example@email.com required: - id - createdAt - updatedAt - attributeKeyId - contactId - value contactAttributeKey: type: object properties: id: type: string description: The ID of the contact attribute key createdAt: type: string description: The date and time the contact attribute key was created example: 2021-01-01T00:00:00.000Z updatedAt: type: string description: The date and time the contact attribute key was last updated example: 2021-01-01T00:00:00.000Z isUnique: type: boolean description: Whether the attribute must have unique values across contacts example: false key: type: string description: The attribute identifier used in the system example: email name: type: - string - "null" description: Display name for the attribute example: Email Address description: type: - string - "null" description: Description of the attribute example: The user's email address type: type: string enum: - default - custom description: Whether this is a default or custom attribute example: custom environmentId: type: string description: The ID of the environment this attribute belongs to required: - id - createdAt - updatedAt - isUnique - key - name - description - type - environmentId responseCreate: type: object properties: createdAt: type: string description: The date and time the response was created example: 2021-01-01T00:00:00.000Z updatedAt: type: string description: The date and time the response was last updated example: 2021-01-01T00:00:00.000Z surveyId: type: string description: The ID of the survey displayId: type: - string - "null" description: The display ID of the response singleUseId: type: - string - "null" description: The single use ID of the response finished: type: boolean description: Whether the response is finished example: true endingId: type: - string - "null" description: The ID of the ending language: type: - string - "null" description: The language of the response example: en data: type: object additionalProperties: anyOf: - type: string - type: number - type: array items: type: string - type: object additionalProperties: type: string description: The data of the response example: *a1 variables: type: object additionalProperties: anyOf: - type: string - type: number description: The variables of the response example: *a2 ttc: type: object additionalProperties: type: number description: The TTC of the response example: *a3 meta: type: object properties: source: type: string description: The source of the response example: https://example.com url: type: string description: The URL of the response example: https://example.com userAgent: type: object properties: browser: type: string os: type: string device: type: string country: type: string action: type: string description: The meta data of the response example: *a4 required: - surveyId - finished - data description: A response to create responseId: type: string description: The ID of the response contactCreate: type: object properties: userId: type: - string - "null" description: Optional external user identifier environmentId: type: string description: The environment this contact belongs to required: - environmentId description: A contact to create contactAttributeInput: type: object properties: attributeKeyId: type: string description: The ID of the attribute key contactId: type: string description: The ID of the contact value: type: string description: The value of the attribute example: example@email.com required: - attributeKeyId - contactId - value description: Input data for creating or updating a contact attribute contactAttributeKeyInput: type: object properties: key: type: string description: The attribute identifier used in the system example: email name: type: - string - "null" description: Display name for the attribute example: Email Address description: type: - string - "null" description: Description of the attribute example: The user's email address type: type: string enum: - default - custom description: Whether this is a default or custom attribute example: custom environmentId: type: string description: The ID of the environment this attribute belongs to required: - key - name - description - type - environmentId description: Input data for creating or updating a contact attribute