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: 'Chapman Ltd' locations: [] properties: data: type: object properties: name: type: string example: 'Chapman 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: '33413544' name: 'Reynolds Ltd' googleRating: 3.8 preciseGoogleRating: 3.8224 reviewsCount: 121 site: clark.biz address: "90 Elliott Lodge\nEast Ruby\nIP7 5SS" 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: '21935607' name: 'Robertson Ltd' googleRating: 3.2 preciseGoogleRating: 3.1753 reviewsCount: 189 site: marshall.com address: "Studio 54f\nHill Crossing\nZacharyville\nPO35 5XS" 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: '33413544' name: 'Reynolds Ltd' googleRating: 3.8 preciseGoogleRating: 3.8224 reviewsCount: 121 site: clark.biz address: "90 Elliott Lodge\nEast Ruby\nIP7 5SS" 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: '21935607' name: 'Robertson Ltd' googleRating: 3.2 preciseGoogleRating: 3.1753 reviewsCount: 189 site: marshall.com address: "Studio 54f\nHill Crossing\nZacharyville\nPO35 5XS" 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: '33413544' name: type: string example: 'Reynolds Ltd' googleRating: type: number example: 3.8 preciseGoogleRating: type: number example: 3.8224 reviewsCount: type: integer example: 121 site: type: string example: clark.biz address: type: string example: "90 Elliott Lodge\nEast Ruby\nIP7 5SS" 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: '91270184' name: 'King Ltd' googleRating: 4.9 preciseGoogleRating: 4.882 reviewsCount: 169 site: saunders.net address: "53 White Light\nPort Amber\nW5 9TG" 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: '91270184' name: type: string example: 'King Ltd' googleRating: type: number example: 4.9 preciseGoogleRating: type: number example: 4.882 reviewsCount: type: integer example: 169 site: type: string example: saunders.net address: type: string example: "53 White Light\nPort Amber\nW5 9TG" 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: 'Green Ltd' profile: description: 'Nihil at voluptas voluptas esse ullam tempore rerum. Explicabo sed ut unde et unde sit. Expedita perspiciatis voluptatibus et perferendis.' phoneNumbers: primaryPhone: '(01102) 90755' addititionalPhones: [] websiteUrl: bailey.co.uk storefrontAddress: postalCode: 'BD4 7HP' locality: 'West Leah' addressLines: - "Flat 31\nSimpson Court" - '' - '' - '' - '' 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-01T21:52:00.000000Z' notes: 'Et adipisci incidunt laudantium error. Quaerat magni ducimus est quos dolor molestias beatae. Vel incidunt ducimus laudantium officia assumenda adipisci.' validateOnly: true properties: data: type: object properties: id: type: string example: null nullable: true payload: type: object properties: title: type: string example: 'Green Ltd' profile: type: object properties: description: type: string example: 'Nihil at voluptas voluptas esse ullam tempore rerum. Explicabo sed ut unde et unde sit. Expedita perspiciatis voluptatibus et perferendis.' phoneNumbers: type: object properties: primaryPhone: type: string example: '(01102) 90755' addititionalPhones: type: array example: [] websiteUrl: type: string example: bailey.co.uk storefrontAddress: type: object properties: postalCode: type: string example: 'BD4 7HP' locality: type: string example: 'West Leah' addressLines: type: array example: - "Flat 31\nSimpson Court" - '' - '' - '' - '' 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-01T21:52:00.000000Z' notes: type: string example: 'Et adipisci incidunt laudantium error. Quaerat magni ducimus est quos dolor molestias beatae. Vel incidunt ducimus laudantium officia assumenda adipisci.' 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: 'Lewis Ltd' profile: description: 'Labore beatae et ipsa suscipit. Sed laudantium nemo omnis ullam culpa. Qui vel veritatis autem dolores.' phoneNumbers: primaryPhone: '(0975) 476 2217' addititionalPhones: [] websiteUrl: smith.com storefrontAddress: postalCode: 'NG24 2PB' locality: 'Port Bruce' addressLines: - '2 Leanne River' - '' - '' - '' - '' 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-21T21:52:00.000000Z' notes: 'Aliquam numquam ex voluptas. Veritatis minus nesciunt illo harum. Autem sit enim ut deleniti sit soluta et.' validateOnly: false - id: null payload: title: 'Harrison Ltd' profile: description: 'Temporibus eveniet temporibus ut sequi eum. Consequatur quis nesciunt ducimus ab ab et sit. Illo quod velit omnis omnis vitae facilis.' phoneNumbers: primaryPhone: '0117978493' addititionalPhones: [] websiteUrl: phillips.com storefrontAddress: postalCode: 'B98 7JU' locality: 'East Sophialand' addressLines: - '5 Jacob Stream' - '' - '' - '' - '' 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-13T21:52:00.000000Z' notes: 'Nostrum temporibus quia assumenda omnis corrupti sunt. Quidem porro exercitationem vero culpa quia architecto reiciendis. Officiis est magnam rerum quaerat.' validateOnly: false properties: data: type: array example: - id: null payload: title: 'Lewis Ltd' profile: description: 'Labore beatae et ipsa suscipit. Sed laudantium nemo omnis ullam culpa. Qui vel veritatis autem dolores.' phoneNumbers: primaryPhone: '(0975) 476 2217' addititionalPhones: [] websiteUrl: smith.com storefrontAddress: postalCode: 'NG24 2PB' locality: 'Port Bruce' addressLines: - '2 Leanne River' - '' - '' - '' - '' 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-21T21:52:00.000000Z' notes: 'Aliquam numquam ex voluptas. Veritatis minus nesciunt illo harum. Autem sit enim ut deleniti sit soluta et.' validateOnly: false - id: null payload: title: 'Harrison Ltd' profile: description: 'Temporibus eveniet temporibus ut sequi eum. Consequatur quis nesciunt ducimus ab ab et sit. Illo quod velit omnis omnis vitae facilis.' phoneNumbers: primaryPhone: '0117978493' addititionalPhones: [] websiteUrl: phillips.com storefrontAddress: postalCode: 'B98 7JU' locality: 'East Sophialand' addressLines: - '5 Jacob Stream' - '' - '' - '' - '' 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-13T21:52:00.000000Z' notes: 'Nostrum temporibus quia assumenda omnis corrupti sunt. Quidem porro exercitationem vero culpa quia architecto reiciendis. Officiis est magnam rerum quaerat.' validateOnly: false items: type: object properties: id: type: string example: null nullable: true payload: type: object properties: title: type: string example: 'Lewis Ltd' profile: type: object properties: description: type: string example: 'Labore beatae et ipsa suscipit. Sed laudantium nemo omnis ullam culpa. Qui vel veritatis autem dolores.' phoneNumbers: type: object properties: primaryPhone: type: string example: '(0975) 476 2217' addititionalPhones: type: array example: [] websiteUrl: type: string example: smith.com storefrontAddress: type: object properties: postalCode: type: string example: 'NG24 2PB' locality: type: string example: 'Port Bruce' addressLines: type: array example: - '2 Leanne River' - '' - '' - '' - '' 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-21T21:52:00.000000Z' notes: type: string example: 'Aliquam numquam ex voluptas. Veritatis minus nesciunt illo harum. Autem sit enim ut deleniti sit soluta et.' validateOnly: type: boolean example: false 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: et 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: 'Patel Ltd' profile: description: 'Dolore adipisci veniam ducimus quo id. Est omnis consectetur molestiae consequuntur reiciendis dignissimos et sunt. Quidem et et qui.' phoneNumbers: primaryPhone: '(0811) 6871837' addititionalPhones: [] websiteUrl: richardson.com storefrontAddress: postalCode: 'WR2 4RX' locality: 'North Yasminestad' addressLines: - '90 Riley Ford' - '' - '' - '' - '' 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-07T21:52:00.000000Z' notes: 'Aliquam quo voluptatibus sint id aut eius. Dolor consequatur praesentium accusantium quis aut et. Rem illum voluptatem id dignissimos voluptas debitis voluptatem quam.' validateOnly: false properties: data: type: object properties: id: type: string example: null nullable: true payload: type: object properties: title: type: string example: 'Patel Ltd' profile: type: object properties: description: type: string example: 'Dolore adipisci veniam ducimus quo id. Est omnis consectetur molestiae consequuntur reiciendis dignissimos et sunt. Quidem et et qui.' phoneNumbers: type: object properties: primaryPhone: type: string example: '(0811) 6871837' addititionalPhones: type: array example: [] websiteUrl: type: string example: richardson.com storefrontAddress: type: object properties: postalCode: type: string example: 'WR2 4RX' locality: type: string example: 'North Yasminestad' addressLines: type: array example: - '90 Riley Ford' - '' - '' - '' - '' 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-07T21:52:00.000000Z' notes: type: string example: 'Aliquam quo voluptatibus sint id aut eius. Dolor consequatur praesentium accusantium quis aut et. Rem illum voluptatem id dignissimos voluptas debitis voluptatem quam.' 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: 'Brown Ltd' profile: description: 'Dolores occaecati mollitia sapiente magni velit. Reprehenderit dolorum sint animi magnam et natus est. Eius distinctio sit ea in.' phoneNumbers: primaryPhone: +44(0)2535312769 addititionalPhones: [] websiteUrl: marshall.com storefrontAddress: postalCode: 'PE23 4LZ' locality: Matthewstown addressLines: - '8 Reynolds Islands' - '' - '' - '' - '' 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-29T21:52:00.000000Z' notes: 'Fugiat a delectus sit vel. Minus sequi aspernatur quo aperiam neque omnis qui. Qui nihil ducimus ipsam consectetur molestiae.' validateOnly: true properties: data: type: object properties: id: type: string example: null nullable: true payload: type: object properties: title: type: string example: 'Brown Ltd' profile: type: object properties: description: type: string example: 'Dolores occaecati mollitia sapiente magni velit. Reprehenderit dolorum sint animi magnam et natus est. Eius distinctio sit ea in.' phoneNumbers: type: object properties: primaryPhone: type: string example: +44(0)2535312769 addititionalPhones: type: array example: [] websiteUrl: type: string example: marshall.com storefrontAddress: type: object properties: postalCode: type: string example: 'PE23 4LZ' locality: type: string example: Matthewstown addressLines: type: array example: - '8 Reynolds Islands' - '' - '' - '' - '' 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-29T21:52:00.000000Z' notes: type: string example: 'Fugiat a delectus sit vel. Minus sequi aspernatur quo aperiam neque omnis qui. Qui nihil ducimus ipsam consectetur molestiae.' 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