openapi: 3.0.3 info: title: 'Pulse API Documentation' description: 'Welcome to the documentation for the Pulse API. Here you will be able to find all of our available resources and how to use them. To use our API, all endpoints require a token that can be created when you login to Pulse.' version: 1.0.0 servers: - url: 'https://pulsereviews.io' tags: - name: Company description: '' - name: 'Google Locations' description: 'Endpoints for managing Google locations on Pulse' - name: Health description: '' components: securitySchemes: default: type: http scheme: bearer description: 'You can generate API tokens within Pulse when logged in. Click on your name in the bottom left, then click API Tokens, give your token a name and then click Save. Your token will only be shown that one time, so make sure to copy it there and then. Tokens can be revoked at any time.' security: - default: [] paths: /api/company: get: summary: Show operationId: show description: ' This endpoint will show details of the company that the api token is for.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: name: 'Holmes Ltd' locations: [] properties: data: type: object properties: name: type: string example: 'Holmes Ltd' locations: type: array example: [] 401: description: Unauthorized content: application/json: schema: type: object example: message: Unauthenticated properties: message: type: string example: Unauthenticated 403: description: Forbidden content: application/json: schema: type: object example: message: 'This action is unauthorized.' properties: message: type: string example: 'This action is unauthorized.' tags: - Company /api/locations/google: get: summary: List operationId: list description: ' This endpoint will list all Google locations tied to the user.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: '93598351' name: 'Evans Ltd' googleRating: 3.2 preciseGoogleRating: 3.2043 reviewsCount: 193 site: mason.com address: "213 Harley Union\nNew Samuelfort\nSP1 1NE" regularHours: MONDAY: open: '8:00' close: '17:00' TUESDAY: open: '8:00' close: '17:00' WEDNESDAY: open: '8:00' close: '21:00' THURSDAY: open: '8:00' close: '21:00' FRIDAY: open: '8:00' close: '21:00' SATURDAY: open: '8:00' close: '17:00' SUNDAY: open: '10:00' close: '16:00' specialHours: '2024-12-25': status: closed open: null close: null '2024-12-24': status: open open: '10:00' close: '15:00' - id: '50830334' name: 'Roberts Ltd' googleRating: 4 preciseGoogleRating: 4.0328 reviewsCount: 64 site: mitchell.com address: "5 Elizabeth Grove\nMaxfurt\nLS16 8EE" regularHours: MONDAY: open: '8:00' close: '17:00' TUESDAY: open: '8:00' close: '17:00' WEDNESDAY: open: '8:00' close: '21:00' THURSDAY: open: '8:00' close: '21:00' FRIDAY: open: '8:00' close: '21:00' SATURDAY: open: '8:00' close: '17:00' SUNDAY: open: '10:00' close: '16:00' specialHours: '2024-12-25': status: closed open: null close: null '2024-12-24': status: open open: '10:00' close: '15:00' links: first: '/?page=1' last: '/?page=1' prev: null next: null meta: current_page: 1 from: 1 last_page: 1 links: - url: null label: Previous page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: Next page: null active: false path: / per_page: 15 to: 2 total: 2 properties: data: type: array example: - id: '93598351' name: 'Evans Ltd' googleRating: 3.2 preciseGoogleRating: 3.2043 reviewsCount: 193 site: mason.com address: "213 Harley Union\nNew Samuelfort\nSP1 1NE" regularHours: MONDAY: open: '8:00' close: '17:00' TUESDAY: open: '8:00' close: '17:00' WEDNESDAY: open: '8:00' close: '21:00' THURSDAY: open: '8:00' close: '21:00' FRIDAY: open: '8:00' close: '21:00' SATURDAY: open: '8:00' close: '17:00' SUNDAY: open: '10:00' close: '16:00' specialHours: '2024-12-25': status: closed open: null close: null '2024-12-24': status: open open: '10:00' close: '15:00' - id: '50830334' name: 'Roberts Ltd' googleRating: 4 preciseGoogleRating: 4.0328 reviewsCount: 64 site: mitchell.com address: "5 Elizabeth Grove\nMaxfurt\nLS16 8EE" regularHours: MONDAY: open: '8:00' close: '17:00' TUESDAY: open: '8:00' close: '17:00' WEDNESDAY: open: '8:00' close: '21:00' THURSDAY: open: '8:00' close: '21:00' FRIDAY: open: '8:00' close: '21:00' SATURDAY: open: '8:00' close: '17:00' SUNDAY: open: '10:00' close: '16:00' specialHours: '2024-12-25': status: closed open: null close: null '2024-12-24': status: open open: '10:00' close: '15:00' items: type: object properties: id: type: string example: '93598351' name: type: string example: 'Evans Ltd' googleRating: type: number example: 3.2 preciseGoogleRating: type: number example: 3.2043 reviewsCount: type: integer example: 193 site: type: string example: mason.com address: type: string example: "213 Harley Union\nNew Samuelfort\nSP1 1NE" regularHours: type: object properties: MONDAY: type: object properties: open: type: string example: '8:00' close: type: string example: '17:00' TUESDAY: type: object properties: open: type: string example: '8:00' close: type: string example: '17:00' WEDNESDAY: type: object properties: open: type: string example: '8:00' close: type: string example: '21:00' THURSDAY: type: object properties: open: type: string example: '8:00' close: type: string example: '21:00' FRIDAY: type: object properties: open: type: string example: '8:00' close: type: string example: '21:00' SATURDAY: type: object properties: open: type: string example: '8:00' close: type: string example: '17:00' SUNDAY: type: object properties: open: type: string example: '10:00' close: type: string example: '16:00' specialHours: type: object properties: '2024-12-25': type: object properties: status: type: string example: closed open: type: string example: null nullable: true close: type: string example: null nullable: true '2024-12-24': type: object properties: status: type: string example: open open: type: string example: '10:00' close: type: string example: '15:00' links: type: object properties: first: type: string example: '/?page=1' last: type: string example: '/?page=1' prev: type: string example: null nullable: true next: type: string example: null nullable: true meta: type: object properties: current_page: type: integer example: 1 from: type: integer example: 1 last_page: type: integer example: 1 links: type: array example: - url: null label: Previous page: null active: false - url: '/?page=1' label: '1' page: 1 active: true - url: null label: Next page: null active: false items: type: object properties: url: type: string example: null nullable: true label: type: string example: Previous page: type: string example: null nullable: true active: type: boolean example: false path: type: string example: / per_page: type: integer example: 15 to: type: integer example: 2 total: type: integer example: 2 401: description: Unauthorized content: application/json: schema: type: object example: message: Unauthenticated properties: message: type: string example: Unauthenticated tags: - 'Google Locations' '/api/locations/google/{googleLocation_google_id}': get: summary: Show operationId: show description: ' This endpoint will show a specific Google location, based on Google ID.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: '90888257' name: 'Mason Ltd' googleRating: 3.6 preciseGoogleRating: 3.5759 reviewsCount: 57 site: graham.co.uk address: "7 Quentin Glen\nEleanorton\nS70 5RT" regularHours: MONDAY: open: '8:00' close: '17:00' TUESDAY: open: '8:00' close: '17:00' WEDNESDAY: open: '8:00' close: '21:00' THURSDAY: open: '8:00' close: '21:00' FRIDAY: open: '8:00' close: '21:00' SATURDAY: open: '8:00' close: '17:00' SUNDAY: open: '10:00' close: '16:00' specialHours: '2024-12-25': status: closed open: null close: null '2024-12-24': status: open open: '10:00' close: '15:00' properties: data: type: object properties: id: type: string example: '90888257' name: type: string example: 'Mason Ltd' googleRating: type: number example: 3.6 preciseGoogleRating: type: number example: 3.5759 reviewsCount: type: integer example: 57 site: type: string example: graham.co.uk address: type: string example: "7 Quentin Glen\nEleanorton\nS70 5RT" regularHours: type: object properties: MONDAY: type: object properties: open: type: string example: '8:00' close: type: string example: '17:00' TUESDAY: type: object properties: open: type: string example: '8:00' close: type: string example: '17:00' WEDNESDAY: type: object properties: open: type: string example: '8:00' close: type: string example: '21:00' THURSDAY: type: object properties: open: type: string example: '8:00' close: type: string example: '21:00' FRIDAY: type: object properties: open: type: string example: '8:00' close: type: string example: '21:00' SATURDAY: type: object properties: open: type: string example: '8:00' close: type: string example: '17:00' SUNDAY: type: object properties: open: type: string example: '10:00' close: type: string example: '16:00' specialHours: type: object properties: '2024-12-25': type: object properties: status: type: string example: closed open: type: string example: null nullable: true close: type: string example: null nullable: true '2024-12-24': type: object properties: status: type: string example: open open: type: string example: '10:00' close: type: string example: '15:00' 401: description: Unauthorized content: application/json: schema: type: object example: message: Unauthenticated properties: message: type: string example: Unauthenticated 403: description: Forbidden content: application/json: schema: type: object example: message: 'This action is unauthorized.' properties: message: type: string example: 'This action is unauthorized.' tags: - 'Google Locations' patch: summary: Update operationId: update description: " This endpoint can be used to update a Google location. Currently, the Pulse API can only be\n used to update Regular and Special hours. This endpoint is subject to Google rate limits so make sure you allow\n for plenty of time for the update to complete." parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: null payload: title: 'Palmer Ltd' profile: description: 'Non hic tempore deleniti asperiores quos quisquam. Alias totam assumenda vitae dicta minima. Pariatur beatae est eaque illo quos iure quasi.' phoneNumbers: primaryPhone: '0833 686 6655' addititionalPhones: [] websiteUrl: adams.com storefrontAddress: postalCode: 'DD8 4EX' locality: Christopherborough addressLines: - "Studio 14r\nTheo Meadows" - '' - '' - '' - '' regionCode: GB regularHours: periods: - openDay: MONDAY closeDay: MONDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: TUESDAY closeDay: TUESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: WEDNESDAY closeDay: WEDNESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: THURSDAY closeDay: THURSDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: FRIDAY closeDay: FRIDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 specialHours: specialHourPeriods: - closed: true endDate: year: 2024 month: 12 day: 25 openTime: hours: null minutes: null closeTime: hours: null minutes: null startDate: year: 2024 month: 12 day: 25 - closed: false endDate: year: 2024 month: 12 day: 24 openTime: hours: 10 minutes: 0 closeTime: hours: 15 minutes: 0 startDate: year: 2024 month: 12 day: 24 process_at: '2026-04-02T00:37:25.000000Z' notes: 'Rem veniam excepturi veniam hic voluptas. Repellat et laboriosam beatae quasi. Optio illo eum odio quas.' validateOnly: true properties: data: type: object properties: id: type: string example: null nullable: true payload: type: object properties: title: type: string example: 'Palmer Ltd' profile: type: object properties: description: type: string example: 'Non hic tempore deleniti asperiores quos quisquam. Alias totam assumenda vitae dicta minima. Pariatur beatae est eaque illo quos iure quasi.' phoneNumbers: type: object properties: primaryPhone: type: string example: '0833 686 6655' addititionalPhones: type: array example: [] websiteUrl: type: string example: adams.com storefrontAddress: type: object properties: postalCode: type: string example: 'DD8 4EX' locality: type: string example: Christopherborough addressLines: type: array example: - "Studio 14r\nTheo Meadows" - '' - '' - '' - '' items: type: string regionCode: type: string example: GB regularHours: type: object properties: periods: type: array example: - openDay: MONDAY closeDay: MONDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: TUESDAY closeDay: TUESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: WEDNESDAY closeDay: WEDNESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: THURSDAY closeDay: THURSDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: FRIDAY closeDay: FRIDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 items: type: object properties: openDay: type: string example: MONDAY closeDay: type: string example: MONDAY openTime: type: object properties: { hours: { type: integer, example: 8 }, minutes: { type: integer, example: 0 } } closeTime: type: object properties: { hours: { type: integer, example: 18 }, minutes: { type: integer, example: 0 } } specialHours: type: object properties: specialHourPeriods: type: array example: - closed: true endDate: year: 2024 month: 12 day: 25 openTime: hours: null minutes: null closeTime: hours: null minutes: null startDate: year: 2024 month: 12 day: 25 - closed: false endDate: year: 2024 month: 12 day: 24 openTime: hours: 10 minutes: 0 closeTime: hours: 15 minutes: 0 startDate: year: 2024 month: 12 day: 24 items: type: object properties: closed: type: boolean example: true endDate: type: object properties: { year: { type: integer, example: 2024 }, month: { type: integer, example: 12 }, day: { type: integer, example: 25 } } openTime: type: object properties: { hours: { type: string, example: null, nullable: true }, minutes: { type: string, example: null, nullable: true } } closeTime: type: object properties: { hours: { type: string, example: null, nullable: true }, minutes: { type: string, example: null, nullable: true } } startDate: type: object properties: { year: { type: integer, example: 2024 }, month: { type: integer, example: 12 }, day: { type: integer, example: 25 } } process_at: type: string example: '2026-04-02T00:37:25.000000Z' notes: type: string example: 'Rem veniam excepturi veniam hic voluptas. Repellat et laboriosam beatae quasi. Optio illo eum odio quas.' validateOnly: type: boolean example: true 401: description: Unauthorized content: application/json: schema: type: object example: message: Unauthenticated properties: message: type: string example: Unauthenticated 403: description: Forbidden content: application/json: schema: type: object example: message: 'This action is unauthorized.' properties: message: type: string example: 'This action is unauthorized.' tags: - 'Google Locations' requestBody: required: true content: application/json: schema: type: object properties: regularHours: type: array description: '' example: null items: type: object properties: day: type: 'The day of the week these hours apply to. Must be a valid day of the week. If a day is closed, do not send it in the payload.' description: '' example: Monday openTime: type: 'The time that the location opens. Must be in the format `H:i`. Must be before closeTime.' description: '' example: '09:00' closeTime: type: 'The time that the location closes. Must be in the format `H:i`. Must be after openTime.' description: '' example: '17:00' required: - day specialHours: type: array description: '' example: null items: type: object properties: date: type: 'The date that the special hours apply to. Must be in the format `Y-m-D`. If a day is closed, only send the date.' description: '' example: '2024-12-24' openTime: type: 'The time that the location opens. Must be in the format `H:i`. Must be before closeTime.' description: '' example: '09:00' closeTime: type: 'The time that the location closes. Must be in the format `H:i`. Must be after openTime.' description: '' example: '17:00' required: - date applyChangesOn: type: string description: 'The date and time you wish to schedule these changes for. Can be any date and time after now.' example: '2030-05-01 23:00:00' notes: type: string description: 'Additional notes for the update you are making. Must be 255 characters or less.' example: 'Changes Wednesday to open at 10am and close at 4pm.' validateOnly: type: boolean description: 'Set to true if you want to validate the changes without actually making them. The default is false.' example: true required: - applyChangesOn - notes parameters: - in: path name: googleLocation_google_id description: '' example: 749845872867289688 required: true schema: type: 'The Google ID of the Location you want to show.' '/api/locations/google/{googleLocation_google_id}/copy-hours': post: summary: 'Copy Hours' operationId: copyHours description: " Copy this location's regular and/or special opening hours to other locations in your company.\n Creates one pending update per target location; changes are applied according to each update's process_at." parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: - id: null payload: title: 'Chapman Ltd' profile: description: 'Expedita eum nulla voluptate consequatur voluptatem est accusantium. Ducimus eaque similique voluptatem veniam vero est quas. Fuga facilis quis et vel non.' phoneNumbers: primaryPhone: '0478 869 4568' addititionalPhones: [] websiteUrl: evans.net storefrontAddress: postalCode: 'HA7 1HB' locality: Patrickport addressLines: - '12 Turner Overpass' - '' - '' - '' - '' regionCode: GB regularHours: periods: - openDay: MONDAY closeDay: MONDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: TUESDAY closeDay: TUESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: WEDNESDAY closeDay: WEDNESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: THURSDAY closeDay: THURSDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: FRIDAY closeDay: FRIDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 specialHours: specialHourPeriods: - closed: true endDate: year: 2024 month: 12 day: 25 openTime: hours: null minutes: null closeTime: hours: null minutes: null startDate: year: 2024 month: 12 day: 25 - closed: false endDate: year: 2024 month: 12 day: 24 openTime: hours: 10 minutes: 0 closeTime: hours: 15 minutes: 0 startDate: year: 2024 month: 12 day: 24 process_at: '2026-03-27T00:37:25.000000Z' notes: 'Dicta asperiores earum placeat tenetur iste voluptas dicta deleniti. Rerum voluptas iure voluptas officia. Dolorum soluta molestiae reiciendis sed maiores provident.' validateOnly: true - id: null payload: title: 'Hunter Ltd' profile: description: 'Sint quis magnam officiis alias. Error expedita voluptatem et eum. Hic in provident vel architecto alias accusamus placeat.' phoneNumbers: primaryPhone: '+44(0)1104 794134' addititionalPhones: [] websiteUrl: smith.com storefrontAddress: postalCode: 'RG27 8PG' locality: 'Port Jamiemouth' addressLines: - '5 Ray Field' - '' - '' - '' - '' regionCode: GB regularHours: periods: - openDay: MONDAY closeDay: MONDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: TUESDAY closeDay: TUESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: WEDNESDAY closeDay: WEDNESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: THURSDAY closeDay: THURSDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: FRIDAY closeDay: FRIDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 specialHours: specialHourPeriods: - closed: true endDate: year: 2024 month: 12 day: 25 openTime: hours: null minutes: null closeTime: hours: null minutes: null startDate: year: 2024 month: 12 day: 25 - closed: false endDate: year: 2024 month: 12 day: 24 openTime: hours: 10 minutes: 0 closeTime: hours: 15 minutes: 0 startDate: year: 2024 month: 12 day: 24 process_at: '2026-04-15T00:37:25.000000Z' notes: 'Est possimus et et tenetur ut alias. Provident laboriosam in et natus et repudiandae. Id dolorum voluptas quibusdam accusamus saepe.' validateOnly: false properties: data: type: array example: - id: null payload: title: 'Chapman Ltd' profile: description: 'Expedita eum nulla voluptate consequatur voluptatem est accusantium. Ducimus eaque similique voluptatem veniam vero est quas. Fuga facilis quis et vel non.' phoneNumbers: primaryPhone: '0478 869 4568' addititionalPhones: [] websiteUrl: evans.net storefrontAddress: postalCode: 'HA7 1HB' locality: Patrickport addressLines: - '12 Turner Overpass' - '' - '' - '' - '' regionCode: GB regularHours: periods: - openDay: MONDAY closeDay: MONDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: TUESDAY closeDay: TUESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: WEDNESDAY closeDay: WEDNESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: THURSDAY closeDay: THURSDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: FRIDAY closeDay: FRIDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 specialHours: specialHourPeriods: - closed: true endDate: year: 2024 month: 12 day: 25 openTime: hours: null minutes: null closeTime: hours: null minutes: null startDate: year: 2024 month: 12 day: 25 - closed: false endDate: year: 2024 month: 12 day: 24 openTime: hours: 10 minutes: 0 closeTime: hours: 15 minutes: 0 startDate: year: 2024 month: 12 day: 24 process_at: '2026-03-27T00:37:25.000000Z' notes: 'Dicta asperiores earum placeat tenetur iste voluptas dicta deleniti. Rerum voluptas iure voluptas officia. Dolorum soluta molestiae reiciendis sed maiores provident.' validateOnly: true - id: null payload: title: 'Hunter Ltd' profile: description: 'Sint quis magnam officiis alias. Error expedita voluptatem et eum. Hic in provident vel architecto alias accusamus placeat.' phoneNumbers: primaryPhone: '+44(0)1104 794134' addititionalPhones: [] websiteUrl: smith.com storefrontAddress: postalCode: 'RG27 8PG' locality: 'Port Jamiemouth' addressLines: - '5 Ray Field' - '' - '' - '' - '' regionCode: GB regularHours: periods: - openDay: MONDAY closeDay: MONDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: TUESDAY closeDay: TUESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: WEDNESDAY closeDay: WEDNESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: THURSDAY closeDay: THURSDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: FRIDAY closeDay: FRIDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 specialHours: specialHourPeriods: - closed: true endDate: year: 2024 month: 12 day: 25 openTime: hours: null minutes: null closeTime: hours: null minutes: null startDate: year: 2024 month: 12 day: 25 - closed: false endDate: year: 2024 month: 12 day: 24 openTime: hours: 10 minutes: 0 closeTime: hours: 15 minutes: 0 startDate: year: 2024 month: 12 day: 24 process_at: '2026-04-15T00:37:25.000000Z' notes: 'Est possimus et et tenetur ut alias. Provident laboriosam in et natus et repudiandae. Id dolorum voluptas quibusdam accusamus saepe.' validateOnly: false items: type: object properties: id: type: string example: null nullable: true payload: type: object properties: title: type: string example: 'Chapman Ltd' profile: type: object properties: description: type: string example: 'Expedita eum nulla voluptate consequatur voluptatem est accusantium. Ducimus eaque similique voluptatem veniam vero est quas. Fuga facilis quis et vel non.' phoneNumbers: type: object properties: primaryPhone: type: string example: '0478 869 4568' addititionalPhones: type: array example: [] websiteUrl: type: string example: evans.net storefrontAddress: type: object properties: postalCode: type: string example: 'HA7 1HB' locality: type: string example: Patrickport addressLines: type: array example: - '12 Turner Overpass' - '' - '' - '' - '' items: type: string regionCode: type: string example: GB regularHours: type: object properties: periods: type: array example: - openDay: MONDAY closeDay: MONDAY openTime: { hours: 8, minutes: 0 } closeTime: { hours: 18, minutes: 0 } - openDay: TUESDAY closeDay: TUESDAY openTime: { hours: 8, minutes: 0 } closeTime: { hours: 18, minutes: 0 } - openDay: WEDNESDAY closeDay: WEDNESDAY openTime: { hours: 8, minutes: 0 } closeTime: { hours: 18, minutes: 0 } - openDay: THURSDAY closeDay: THURSDAY openTime: { hours: 8, minutes: 0 } closeTime: { hours: 18, minutes: 0 } - openDay: FRIDAY closeDay: FRIDAY openTime: { hours: 8, minutes: 0 } closeTime: { hours: 18, minutes: 0 } items: type: object properties: openDay: { type: string, example: MONDAY } closeDay: { type: string, example: MONDAY } openTime: { type: object, properties: { hours: { type: integer, example: 8 }, minutes: { type: integer, example: 0 } } } closeTime: { type: object, properties: { hours: { type: integer, example: 18 }, minutes: { type: integer, example: 0 } } } specialHours: type: object properties: specialHourPeriods: type: array example: - closed: true endDate: { year: 2024, month: 12, day: 25 } openTime: { hours: null, minutes: null } closeTime: { hours: null, minutes: null } startDate: { year: 2024, month: 12, day: 25 } - closed: false endDate: { year: 2024, month: 12, day: 24 } openTime: { hours: 10, minutes: 0 } closeTime: { hours: 15, minutes: 0 } startDate: { year: 2024, month: 12, day: 24 } items: type: object properties: closed: { type: boolean, example: true } endDate: { type: object, properties: { year: { type: integer, example: 2024 }, month: { type: integer, example: 12 }, day: { type: integer, example: 25 } } } openTime: { type: object, properties: { hours: { type: string, example: null, nullable: true }, minutes: { type: string, example: null, nullable: true } } } closeTime: { type: object, properties: { hours: { type: string, example: null, nullable: true }, minutes: { type: string, example: null, nullable: true } } } startDate: { type: object, properties: { year: { type: integer, example: 2024 }, month: { type: integer, example: 12 }, day: { type: integer, example: 25 } } } process_at: type: string example: '2026-03-27T00:37:25.000000Z' notes: type: string example: 'Dicta asperiores earum placeat tenetur iste voluptas dicta deleniti. Rerum voluptas iure voluptas officia. Dolorum soluta molestiae reiciendis sed maiores provident.' validateOnly: type: boolean example: true 401: description: Unauthorized content: application/json: schema: type: object example: message: Unauthenticated properties: message: type: string example: Unauthenticated 403: description: Forbidden content: application/json: schema: type: object example: message: 'This action is unauthorized.' properties: message: type: string example: 'This action is unauthorized.' 422: description: '' content: application/json: schema: oneOf: - description: 'Invalid targets' type: object example: message: 'All target locations must belong to your company and not be the source location.' properties: message: type: string example: 'All target locations must belong to your company and not be the source location.' - description: 'Must choose regularHours and/or specialHours' type: object example: message: 'Please select at least one of Regular hours or Special hours.' properties: message: type: string example: 'Please select at least one of Regular hours or Special hours.' tags: - 'Google Locations' requestBody: required: true content: application/json: schema: type: object properties: target_google_ids: type: array description: 'Google IDs of the target locations to copy hours to.' example: - 749845872867289689 - 749845872867289690 items: type: string hours_to_copy: type: array description: 'What to copy: regularHours and/or specialHours.' example: - regularHours - specialHours items: type: string apply_changes_on: type: string description: 'When to apply the changes. Defaults to now if omitted.' example: '2030-05-01 23:00:00' notes: type: string description: 'Optional notes for the pending updates.' example: nobis required: - target_google_ids - hours_to_copy parameters: - in: path name: googleLocation_google_id description: '' example: 749845872867289688 required: true schema: type: 'The Google ID of the source location to copy hours from.' '/api/locations/google/{googleLocation_google_id}/updates': get: summary: 'List Updates' operationId: listUpdates description: ' This endpoint will list all updates for the specified Google location.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: null payload: title: 'Williams Ltd' profile: description: 'Sunt eaque esse non soluta autem saepe dolorem. Eveniet porro id est quam voluptatibus distinctio distinctio eveniet. Est consectetur quos vel eligendi quod.' phoneNumbers: primaryPhone: '07604 413680' addititionalPhones: [] websiteUrl: wilson.com storefrontAddress: postalCode: 'NG17 4JY' locality: 'East Robhaven' addressLines: - '90 Jordan Trail' - '' - '' - '' - '' regionCode: GB regularHours: periods: - openDay: MONDAY closeDay: MONDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: TUESDAY closeDay: TUESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: WEDNESDAY closeDay: WEDNESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: THURSDAY closeDay: THURSDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: FRIDAY closeDay: FRIDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 specialHours: specialHourPeriods: - closed: true endDate: year: 2024 month: 12 day: 25 openTime: hours: null minutes: null closeTime: hours: null minutes: null startDate: year: 2024 month: 12 day: 25 - closed: false endDate: year: 2024 month: 12 day: 24 openTime: hours: 10 minutes: 0 closeTime: hours: 15 minutes: 0 startDate: year: 2024 month: 12 day: 24 process_at: '2026-03-28T00:37:25.000000Z' notes: 'Reiciendis debitis est sed eos iure dolores ut. Aliquid at libero in enim. Id enim nulla alias asperiores minima.' validateOnly: false properties: data: type: object properties: id: type: string example: null nullable: true payload: type: object properties: title: type: string example: 'Williams Ltd' profile: type: object properties: description: type: string example: 'Sunt eaque esse non soluta autem saepe dolorem. Eveniet porro id est quam voluptatibus distinctio distinctio eveniet. Est consectetur quos vel eligendi quod.' phoneNumbers: type: object properties: primaryPhone: type: string example: '07604 413680' addititionalPhones: type: array example: [] websiteUrl: type: string example: wilson.com storefrontAddress: type: object properties: postalCode: type: string example: 'NG17 4JY' locality: type: string example: 'East Robhaven' addressLines: type: array example: - '90 Jordan Trail' - '' - '' - '' - '' items: type: string regionCode: type: string example: GB regularHours: type: object properties: periods: type: array example: - openDay: MONDAY closeDay: MONDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: TUESDAY closeDay: TUESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: WEDNESDAY closeDay: WEDNESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: THURSDAY closeDay: THURSDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: FRIDAY closeDay: FRIDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 items: type: object properties: openDay: type: string example: MONDAY closeDay: type: string example: MONDAY openTime: type: object properties: { hours: { type: integer, example: 8 }, minutes: { type: integer, example: 0 } } closeTime: type: object properties: { hours: { type: integer, example: 18 }, minutes: { type: integer, example: 0 } } specialHours: type: object properties: specialHourPeriods: type: array example: - closed: true endDate: year: 2024 month: 12 day: 25 openTime: hours: null minutes: null closeTime: hours: null minutes: null startDate: year: 2024 month: 12 day: 25 - closed: false endDate: year: 2024 month: 12 day: 24 openTime: hours: 10 minutes: 0 closeTime: hours: 15 minutes: 0 startDate: year: 2024 month: 12 day: 24 items: type: object properties: closed: type: boolean example: true endDate: type: object properties: { year: { type: integer, example: 2024 }, month: { type: integer, example: 12 }, day: { type: integer, example: 25 } } openTime: type: object properties: { hours: { type: string, example: null, nullable: true }, minutes: { type: string, example: null, nullable: true } } closeTime: type: object properties: { hours: { type: string, example: null, nullable: true }, minutes: { type: string, example: null, nullable: true } } startDate: type: object properties: { year: { type: integer, example: 2024 }, month: { type: integer, example: 12 }, day: { type: integer, example: 25 } } process_at: type: string example: '2026-03-28T00:37:25.000000Z' notes: type: string example: 'Reiciendis debitis est sed eos iure dolores ut. Aliquid at libero in enim. Id enim nulla alias asperiores minima.' validateOnly: type: boolean example: false 401: description: Unauthorized content: application/json: schema: type: object example: message: Unauthenticated properties: message: type: string example: Unauthenticated tags: - 'Google Locations' parameters: - in: path name: googleLocation_google_id description: '' example: 749845872867289688 required: true schema: type: 'The Google ID of the location you want to list updates for' '/api/locations/google/{googleLocation_google_id}/updates/{pendingGoogleLocationUpdate_id}': get: summary: 'Show Update' operationId: showUpdate description: ' This endpoint will show a specific update for the specified Google location.' parameters: [] responses: 200: description: '' content: application/json: schema: type: object example: data: id: null payload: title: 'Clark Ltd' profile: description: 'Velit perferendis ipsam eius laudantium vel sapiente. Est expedita et aliquam numquam temporibus laboriosam. Magnam voluptates veritatis ut doloremque.' phoneNumbers: primaryPhone: '0125497703' addititionalPhones: [] websiteUrl: saunders.com storefrontAddress: postalCode: 'FK3 8EP' locality: 'East Kellymouth' addressLines: - "Studio 98u\nAnna Fork" - '' - '' - '' - '' regionCode: GB regularHours: periods: - openDay: MONDAY closeDay: MONDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: TUESDAY closeDay: TUESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: WEDNESDAY closeDay: WEDNESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: THURSDAY closeDay: THURSDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: FRIDAY closeDay: FRIDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 specialHours: specialHourPeriods: - closed: true endDate: year: 2024 month: 12 day: 25 openTime: hours: null minutes: null closeTime: hours: null minutes: null startDate: year: 2024 month: 12 day: 25 - closed: false endDate: year: 2024 month: 12 day: 24 openTime: hours: 10 minutes: 0 closeTime: hours: 15 minutes: 0 startDate: year: 2024 month: 12 day: 24 process_at: '2026-03-30T00:37:25.000000Z' notes: 'Suscipit reiciendis ullam incidunt non ab cumque. Quia amet assumenda quis quidem eum officiis. Quas rem dolorum nemo sapiente eveniet.' validateOnly: true properties: data: type: object properties: id: type: string example: null nullable: true payload: type: object properties: title: type: string example: 'Clark Ltd' profile: type: object properties: description: type: string example: 'Velit perferendis ipsam eius laudantium vel sapiente. Est expedita et aliquam numquam temporibus laboriosam. Magnam voluptates veritatis ut doloremque.' phoneNumbers: type: object properties: primaryPhone: type: string example: '0125497703' addititionalPhones: type: array example: [] websiteUrl: type: string example: saunders.com storefrontAddress: type: object properties: postalCode: type: string example: 'FK3 8EP' locality: type: string example: 'East Kellymouth' addressLines: type: array example: - "Studio 98u\nAnna Fork" - '' - '' - '' - '' items: type: string regionCode: type: string example: GB regularHours: type: object properties: periods: type: array example: - openDay: MONDAY closeDay: MONDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: TUESDAY closeDay: TUESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: WEDNESDAY closeDay: WEDNESDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: THURSDAY closeDay: THURSDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 - openDay: FRIDAY closeDay: FRIDAY openTime: hours: 8 minutes: 0 closeTime: hours: 18 minutes: 0 items: type: object properties: openDay: type: string example: MONDAY closeDay: type: string example: MONDAY openTime: type: object properties: { hours: { type: integer, example: 8 }, minutes: { type: integer, example: 0 } } closeTime: type: object properties: { hours: { type: integer, example: 18 }, minutes: { type: integer, example: 0 } } specialHours: type: object properties: specialHourPeriods: type: array example: - closed: true endDate: year: 2024 month: 12 day: 25 openTime: hours: null minutes: null closeTime: hours: null minutes: null startDate: year: 2024 month: 12 day: 25 - closed: false endDate: year: 2024 month: 12 day: 24 openTime: hours: 10 minutes: 0 closeTime: hours: 15 minutes: 0 startDate: year: 2024 month: 12 day: 24 items: type: object properties: closed: type: boolean example: true endDate: type: object properties: { year: { type: integer, example: 2024 }, month: { type: integer, example: 12 }, day: { type: integer, example: 25 } } openTime: type: object properties: { hours: { type: string, example: null, nullable: true }, minutes: { type: string, example: null, nullable: true } } closeTime: type: object properties: { hours: { type: string, example: null, nullable: true }, minutes: { type: string, example: null, nullable: true } } startDate: type: object properties: { year: { type: integer, example: 2024 }, month: { type: integer, example: 12 }, day: { type: integer, example: 25 } } process_at: type: string example: '2026-03-30T00:37:25.000000Z' notes: type: string example: 'Suscipit reiciendis ullam incidunt non ab cumque. Quia amet assumenda quis quidem eum officiis. Quas rem dolorum nemo sapiente eveniet.' validateOnly: type: boolean example: true 401: description: Unauthorized content: application/json: schema: type: object example: message: Unauthenticated properties: message: type: string example: Unauthenticated tags: - 'Google Locations' delete: summary: 'Delete Update' operationId: deleteUpdate description: ' This endpoint will delete a specific update for the specified Google location.' parameters: [] responses: 204: description: 'No Content' content: text/plain: schema: type: string example: '' 401: description: Unauthorized content: application/json: schema: type: object example: message: Unauthenticated properties: message: type: string example: Unauthenticated tags: - 'Google Locations' parameters: - in: path name: googleLocation_google_id description: '' example: 749845872867289688 required: true schema: type: 'The Google ID of the location attached to the update you want to show.' - in: path name: pendingGoogleLocationUpdate_id description: '' example: 23 required: true schema: type: 'The ID of the update you want to show.' /api/health: get: summary: Check operationId: check description: ' This endpoint will allow you to quickly check that you can authenticate to the API.' parameters: [] responses: 200: description: OK content: application/json: schema: type: object example: status: ok properties: status: type: string example: ok 401: description: Unauthorized content: application/json: schema: type: object example: message: Unauthenticated properties: message: type: string example: Unauthenticated tags: - Health