openapi: 3.2.0 info: title: DataCandy Webhook Management API description: 'REST API for the DataCandy platform. Provides endpoints for managing merchants, clients, contacts, account types, transactions, webhooks, and portal configuration. All endpoints require a JWT bearer token unless stated otherwise.' version: 26.7.1.0-d9107e6 servers: - url: / description: '' security: - JWT: {} tags: - name: Webhook Management paths: /webhooks: get: operationId: api_webhooks_get_collection tags: - Webhook Management responses: 200: description: List of webhooks. content: application/ld+json: schema: type: object description: Webhook.jsonld-webhook.read collection. allOf: - $ref: '#/components/schemas/HydraCollectionBaseSchema' - type: object required: - hydra:member properties: hydra:member: type: array items: $ref: '#/components/schemas/Webhook.jsonld-webhook.read' 403: description: Forbidden — token does not have the required role. content: application/json: schema: type: object properties: code: type: integer example: 403 message: type: string example: Access Denied. 401: description: Unauthorized — missing or invalid JWT token. content: application/json: schema: type: object properties: code: type: integer example: 401 message: type: string example: JWT Token not found summary: Retrieve all webhooks. description: Retrieves the collection of Webhook resources. parameters: - name: page in: query description: The collection page number required: false deprecated: false schema: type: integer default: 1 style: form explode: false - name: itemsPerPage in: query description: The number of items per page required: false deprecated: false schema: type: integer default: 30 minimum: 0 maximum: 30 style: form explode: false security: - JWT: {} post: operationId: api_webhooks_post tags: - Webhook Management responses: 201: description: Webhook created successfully. content: application/ld+json: schema: $ref: '#/components/schemas/Webhook.jsonld' 400: description: Invalid input content: application/ld+json: schema: $ref: '#/components/schemas/Error.jsonld' application/problem+json: schema: $ref: '#/components/schemas/Error' application/json: schema: $ref: '#/components/schemas/Error' links: null 422: description: Validation error — see violations array for field-level details. content: application/ld+json: schema: $ref: '#/components/schemas/ConstraintViolation.jsonld' application/problem+json: schema: $ref: '#/components/schemas/ConstraintViolation' application/json: schema: $ref: '#/components/schemas/ConstraintViolation' 401: description: Unauthorized — missing or invalid JWT token. content: application/json: schema: type: object properties: code: type: integer example: 401 message: type: string example: JWT Token not found 403: description: Forbidden — token does not have the required role. content: application/json: schema: type: object properties: code: type: integer example: 403 message: type: string example: Access Denied. summary: Create a new webhook. description: Creates a Webhook resource. parameters: {} requestBody: description: The new Webhook resource content: application/ld+json: schema: $ref: '#/components/schemas/Webhook-webhook.write.item' required: true security: - JWT: {} /webhooks/{id}: get: operationId: api_webhooks_id_get tags: - Webhook Management responses: 200: description: Webhook retrieved successfully. content: application/ld+json: schema: $ref: '#/components/schemas/Webhook.jsonld-webhook.read_webhook.read.item' 403: description: Forbidden — token does not have the required role. content: application/json: schema: type: object properties: code: type: integer example: 403 message: type: string example: Access Denied. 404: description: Not found — the requested resource does not exist. content: application/ld+json: schema: $ref: '#/components/schemas/Error.jsonld' application/problem+json: schema: $ref: '#/components/schemas/Error' application/json: schema: $ref: '#/components/schemas/Error' 401: description: Unauthorized — missing or invalid JWT token. content: application/json: schema: type: object properties: code: type: integer example: 401 message: type: string example: JWT Token not found summary: Retrieve a webhook by ID. description: Retrieves a Webhook resource. parameters: - name: id in: path description: Numeric webhook ID. required: true deprecated: false schema: type: integer style: simple explode: false example: 1 security: - JWT: {} put: operationId: api_webhooks_id_put tags: - Webhook Management responses: 200: description: Webhook replaced successfully. content: application/ld+json: schema: $ref: '#/components/schemas/Webhook.jsonld' 400: description: Invalid input content: application/ld+json: schema: $ref: '#/components/schemas/Error.jsonld' application/problem+json: schema: $ref: '#/components/schemas/Error' application/json: schema: $ref: '#/components/schemas/Error' links: null 422: description: Validation error — see violations array for field-level details. content: application/ld+json: schema: $ref: '#/components/schemas/ConstraintViolation.jsonld' application/problem+json: schema: $ref: '#/components/schemas/ConstraintViolation' application/json: schema: $ref: '#/components/schemas/ConstraintViolation' 404: description: Not found — the requested resource does not exist. content: application/ld+json: schema: $ref: '#/components/schemas/Error.jsonld' application/problem+json: schema: $ref: '#/components/schemas/Error' application/json: schema: $ref: '#/components/schemas/Error' 401: description: Unauthorized — missing or invalid JWT token. content: application/json: schema: type: object properties: code: type: integer example: 401 message: type: string example: JWT Token not found 403: description: Forbidden — token does not have the required role. content: application/json: schema: type: object properties: code: type: integer example: 403 message: type: string example: Access Denied. summary: Replace an existing webhook. description: Replaces the Webhook resource. parameters: - name: id in: path description: Numeric webhook ID. required: true deprecated: false schema: type: integer style: simple explode: false example: 1 requestBody: description: The updated Webhook resource content: application/ld+json: schema: $ref: '#/components/schemas/Webhook-webhook.write.item' required: true security: - JWT: {} patch: operationId: api_webhooks_id_patch tags: - Webhook Management responses: 200: description: Webhook updated successfully. content: application/ld+json: schema: $ref: '#/components/schemas/Webhook.jsonld' 400: description: Invalid input content: application/ld+json: schema: $ref: '#/components/schemas/Error.jsonld' application/problem+json: schema: $ref: '#/components/schemas/Error' application/json: schema: $ref: '#/components/schemas/Error' links: null 422: description: Validation error — see violations array for field-level details. content: application/ld+json: schema: $ref: '#/components/schemas/ConstraintViolation.jsonld' application/problem+json: schema: $ref: '#/components/schemas/ConstraintViolation' application/json: schema: $ref: '#/components/schemas/ConstraintViolation' 404: description: Not found — the requested resource does not exist. content: application/ld+json: schema: $ref: '#/components/schemas/Error.jsonld' application/problem+json: schema: $ref: '#/components/schemas/Error' application/json: schema: $ref: '#/components/schemas/Error' 401: description: Unauthorized — missing or invalid JWT token. content: application/json: schema: type: object properties: code: type: integer example: 401 message: type: string example: JWT Token not found 403: description: Forbidden — token does not have the required role. content: application/json: schema: type: object properties: code: type: integer example: 403 message: type: string example: Access Denied. summary: Update an existing webhook. description: Updates the Webhook resource. parameters: - name: id in: path description: Numeric webhook ID. required: true deprecated: false schema: type: integer style: simple explode: false example: 1 requestBody: description: The updated Webhook resource content: application/merge-patch+json: schema: $ref: '#/components/schemas/Webhook-webhook.write.item.jsonMergePatch' required: true security: - JWT: {} components: schemas: Error: type: object description: A representation of common errors. properties: title: readOnly: true description: A short, human-readable summary of the problem. type: - string - 'null' detail: readOnly: true description: A human-readable explanation specific to this occurrence of the problem. type: - string - 'null' status: type: - number - 'null' examples: - 404 default: 400 instance: readOnly: true description: A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. type: - string - 'null' type: readOnly: true description: A URI reference that identifies the problem type type: string AccessGroup.jsonld: type: object properties: id: readOnly: true type: integer name: type: string banners: type: array items: $ref: '#/components/schemas/Banner.jsonld' merchants: type: array items: $ref: '#/components/schemas/Client.Merchant.jsonld' creationDate: type: string format: date-time modificationDate: type: string format: date-time properties: writeOnly: true type: array items: type: - string - 'null' propertyValue: writeOnly: true validationName: readOnly: true entityTranslationPrefix: readOnly: true type: string entitySearchValue: readOnly: true type: string dbTranslationKey: readOnly: true translationKeyPrefix: readOnly: true type: - string - 'null' required: - creationDate - modificationDate Event.jsonld: type: object properties: id: readOnly: true type: integer webhook: type: string format: iri-reference example: https://example.com/ creationDate: type: string format: date-time modificationDate: type: string format: date-time type: readOnly: true type: string enum: - contact - transaction event: anyOf: - type: string enum: - created - modified - unsubscribed - anonymized - type: string enum: - loyalty.accumulation - loyalty.add - loyalty.complete_cancel - loyalty.item_cancel - loyalty.partial_cancel - loyalty.redeem - loyalty.subtract - loyalty.balance_import - loyalty.reward_earned - loyalty.reward_redeem - loyalty.reward_expired - prepaid.complete_cancel - prepaid.partial_cancel - prepaid.balance_import - prepaid.subtract - prepaid.card_empty - prepaid.redeem - prepaid.redeem_unlock - prepaid.add - prepaid.activation - prepaid.increment - prepaid.credit_note_activation - prepaid.credit_note_increment Event.jsonld-webhook.read_webhook.read.item: type: object Webhook-webhook.write.item.jsonMergePatch: type: object description: 'Webhooks let you subscribe to certain events and be notified ' properties: name: minLength: 2 type: string active: default: true type: boolean callbackUrl: format: uri externalDocs: url: https://schema.org/url type: string secretToken: type: - string - 'null' events: type: array items: $ref: '#/components/schemas/Event-webhook.write.item' merchants: type: array items: $ref: '#/components/schemas/Client.Merchant-webhook.write.item' HydraCollectionBaseSchemaNoPagination: type: object properties: hydra:totalItems: type: integer minimum: 0 hydra:search: type: object properties: '@type': type: string hydra:template: type: string hydra:variableRepresentation: type: string hydra:mapping: type: array items: type: object properties: '@type': type: string variable: type: string property: type: - string - 'null' required: type: boolean Client.Merchant.jsonld: type: object properties: parentMerchant: anyOf: - $ref: '#/components/schemas/Client.Merchant.jsonld' - type: 'null' name: maxLength: 128 type: - string - 'null' storeNumber: maxLength: 20 type: - string - 'null' lang: type: string active: default: y type: string compensation: default: y type: string chargeAdministrativeFees: type: boolean isSalesLocation: type: boolean institutionNumber: maxLength: 10 type: - string - 'null' companyName: maxLength: 80 type: - string - 'null' accountNumber: maxLength: 15 type: - string - 'null' transitNumber: maxLength: 10 type: - string - 'null' email: maxLength: 45 format: email externalDocs: url: https://schema.org/email type: - string - 'null' address: maxLength: 255 type: - string - 'null' address2: maxLength: 255 type: - string - 'null' city: maxLength: 255 type: - string - 'null' phone: maxLength: 40 type: - string - 'null' fax: maxLength: 30 type: - string - 'null' postalCode: maxLength: 255 type: - string - 'null' countryId: minLength: 2 maxLength: 2 type: - string - 'null' regionId: minLength: 2 maxLength: 2 type: - string - 'null' trxDollarToPointNumerator: minimum: 0 maximum: 100 default: 0 type: integer trxDollarToPointDenominator: minimum: 0 maximum: 100 default: 0 type: integer trxPointToDollarNumerator: minimum: 0 maximum: 100 default: 0 type: integer trxPointToDollarDenominator: minimum: 0 maximum: 100 default: 0 type: integer timezone: maxLength: 30 type: string externalReferenceId: maxLength: 20 type: - string - 'null' useShift: default: y type: string contactName: maxLength: 255 type: - string - 'null' lastTerminalInitDate: externalDocs: url: https://schema.org/DateTime type: - string - 'null' format: date-time geomPoint: anyOf: - $ref: '#/components/schemas/GeomPoint.jsonld' - type: 'null' banner: anyOf: - $ref: '#/components/schemas/Banner.jsonld' - type: 'null' paymentTerminalAcquirerId: type: - integer - 'null' posManufacturerId: type: - integer - 'null' type: type: string merchantSubcategories: type: array items: $ref: '#/components/schemas/MerchantSubcategory.jsonld' caaLocationCode: anyOf: - $ref: '#/components/schemas/CaaLocationcode.jsonld' - type: 'null' creationDate: externalDocs: url: https://schema.org/DateTime type: string format: date-time modificationDate: externalDocs: url: https://schema.org/DateTime accessGroups: type: array items: $ref: '#/components/schemas/AccessGroup.jsonld' redacted: default: false type: boolean id: type: integer hashedPassword: null clearPassword: writeOnly: true type: string systemLogableId: readOnly: true type: string systemLogableType: readOnly: true properties: writeOnly: true type: array items: type: - string - 'null' propertyValue: writeOnly: true validationName: readOnly: true entityTranslationPrefix: readOnly: true type: string entitySearchValue: readOnly: true type: string dbTranslationKey: readOnly: true translationKeyPrefix: readOnly: true type: - string - 'null' required: - name - storeNumber - lang - active - compensation - chargeAdministrativeFees - isSalesLocation - useShift - creationDate - modificationDate Client.Merchant.jsonld-webhook.read_webhook.read.item: type: object BannerTranslation.jsonld: type: object properties: id: readOnly: true type: integer name: type: string websiteUrl: format: uri externalDocs: url: https://schema.org/url type: string customerServiceEmail: format: email externalDocs: url: https://schema.org/email type: - string - 'null' customerServicePhoneNumber: type: - string - 'null' imageId: type: - integer - 'null' translatable: anyOf: - $ref: '#/components/schemas/Banner.jsonld' - type: 'null' locale: maxLength: 2 type: string translatableEntityClass: readOnly: true empty: readOnly: true type: boolean properties: writeOnly: true type: array items: type: - string - 'null' propertyValue: writeOnly: true validationName: readOnly: true entityTranslationPrefix: readOnly: true type: string entitySearchValue: readOnly: true type: string dbTranslationKey: readOnly: true translationKeyPrefix: readOnly: true type: - string - 'null' required: - locale HydraItemBaseSchema: type: object properties: '@context': oneOf: - type: string - type: object properties: '@vocab': type: string hydra: type: string enum: - http://www.w3.org/ns/hydra/core# required: - '@vocab' - hydra additionalProperties: true '@id': type: string '@type': type: string required: - '@id' - '@type' MerchantCategory.jsonld: type: object properties: exclusive: default: '1' type: boolean creationDate: type: string format: date-time modificationDate: type: string format: date-time id: readOnly: true properties: writeOnly: true type: array items: type: - string - 'null' propertyValue: writeOnly: true validationName: readOnly: true entityTranslationPrefix: readOnly: true type: string entitySearchValue: readOnly: true type: string dbTranslationKey: readOnly: true translationKeyPrefix: readOnly: true type: - string - 'null' HydraCollectionBaseSchema: allOf: - $ref: '#/components/schemas/HydraCollectionBaseSchemaNoPagination' - type: object properties: hydra:view: type: object properties: '@id': type: string format: iri-reference '@type': type: string hydra:first: type: string format: iri-reference hydra:last: type: string format: iri-reference hydra:previous: type: string format: iri-reference hydra:next: type: string format: iri-reference example: '@id': string '@type': string hydra:first: string hydra:last: string hydra:previous: string hydra:next: string Collection.jsonld: type: object properties: empty: readOnly: true keys: readOnly: true values: readOnly: true iterator: readOnly: true ConstraintViolation: type: object description: Unprocessable entity properties: status: default: 422 type: integer violations: type: array items: type: object properties: propertyPath: type: string description: The property path of the violation message: type: string description: The message associated with the violation code: type: string description: The code of the violation hint: type: string description: An extra hint to understand the violation payload: type: object additionalProperties: true description: The serialized payload of the violation required: - propertyPath - message detail: readOnly: true type: string type: readOnly: true type: string title: readOnly: true type: - string - 'null' instance: readOnly: true type: - string - 'null' MerchantSubcategory.jsonld: type: object properties: externalReference: type: - string - 'null' creationDate: type: string format: date-time modificationDate: type: string format: date-time merchantCategory: anyOf: - $ref: '#/components/schemas/MerchantCategory.jsonld' - type: 'null' merchants: type: array items: $ref: '#/components/schemas/Client.Merchant.jsonld' id: readOnly: true properties: writeOnly: true type: array items: type: - string - 'null' propertyValue: writeOnly: true validationName: readOnly: true entityTranslationPrefix: readOnly: true type: string entitySearchValue: readOnly: true type: string dbTranslationKey: readOnly: true translationKeyPrefix: readOnly: true type: - string - 'null' Client.Merchant-webhook.write.item: type: object Event.jsonld-webhook.read: type: object CaaLocationcode.jsonld: type: object properties: caaLocationcodeId: readOnly: true type: string merchant: $ref: '#/components/schemas/Client.Merchant.jsonld' id: readOnly: true properties: writeOnly: true type: array items: type: - string - 'null' propertyValue: writeOnly: true validationName: readOnly: true entityTranslationPrefix: readOnly: true type: string entitySearchValue: readOnly: true type: string dbTranslationKey: readOnly: true translationKeyPrefix: readOnly: true type: - string - 'null' Webhook.jsonld: allOf: - $ref: '#/components/schemas/HydraItemBaseSchema' - type: object properties: id: readOnly: true type: integer name: minLength: 2 type: string active: default: true type: boolean callbackUrl: format: uri externalDocs: url: https://schema.org/url type: string secretToken: type: - string - 'null' events: type: array items: $ref: '#/components/schemas/Event.jsonld' merchants: type: array items: $ref: '#/components/schemas/Client.Merchant.jsonld' creationDate: type: string format: date-time modificationDate: type: string format: date-time required: - name - callbackUrl description: 'Webhooks let you subscribe to certain events and be notified ' Banner.jsonld: type: object properties: id: readOnly: true type: integer externalReference: type: - string - 'null' creationDate: type: - string - 'null' format: date-time primaryColor: type: - string - 'null' secondaryColor: type: - string - 'null' emailSenderName: type: - string - 'null' emailSenderAddress: format: email externalDocs: url: https://schema.org/email type: - string - 'null' merchantsCount: type: - integer - 'null' modificationDate: type: - string - 'null' format: date-time accessGroups: type: array items: $ref: '#/components/schemas/AccessGroup.jsonld' merchants: type: array items: $ref: '#/components/schemas/Client.Merchant.jsonld' imageUrl: type: - string - 'null' translations: type: object additionalProperties: $ref: '#/components/schemas/BannerTranslation.jsonld' newTranslations: $ref: '#/components/schemas/Collection.jsonld' currentLocale: type: string defaultLocale: default: en type: string name: readOnly: true imageId: readOnly: true type: - integer - 'null' translationEntityClass: readOnly: true properties: writeOnly: true type: array items: type: - string - 'null' propertyValue: writeOnly: true validationName: readOnly: true entityTranslationPrefix: readOnly: true type: string entitySearchValue: readOnly: true type: string dbTranslationKey: readOnly: true translationKeyPrefix: readOnly: true type: - string - 'null' ConstraintViolation.jsonld: allOf: - $ref: '#/components/schemas/HydraItemBaseSchema' - type: object properties: status: default: 422 type: integer violations: type: array items: type: object properties: propertyPath: type: string description: The property path of the violation message: type: string description: The message associated with the violation code: type: string description: The code of the violation hint: type: string description: An extra hint to understand the violation payload: type: object additionalProperties: true description: The serialized payload of the violation required: - propertyPath - message detail: readOnly: true type: string description: readOnly: true type: string type: readOnly: true type: string title: readOnly: true type: - string - 'null' instance: readOnly: true type: - string - 'null' description: Unprocessable entity Error.jsonld: allOf: - $ref: '#/components/schemas/HydraItemBaseSchema' - type: object properties: title: readOnly: true description: A short, human-readable summary of the problem. type: - string - 'null' detail: readOnly: true description: A human-readable explanation specific to this occurrence of the problem. type: - string - 'null' status: type: - number - 'null' examples: - 404 default: 400 instance: readOnly: true description: A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. type: - string - 'null' type: readOnly: true description: A URI reference that identifies the problem type type: string description: readOnly: true type: - string - 'null' description: A representation of common errors. GeomPoint.jsonld: type: object properties: geom: $ref: '#/components/schemas/DataType.Point.jsonld' id: readOnly: true type: - integer - 'null' properties: writeOnly: true type: array items: type: - string - 'null' propertyValue: writeOnly: true validationName: readOnly: true entityTranslationPrefix: readOnly: true type: string entitySearchValue: readOnly: true type: string dbTranslationKey: readOnly: true translationKeyPrefix: readOnly: true type: - string - 'null' Webhook.jsonld-webhook.read: allOf: - $ref: '#/components/schemas/HydraItemBaseSchema' - type: object required: - name - callbackUrl properties: name: minLength: 2 type: string active: default: true type: boolean callbackUrl: format: uri externalDocs: url: https://schema.org/url type: string events: type: array items: $ref: '#/components/schemas/Event.jsonld-webhook.read' creationDate: type: string format: date-time modificationDate: type: string format: date-time description: 'Webhooks let you subscribe to certain events and be notified ' Event-webhook.write.item: type: object Webhook-webhook.write.item: type: object description: 'Webhooks let you subscribe to certain events and be notified ' required: - name - callbackUrl properties: name: minLength: 2 type: string active: default: true type: boolean callbackUrl: format: uri externalDocs: url: https://schema.org/url type: string secretToken: type: - string - 'null' events: type: array items: $ref: '#/components/schemas/Event-webhook.write.item' merchants: type: array items: $ref: '#/components/schemas/Client.Merchant-webhook.write.item' Webhook.jsonld-webhook.read_webhook.read.item: allOf: - $ref: '#/components/schemas/HydraItemBaseSchema' - type: object required: - name - callbackUrl properties: name: minLength: 2 type: string active: default: true type: boolean callbackUrl: format: uri externalDocs: url: https://schema.org/url type: string events: type: array items: $ref: '#/components/schemas/Event.jsonld-webhook.read_webhook.read.item' merchants: type: array items: $ref: '#/components/schemas/Client.Merchant.jsonld-webhook.read_webhook.read.item' creationDate: type: string format: date-time modificationDate: type: string format: date-time description: 'Webhooks let you subscribe to certain events and be notified ' DataType.Point.jsonld: type: object properties: latitude: type: number longitude: type: number securitySchemes: JWT: type: http description: Enter your JWT token (without the "Bearer" prefix). scheme: bearer bearerFormat: JWT