@funnelchat-hq/sdk 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/api-promise.ts","../src/core/errors.ts","../src/core/pagination.ts","../src/core/error-codes.ts","../src/generated/routes.ts","../src/core/retry.ts","../src/core/url.ts","../src/resources/base.ts","../src/resources/contacts.ts","../src/resources/conversations.ts","../src/resources/custom-fields.ts","../src/resources/devices.ts","../src/resources/forms.ts","../src/resources/groups.ts","../src/resources/messages.ts","../src/resources/tags.ts","../src/resources/templates.ts","../src/webhooks/signature.ts","../src/webhooks/events.ts","../src/resources/webhooks.ts","../src/version.ts","../src/client.ts","../src/generated/events.ts"],"names":["isRecord","createHmac","timingSafeEqual","error"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * The promise every call returns: `await` it for the body, or call `withResponse()` to also get the\n * HTTP response and its `X-Request-Id`.\n */\n\n/** Header the API sets on every response, success or error: a UUID per request. */\nexport const REQUEST_ID_HEADER = 'x-request-id';\n\n/** The id of a request (`X-Request-Id`), or `undefined` when the response has none. */\nexport function requestIdOf(headers: Headers): string | undefined {\n const value = headers.get(REQUEST_ID_HEADER);\n return value !== null && value.trim() !== '' ? value.trim() : undefined;\n}\n\n/** A body together with the response it came in. */\nexport interface APIResponse<T> {\n data: T;\n /** The HTTP response. Its body was already read: use `data`. */\n response: Response;\n /** `X-Request-Id` of the response. Quote it when you report a problem. */\n requestId: string | undefined;\n}\n\n/**\n * A `Promise` of the response body with one extra method:\n *\n * ```ts\n * const { data, requestId } = await funnelchat.contacts.retrieve(2001).withResponse();\n * ```\n */\nexport class APIPromise<T> extends Promise<T> {\n readonly #response: Promise<APIResponse<T>>;\n #data: Promise<T> | undefined;\n\n constructor(response: Promise<APIResponse<T>>) {\n // The executor value is never observed: then/catch/finally read #response instead.\n super((resolve) => resolve(undefined as T));\n this.#response = response;\n }\n\n // Derived promises (`.then(...)`) are plain Promises, not APIPromises.\n static override get [Symbol.species]() {\n return Promise;\n }\n\n /** The body, the `Response` and the `X-Request-Id`. */\n withResponse(): Promise<APIResponse<T>> {\n return this.#response;\n }\n\n #body(): Promise<T> {\n this.#data ??= this.#response.then((result) => result.data);\n return this.#data;\n }\n\n override then<R1 = T, R2 = never>(\n onfulfilled?: ((value: T) => R1 | PromiseLike<R1>) | null,\n onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null,\n ): Promise<R1 | R2> {\n return this.#body().then(onfulfilled, onrejected);\n }\n\n override catch<R = never>(onrejected?: ((reason: unknown) => R | PromiseLike<R>) | null): Promise<T | R> {\n return this.#body().catch(onrejected);\n }\n\n override finally(onfinally?: (() => void) | null): Promise<T> {\n return this.#body().finally(onfinally);\n }\n}\n","/**\n * Errors thrown by the SDK.\n *\n * FunnelchatError base class of everything the SDK throws\n * ├── APIError the API answered with a non-2xx status\n * │ ├── BadRequestError 400\n * │ ├── AuthenticationError 401\n * │ ├── PermissionDeniedError 403\n * │ ├── NotFoundError 404\n * │ ├── ConflictError 409\n * │ ├── UnsupportedMediaTypeError 415\n * │ ├── UnprocessableEntityError 422\n * │ ├── RateLimitError 429\n * │ └── InternalServerError 5xx\n * ├── APIConnectionError no response (network error)\n * │ └── APIConnectionTimeoutError\n * ├── APIUserAbortError the caller aborted the request with its own AbortSignal\n * └── WebhookVerificationError a webhook delivery failed signature verification\n */\n\nimport { requestIdOf } from './api-promise.js';\nimport type { KnownErrorCode } from './error-codes.js';\n\n/** Base class of every error thrown by the SDK. */\nexport class FunnelchatError extends Error {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = new.target.name;\n }\n}\n\n/** Validation details of a Laravel `422`: field name -> messages. */\nexport type FieldErrors = Record<string, string[]>;\n\nexport interface APIErrorInit {\n status: number;\n body: unknown;\n headers: Headers;\n method: string;\n url: string;\n}\n\n/**\n * The API answered with a non-2xx status.\n *\n * - `status`: the HTTP status.\n * - `code`: the stable `error` code of the body (`window_closed`, `rate_limited`,\n * `route_not_available`…; see `SEND_ERROR_CODES` and `ACCESS_ERROR_CODES`), or `undefined` when\n * the body has none (for example a Laravel validation `422`, which carries `errors` instead).\n * - `message`: the `message` of the body, meant for people. Decide by `status` and `code`.\n * - `retryAfter`: seconds from the `Retry-After` header, when present.\n * - `requestId`: the `X-Request-Id` of the response. Quote it when you report a problem.\n */\nexport class APIError extends FunnelchatError {\n readonly status: number;\n /** The `error` of the body. The known codes autocomplete; the API can send others. */\n readonly code: KnownErrorCode | (string & {}) | undefined;\n readonly retryAfter: number | undefined;\n /** `X-Request-Id` of the response: the API sets it on every response, errors included. */\n readonly requestId: string | undefined;\n /** Per-field validation messages of a `422`, when the API sends them. */\n readonly errors: FieldErrors | undefined;\n /** The parsed body (or the raw text when it is not JSON). */\n readonly body: unknown;\n readonly headers: Headers;\n readonly method: string;\n /** URL of the request, without the query string. */\n readonly url: string;\n\n constructor(init: APIErrorInit) {\n const body = init.body;\n const record = isRecord(body) ? body : undefined;\n const code = typeof record?.error === 'string' && record.error !== '' ? record.error : undefined;\n const apiMessage = typeof record?.message === 'string' && record.message !== '' ? record.message : undefined;\n const fallback = typeof body === 'string' && body.trim() !== '' && body.length <= 300 ? body.trim() : undefined;\n super(apiMessage ?? code ?? fallback ?? `The API answered ${init.status}.`);\n this.status = init.status;\n this.code = code;\n this.retryAfter = parseRetryAfter(init.headers.get('retry-after'));\n this.requestId = requestIdOf(init.headers);\n this.errors = isRecord(record?.errors) ? (record.errors as FieldErrors) : undefined;\n this.body = body;\n this.headers = init.headers;\n this.method = init.method;\n this.url = init.url;\n }\n\n /** Builds the subclass that matches the status. */\n static from(init: APIErrorInit): APIError {\n const { status } = init;\n if (status === 400) return new BadRequestError(init);\n if (status === 401) return new AuthenticationError(init);\n if (status === 403) return new PermissionDeniedError(init);\n if (status === 404) return new NotFoundError(init);\n if (status === 409) return new ConflictError(init);\n if (status === 415) return new UnsupportedMediaTypeError(init);\n if (status === 422) return new UnprocessableEntityError(init);\n if (status === 429) return new RateLimitError(init);\n if (status >= 500) return new InternalServerError(init);\n return new APIError(init);\n }\n}\n\nexport class BadRequestError extends APIError {}\nexport class AuthenticationError extends APIError {}\n/** `403`: the key lacks the permission, or the route is not open to keys (`route_not_available`). */\nexport class PermissionDeniedError extends APIError {}\nexport class NotFoundError extends APIError {}\nexport class ConflictError extends APIError {}\n/**\n * `415`: the extension of `file` is not supported and no `file_type` was sent. The body lists\n * `supported_file_types`. Send `file_type` (and `file_name` for a document) with a URL that has no\n * known extension.\n */\nexport class UnsupportedMediaTypeError extends APIError {}\n/**\n * `422`: validation (`errors`, for example `errors.file_type`) or a rule of the send\n * (`window_closed`, `antiblock_*`, `recipient_*`, `provider_unsupported`…).\n */\nexport class UnprocessableEntityError extends APIError {}\n/**\n * `429`: rate limit (`rate_limited`, `daily_cap_exceeded`; `retryAfter` says how many seconds to\n * wait) or the monthly active contacts (`mac_lockout_24h`, `mac_limit_reached`), which waiting\n * does not fix.\n */\nexport class RateLimitError extends APIError {}\n/**\n * `5xx`. `502 origin_unreachable` and `500 edge_misconfigured` come from the API entry. After a\n * `5xx` on a write, read the state before repeating it: it may have been applied.\n */\nexport class InternalServerError extends APIError {}\n\n/** The request never got a response: DNS, connection refused, reset, TLS… */\nexport class APIConnectionError extends FunnelchatError {\n constructor(message = 'Could not connect to the Funnelchat API.', options?: { cause?: unknown }) {\n super(message, options);\n }\n}\n\n/** The request took longer than `timeoutMs`. */\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor(timeoutMs: number, options?: { cause?: unknown }) {\n super(`The Funnelchat API did not answer within ${timeoutMs} ms.`, options);\n }\n}\n\n/** The caller aborted the request with its own `AbortSignal`. Never retried. */\nexport class APIUserAbortError extends FunnelchatError {\n constructor(options?: { cause?: unknown }) {\n super('The request was aborted.', options);\n }\n}\n\nexport type WebhookVerificationFailure =\n | 'missing_secret'\n | 'invalid_body'\n | 'missing_header'\n | 'malformed_header'\n | 'timestamp_out_of_tolerance'\n | 'signature_mismatch'\n | 'invalid_json'\n | 'invalid_event';\n\n/** A webhook delivery did not pass verification. `reason` says which check failed. */\nexport class WebhookVerificationError extends FunnelchatError {\n readonly reason: WebhookVerificationFailure;\n\n constructor(reason: WebhookVerificationFailure, message: string) {\n super(message);\n this.reason = reason;\n }\n}\n\n/**\n * Seconds to wait from a `Retry-After` header: delta-seconds (`\"30\"`) or an HTTP date.\n * `undefined` when absent or unreadable.\n */\nexport function parseRetryAfter(value: string | null | undefined, now: number = Date.now()): number | undefined {\n if (value === null || value === undefined) return undefined;\n const trimmed = value.trim();\n if (trimmed === '') return undefined;\n if (/^\\d+(\\.\\d+)?$/.test(trimmed)) return Number(trimmed);\n const date = Date.parse(trimmed);\n if (Number.isNaN(date)) return undefined;\n return Math.max(0, Math.ceil((date - now) / 1000));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","/**\n * Pagination over the list routes of the API. Three shapes exist and all are handled:\n *\n * - page numbers (Laravel): `{ data, links, meta: { current_page, last_page, … } }`, next with `page`;\n * - cursors: `{ data, links, meta: { next_cursor, … } }`, next with `cursor`;\n * - plain arrays: one page with everything.\n *\n * `list()` methods return a {@link PagePromise}: `await` it for the first page, or iterate it with\n * `for await` to walk every item of every page.\n */\n\nimport type { APIResponse } from './api-promise.js';\n\n/** Fetches one page given the query of that page. */\nexport type PageFetcher = (query: Record<string, unknown>) => Promise<APIResponse<unknown>>;\n\nexport class Page<T> implements AsyncIterable<T> {\n /** Items of this page. */\n readonly data: T[];\n /** The full response body of this page (with `meta` and `links` when the route sends them). */\n readonly body: unknown;\n /** `X-Request-Id` of the response of this page. */\n readonly requestId: string | undefined;\n /** The HTTP response of this page. Its body was already read: use `body`. */\n readonly response: Response;\n readonly #fetchPage: PageFetcher;\n readonly #query: Record<string, unknown>;\n\n constructor(fetchPage: PageFetcher, query: Record<string, unknown>, result: APIResponse<unknown>) {\n this.#fetchPage = fetchPage;\n this.#query = query;\n this.body = result.data;\n this.requestId = result.requestId;\n this.response = result.response;\n this.data = extractItems<T>(result.data);\n }\n\n /**\n * The query keys that ask for the next page (`{ page }` or `{ cursor }`), or `null` on the last\n * page. An empty page is always the last one.\n */\n nextPageQuery(): Record<string, string | number> | null {\n if (this.data.length === 0) return null;\n const next = nextPageQuery(this.body);\n if (next === null) return null;\n const unchanged = Object.entries(next).every(([key, value]) => String(this.#query[key]) === String(value));\n return unchanged ? null : next;\n }\n\n hasNextPage(): boolean {\n return this.nextPageQuery() !== null;\n }\n\n /** Fetches the next page. Throws when there is none: check {@link hasNextPage} first. */\n async getNextPage(): Promise<Page<T>> {\n const next = this.nextPageQuery();\n if (next === null) throw new Error('There are no more pages.');\n const query = { ...this.#query, ...next };\n if ('cursor' in next) delete query.page;\n return new Page<T>(this.#fetchPage, query, await this.#fetchPage(query));\n }\n\n /** Walks this page and the following ones, page by page. */\n async *iterPages(): AsyncGenerator<Page<T>, void, undefined> {\n yield this;\n let next = this.hasNextPage() ? await this.getNextPage() : null;\n while (next !== null) {\n yield next;\n next = next.hasNextPage() ? await next.getNextPage() : null;\n }\n }\n\n /** Walks every item of this page and the following ones. */\n async *[Symbol.asyncIterator](): AsyncGenerator<T, void, undefined> {\n for await (const page of this.iterPages()) yield* page.data;\n }\n}\n\n/**\n * A lazy first page: nothing is requested until it is awaited or iterated.\n * `await list()` gives the first {@link Page}; `for await (const item of list())` gives every item.\n */\nexport class PagePromise<T> implements PromiseLike<Page<T>>, AsyncIterable<T> {\n readonly #load: () => Promise<Page<T>>;\n #promise: Promise<Page<T>> | undefined;\n\n constructor(fetchPage: PageFetcher, query: Record<string, unknown>) {\n this.#load = async () => new Page<T>(fetchPage, query, await fetchPage(query));\n }\n\n #page(): Promise<Page<T>> {\n this.#promise ??= this.#load();\n return this.#promise;\n }\n\n then<R1 = Page<T>, R2 = never>(\n onfulfilled?: ((value: Page<T>) => R1 | PromiseLike<R1>) | null,\n onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null,\n ): Promise<R1 | R2> {\n return this.#page().then(onfulfilled, onrejected);\n }\n\n catch<R = never>(onrejected?: ((reason: unknown) => R | PromiseLike<R>) | null): Promise<Page<T> | R> {\n return this.#page().catch(onrejected);\n }\n\n async *[Symbol.asyncIterator](): AsyncGenerator<T, void, undefined> {\n yield* await this.#page();\n }\n}\n\nfunction extractItems<T>(body: unknown): T[] {\n if (Array.isArray(body)) return body as T[];\n if (isRecord(body) && Array.isArray(body.data)) return body.data as T[];\n return [];\n}\n\nfunction toInt(value: unknown): number | null {\n if (typeof value === 'number' && Number.isInteger(value)) return value;\n if (typeof value === 'string' && /^\\d+$/.test(value)) return Number(value);\n return null;\n}\n\n/** The query of the next page according to a response body, or `null`. */\nexport function nextPageQuery(body: unknown): Record<string, string | number> | null {\n if (!isRecord(body)) return null;\n for (const holder of [body.meta, body]) {\n if (!isRecord(holder)) continue;\n if ('next_cursor' in holder) {\n return typeof holder.next_cursor === 'string' && holder.next_cursor !== '' ? { cursor: holder.next_cursor } : null;\n }\n const current = toInt(holder.current_page);\n const last = toInt(holder.last_page);\n if (current !== null && last !== null) return current < last ? { page: current + 1 } : null;\n }\n const links = isRecord(body.links) ? body.links : undefined;\n const nextUrl = links?.next ?? body.next_page_url;\n if (typeof nextUrl === 'string' && nextUrl !== '') {\n const params = new URL(nextUrl, 'https://placeholder.invalid').searchParams;\n const cursor = params.get('cursor');\n if (cursor) return { cursor };\n const page = toInt(params.get('page'));\n if (page !== null) return { page };\n }\n return null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","/**\n * The stable `error` codes of the API (`APIError.code`), with their HTTP status. Decide by `status`\n * and `code`, never by `message`: its text and language change by area.\n *\n * Sources (production, 22-10): platform-gate v0.8.0 as pinned by accounts v1.4.24; api-edge v0.3.0\n * (src/index.ts); conversations v1.18.10 (Message/Services/ApiSendGuard.php,\n * Message/Support/ApiKeySendResponse.php, WhatsappForm/Support/FormSendPreflight.php). The spec\n * does not document most of them yet; when it does, this list can be generated.\n */\n\n/** Errors of the API entry and of the key gate, on any route. */\nexport const ACCESS_ERROR_CODES = {\n /** 401: missing or invalid API key. */\n unauthenticated: 401,\n /** 403: the key lacks the permission the route needs (`message` names it). */\n permission_denied: 403,\n /** 403: the route is not open to API keys (or is turned off). */\n route_not_available: 403,\n /** 404: the path does not exist in the public API. Answered by the entry, before any area. */\n route_not_found: 404,\n /** 429, with `Retry-After`: the daily call cap of the key in that area. */\n daily_cap_exceeded: 429,\n /** 500: the entry is not configured to reach the area. Our problem: report it with the `X-Request-Id`. */\n edge_misconfigured: 500,\n /**\n * 502: the entry could not reach the area. There is no guarantee the area did not get the call:\n * after a write, read the state before repeating it.\n */\n origin_unreachable: 502,\n /** 503, with `Retry-After`: the gate could not evaluate the call and let nothing through. Safe to retry. */\n gate_unavailable: 503,\n} as const;\n\n/** Rejections of a send with an API key: nothing was sent and nothing was stored. */\nexport const SEND_ERROR_CODES = {\n /** 429, with `Retry-After`: the number's pace (per second, or per minute to the same contact). */\n rate_limited: 429,\n /** 429: the account is in the 24-hour lockout after using up its monthly active contacts (MAC). Not worth retrying. */\n mac_lockout_24h: 429,\n /** 429: the account used up its monthly active contacts (MAC). Not worth retrying. */\n mac_limit_reached: 429,\n /** 422: free text outside the 24-hour window on a WhatsApp Cloud number. Send a template. */\n window_closed: 422,\n /** 422: the same content sent too many times to a contact that did not answer. */\n antiblock_duplicate_content: 422,\n /** 422: too many messages in a row to a contact that did not answer. */\n antiblock_unanswered_limit: 422,\n /** 422: the `phone` / `whatsapp_id` of the body is not the contact of the route. */\n recipient_mismatch: 422,\n /** 422: the contact is a group, a broadcast list or a channel. */\n recipient_unsupported: 422,\n /** 422: the number cannot send this (see `capabilities` of the number). */\n provider_unsupported: 422,\n /** 422: the number is not connected or cannot send now. */\n device_unavailable: 422,\n /** 422: the message could not be registered for sending. */\n not_sent: 422,\n /** 422: the contact cannot be reached on WhatsApp (forms). */\n recipient_unreachable: 422,\n /** 422: a template variable points to a field that does not exist (`placeholders`, `count`). */\n template_unresolved_placeholder: 422,\n /** 404: the template is not one this account can send. */\n template_not_found: 404,\n /** 404: the form does not exist. */\n form_not_found: 404,\n /** 422: the form is not published. */\n form_not_published: 422,\n /** 422: the form is not published on that number. */\n form_not_on_number: 422,\n /** 422: the number cannot send forms. */\n number_not_eligible: 422,\n} as const;\n\nexport type AccessErrorCode = keyof typeof ACCESS_ERROR_CODES;\n/** An error code of a send rejected by the WhatsApp rules (`APIError.code`). */\nexport type SendErrorCode = keyof typeof SEND_ERROR_CODES;\n/** Every `error` code the SDK knows. The API can send others: treat `code` as a `string`. */\nexport type KnownErrorCode = AccessErrorCode | SendErrorCode;\n\nconst has = (table: object, code: string | undefined): boolean => code !== undefined && Object.prototype.hasOwnProperty.call(table, code);\n\n/** Whether an `APIError.code` is a rejection of a send: nothing was sent and nothing was stored. */\nexport function isSendRuleError(code: string | undefined): code is SendErrorCode {\n return has(SEND_ERROR_CODES, code);\n}\n\n/**\n * Codes that a retry would only repeat: a `429` for the monthly active contacts is not a pace,\n * so it is never retried automatically.\n */\nexport const NOT_RETRYABLE_CODES: ReadonlySet<string> = new Set(['mac_lockout_24h', 'mac_limit_reached']);\n","/**\n * GENERATED FILE — do not edit. Run `npm run generate`.\n * Source: spec/funnelchat.json (sha256 8bbbae569b4cab52…) + spec/pending.json.\n */\n\n/** One operation of the public API. `pending` = taken from spec/pending.json, not from the snapshot. */\nexport interface RouteInfo {\n readonly method: 'GET' | 'PUT' | 'POST' | 'DELETE' | 'PATCH';\n readonly path: string;\n readonly operationId: string | null;\n readonly domain: string | null;\n readonly permission: string | null;\n readonly tag: string | null;\n readonly summary: string | null;\n readonly pending: boolean;\n}\n\n/** Every operation of the spec (258), sorted by path. */\nexport const routes: readonly RouteInfo[] = [\n {\"method\":\"GET\",\"path\":\"/api/v1/agents\",\"operationId\":\"user.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"User\",\"summary\":\"Listar agentes\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/agents/{user}\",\"operationId\":\"user.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"User\",\"summary\":\"Ver un agente\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/alerts/campaigns\",\"operationId\":\"alertCampaign.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"AlertCampaign\",\"summary\":\"Listar las campañas para alertas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/alerts/catalog\",\"operationId\":\"alertCatalog.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"AlertCatalog\",\"summary\":\"Ver el catálogo de alertas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/alerts/daily-report\",\"operationId\":\"alertDailyReport.show\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"AlertDailyReport\",\"summary\":\"Ver el reporte diario\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/alerts/daily-report\",\"operationId\":\"alertDailyReport.update\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertDailyReport\",\"summary\":\"Configurar el reporte diario\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/alerts/destinations\",\"operationId\":\"alertDestination.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"AlertDestination\",\"summary\":\"Listar los destinos de alertas\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/alerts/destinations\",\"operationId\":\"alertDestination.store\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertDestination\",\"summary\":\"Crear un destino de alertas\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/alerts/destinations/{id}\",\"operationId\":\"alertDestination.destroy\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertDestination\",\"summary\":\"Eliminar un destino de alertas\",\"pending\":false},\n {\"method\":\"PATCH\",\"path\":\"/api/v1/alerts/destinations/{id}\",\"operationId\":\"alertDestination.update\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertDestination\",\"summary\":\"Actualizar un destino de alertas\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/alerts/destinations/{id}/otp\",\"operationId\":\"alertOtp.send\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertOtp\",\"summary\":\"Enviar un código de verificación\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/alerts/destinations/{id}/otp/verify\",\"operationId\":\"alertOtp.verify\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertOtp\",\"summary\":\"Verificar el código\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/alerts/destinations/{id}/settings\",\"operationId\":\"alertSetting.upsert\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertSetting\",\"summary\":\"Activar o desactivar una alerta\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/alerts/destinations/{id}/test\",\"operationId\":\"alertWebhookTest.test\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertWebhookTest\",\"summary\":\"Probar un destino webhook\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/alerts/quiet-hours\",\"operationId\":\"alertQuietHour.show\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"AlertQuietHour\",\"summary\":\"Ver el horario de silencio\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/alerts/quiet-hours\",\"operationId\":\"alertQuietHour.update\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertQuietHour\",\"summary\":\"Configurar el horario de silencio\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/broadcasts\",\"operationId\":\"broadcast.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Broadcast\",\"summary\":\"Listar difusiones\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/broadcasts/{broadcast}\",\"operationId\":\"broadcast.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Broadcast\",\"summary\":\"Eliminar una difusión\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/broadcasts/{broadcast}\",\"operationId\":\"broadcast.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Broadcast\",\"summary\":\"Ver una difusión\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/broadcasts/{broadcast}/cancel\",\"operationId\":\"broadcast.cancel\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Broadcast\",\"summary\":\"Cancelar una difusión\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/broadcasts/{broadcast}/contacts\",\"operationId\":\"broadcast.broadcastContacts\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Broadcast\",\"summary\":\"Listar los contactos de una difusión\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/broadcasts/{broadcast}/cost\",\"operationId\":\"broadcast.cost\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Broadcast\",\"summary\":\"Ver el costo de una difusión\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/broadcasts/{broadcast}/messages\",\"operationId\":\"broadcast.broadcastMessages\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Broadcast\",\"summary\":\"Listar los mensajes de una difusión\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/broadcasts/{broadcast}/statistics\",\"operationId\":\"broadcast.statistics\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Broadcast\",\"summary\":\"Ver las estadísticas de una difusión\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/broadcasts/contacts\",\"operationId\":\"broadcast.contacts\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Broadcast\",\"summary\":\"Buscar contactos para una difusión\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/broadcasts/contacts-count\",\"operationId\":\"broadcast.contactsCount\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Broadcast\",\"summary\":\"Contar contactos para una difusión\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/broadcasts/cost-tiers\",\"operationId\":\"broadcast.costTiers\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Broadcast\",\"summary\":\"Ver los tramos de costo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/broadcasts/folders\",\"operationId\":\"broadcastFolder.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Broadcast\",\"summary\":\"Listar carpetas de difusiones\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/broadcasts/folders\",\"operationId\":\"broadcastFolder.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Broadcast\",\"summary\":\"Crear una carpeta de difusiones\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/broadcasts/folders/{broadcastFolder}\",\"operationId\":\"broadcastFolder.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Broadcast\",\"summary\":\"Eliminar una carpeta de difusiones\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/broadcasts/folders/{broadcastFolder}\",\"operationId\":\"broadcastFolder.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Broadcast\",\"summary\":\"Actualizar una carpeta de difusiones\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/broadcasts/move-to-folder\",\"operationId\":\"broadcast.moveToFolder\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Broadcast\",\"summary\":\"Mover difusiones a una carpeta\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns\",\"operationId\":\"campaign.index\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Campañas\",\"summary\":\"Listar campañas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}\",\"operationId\":\"campaign.show\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Campañas\",\"summary\":\"Ver una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/actions\",\"operationId\":\"campaign.actions\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Listar las acciones de sesión de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/actions/{action}/groups\",\"operationId\":\"groupManagement.actionGroup\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Listar los grupos alcanzados por una acción\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/available-groups\",\"operationId\":\"campaign.availableGroups\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Listar los grupos que se pueden sumar a una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/campaign-participants\",\"operationId\":\"campaign.campaignParticipants\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Participantes\",\"summary\":\"Listar los participantes con su grupo actual\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/conditionals\",\"operationId\":\"campaignConditional.index\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Campañas\",\"summary\":\"Ver las condicionales de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/groups\",\"operationId\":\"campaign.groups\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Listar los grupos de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/operation-plans\",\"operationId\":\"operationPlan.index\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Listar los planes de operación de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/operation-plans/{plan}\",\"operationId\":\"operationPlan.show\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Ver un plan de operación\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/operation-plans/config\",\"operationId\":\"operationPlan.config\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Ver la configuración de los planes de operación\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/participant-events\",\"operationId\":\"campaign.participantEvents\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Participantes\",\"summary\":\"Listar entradas y salidas de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/participants\",\"operationId\":\"campaign.participants\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Participantes\",\"summary\":\"Listar los participantes de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/pipelines\",\"operationId\":\"campaign.indexPipelines\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Listar los pipelines de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/pipelines/{pipeline}\",\"operationId\":\"campaign.showPipeline\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Ver un pipeline\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/webhooks\",\"operationId\":\"campaignWebhook.index\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Webhooks de campaña (legado)\",\"summary\":\"Listar los webhooks de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/webhooks/logs\",\"operationId\":\"campaignWebhook.logs\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Webhooks de campaña (legado)\",\"summary\":\"Listar las entregas de los webhooks de una campaña\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/contact-flows/{contactFlowId}/cancel\",\"operationId\":\"flow.cancelContactFlow\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Flow\",\"summary\":\"Cancelar un flujo en curso\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contact-flows/{contactId}\",\"operationId\":\"flow.contactFlowHistory\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Flow\",\"summary\":\"Listar los flujos en curso de un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts\",\"operationId\":\"contact.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Contact\",\"summary\":\"Listar contactos\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts\",\"operationId\":\"contact.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Contact\",\"summary\":\"Crear un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}\",\"operationId\":\"contact.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Contact\",\"summary\":\"Ver un contacto\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/contacts/{contact}\",\"operationId\":\"contact.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Contact\",\"summary\":\"Actualizar un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}/custom-fields\",\"operationId\":\"contact.customFields\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Contact\",\"summary\":\"Listar los campos personalizados de un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}/flows\",\"operationId\":\"contactAutomation.flows\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"ContactAutomation\",\"summary\":\"Listar los flujos de un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}/kanban-stages\",\"operationId\":\"kanbanStage.contactStages\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"KanbanStage\",\"summary\":\"Ver las etapas de un contacto en los tableros\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}/lead-score\",\"operationId\":\"contactLeadScore.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"ContactLeadScore\",\"summary\":\"Ver el lead score de un contacto\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/lead-score/adjustments\",\"operationId\":\"leadScoreSettings.adjust\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"LeadScoreSettings\",\"summary\":\"Ajustar el lead score de un contacto\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/message\",\"operationId\":\"conversation.sendMessage\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"Conversation\",\"summary\":\"Enviar un mensaje a un contacto\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/message/contact-card\",\"operationId\":\"contactCard.store\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"ContactCard\",\"summary\":\"Enviar una tarjeta de contacto\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/message/event\",\"operationId\":\"interactiveMessage.storeEvent\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"InteractiveMessage\",\"summary\":\"Enviar una invitación a un evento\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/message/form\",\"operationId\":\"pendingForms.send\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"Message\",\"summary\":\"Send a form to a contact\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/message/poll\",\"operationId\":\"interactiveMessage.storePoll\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"InteractiveMessage\",\"summary\":\"Enviar una encuesta\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}/messages/{message}\",\"operationId\":\"pendingMessage.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Message\",\"summary\":\"Read a message by id\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/messages/{message}/forward\",\"operationId\":\"forwardMessage.store\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"ForwardMessage\",\"summary\":\"Reenviar un mensaje\",\"pending\":true},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/contacts/{contact}/messages/{message}/reaction\",\"operationId\":\"messageReaction.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"MessageReaction\",\"summary\":\"Quitar una reacción\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/contacts/{contact}/messages/{message}/reaction\",\"operationId\":\"messageReaction.update\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"MessageReaction\",\"summary\":\"Reaccionar a un mensaje\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}/meta-window\",\"operationId\":\"contact.metaWindow\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Contact\",\"summary\":\"Ver la ventana de 24 horas de un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}/notes\",\"operationId\":\"contactNote.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"ContactNote\",\"summary\":\"Listar las notas de un contacto\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/notes\",\"operationId\":\"contactNote.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"ContactNote\",\"summary\":\"Agregar una nota a un contacto\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/contacts/{contact}/notes/{note}\",\"operationId\":\"contactNote.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"ContactNote\",\"summary\":\"Eliminar una nota\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/pause\",\"operationId\":\"contactAutomation.pause\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"ContactAutomation\",\"summary\":\"Pausar un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}/tags\",\"operationId\":\"contact.tags\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Contact\",\"summary\":\"Listar las etiquetas de un contacto\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/contacts/{contact}/update\",\"operationId\":\"conversation.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Conversation\",\"summary\":\"Actualizar la conversación de un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contactId}/messages\",\"operationId\":\"conversation.getLatestMessages\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Conversation\",\"summary\":\"Listar los mensajes de un contacto\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/attach-custom-field\",\"operationId\":\"contact.attachCustomField\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Contact\",\"summary\":\"Asignar un campo personalizado a contactos\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/delete\",\"operationId\":\"contact.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Contact\",\"summary\":\"Eliminar contactos\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/detach-custom-field\",\"operationId\":\"contact.detachCustomField\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Contact\",\"summary\":\"Quitar un campo personalizado de contactos\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/update-or-create\",\"operationId\":\"contact.updateOrCreate\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Contact\",\"summary\":\"Crear o actualizar un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/conversations\",\"operationId\":\"conversation.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Conversation\",\"summary\":\"Listar conversaciones\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/conversations/count/all\",\"operationId\":\"conversation.countAll\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Conversation\",\"summary\":\"Contar todas las conversaciones\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/conversations/count/closed\",\"operationId\":\"conversation.countClosed\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Conversation\",\"summary\":\"Contar conversaciones cerradas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/conversations/count/open\",\"operationId\":\"conversation.countOpen\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Conversation\",\"summary\":\"Contar conversaciones abiertas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/conversations/count/unread\",\"operationId\":\"conversation.countUnread\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Conversation\",\"summary\":\"Contar conversaciones sin leer\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/conversations/mark-all-read\",\"operationId\":\"conversation.markAllAsRead\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Conversation\",\"summary\":\"Marcar todas como leídas\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/conversations/mark-all-unread\",\"operationId\":\"conversation.markAllAsUnread\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Conversation\",\"summary\":\"Marcar todas como no leídas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/custom-domains\",\"operationId\":\"customDomain.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"CustomDomain\",\"summary\":\"Listar dominios propios\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/custom-domains\",\"operationId\":\"customDomain.store\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"CustomDomain\",\"summary\":\"Registrar un dominio propio\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/custom-domains/{customDomain}\",\"operationId\":\"customDomain.destroy\",\"domain\":\"accounts\",\"permission\":\"accounts:operate\",\"tag\":\"CustomDomain\",\"summary\":\"Eliminar un dominio propio\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/custom-domains/{customDomain}/switch-validation\",\"operationId\":\"customDomain.switchValidationMethod\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"CustomDomain\",\"summary\":\"Cambiar el método de validación SSL\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/custom-domains/{customDomain}/verify\",\"operationId\":\"customDomain.verify\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"CustomDomain\",\"summary\":\"Verificar un dominio propio\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/custom-fields\",\"operationId\":\"customField.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"CustomField\",\"summary\":\"Listar campos personalizados\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/custom-fields\",\"operationId\":\"customField.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"CustomField\",\"summary\":\"Crear un campo personalizado\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/custom-fields/{customField}\",\"operationId\":\"customField.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"CustomField\",\"summary\":\"Ver un campo personalizado\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/custom-fields/{customField}\",\"operationId\":\"customField.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"CustomField\",\"summary\":\"Actualizar un campo personalizado\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/custom-fields/delete\",\"operationId\":\"customField.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"CustomField\",\"summary\":\"Eliminar campos personalizados\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices\",\"operationId\":\"device.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Listar números\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/devices/{device}\",\"operationId\":\"device.destroy\",\"domain\":\"accounts\",\"permission\":\"accounts:operate\",\"tag\":\"Device\",\"summary\":\"Eliminar un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}\",\"operationId\":\"device.show\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Ver un número\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/devices/{device}\",\"operationId\":\"device.update\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"Device\",\"summary\":\"Actualizar un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/ad-groups\",\"operationId\":\"group.adGroups\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Listar los grupos de anuncios de un número\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/devices/{device}/capi/dataset\",\"operationId\":\"capiConnection.dataset\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"CapiConnection\",\"summary\":\"Configurar el dataset de Conversions API\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/capi/test\",\"operationId\":\"capiConnection.test\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"CapiConnection\",\"summary\":\"Probar la conexión con Conversions API\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/channels\",\"operationId\":\"group.channels\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Listar los canales de un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/chats\",\"operationId\":\"device.chats\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Listar los chats de un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/check-phone\",\"operationId\":\"device.checkPhone\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Verificar si un teléfono tiene WhatsApp\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/devices/{device}/clean\",\"operationId\":\"device.clean\",\"domain\":\"accounts\",\"permission\":\"accounts:operate\",\"tag\":\"Device\",\"summary\":\"Limpiar un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/connection-history\",\"operationId\":\"deviceConnectionEvent.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"DeviceConnectionEvent\",\"summary\":\"Ver el historial de conexión\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/contacts\",\"operationId\":\"contact.contactsByDevice\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Contact\",\"summary\":\"Listar los contactos de un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/disconnect-survey\",\"operationId\":\"deviceDisconnectSurvey.show\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"DeviceDisconnectSurvey\",\"summary\":\"Ver la encuesta de desconexión\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/devices/{device}/disconnect-survey\",\"operationId\":\"deviceDisconnectSurvey.store\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"DeviceDisconnectSurvey\",\"summary\":\"Responder la encuesta de desconexión\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/devices/{device}/extension-token\",\"operationId\":\"device.extensionToken\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"Device\",\"summary\":\"Pedir un token para la extensión de WhatsApp Web\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/groups\",\"operationId\":\"group.groups\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Listar los grupos que administra un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/health\",\"operationId\":\"deviceHealth.show\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"DeviceHealth\",\"summary\":\"Ver la salud de un número\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/devices/{device}/health/refresh\",\"operationId\":\"deviceHealth.refresh\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"DeviceHealth\",\"summary\":\"Actualizar la salud de un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/logs\",\"operationId\":\"deviceLogs.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"DeviceLogs\",\"summary\":\"Listar los registros de un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/logs/health\",\"operationId\":\"deviceLogs.health\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"DeviceLogs\",\"summary\":\"Ver la señal de salud de los registros\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/me\",\"operationId\":\"device.me\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Ver el perfil de WhatsApp de un número\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/devices/{device}/message-queue\",\"operationId\":\"device.deleteMessageQueue\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"Device\",\"summary\":\"Eliminar mensajes de la cola\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/message-queue\",\"operationId\":\"device.messageQueue\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Ver la cola de mensajes\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/devices/{device}/message-queue/all\",\"operationId\":\"device.clearQueue\",\"domain\":\"accounts\",\"permission\":\"accounts:operate\",\"tag\":\"Device\",\"summary\":\"Vaciar la cola de mensajes\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/message-queue/count\",\"operationId\":\"device.getQueueCount\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Contar los mensajes en la cola\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/open-conversations\",\"operationId\":\"device.openConversations\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Ver qué teléfonos tienen conversación abierta\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/devices/{device}/reset\",\"operationId\":\"device.reset\",\"domain\":\"accounts\",\"permission\":\"accounts:operate\",\"tag\":\"Device\",\"summary\":\"Reiniciar la sesión de un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/status\",\"operationId\":\"device.status\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Ver el estado de conexión\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/devices/{device}/templates/{template}\",\"operationId\":\"messageTemplate.delete\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"MessageTemplate\",\"summary\":\"Eliminar una plantilla de un número\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/devices/{device}/templates/{template}/send-template\",\"operationId\":\"messageTemplate.send\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"MessageTemplate\",\"summary\":\"Enviar una plantilla\",\"pending\":true},\n {\"method\":\"PUT\",\"path\":\"/api/v1/devices/{device}/update-webhook-received\",\"operationId\":\"device.updateWebhookReceived\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"Device\",\"summary\":\"Configurar el webhook de mensajes recibidos\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/devices/{device}/update-webhook-received-and-delivery\",\"operationId\":\"device.updateWebhookReceivedAndDelivery\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"Device\",\"summary\":\"Configurar el webhook de recibidos y entregas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/username\",\"operationId\":\"deviceUsername.show\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"DeviceUsername\",\"summary\":\"Ver el nombre de usuario\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/devices/{device}/username\",\"operationId\":\"deviceUsername.store\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"DeviceUsername\",\"summary\":\"Configurar el nombre de usuario\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/username/suggestions\",\"operationId\":\"deviceUsername.suggestions\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"DeviceUsername\",\"summary\":\"Sugerir nombres de usuario\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/capi/datasets\",\"operationId\":\"capiConnection.datasets\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"CapiConnection\",\"summary\":\"Listar los datasets de Conversions API\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/logs\",\"operationId\":\"deviceFleetLogs.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"DeviceFleetLogs\",\"summary\":\"Listar los registros de todos los números\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/flows\",\"operationId\":\"flow.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Flow\",\"summary\":\"Listar flujos\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/flows/{flow}\",\"operationId\":\"flow.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Flow\",\"summary\":\"Ver un flujo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/flows/{flow}/active-contacts\",\"operationId\":\"flow.activeContacts\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Flow\",\"summary\":\"Contar los contactos activos de un flujo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/flows/{flow}/active-contacts-list\",\"operationId\":\"flow.activeContactsList\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Flow\",\"summary\":\"Listar los contactos activos de un flujo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/flows/{flow}/flow-contacts\",\"operationId\":\"flow.flowContactsList\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Flow\",\"summary\":\"Listar los contactos de un flujo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/flows/{flow}/nodes\",\"operationId\":\"flow.nodes\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Flow\",\"summary\":\"Listar los nodos de un flujo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/folders\",\"operationId\":\"folder.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Folder\",\"summary\":\"Listar carpetas\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/folders\",\"operationId\":\"folder.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Folder\",\"summary\":\"Crear una carpeta\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/folders/{folder}\",\"operationId\":\"folder.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Folder\",\"summary\":\"Eliminar una carpeta\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/folders/{folder}\",\"operationId\":\"folder.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Folder\",\"summary\":\"Ver una carpeta\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/folders/{folder}\",\"operationId\":\"folder.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Folder\",\"summary\":\"Actualizar una carpeta\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms\",\"operationId\":\"pendingForms.list\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"List forms\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/forms\",\"operationId\":\"pendingForms.create\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Create a form from a template\",\"pending\":true},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/forms/{id}\",\"operationId\":\"pendingForms.delete\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Delete a draft\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms/{id}\",\"operationId\":\"pendingForms.retrieve\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"One version of a form\",\"pending\":true},\n {\"method\":\"PUT\",\"path\":\"/api/v1/forms/{id}\",\"operationId\":\"pendingForms.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Save the definition of a draft\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms/{id}/numbers\",\"operationId\":\"pendingForms.numbers\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"The numbers of the form\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/forms/{id}/numbers\",\"operationId\":\"pendingForms.addNumber\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Publish it on another number too\",\"pending\":true},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/forms/{id}/numbers/{deviceId}\",\"operationId\":\"pendingForms.removeNumber\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Take it off a number\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/forms/{id}/numbers/retry\",\"operationId\":\"pendingForms.retryNumbers\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Retry the numbers that failed\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/forms/{id}/publish\",\"operationId\":\"pendingForms.publish\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Publish on Meta\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/forms/{id}/sync\",\"operationId\":\"pendingForms.sync\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Upload the draft to Meta without publishing it\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/forms/{id}/versions\",\"operationId\":\"pendingForms.createVersion\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Open a new version (draft) of a published form\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms/families/{familyId}/definition\",\"operationId\":\"pendingForms.definition\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"The current definition of a form\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms/families/{familyId}/metrics\",\"operationId\":\"pendingForms.metrics\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"The funnel of a form: sent, opened, completed\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms/families/{familyId}/responses\",\"operationId\":\"pendingForms.responses\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"The answers of a form\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms/families/{familyId}/responses/{runId}\",\"operationId\":\"pendingForms.response\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"One answer\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms/families/{familyId}/versions\",\"operationId\":\"pendingForms.versions\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"The versions of a form\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms/templates\",\"operationId\":\"pendingForms.templates\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"Templates to start a form\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/groups\",\"operationId\":\"group.index\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Listar grupos\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/groups/{group}\",\"operationId\":\"group.show\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Ver un grupo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/groups/{group}/actions\",\"operationId\":\"group.actions\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Listar las acciones de sesión sobre un grupo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/groups/{group}/messages\",\"operationId\":\"group.messages\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Listar los mensajes enviados a un grupo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/groups/{group}/participant-events\",\"operationId\":\"group.participantEvents\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Participantes\",\"summary\":\"Listar entradas y salidas de un grupo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/groups/{group}/scheduled-messages\",\"operationId\":\"group.scheduledMessages\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Listar los envíos programados que incluyen un grupo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/groups/{groupUid}/metadata\",\"operationId\":\"groupMetadata.show\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Ver los datos actuales de un grupo en WhatsApp\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/groups/participants\",\"operationId\":\"group.participants\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Participantes\",\"summary\":\"Listar los participantes de un grupo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/kanban-settings\",\"operationId\":\"kanbanSetting.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"KanbanSetting\",\"summary\":\"Listar tableros\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/kanban-settings\",\"operationId\":\"kanbanSetting.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanSetting\",\"summary\":\"Crear un tablero\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}\",\"operationId\":\"kanbanSetting.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanSetting\",\"summary\":\"Eliminar un tablero\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}\",\"operationId\":\"kanbanSetting.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"KanbanSetting\",\"summary\":\"Ver un tablero\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}\",\"operationId\":\"kanbanSetting.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanSetting\",\"summary\":\"Actualizar un tablero\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/bulk-move\",\"operationId\":\"kanbanStage.bulkMove\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanStage\",\"summary\":\"Mover contactos de etapa en bloque\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/bulk-remove\",\"operationId\":\"kanbanStage.bulkRemove\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanStage\",\"summary\":\"Sacar contactos del tablero en bloque\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/members\",\"operationId\":\"kanbanSetting.members\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"KanbanSetting\",\"summary\":\"Ver los miembros de un tablero\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/move-contact\",\"operationId\":\"kanbanStage.moveContact\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanStage\",\"summary\":\"Mover un contacto de etapa\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/remove-contact\",\"operationId\":\"kanbanStage.removeContact\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanStage\",\"summary\":\"Sacar un contacto del tablero\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/stages\",\"operationId\":\"kanbanStage.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanStage\",\"summary\":\"Crear una etapa\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/stages/{stage}\",\"operationId\":\"kanbanStage.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanStage\",\"summary\":\"Eliminar una etapa\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/stages/{stage}\",\"operationId\":\"kanbanStage.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanStage\",\"summary\":\"Actualizar una etapa\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/stages/{stage}/contacts\",\"operationId\":\"kanbanStage.contacts\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"KanbanStage\",\"summary\":\"Listar los contactos de una etapa\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/stages/reorder\",\"operationId\":\"kanbanStage.reorder\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanStage\",\"summary\":\"Reordenar las etapas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/lead-score/distribution\",\"operationId\":\"leadScoreDistribution.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"LeadScoreDistribution\",\"summary\":\"Ver la distribución del lead score\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/lead-score/events\",\"operationId\":\"leadScoreEventIngest.ingest\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"LeadScoreEventIngest\",\"summary\":\"Registrar un evento de lead score\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/lead-score/settings\",\"operationId\":\"leadScoreSettings.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"LeadScoreSettings\",\"summary\":\"Ver la configuración del lead score\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/lead-score/settings\",\"operationId\":\"leadScoreSettings.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"LeadScoreSettings\",\"summary\":\"Actualizar la configuración del lead score\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/mac/contacts\",\"operationId\":\"mac.contacts\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Mac\",\"summary\":\"Listar los contactos que cuentan como MAC\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/mac/contacts/history\",\"operationId\":\"mac.contactsHistory\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Mac\",\"summary\":\"Ver el historial de MACs\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/mac/status\",\"operationId\":\"mac.status\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Mac\",\"summary\":\"Ver el consumo de MACs\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/me\",\"operationId\":null,\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Account\",\"summary\":\"Ver mi cuenta\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/me/whatsapp-costs\",\"operationId\":\"whatsappCost.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"WhatsappCost\",\"summary\":\"Ver los costos de WhatsApp\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/message/send-message\",\"operationId\":\"message.sendMessage\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"Message\",\"summary\":\"Enviar un mensaje\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/payments/products/{platform}\",\"operationId\":\"paymentProduct.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"PaymentProduct\",\"summary\":\"Listar los productos de una plataforma de pagos\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/quick-replies\",\"operationId\":\"quickReply.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"QuickReply\",\"summary\":\"Listar respuestas rápidas\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/quick-replies\",\"operationId\":\"quickReply.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"QuickReply\",\"summary\":\"Crear una respuesta rápida\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/quick-replies/{quickReply}\",\"operationId\":\"quickReply.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"QuickReply\",\"summary\":\"Eliminar una respuesta rápida\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/quick-replies/{quickReply}\",\"operationId\":\"quickReply.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"QuickReply\",\"summary\":\"Ver una respuesta rápida\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/quick-replies/{quickReply}\",\"operationId\":\"quickReply.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"QuickReply\",\"summary\":\"Actualizar una respuesta rápida\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/sales\",\"operationId\":\"salesDashboard.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"SalesDashboard\",\"summary\":\"Listar ventas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/sales/by-platform\",\"operationId\":\"salesDashboard.byPlatform\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"SalesDashboard\",\"summary\":\"Ver las ventas por plataforma\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/sales/funnel\",\"operationId\":\"salesDashboard.funnel\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"SalesDashboard\",\"summary\":\"Ver el embudo de ventas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/sales/metrics\",\"operationId\":\"salesDashboard.metrics\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"SalesDashboard\",\"summary\":\"Ver las métricas de ventas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages\",\"operationId\":\"scheduledMessage.index\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Mensajes programados\",\"summary\":\"Listar envíos programados\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages/{scheduledMessage}\",\"operationId\":\"scheduledMessage.show\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Mensajes programados\",\"summary\":\"Ver un envío programado\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages/{scheduledMessage}/group-messages\",\"operationId\":\"scheduledMessage.groupMessages\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Mensajes programados\",\"summary\":\"Ver el resultado por grupo de un envío\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages/{scheduledMessage}/groups\",\"operationId\":\"scheduledMessage.groups\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Mensajes programados\",\"summary\":\"Listar los grupos destino de un envío\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages/{scheduledMessage}/readed-played-rates\",\"operationId\":\"scheduledMessage.readedAndPlayedRates\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Mensajes programados\",\"summary\":\"Ver las tasas de lectura y reproducción de un envío\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages/{scheduledMessage}/response-tags\",\"operationId\":\"scheduledMessage.responseTags\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Respuestas y carpetas\",\"summary\":\"Listar las etiquetas que se aplican a quien responde\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages/{scheduledMessage}/responses\",\"operationId\":\"scheduledMessage.responses\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Respuestas y carpetas\",\"summary\":\"Listar las respuestas a un envío\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages/{scheduledMessage}/runs\",\"operationId\":\"scheduledMessage.runs\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Mensajes programados\",\"summary\":\"Listar las ocurrencias de un envío recurrente\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages/folders\",\"operationId\":\"scheduledMessageFolder.index\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Respuestas y carpetas\",\"summary\":\"Listar las carpetas de envíos\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/stats/active-participants\",\"operationId\":\"stats.activeParticipants\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Estadísticas\",\"summary\":\"Ver participantes activos\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/stats/clicks\",\"operationId\":\"stats.clickStats\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Estadísticas\",\"summary\":\"Ver clics en links\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/stats/countries\",\"operationId\":\"stats.countryList\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Estadísticas\",\"summary\":\"Listar países presentes\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/stats/country-metrics\",\"operationId\":\"stats.countryMetrics\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Estadísticas\",\"summary\":\"Ver métricas por país\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/stats/groups\",\"operationId\":\"stats.groupStats\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Estadísticas\",\"summary\":\"Ver grupos por estado\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/stats/participants\",\"operationId\":\"stats.participantStats\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Estadísticas\",\"summary\":\"Ver participantes por período\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/stats/records\",\"operationId\":\"stats.statsRecords\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Estadísticas\",\"summary\":\"Listar registros de clics\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/tags\",\"operationId\":\"tag.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Tag\",\"summary\":\"Listar etiquetas\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/tags\",\"operationId\":\"tag.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Tag\",\"summary\":\"Crear una etiqueta\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/tags/{tag}\",\"operationId\":\"tag.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Tag\",\"summary\":\"Ver una etiqueta\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/tags/{tag}\",\"operationId\":\"tag.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Tag\",\"summary\":\"Actualizar una etiqueta\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/tags/{tag}/contacts\",\"operationId\":\"tag.contacts\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Tag\",\"summary\":\"Listar los contactos con una etiqueta\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/tags/delete\",\"operationId\":\"tag.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Tag\",\"summary\":\"Eliminar etiquetas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/templates\",\"operationId\":\"messageTemplate.templates\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"MessageTemplate\",\"summary\":\"Listar plantillas\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/templates\",\"operationId\":\"messageTemplate.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"MessageTemplate\",\"summary\":\"Crear una plantilla\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/templates/{template}\",\"operationId\":\"messageTemplate.template\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"MessageTemplate\",\"summary\":\"Ver una plantilla\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/templates/{template}\",\"operationId\":\"messageTemplate.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"MessageTemplate\",\"summary\":\"Actualizar una plantilla\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/templates/{template}/quick-reply-buttons\",\"operationId\":\"messageTemplate.quickReplyButtons\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"MessageTemplate\",\"summary\":\"Ver los botones de respuesta rápida de una plantilla\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/tickets\",\"operationId\":\"ticket.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Ticket\",\"summary\":\"Listar tickets\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/tickets\",\"operationId\":\"ticket.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Ticket\",\"summary\":\"Crear un ticket\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/tickets/{id}\",\"operationId\":\"ticket.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Ticket\",\"summary\":\"Ver un ticket\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/tickets/{id}\",\"operationId\":\"ticket.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Ticket\",\"summary\":\"Actualizar un ticket\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/tickets/{id}/close\",\"operationId\":\"ticket.closeTicket\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Ticket\",\"summary\":\"Cerrar un ticket\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/tickets/{id}/reopen\",\"operationId\":\"ticket.reOpenTicket\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Ticket\",\"summary\":\"Reabrir un ticket\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/tickets/assign\",\"operationId\":\"ticket.assignTicketToUser\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Ticket\",\"summary\":\"Asignar tickets\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/webhooks\",\"operationId\":\"pendingWebhookSubscription.index\",\"domain\":\"accounts\",\"permission\":\"webhooks:read\",\"tag\":\"Webhooks\",\"summary\":\"List the webhook subscriptions\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/webhooks\",\"operationId\":\"pendingWebhookSubscription.store\",\"domain\":\"accounts\",\"permission\":\"webhooks:write\",\"tag\":\"Webhooks\",\"summary\":\"Create a webhook subscription\",\"pending\":true},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/webhooks/{id}\",\"operationId\":\"pendingWebhookSubscription.destroy\",\"domain\":\"accounts\",\"permission\":\"webhooks:write\",\"tag\":\"Webhooks\",\"summary\":\"Delete a webhook subscription\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/webhooks/{id}\",\"operationId\":\"pendingWebhookSubscription.show\",\"domain\":\"accounts\",\"permission\":\"webhooks:read\",\"tag\":\"Webhooks\",\"summary\":\"Read a webhook subscription\",\"pending\":true},\n {\"method\":\"PUT\",\"path\":\"/api/v1/webhooks/{id}\",\"operationId\":\"pendingWebhookSubscription.update\",\"domain\":\"accounts\",\"permission\":\"webhooks:write\",\"tag\":\"Webhooks\",\"summary\":\"Update a webhook subscription\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/webhooks/{id}/deliveries\",\"operationId\":\"pendingWebhookSubscription.deliveries\",\"domain\":\"accounts\",\"permission\":\"webhooks:read\",\"tag\":\"Webhooks\",\"summary\":\"Read the delivery history\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/webhooks/{id}/rotate-secret\",\"operationId\":\"pendingWebhookSubscription.rotateSecret\",\"domain\":\"accounts\",\"permission\":\"webhooks:write\",\"tag\":\"Webhooks\",\"summary\":\"Generate a new secret\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/webhooks/{id}/test\",\"operationId\":\"pendingWebhookSubscription.test\",\"domain\":\"accounts\",\"permission\":\"webhooks:write\",\"tag\":\"Webhooks\",\"summary\":\"Send a test event now\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/webhooks/endpoints\",\"operationId\":\"webhookEndpoint.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"WebhookEndpoint\",\"summary\":\"Listar webhooks\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/webhooks/endpoints\",\"operationId\":\"webhookEndpoint.store\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"WebhookEndpoint\",\"summary\":\"Crear un webhook\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/webhooks/endpoints/{id}\",\"operationId\":\"webhookEndpoint.destroy\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"WebhookEndpoint\",\"summary\":\"Eliminar un webhook\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/webhooks/endpoints/{id}\",\"operationId\":\"webhookEndpoint.show\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"WebhookEndpoint\",\"summary\":\"Ver un webhook\",\"pending\":false},\n {\"method\":\"PATCH\",\"path\":\"/api/v1/webhooks/endpoints/{id}\",\"operationId\":\"webhookEndpoint.update\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"WebhookEndpoint\",\"summary\":\"Actualizar un webhook\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/webhooks/endpoints/{id}/deliveries\",\"operationId\":\"webhookDelivery.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"WebhookDelivery\",\"summary\":\"Listar entregas de un webhook\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/webhooks/endpoints/{id}/events\",\"operationId\":\"webhookEndpointEvent.update\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"WebhookEndpointEvent\",\"summary\":\"Elegir los eventos de un webhook\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/webhooks/events\",\"operationId\":\"webhookEventCatalog.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"WebhookEventCatalog\",\"summary\":\"Listar tipos de evento\",\"pending\":false},\n];\n","import { routes } from '../generated/routes.js';\n\n/** First backoff delay; it doubles on every retry. */\nexport const INITIAL_RETRY_DELAY_MS = 500;\n/** Ceiling of the exponential backoff. */\nexport const MAX_RETRY_DELAY_MS = 8_000;\n/**\n * A `Retry-After` longer than this is not waited for: the error is thrown right away with its\n * `retryAfter`, so the caller decides (a daily cap can ask for hours).\n */\nexport const MAX_RETRY_AFTER_SECONDS = 60;\n\n/** Methods that give the same result when repeated: they are retried on any transient failure. */\nconst IDEMPOTENT_METHODS = new Set(['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE']);\n\n/** A failed attempt: the HTTP status of the error, or `'network'` when no response arrived. */\nexport type FailedAttempt = number | 'network';\n\n/**\n * Whether a failed attempt may be repeated automatically.\n *\n * - `GET`, `PUT` and `DELETE`: on `429`, `5xx` and network errors (timeouts included).\n * - `POST` and `PATCH` (writes): only when the call was certainly not applied, `429` and `503`. A\n * `500`, `502` or `504`, a timeout or a dropped connection can come after the write was applied\n * (a `502 origin_unreachable` does not guarantee the area did not get it), so the error is thrown:\n * read the state before repeating the write.\n */\nexport function isRetryable(method: string, failure: FailedAttempt): boolean {\n if (IDEMPOTENT_METHODS.has(method.toUpperCase())) return failure === 'network' || failure === 429 || failure >= 500;\n return failure === 429 || failure === 503;\n}\n\n/**\n * Milliseconds to wait before retry number `attempt` (0 = first retry), or `null` when the\n * server asked for a wait longer than {@link MAX_RETRY_AFTER_SECONDS}.\n * With `Retry-After` the wait is exactly what the server asked for; without it, exponential\n * backoff with up to 25 % of jitter.\n */\nexport function retryDelayMs(attempt: number, retryAfterSeconds: number | undefined, random: () => number = Math.random): number | null {\n if (retryAfterSeconds !== undefined) {\n if (retryAfterSeconds > MAX_RETRY_AFTER_SECONDS) return null;\n return Math.max(0, Math.ceil(retryAfterSeconds * 1000));\n }\n const base = Math.min(INITIAL_RETRY_DELAY_MS * 2 ** attempt, MAX_RETRY_DELAY_MS);\n return Math.round(base * (1 - 0.25 * random()));\n}\n\nconst placeholder = /\\{[^}]+\\}/g;\nconst escape = (text: string) => text.replace(/[.*+?^$()|[\\]\\\\]/g, '\\\\$&');\n\n/**\n * The send operations of the spec (a `POST` with a `*:send` permission, such as\n * `conversations:send`): they deliver a WhatsApp message and are not idempotent, so they are never\n * retried automatically. Built from the generated route table, so a regeneration keeps the list\n * current.\n */\nconst SEND_POST_PATTERNS: readonly RegExp[] = routes\n .filter((route) => route.method === 'POST' && route.permission?.endsWith(':send'))\n .map((route) => new RegExp(`^${route.path.split(placeholder).map(escape).join('[^/]+')}/?$`));\n\n/** Whether `method` + `pathname` (already interpolated, without query) is a non-idempotent send. */\nexport function isSendRequest(method: string, pathname: string): boolean {\n if (method.toUpperCase() !== 'POST') return false;\n return SEND_POST_PATTERNS.some((pattern) => pattern.test(pathname));\n}\n","/** Query values the SDK can serialize. */\nexport type QueryValue =\n | string\n | number\n | boolean\n | null\n | undefined\n | Date\n | readonly QueryValue[]\n | { readonly [key: string]: QueryValue };\n\n/**\n * Serializes a query object the way Laravel reads it:\n *\n * - arrays as `key[]=a&key[]=b` (a key already written as `key[]` is not doubled);\n * - arrays of objects and nested objects with brackets: `filters[0][mode]=all`;\n * - booleans as `1` / `0` (Laravel's `boolean` rule rejects the strings `true` / `false`);\n * - dates as ISO 8601;\n * - `null` and `undefined` are left out.\n */\nexport function serializeQuery(query: Record<string, unknown> | undefined): string {\n if (!query) return '';\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) append(params, key, value);\n return params.toString();\n}\n\nfunction append(params: URLSearchParams, key: string, value: unknown): void {\n if (value === undefined || value === null) return;\n if (Array.isArray(value)) {\n const scalarKey = key.endsWith('[]') ? key : `${key}[]`;\n const base = key.endsWith('[]') ? key.slice(0, -2) : key;\n value.forEach((item, index) => {\n if (isPlainObject(item) || Array.isArray(item)) append(params, `${base}[${index}]`, item);\n else append(params, scalarKey, item);\n });\n return;\n }\n if (value instanceof Date) {\n params.append(key, value.toISOString());\n return;\n }\n if (isPlainObject(value)) {\n for (const [child, childValue] of Object.entries(value)) append(params, `${key}[${child}]`, childValue);\n return;\n }\n if (typeof value === 'boolean') {\n params.append(key, value ? '1' : '0');\n return;\n }\n params.append(key, String(value));\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * Replaces `{name}` placeholders of a path template with URL-encoded values.\n * Throws when a placeholder has no value, so a request never goes out with `{contact}` in it.\n */\nexport function interpolatePath(template: string, params: Record<string, unknown> | undefined): string {\n return template.replace(/\\{([^}]+)\\}/g, (_, name: string) => {\n const value = params?.[name];\n if (value === undefined || value === null || value === '') {\n throw new TypeError(`Missing path parameter \"${name}\" for ${template}.`);\n }\n return encodeURIComponent(String(value));\n });\n}\n\n/** Joins the base URL and a path (`/api/v1/...`) without doubling or losing slashes. */\nexport function joinUrl(baseUrl: string, path: string, query: string): string {\n const base = baseUrl.replace(/\\/+$/, '');\n const suffix = path.startsWith('/') ? path : `/${path}`;\n if (!query) return `${base}${suffix}`;\n return `${base}${suffix}${suffix.includes('?') ? '&' : '?'}${query}`;\n}\n","import type { Funnelchat } from '../client.js';\n\n/** Base of every resource: a group of operations of one piece of the API. */\nexport abstract class Resource {\n // A private field behind a getter: the client is not an own enumerable property, so logging or\n // serializing a resource neither recurses into the client nor fails on a circular structure.\n readonly #client: Funnelchat;\n\n constructor(client: Funnelchat) {\n this.#client = client;\n }\n\n protected get client(): Funnelchat {\n return this.#client;\n }\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype ContactId = PathParams<'/api/v1/contacts/{contact}', 'GET'>['contact'];\ntype DeviceId = PathParams<'/api/v1/devices/{device}/contacts', 'GET'>['device'];\ntype NoteId = PathParams<'/api/v1/contacts/{contact}/notes/{note}', 'DELETE'>['note'];\n\n/** Contacts (conversations area): search, create, update, custom fields, notes and the 24-hour window. */\nexport class Contacts extends Resource {\n /** `GET /api/v1/contacts`, paginated. Filter by `phone` without the `+`. */\n list(query?: Query<'/api/v1/contacts'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/contacts', { ...options, query });\n }\n\n /** `POST /api/v1/contacts`. */\n create(body: Body<'/api/v1/contacts', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/contacts', { ...options, body });\n }\n\n /** `POST /api/v1/contacts/update-or-create`: creates the contact or updates the one with that phone. */\n upsert(body: Body<'/api/v1/contacts/update-or-create', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/contacts/update-or-create', { ...options, body });\n }\n\n /** `GET /api/v1/contacts/{contact}`. */\n retrieve(contact: ContactId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/contacts/{contact}', { ...options, path: { contact } });\n }\n\n /** `PUT /api/v1/contacts/{contact}`. */\n update(contact: ContactId, body: Body<'/api/v1/contacts/{contact}', 'PUT'>, options?: RequestOptions) {\n return this.client.request('PUT', '/api/v1/contacts/{contact}', { ...options, path: { contact }, body });\n }\n\n /** `POST /api/v1/contacts/delete`: deletes the contacts of the body (`contactIds`, or a filter). */\n delete(body: Body<'/api/v1/contacts/delete', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/contacts/delete', { ...options, body });\n }\n\n /** `GET /api/v1/contacts/{contact}/tags`, paginated. */\n listTags(contact: ContactId, query?: Query<'/api/v1/contacts/{contact}/tags'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/contacts/{contact}/tags', { ...options, path: { contact }, query });\n }\n\n /** `GET /api/v1/contacts/{contact}/custom-fields`, paginated. */\n listCustomFields(contact: ContactId, query?: Query<'/api/v1/contacts/{contact}/custom-fields'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/contacts/{contact}/custom-fields', { ...options, path: { contact }, query });\n }\n\n /** `POST /api/v1/contacts/attach-custom-field`: sets a custom field on contacts. */\n attachCustomField(body: Body<'/api/v1/contacts/attach-custom-field', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/contacts/attach-custom-field', { ...options, body });\n }\n\n /** `POST /api/v1/contacts/detach-custom-field`. */\n detachCustomField(body: Body<'/api/v1/contacts/detach-custom-field', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/contacts/detach-custom-field', { ...options, body });\n }\n\n /**\n * `GET /api/v1/contacts/{contact}/meta-window`: whether the 24-hour window with the contact is\n * open on a WhatsApp Cloud number (`is_open`). Outside it, only templates can be sent.\n */\n metaWindow(contact: ContactId, query: Query<'/api/v1/contacts/{contact}/meta-window'>, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/contacts/{contact}/meta-window', { ...options, path: { contact }, query });\n }\n\n /** `GET /api/v1/devices/{device}/contacts`, paginated: the contacts of one number. */\n listByDevice(device: DeviceId, query?: Query<'/api/v1/devices/{device}/contacts'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/devices/{device}/contacts', { ...options, path: { device }, query });\n }\n\n /** `GET /api/v1/contacts/{contact}/notes`, paginated. */\n listNotes(contact: ContactId, query?: Query<'/api/v1/contacts/{contact}/notes'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/contacts/{contact}/notes', { ...options, path: { contact }, query });\n }\n\n /** `POST /api/v1/contacts/{contact}/notes`. */\n createNote(contact: ContactId, body: Body<'/api/v1/contacts/{contact}/notes', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/contacts/{contact}/notes', { ...options, path: { contact }, body });\n }\n\n /** `DELETE /api/v1/contacts/{contact}/notes/{note}`. */\n deleteNote(contact: ContactId, note: NoteId, options?: RequestOptions) {\n return this.client.request('DELETE', '/api/v1/contacts/{contact}/notes/{note}', { ...options, path: { contact, note } });\n }\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype ContactId = PathParams<'/api/v1/contacts/{contact}/update', 'PUT'>['contact'];\n\n/** Conversations (conversations area): the inbox, its counters and the state of each conversation. */\nexport class Conversations extends Resource {\n /** `GET /api/v1/conversations`, paginated by cursor. */\n list(query?: Query<'/api/v1/conversations'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/conversations', { ...options, query });\n }\n\n /** `PUT /api/v1/contacts/{contact}/update`: changes the conversation with a contact (open, assigned…). */\n update(contact: ContactId, body: Body<'/api/v1/contacts/{contact}/update', 'PUT'>, options?: RequestOptions) {\n return this.client.request('PUT', '/api/v1/contacts/{contact}/update', { ...options, path: { contact }, body });\n }\n\n /** `GET /api/v1/conversations/count/unread`. */\n countUnread(query?: Query<'/api/v1/conversations/count/unread'>, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/conversations/count/unread', { ...options, query });\n }\n\n /** `GET /api/v1/conversations/count/open`. */\n countOpen(query?: Query<'/api/v1/conversations/count/open'>, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/conversations/count/open', { ...options, query });\n }\n\n /** `GET /api/v1/conversations/count/closed`. */\n countClosed(query?: Query<'/api/v1/conversations/count/closed'>, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/conversations/count/closed', { ...options, query });\n }\n\n /** `GET /api/v1/conversations/count/all`. */\n countAll(query?: Query<'/api/v1/conversations/count/all'>, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/conversations/count/all', { ...options, query });\n }\n\n /** `POST /api/v1/conversations/mark-all-read`. */\n markAllRead(body?: Body<'/api/v1/conversations/mark-all-read', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/conversations/mark-all-read', { ...options, body });\n }\n\n /** `POST /api/v1/conversations/mark-all-unread`. */\n markAllUnread(body?: Body<'/api/v1/conversations/mark-all-unread', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/conversations/mark-all-unread', { ...options, body });\n }\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype CustomFieldId = PathParams<'/api/v1/custom-fields/{customField}', 'GET'>['customField'];\n\n/** Custom fields of contacts (conversations area). To set a value on a contact, see `contacts.attachCustomField`. */\nexport class CustomFields extends Resource {\n /** `GET /api/v1/custom-fields`, paginated. */\n list(query?: Query<'/api/v1/custom-fields'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/custom-fields', { ...options, query });\n }\n\n /** `POST /api/v1/custom-fields`. */\n create(body: Body<'/api/v1/custom-fields', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/custom-fields', { ...options, body });\n }\n\n /** `GET /api/v1/custom-fields/{customField}`. */\n retrieve(customField: CustomFieldId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/custom-fields/{customField}', { ...options, path: { customField } });\n }\n\n /** `PUT /api/v1/custom-fields/{customField}`. */\n update(customField: CustomFieldId, body: Body<'/api/v1/custom-fields/{customField}', 'PUT'>, options?: RequestOptions) {\n return this.client.request('PUT', '/api/v1/custom-fields/{customField}', { ...options, path: { customField }, body });\n }\n\n /** `POST /api/v1/custom-fields/delete`. */\n delete(body: Body<'/api/v1/custom-fields/delete', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/custom-fields/delete', { ...options, body });\n }\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype DeviceId = PathParams<'/api/v1/devices/{device}', 'GET'>['device'];\n\n/** WhatsApp numbers of the account (accounts area). The `id` of a number is the `device_id` used to send. */\nexport class Devices extends Resource {\n /** `GET /api/v1/devices`. Iterate it with `for await`, or `await` it for the first page. */\n list(options?: RequestOptions) {\n return this.client.paginate('/api/v1/devices', { ...options });\n }\n\n /**\n * `GET /api/v1/devices/{device}`. `capabilities` says what the number can do by API: message\n * types (`messages`) and the statuses `message.status_changed` reports (`statuses`).\n */\n retrieve(device: DeviceId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/devices/{device}', { ...options, path: { device } });\n }\n\n /** `PUT /api/v1/devices/{device}`. */\n update(device: DeviceId, body: Body<'/api/v1/devices/{device}', 'PUT'>, options?: RequestOptions) {\n return this.client.request('PUT', '/api/v1/devices/{device}', { ...options, path: { device }, body });\n }\n\n /** `GET /api/v1/devices/{device}/status`: connection status. */\n status(device: DeviceId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/devices/{device}/status', { ...options, path: { device } });\n }\n\n /** `GET /api/v1/devices/{device}/health`. */\n health(device: DeviceId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/devices/{device}/health', { ...options, path: { device } });\n }\n\n /** `GET /api/v1/devices/{device}/me`: the WhatsApp profile of the number. */\n me(device: DeviceId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/devices/{device}/me', { ...options, path: { device } });\n }\n\n /** `GET /api/v1/devices/{device}/check-phone`: whether a phone has WhatsApp. */\n checkPhone(device: DeviceId, query: Query<'/api/v1/devices/{device}/check-phone'>, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/devices/{device}/check-phone', { ...options, path: { device }, query });\n }\n\n /** `GET /api/v1/devices/{device}/connection-history`, paginated. */\n listConnectionHistory(device: DeviceId, query?: Query<'/api/v1/devices/{device}/connection-history'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/devices/{device}/connection-history', { ...options, path: { device }, query });\n }\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype FormId = PathParams<'/api/v1/forms/{id}', 'GET'>['id'];\ntype FamilyId = PathParams<'/api/v1/forms/families/{familyId}/versions', 'GET'>['familyId'];\ntype RunId = PathParams<'/api/v1/forms/families/{familyId}/responses/{runId}', 'GET'>['runId'];\ntype DeviceId = PathParams<'/api/v1/forms/{id}/numbers/{deviceId}', 'DELETE'>['deviceId'];\n\n/**\n * WhatsApp forms (conversations area): build them, publish them on your numbers and read the\n * answers. Reading needs `conversations:read`; the rest, `conversations:write`.\n *\n * Two ids: `id` is one version of a form; `family_id` is the form itself (every version). You send\n * a form by its `family_id` with `messages.sendForm`, and `whatsapp_form.completed` brings it as\n * `form.id`.\n *\n * Errors of their own (`APIError.code`): `422 LINT` (with `lint`), `409 PUBLISHED`, `409 STALE`\n * (someone saved first: `current` in the body), `502 META` (Meta rejected it: `meta_code`),\n * `422 NUMBER_NOT_ELIGIBLE`, `422 PRIMARY_NUMBER`.\n */\nexport class Forms extends Resource {\n /** `GET /api/v1/forms`, paginated: filter by `q`, `status` or `device_id`. */\n list(query?: Query<'/api/v1/forms'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/forms', { ...options, query });\n }\n\n /** `GET /api/v1/forms/templates`: the starting points `create` accepts as `template_key`. */\n templates(options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/forms/templates', { ...options });\n }\n\n /** `POST /api/v1/forms`: a new draft from a template, on `device_id` (and `device_ids`). */\n create(body: Body<'/api/v1/forms', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/forms', { ...options, body });\n }\n\n /** `GET /api/v1/forms/{id}`: one version, with `lint`, `versions` and `numbers`. */\n retrieve(id: FormId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/forms/{id}', { ...options, path: { id } });\n }\n\n /**\n * `PUT /api/v1/forms/{id}`: saves the `definition` of a draft. Pass the `updated_at` you read as\n * `expected_updated_at` to get `409 STALE` instead of overwriting someone else's change.\n */\n update(id: FormId, body: Body<'/api/v1/forms/{id}', 'PUT'>, options?: RequestOptions) {\n return this.client.request('PUT', '/api/v1/forms/{id}', { ...options, path: { id }, body });\n }\n\n /** `DELETE /api/v1/forms/{id}`: deletes a draft (a published version answers `409 PUBLISHED`). */\n delete(id: FormId, options?: RequestOptions) {\n return this.client.request('DELETE', '/api/v1/forms/{id}', { ...options, path: { id } });\n }\n\n /** `POST /api/v1/forms/{id}/versions`: opens a draft of a published form, or returns the open one (`created: false`). */\n createVersion(id: FormId, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/forms/{id}/versions', { ...options, path: { id } });\n }\n\n /** `POST /api/v1/forms/{id}/sync`: uploads the draft to Meta without publishing it. */\n sync(id: FormId, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/forms/{id}/sync', { ...options, path: { id } });\n }\n\n /** `POST /api/v1/forms/{id}/publish`: publishes the version on its numbers. */\n publish(id: FormId, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/forms/{id}/publish', { ...options, path: { id } });\n }\n\n /** `GET /api/v1/forms/{id}/numbers`: where the form is (or is being) published. */\n numbers(id: FormId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/forms/{id}/numbers', { ...options, path: { id } });\n }\n\n /** `POST /api/v1/forms/{id}/numbers`: publishes it on one more number. */\n addNumber(id: FormId, body: Body<'/api/v1/forms/{id}/numbers', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/forms/{id}/numbers', { ...options, path: { id }, body });\n }\n\n /** `DELETE /api/v1/forms/{id}/numbers/{deviceId}`: takes it off a number (not the primary one). */\n removeNumber(id: FormId, deviceId: DeviceId, options?: RequestOptions) {\n return this.client.request('DELETE', '/api/v1/forms/{id}/numbers/{deviceId}', { ...options, path: { id, deviceId } });\n }\n\n /** `POST /api/v1/forms/{id}/numbers/retry`: retries the numbers whose publication failed. */\n retryNumbers(id: FormId, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/forms/{id}/numbers/retry', { ...options, path: { id } });\n }\n\n /** `GET /api/v1/forms/families/{familyId}/definition`: the current definition of a form, or `data: null`. */\n definition(familyId: FamilyId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/forms/families/{familyId}/definition', { ...options, path: { familyId } });\n }\n\n /** `GET /api/v1/forms/families/{familyId}/versions`: every version of a form. */\n versions(familyId: FamilyId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/forms/families/{familyId}/versions', { ...options, path: { familyId } });\n }\n\n /** `GET /api/v1/forms/families/{familyId}/responses`, paginated: the answers, with their `columns`. */\n listResponses(familyId: FamilyId, query?: Query<'/api/v1/forms/families/{familyId}/responses'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/forms/families/{familyId}/responses', { ...options, path: { familyId }, query });\n }\n\n /** `GET /api/v1/forms/families/{familyId}/responses/{runId}`: one answer. */\n retrieveResponse(familyId: FamilyId, runId: RunId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/forms/families/{familyId}/responses/{runId}', { ...options, path: { familyId, runId } });\n }\n\n /** `GET /api/v1/forms/families/{familyId}/metrics`: the funnel (sent, opened, completed). */\n metrics(familyId: FamilyId, query?: Query<'/api/v1/forms/families/{familyId}/metrics'>, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/forms/families/{familyId}/metrics', { ...options, path: { familyId }, query });\n }\n}\n","import type { PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype GroupId = PathParams<'/api/v1/groups/{group}', 'GET'>['group'];\ntype GroupUid = PathParams<'/api/v1/groups/{groupUid}/metadata', 'GET'>['groupUid'];\ntype DeviceId = PathParams<'/api/v1/devices/{device}/groups', 'GET'>['device'];\n\n/** WhatsApp groups (communities area): read them, their participants, events and messages. Permission `communities:read`. */\nexport class Groups extends Resource {\n /** `GET /api/v1/groups`, paginated. */\n list(query?: Query<'/api/v1/groups'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/groups', { ...options, query });\n }\n\n /** `GET /api/v1/groups/{group}`. */\n retrieve(group: GroupId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/groups/{group}', { ...options, path: { group } });\n }\n\n /** `GET /api/v1/devices/{device}/groups`, paginated (`page`, `pageSize`): the groups of one number. */\n listByDevice(device: DeviceId, query?: Query<'/api/v1/devices/{device}/groups'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/devices/{device}/groups', { ...options, path: { device }, query });\n }\n\n /** `GET /api/v1/groups/{groupUid}/metadata`: live metadata of a group by its WhatsApp uid, read through one number. */\n metadata(groupUid: GroupUid, query: Query<'/api/v1/groups/{groupUid}/metadata'>, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/groups/{groupUid}/metadata', { ...options, path: { groupUid }, query });\n }\n\n /** `GET /api/v1/groups/participants`, paginated: the participants of one group (`groupUid`). */\n listParticipants(query: Query<'/api/v1/groups/participants'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/groups/participants', { ...options, query });\n }\n\n /** `GET /api/v1/groups/{group}/participant-events`, paginated: joins and leaves. */\n listParticipantEvents(group: GroupId, query?: Query<'/api/v1/groups/{group}/participant-events'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/groups/{group}/participant-events', { ...options, path: { group }, query });\n }\n\n /** `GET /api/v1/groups/{group}/messages`, paginated. */\n listMessages(group: GroupId, query?: Query<'/api/v1/groups/{group}/messages'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/groups/{group}/messages', { ...options, path: { group }, query });\n }\n\n /** `GET /api/v1/groups/{group}/scheduled-messages`, paginated. */\n listScheduledMessages(group: GroupId, query?: Query<'/api/v1/groups/{group}/scheduled-messages'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/groups/{group}/scheduled-messages', { ...options, path: { group }, query });\n }\n\n /** `GET /api/v1/groups/{group}/actions`, paginated. */\n listActions(group: GroupId, query?: Query<'/api/v1/groups/{group}/actions'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/groups/{group}/actions', { ...options, path: { group }, query });\n }\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype ContactId = PathParams<'/api/v1/contacts/{contact}/message', 'POST'>['contact'];\ntype MessageId = PathParams<'/api/v1/contacts/{contact}/messages/{message}/forward', 'POST'>['message'];\ntype HistoryContactId = PathParams<'/api/v1/contacts/{contactId}/messages', 'GET'>['contactId'];\ntype ShowPath = '/api/v1/contacts/{contact}/messages/{message}';\ntype SendMessageBody = Body<'/api/v1/contacts/{contact}/message', 'POST'>;\ntype FormContactId = PathParams<'/api/v1/contacts/{contact}/message/form', 'POST'>['contact'];\n\n/** Body of {@link Messages.send}: `contact_id` is optional, it defaults to the contact of the route. */\nexport type SendMessageParams = Omit<SendMessageBody, 'contact_id'> & { contact_id?: SendMessageBody['contact_id'] };\n\n/**\n * Messages to one contact (conversations area): send text, files, buttons and forms, read the\n * history or one message by id, forward, react.\n *\n * Every send answers right away with the registered message, `status: 'queued'`: accepted is not\n * delivered. The rest arrives by `message.status_changed` (with the same `id` as `message_id`) or\n * with {@link Messages.get}.\n *\n * Sending with an API key needs the `conversations:send` permission and is subject to the\n * WhatsApp rules: `422 window_closed`, `422 antiblock_*`, `422 recipient_*`,\n * `422 provider_unsupported`, `429 rate_limited` (with `retryAfter`) and `429 mac_lockout_24h`. A\n * rejected send stores nothing (see `SEND_ERROR_CODES`). Sends are never retried automatically\n * unless you pass `retrySend: true`.\n */\nexport class Messages extends Resource {\n /**\n * `POST /api/v1/contacts/{contact}/message`: text, a file or buttons and lists (`options`).\n * Resolves to `{ message }`: the registered message, with its `id` and `status: 'queued'`.\n *\n * - Send `phone` (or `whatsapp_id`) of the same contact: the API checks it (`422 recipient_mismatch`).\n * - `file` is a URL. When it does not end in a known extension (a signed URL, or one without\n * extension), send `file_type` (`image`, `video`, `audio`, `document`, `sticker`), and\n * `file_name` for a document: otherwise `422 errors.file_type` / `errors.file_name`. An\n * unsupported extension without `file_type` is a `415` ({@link UnsupportedMediaTypeError}).\n * - `client_reference` (1–64 visible ASCII characters) comes back in the history and in\n * `message.status_changed`.\n */\n send(contact: ContactId, body: SendMessageParams, options?: RequestOptions) {\n const fullBody = { ...body, contact_id: body.contact_id ?? contact } as SendMessageBody;\n return this.client.request('POST', '/api/v1/contacts/{contact}/message', { ...options, path: { contact }, body: fullBody });\n }\n\n /**\n * `POST /api/v1/message/send-message`: the same send with `device_id` and `contact_id` in the\n * body and no `phone` check. Resolves to `{ message }`.\n */\n sendDirect(body: Body<'/api/v1/message/send-message', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/message/send-message', { ...options, body });\n }\n\n /**\n * `POST /api/v1/contacts/{contact}/message/form`: sends a published WhatsApp form (`form_id` is\n * the form's `family_id`). Resolves to `{ message }` with `type: 'whatsapp_form'`; the answers\n * arrive by `whatsapp_form.completed`. It is a send: same rules as {@link Messages.send}.\n */\n sendForm(contact: FormContactId, body: Body<'/api/v1/contacts/{contact}/message/form', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/contacts/{contact}/message/form', { ...options, path: { contact }, body });\n }\n\n /**\n * `GET /api/v1/contacts/{contact}/messages/{message}`: one message by the id a send or a webhook\n * gave you (`message_id` of `message.status_changed`). `status` moves from `queued` to `sent`,\n * `delivered`, `read` or `failed` (then `error` says why).\n */\n get(contact: PathParams<ShowPath, 'GET'>['contact'], message: PathParams<ShowPath, 'GET'>['message'], options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/contacts/{contact}/messages/{message}', { ...options, path: { contact, message } });\n }\n\n /** `GET /api/v1/contacts/{contactId}/messages`, paginated by cursor: the history of a contact. */\n list(contactId: HistoryContactId, query?: Query<'/api/v1/contacts/{contactId}/messages'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/contacts/{contactId}/messages', { ...options, path: { contactId }, query });\n }\n\n /**\n * `POST /api/v1/contacts/{contact}/message/contact-card`: sends up to 5 contact cards. Resolves to\n * `{ messages }`, one message per card in the order of `contact_card_ids`.\n */\n sendContactCard(contact: ContactId, body: Body<'/api/v1/contacts/{contact}/message/contact-card', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/contacts/{contact}/message/contact-card', { ...options, path: { contact }, body });\n }\n\n /**\n * `POST /api/v1/contacts/{contact}/messages/{message}/forward`: forwards a message to up to 5\n * contacts. Resolves to one item per destination, in order: `status` (`queued` or `blocked`, with\n * `reason`) and its `message`, or `null` when nothing was registered for that destination.\n */\n forward(\n contact: ContactId,\n message: MessageId,\n body: Body<'/api/v1/contacts/{contact}/messages/{message}/forward', 'POST'>,\n options?: RequestOptions,\n ) {\n return this.client.request('POST', '/api/v1/contacts/{contact}/messages/{message}/forward', {\n ...options,\n path: { contact, message },\n body,\n });\n }\n\n /** `PUT /api/v1/contacts/{contact}/messages/{message}/reaction`: reacts with an emoji. */\n react(\n contact: ContactId,\n message: MessageId,\n body: Body<'/api/v1/contacts/{contact}/messages/{message}/reaction', 'PUT'>,\n options?: RequestOptions,\n ) {\n return this.client.request('PUT', '/api/v1/contacts/{contact}/messages/{message}/reaction', {\n ...options,\n path: { contact, message },\n body,\n });\n }\n\n /** `DELETE /api/v1/contacts/{contact}/messages/{message}/reaction`: removes your reaction. */\n removeReaction(contact: ContactId, message: MessageId, options?: RequestOptions) {\n return this.client.request('DELETE', '/api/v1/contacts/{contact}/messages/{message}/reaction', {\n ...options,\n path: { contact, message },\n });\n }\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype TagId = PathParams<'/api/v1/tags/{tag}', 'GET'>['tag'];\n\n/** Tags (conversations area). */\nexport class Tags extends Resource {\n /** `GET /api/v1/tags`, paginated. */\n list(query?: Query<'/api/v1/tags'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/tags', { ...options, query });\n }\n\n /** `POST /api/v1/tags`. */\n create(body: Body<'/api/v1/tags', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/tags', { ...options, body });\n }\n\n /** `GET /api/v1/tags/{tag}`. */\n retrieve(tag: TagId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/tags/{tag}', { ...options, path: { tag } });\n }\n\n /** `PUT /api/v1/tags/{tag}`. */\n update(tag: TagId, body: Body<'/api/v1/tags/{tag}', 'PUT'>, options?: RequestOptions) {\n return this.client.request('PUT', '/api/v1/tags/{tag}', { ...options, path: { tag }, body });\n }\n\n /** `POST /api/v1/tags/delete`: deletes the tags in `tagIds`. */\n delete(body: Body<'/api/v1/tags/delete', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/tags/delete', { ...options, body });\n }\n\n /** `GET /api/v1/tags/{tag}/contacts`, paginated: the contacts with a tag. */\n listContacts(tag: TagId, query?: Query<'/api/v1/tags/{tag}/contacts'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/tags/{tag}/contacts', { ...options, path: { tag }, query });\n }\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype TemplateId = PathParams<'/api/v1/templates/{template}', 'GET'>['template'];\ntype SendPath = '/api/v1/devices/{device}/templates/{template}/send-template';\ntype DeviceId = PathParams<SendPath, 'POST'>['device'];\ntype SendTemplateId = PathParams<SendPath, 'POST'>['template'];\ntype DeleteTemplateId = PathParams<'/api/v1/devices/{device}/templates/{template}', 'DELETE'>['template'];\n\n/** WhatsApp message templates (conversations area): list, create, edit, send. */\nexport class Templates extends Resource {\n /** `GET /api/v1/templates`, paginated. */\n list(query?: Query<'/api/v1/templates'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/templates', { ...options, query });\n }\n\n /** `POST /api/v1/templates`: creates a template and submits it to Meta. */\n create(body: Body<'/api/v1/templates', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/templates', { ...options, body });\n }\n\n /** `GET /api/v1/templates/{template}`. */\n retrieve(template: TemplateId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/templates/{template}', { ...options, path: { template } });\n }\n\n /** `PUT /api/v1/templates/{template}`. */\n update(template: TemplateId, body: Body<'/api/v1/templates/{template}', 'PUT'>, options?: RequestOptions) {\n return this.client.request('PUT', '/api/v1/templates/{template}', { ...options, path: { template }, body });\n }\n\n /** `GET /api/v1/templates/{template}/quick-reply-buttons`. */\n quickReplyButtons(template: TemplateId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/templates/{template}/quick-reply-buttons', { ...options, path: { template } });\n }\n\n /**\n * `POST /api/v1/devices/{device}/templates/{template}/send-template`: sends an approved template\n * (the way to write to a contact outside the 24-hour window). `phone` and `contact_id` are\n * required; `template_variables.body` fills the body variables in order.\n *\n * Resolves to `{ message }`, the registered message with `status: 'queued'`. A variable that\n * points to a field that does not exist is a `422 template_unresolved_placeholder` with\n * `placeholders` and `count` in `APIError.body`; a template this account cannot send,\n * `404 template_not_found`. Like every send, it is never retried automatically.\n */\n send(device: DeviceId, template: SendTemplateId, body: Body<SendPath, 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/devices/{device}/templates/{template}/send-template', {\n ...options,\n path: { device, template },\n body,\n });\n }\n\n /** `DELETE /api/v1/devices/{device}/templates/{template}`. */\n delete(device: DeviceId, template: DeleteTemplateId, options?: RequestOptions) {\n return this.client.request('DELETE', '/api/v1/devices/{device}/templates/{template}', { ...options, path: { device, template } });\n }\n}\n","/**\n * Verification of the `X-Funnelchat-Signature` header of a webhook delivery.\n *\n * It replicates exactly the algorithm of the developer portal (`snippets/verificar-firma.js` of\n * developers-portal, contract C3 v4):\n *\n * X-Funnelchat-Signature: t=<unix>,v1=<hex(hmac_sha256(secret, \"<t>.\" + raw body))>\n *\n * - the header is split by `,` and each part by its first `=`; keys and values are trimmed;\n * - `t` must be digits only; there can be several `v1` (any match is enough);\n * - `t` farther than `toleranceSeconds` (300 by default) from the local clock is rejected;\n * - the HMAC uses the full secret as shown (a `whsec_` prefix is part of it) over the raw bytes\n * of the body, and is compared in constant time.\n */\nimport { createHmac, timingSafeEqual } from 'node:crypto';\nimport { WebhookVerificationError, type WebhookVerificationFailure } from '../core/errors.js';\n\n/** Name of the signature header. */\nexport const SIGNATURE_HEADER = 'X-Funnelchat-Signature';\n/** Default tolerance between `t` and the local clock, in seconds. */\nexport const DEFAULT_TOLERANCE_SECONDS = 300;\n\n/** The body exactly as it arrived: never parsed and re-serialized. */\nexport type RawBody = string | Uint8Array | ArrayBuffer;\n\nexport interface VerifyOptions {\n /** Maximum distance between `t` and the local clock, in seconds. Default: 300. */\n toleranceSeconds?: number;\n}\n\ntype CheckResult = { ok: true } | { ok: false; reason: WebhookVerificationFailure; message: string };\n\nconst fail = (reason: WebhookVerificationFailure, message: string): CheckResult => ({ ok: false, reason, message });\n\nfunction toBytes(body: unknown): Buffer | null {\n if (typeof body === 'string') return Buffer.from(body, 'utf8');\n if (Buffer.isBuffer(body)) return body;\n if (body instanceof Uint8Array) return Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n if (body instanceof ArrayBuffer) return Buffer.from(body);\n return null;\n}\n\n/** Runs every check and says which one failed. */\nexport function checkSignature(rawBody: unknown, signatureHeader: unknown, secret: unknown, options: VerifyOptions = {}): CheckResult {\n if (typeof secret !== 'string' || secret === '') {\n return fail('missing_secret', 'Missing the subscription secret.');\n }\n const body = toBytes(rawBody);\n if (body === null) {\n return fail(\n 'invalid_body',\n 'The body must be the raw one (string, Buffer or Uint8Array), exactly as it arrived. With Express, read it with express.raw({ type: \"application/json\" }), not express.json().',\n );\n }\n if (typeof signatureHeader !== 'string' || signatureHeader === '') {\n return fail('missing_header', `Missing the ${SIGNATURE_HEADER} header.`);\n }\n\n let t: string | null = null;\n const signatures: string[] = [];\n for (const part of signatureHeader.split(',')) {\n const i = part.indexOf('=');\n if (i === -1) continue;\n const key = part.slice(0, i).trim();\n const value = part.slice(i + 1).trim();\n if (key === 't') t = value;\n if (key === 'v1') signatures.push(value);\n }\n if (t === null || !/^\\d+$/.test(t) || signatures.length === 0) {\n return fail('malformed_header', `The ${SIGNATURE_HEADER} header is not t=<unix>,v1=<hex>.`);\n }\n\n const tolerance = options.toleranceSeconds ?? DEFAULT_TOLERANCE_SECONDS;\n if (Math.abs(Math.floor(Date.now() / 1000) - Number(t)) > tolerance) {\n return fail('timestamp_out_of_tolerance', `The signature is more than ${tolerance} seconds away from the local clock.`);\n }\n\n const expected = Buffer.from(createHmac('sha256', secret).update(`${t}.`).update(body).digest('hex'), 'utf8');\n const matched = signatures.some((v1) => {\n const candidate = Buffer.from(v1, 'utf8');\n return candidate.length === expected.length && timingSafeEqual(candidate, expected);\n });\n return matched ? { ok: true } : fail('signature_mismatch', 'The signature does not match the body and the secret.');\n}\n\n/**\n * `true` when the delivery is authentic and recent. Same contract as the portal snippet: it never\n * throws, any problem is `false`. Use {@link constructEvent} to know which check failed.\n */\nexport function verify(rawBody: RawBody, signatureHeader: string | null | undefined, secret: string, options?: VerifyOptions): boolean {\n return checkSignature(rawBody, signatureHeader, secret, options).ok;\n}\n\n/** Throws {@link WebhookVerificationError} unless the delivery is authentic and recent. */\nexport function assertSignature(rawBody: RawBody, signatureHeader: string | null | undefined, secret: string, options?: VerifyOptions): void {\n const result = checkSignature(rawBody, signatureHeader, secret, options);\n if (!result.ok) throw new WebhookVerificationError(result.reason, result.message);\n}\n","import { WebhookVerificationError } from '../core/errors.js';\nimport type { WebhookEventDataMap, WebhookEventType } from '../generated/events.js';\nimport type { PendingEventData } from '../pending/events.js';\nimport { assertSignature, type RawBody, type VerifyOptions } from './signature.js';\n\nexport type { WebhookEventType } from '../generated/events.js';\n\n/** The `data` of an event type: the generated type plus the pending-of-the-spec additions. */\nexport type WebhookEventData<T extends WebhookEventType> = WebhookEventDataMap[T] &\n (T extends keyof PendingEventData ? PendingEventData[T] : unknown);\n\n/** The envelope every delivery shares. */\nexport interface WebhookEventEnvelope<T extends string = string, D = unknown> {\n /** Event id (`evt_…`). The same in every retry: use it to deduplicate. */\n id: string;\n type: T;\n /** Version of the `data` format. */\n version: number;\n /** When it happened, ISO 8601 UTC. Read it with a date parser, not by comparing text. */\n occurred_at: string;\n data: D;\n}\n\n/**\n * A verified webhook event, discriminated by `type`:\n *\n * ```ts\n * if (event.type === 'message.received') event.data.contact.phone;\n * ```\n *\n * New event types can arrive before this SDK knows them: answer `2xx` to the ones you do not\n * handle (a `switch` with a `default`).\n */\nexport type WebhookEvent = { [T in WebhookEventType]: WebhookEventEnvelope<T, WebhookEventData<T>> }[WebhookEventType];\n\n/** The event of a given type. */\nexport type WebhookEventOf<T extends WebhookEventType> = Extract<WebhookEvent, { type: T }>;\n\n/**\n * Verifies the signature and returns the parsed event. Throws {@link WebhookVerificationError}\n * (with `reason`) when the signature, the timestamp or the body are not valid.\n *\n * Pass the raw body as it arrived (with Express, `express.raw({ type: 'application/json' })`).\n */\nexport function constructEvent(rawBody: RawBody, signatureHeader: string | null | undefined, secret: string, options?: VerifyOptions): WebhookEvent {\n assertSignature(rawBody, signatureHeader, secret, options);\n const text = typeof rawBody === 'string' ? rawBody : Buffer.from(rawBody instanceof ArrayBuffer ? new Uint8Array(rawBody) : rawBody).toString('utf8');\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n throw new WebhookVerificationError('invalid_json', 'The signature is valid but the body is not JSON.');\n }\n if (!isEnvelope(parsed)) {\n throw new WebhookVerificationError('invalid_event', 'The signature is valid but the body is not an event (id, type, data).');\n }\n return parsed as WebhookEvent;\n}\n\nfunction isEnvelope(value: unknown): value is WebhookEventEnvelope {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n const v = value as Record<string, unknown>;\n return typeof v.id === 'string' && typeof v.type === 'string' && 'data' in v;\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { constructEvent } from '../webhooks/events.js';\nimport { verify } from '../webhooks/signature.js';\nimport { Resource } from './base.js';\n\ntype SubscriptionId = PathParams<'/api/v1/webhooks/{id}', 'GET'>['id'];\n\n/**\n * Webhook subscriptions (accounts area) and the verification of deliveries.\n *\n * Reading needs `webhooks:read` and the rest `webhooks:write`; the catalog (`events()`) needs\n * `accounts:read`. A key only sees and manages subscriptions to events of the areas it can read\n * (`conversations:read`, `communities:read`, `accounts:read`): asking for others is a `422` on\n * `events`, and touching a subscription that has them is `403 permission_denied`.\n */\nexport class Webhooks extends Resource {\n /** Same as `Funnelchat.webhooks.verify`. */\n readonly verify = verify;\n /** Same as `Funnelchat.webhooks.constructEvent`. */\n readonly constructEvent = constructEvent;\n\n /** `GET /api/v1/webhooks/events`: the event types you can subscribe to, each with `status`. */\n events(options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/webhooks/events', { ...options });\n }\n\n /** `GET /api/v1/webhooks`: every subscription of the account (at most 50), not only yours. */\n list(options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/webhooks', { ...options });\n }\n\n /** `POST /api/v1/webhooks`: the response brings `secret` once. Store it, and store the `id`. */\n create(body: Body<'/api/v1/webhooks', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/webhooks', { ...options, body });\n }\n\n /** `GET /api/v1/webhooks/{id}` (without the secret). */\n retrieve(id: SubscriptionId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/webhooks/{id}', { ...options, path: { id } });\n }\n\n /** `PUT /api/v1/webhooks/{id}`: replaces `url`, `events`, `description` and `filters`. The secret stays. */\n update(id: SubscriptionId, body: Body<'/api/v1/webhooks/{id}', 'PUT'>, options?: RequestOptions) {\n return this.client.request('PUT', '/api/v1/webhooks/{id}', { ...options, path: { id }, body });\n }\n\n /** `DELETE /api/v1/webhooks/{id}`. */\n delete(id: SubscriptionId, options?: RequestOptions) {\n return this.client.request('DELETE', '/api/v1/webhooks/{id}', { ...options, path: { id } });\n }\n\n /**\n * `POST /api/v1/webhooks/{id}/rotate-secret`: the new secret comes once; the old one stops\n * working. **Not open to API keys** (`403 route_not_available`): rotate it from the panel.\n */\n rotateSecret(id: SubscriptionId, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/webhooks/{id}/rotate-secret', { ...options, path: { id } });\n }\n\n /** `POST /api/v1/webhooks/{id}/test`: delivers one signed `webhook.test` now. Check `succeeded`. */\n test(id: SubscriptionId, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/webhooks/{id}/test', { ...options, path: { id } });\n }\n\n /** `GET /api/v1/webhooks/{id}/deliveries`, paginated: one row per attempt, newest first. */\n listDeliveries(id: SubscriptionId, query?: Query<'/api/v1/webhooks/{id}/deliveries'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/webhooks/{id}/deliveries', { ...options, path: { id }, query });\n }\n}\n","/** The SDK version, sent in the `User-Agent`. A test keeps it equal to package.json. */\nexport const VERSION = '0.1.1';\n","import {\n APIConnectionError,\n APIConnectionTimeoutError,\n APIError,\n APIUserAbortError,\n FunnelchatError,\n} from './core/errors.js';\nimport { PagePromise } from './core/pagination.js';\nimport { APIPromise, type APIResponse, requestIdOf } from './core/api-promise.js';\nimport { NOT_RETRYABLE_CODES } from './core/error-codes.js';\nimport { isRetryable, isSendRequest, retryDelayMs } from './core/retry.js';\nimport type {\n ApiPath,\n HttpMethod,\n ListItem,\n MethodsOf,\n OptionsArg,\n PathsWithMethod,\n ResponseBody,\n TypedRequestOptions,\n UntypedRequestOptions,\n} from './core/types.js';\nimport { interpolatePath, joinUrl, serializeQuery } from './core/url.js';\nimport { Contacts } from './resources/contacts.js';\nimport { Conversations } from './resources/conversations.js';\nimport { CustomFields } from './resources/custom-fields.js';\nimport { Devices } from './resources/devices.js';\nimport { Forms } from './resources/forms.js';\nimport { Groups } from './resources/groups.js';\nimport { Messages } from './resources/messages.js';\nimport { Tags } from './resources/tags.js';\nimport { Templates } from './resources/templates.js';\nimport { Webhooks } from './resources/webhooks.js';\nimport { VERSION } from './version.js';\nimport { constructEvent } from './webhooks/events.js';\nimport { verify } from './webhooks/signature.js';\n\nexport type Environment = 'production' | 'staging';\n\n/** Base URL of each environment: one URL for the whole public API. */\nexport const BASE_URLS: Readonly<Record<Environment, string>> = {\n production: 'https://api.funnelchat.com',\n staging: 'https://api-staging.funnelchat.com',\n};\n\nexport const DEFAULT_TIMEOUT_MS = 30_000;\nexport const DEFAULT_MAX_RETRIES = 2;\n\nexport interface ClientOptions {\n /** `<id>|fc_live_...`. Default: the `FUNNELCHAT_API_KEY` environment variable. */\n apiKey?: string;\n /** Overrides the URL of `environment` (for example a local edge). */\n baseUrl?: string;\n /** Default: `production`. */\n environment?: Environment;\n /** Timeout of each attempt, in milliseconds. Default: 30 000. */\n timeoutMs?: number;\n /** Automatic retries on `429`, `5xx` and network errors. Default: 2. `0` turns them off. */\n maxRetries?: number;\n /** Headers added to every request. */\n defaultHeaders?: Record<string, string>;\n /** A `fetch` implementation. Default: the global one (Node 18+). */\n fetch?: typeof fetch;\n}\n\n/** Signature-verification helpers that need no client (no API key). */\nconst webhookHelpers = { verify, constructEvent } as const;\n\n/**\n * Client of the Funnelchat public API.\n *\n * ```ts\n * const funnelchat = new Funnelchat({ apiKey: process.env.FUNNELCHAT_API_KEY });\n * const devices = await funnelchat.devices.list();\n * ```\n */\nexport class Funnelchat {\n /** `Funnelchat.webhooks.verify(...)` and `Funnelchat.webhooks.constructEvent(...)`, without a client. */\n static readonly webhooks = webhookHelpers;\n static readonly VERSION = VERSION;\n\n readonly baseUrl: string;\n readonly timeoutMs: number;\n readonly maxRetries: number;\n\n readonly contacts: Contacts;\n readonly conversations: Conversations;\n readonly messages: Messages;\n /** WhatsApp forms: build, publish, read the answers. Send one with `messages.sendForm`. */\n readonly forms: Forms;\n readonly templates: Templates;\n readonly tags: Tags;\n readonly customFields: CustomFields;\n readonly groups: Groups;\n readonly devices: Devices;\n /** Webhook subscriptions, plus `verify` and `constructEvent`. */\n readonly webhooks: Webhooks;\n\n // Private fields: the key never shows up in `console.log(client)` or in JSON.\n readonly #apiKey: string;\n readonly #fetch: typeof fetch;\n readonly #defaultHeaders: Record<string, string>;\n\n constructor(options: ClientOptions = {}) {\n const apiKey = options.apiKey ?? readEnv('FUNNELCHAT_API_KEY');\n if (!apiKey) {\n throw new FunnelchatError('Missing API key: pass it as `apiKey` or in the FUNNELCHAT_API_KEY environment variable.');\n }\n const environment = options.environment ?? 'production';\n if (!(environment in BASE_URLS)) {\n throw new FunnelchatError(`Unknown environment: ${String(environment)}. Use \"production\" or \"staging\".`);\n }\n const fetchImpl = options.fetch ?? globalThis.fetch;\n if (typeof fetchImpl !== 'function') {\n throw new FunnelchatError('No fetch available: use Node 18 or later, or pass `fetch` in the options.');\n }\n\n this.#apiKey = apiKey;\n this.#fetch = fetchImpl;\n this.#defaultHeaders = { ...options.defaultHeaders };\n this.baseUrl = (options.baseUrl ?? BASE_URLS[environment]).replace(/\\/+$/, '');\n this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n\n this.contacts = new Contacts(this);\n this.conversations = new Conversations(this);\n this.messages = new Messages(this);\n this.forms = new Forms(this);\n this.templates = new Templates(this);\n this.tags = new Tags(this);\n this.customFields = new CustomFields(this);\n this.groups = new Groups(this);\n this.devices = new Devices(this);\n this.webhooks = new Webhooks(this);\n }\n\n /** What `JSON.stringify(client)` shows: the configuration, never the key. */\n toJSON(): { baseUrl: string; timeoutMs: number; maxRetries: number } {\n return { baseUrl: this.baseUrl, timeoutMs: this.timeoutMs, maxRetries: this.maxRetries };\n }\n\n /**\n * Calls any route. With a path of the spec (`'/api/v1/contacts/{contact}'`) the path parameters,\n * query, body and response are typed; any other path works untyped.\n *\n * ```ts\n * const contact = await funnelchat.request('GET', '/api/v1/contacts/{contact}', { path: { contact: 2001 } });\n * ```\n */\n request<P extends ApiPath, M extends MethodsOf<P>>(method: M, path: P, ...options: OptionsArg<TypedRequestOptions<P, M>>): APIPromise<ResponseBody<P, M>>;\n request<T = unknown, P extends string = string>(method: HttpMethod, path: P extends ApiPath ? never : P, options?: UntypedRequestOptions): APIPromise<T>;\n request(method: HttpMethod, path: string, options?: object): APIPromise<unknown> {\n return new APIPromise(this.#send(method, path, (options ?? {}) as UntypedRequestOptions));\n }\n\n /**\n * Walks any list route. `await` it for the first page or `for await` it for every item.\n *\n * ```ts\n * for await (const tag of funnelchat.paginate('/api/v1/tags', { query: { perPage: 100 } })) { … }\n * ```\n */\n paginate<P extends PathsWithMethod<'GET'>>(path: P, ...options: OptionsArg<TypedRequestOptions<P, 'GET'>>): PagePromise<ListItem<P>>;\n paginate<T = unknown, P extends string = string>(path: P extends ApiPath ? never : P, options?: UntypedRequestOptions): PagePromise<T>;\n paginate(path: string, options?: object): PagePromise<unknown> {\n const { query, ...rest } = (options ?? {}) as UntypedRequestOptions;\n return new PagePromise<unknown>((pageQuery) => this.#send('GET', path, { ...rest, query: pageQuery }), { ...query });\n }\n\n async #send(method: HttpMethod, template: string, options: UntypedRequestOptions): Promise<APIResponse<unknown>> {\n const verb = method.toUpperCase() as HttpMethod;\n const pathname = interpolatePath(template, options.path);\n const url = joinUrl(this.baseUrl, pathname, serializeQuery(options.query));\n const errorUrl = joinUrl(this.baseUrl, pathname.split('?')[0] ?? pathname, '');\n const maxRetries = Math.max(0, options.maxRetries ?? this.maxRetries);\n // A send is never repeated unless the caller asks; then it follows the rule of every write.\n const retriesAllowed = options.retrySend === true || !isSendRequest(verb, pathname.split('?')[0] ?? pathname);\n const timeoutMs = options.timeoutMs ?? this.timeoutMs;\n const { body, contentType } = encodeBody(options.body);\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'User-Agent': `funnelchat-node/${VERSION} node/${typeof process !== 'undefined' ? process.version : 'unknown'}`,\n ...(contentType ? { 'Content-Type': contentType } : {}),\n ...this.#defaultHeaders,\n ...options.headers,\n Authorization: `Bearer ${this.#apiKey}`,\n };\n\n for (let attempt = 0; ; attempt++) {\n const canRetry = retriesAllowed && attempt < maxRetries;\n let result: { response: Response; text: string };\n try {\n result = await this.#attempt(verb, url, headers, body, timeoutMs, options.signal);\n } catch (error) {\n if (error instanceof APIConnectionError && canRetry && isRetryable(verb, 'network')) {\n await sleep(retryDelayMs(attempt, undefined) ?? 0, options.signal);\n continue;\n }\n throw error;\n }\n\n const { response, text } = result;\n const parsed = parseBody(response, text);\n if (response.ok) return { data: parsed, response, requestId: requestIdOf(response.headers) };\n\n const error = APIError.from({ status: response.status, body: parsed, headers: response.headers, method: verb, url: errorUrl });\n if (canRetry && isRetryable(verb, response.status) && !NOT_RETRYABLE_CODES.has(error.code ?? '')) {\n const delay = retryDelayMs(attempt, error.retryAfter);\n if (delay !== null) {\n await sleep(delay, options.signal);\n continue;\n }\n }\n throw error;\n }\n }\n\n async #attempt(\n method: HttpMethod,\n url: string,\n headers: Record<string, string>,\n body: BodyInit | undefined,\n timeoutMs: number,\n signal: AbortSignal | undefined,\n ): Promise<{ response: Response; text: string }> {\n if (signal?.aborted) throw new APIUserAbortError({ cause: signal.reason });\n const controller = new AbortController();\n const onAbort = () => controller.abort(signal?.reason);\n signal?.addEventListener('abort', onAbort, { once: true });\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeoutMs);\n\n const classify = (cause: unknown): Error => {\n if (signal?.aborted) return new APIUserAbortError({ cause });\n if (timedOut) return new APIConnectionTimeoutError(timeoutMs, { cause });\n return new APIConnectionError(undefined, { cause });\n };\n\n try {\n let response: Response;\n try {\n response = await this.#fetch(url, { method, headers, body, signal: controller.signal });\n } catch (error) {\n throw classify(error);\n }\n try {\n return { response, text: await response.text() };\n } catch (error) {\n throw classify(error);\n }\n } finally {\n clearTimeout(timer);\n signal?.removeEventListener('abort', onAbort);\n }\n }\n}\n\nfunction readEnv(name: string): string | undefined {\n if (typeof process === 'undefined' || !process.env) return undefined;\n const value = process.env[name];\n return value && value.trim() !== '' ? value.trim() : undefined;\n}\n\nfunction encodeBody(body: unknown): { body: BodyInit | undefined; contentType: string | undefined } {\n if (body === undefined) return { body: undefined, contentType: undefined };\n if (typeof FormData !== 'undefined' && body instanceof FormData) return { body, contentType: undefined };\n if (body instanceof URLSearchParams) return { body, contentType: undefined };\n if (typeof body === 'string') return { body, contentType: 'application/json' };\n return { body: JSON.stringify(body), contentType: 'application/json' };\n}\n\n/** The decoded body: JSON when it parses, the text otherwise, `null` when there is none (a `204`). */\nfunction parseBody(response: Response, text: string): unknown {\n if (text === '') return null;\n const type = response.headers.get('content-type') ?? '';\n if (type.includes('json') || /^\\s*[[{]/.test(text)) {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n }\n return text;\n}\n\nfunction sleep(ms: number, signal: AbortSignal | undefined): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new APIUserAbortError({ cause: signal.reason }));\n return;\n }\n const onAbort = () => {\n clearTimeout(timer);\n reject(new APIUserAbortError({ cause: signal?.reason }));\n };\n const timer = setTimeout(() => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n }, ms);\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n}\n","/**\n * GENERATED FILE — do not edit. Run `npm run generate`.\n * Source: spec/funnelchat.json (sha256 8bbbae569b4cab52…) + spec/pending.json.\n */\nimport type { components } from './openapi.js';\n\n/** One entry of the webhook event catalog. `pending` = taken from spec/pending.json. */\nexport interface WebhookEventInfo {\n readonly type: string;\n readonly domains: readonly string[];\n /** `live`: emitted today. `planned`: you can subscribe, but nothing is emitted yet. */\n readonly status: 'live' | 'planned';\n readonly pending: boolean;\n readonly description: string | null;\n}\n\n/** Every webhook event type known to the spec (53). */\nexport const webhookEvents = [\n {\"type\":\"account.blocked\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"The account was blocked by usage: the 24-hour grace period after using up the monthly active contacts ended.\"},\n {\"type\":\"ai_quota.low_balance\",\"domains\":[\"accounts\"],\"status\":\"planned\",\"pending\":true,\"description\":\"The AI message quota is about to run out. Planned: not emitted yet.\"},\n {\"type\":\"ai_quota.topup_failed\",\"domains\":[\"accounts\"],\"status\":\"planned\",\"pending\":true,\"description\":\"An AI quota top-up could not be processed. Planned: not emitted yet.\"},\n {\"type\":\"ai_quota.topup_succeeded\",\"domains\":[\"accounts\"],\"status\":\"planned\",\"pending\":true,\"description\":\"An AI quota top-up was credited. Planned: not emitted yet.\"},\n {\"type\":\"billing.payment_failed\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"A charge of the subscription could not be processed (Stripe subscriptions only).\"},\n {\"type\":\"billing.plan_blocked\",\"domains\":[\"accounts\"],\"status\":\"planned\",\"pending\":true,\"description\":\"The plan was blocked by an unprocessed charge. Planned: not emitted yet.\"},\n {\"type\":\"billing.upcoming_charge\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"The next charge of the subscription is coming up (Stripe subscriptions only).\"},\n {\"type\":\"broadcast.finished\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Una campaña llegó a su estado final (enviada, fallida o con fallos parciales), con sus conteos.\\n\\n`status` es `success`, `failed` o `partially_failed`. `reason` dice por qué terminó: `completed` (se enviaron todas las páginas), `cancelled` (se cerró una campaña pausada), `template_rejected` (Meta rechazó la plantilla, o su categoría cambió, mientras la campaña esperaba), `approval_expired` (la plantilla no se aprobó a tiempo), `mac_lockout` (la cuenta alcanzó su límite de contactos activos), `no_recipients` (la audiencia quedó vacía) o `error` (el envío no pudo despacharse). `totals` son los conteos del envío: `processed` (destinatarios procesados), `failed` y `skipped_unreachable` (destinatarios que el canal no puede alcanzar); valen 0 si la campaña terminó antes de enviar. Se emite una sola vez por campaña.\"},\n {\"type\":\"broadcast.paused\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Una campaña se pausó sola, por ejemplo porque bajó la calidad del número.\\n\\n`reason` es `quality_degraded` (la calidad del número bajó respecto de la del inicio, o llegó a RED) o `quality_unreadable` (no se pudo leer la calidad en tres controles seguidos). `quality` y `quality_baseline` son la calidad de Meta leída en el control y la del inicio del envío (`GREEN`, `YELLOW`, `RED`), o `null` si no se pudo leer. Sólo las campañas con envío inteligente se pausan solas. Reanudar la campaña y que se pause otra vez emite otro evento.\"},\n {\"type\":\"campaign.no_groups_available\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":true,\"description\":\"A campaign has no groups to send the people who come through its link to.\"},\n {\"type\":\"campaign.status_changed\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Una campaña se activó o se pausó.\"},\n {\"type\":\"contact.created\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Se creó un contacto nuevo en la cuenta.\\n\\nSe envía un evento por cada contacto nuevo, sea cual sea el canal: un mensaje entrante, la creación manual, una importación o la API. No se envía cuando el contacto ya existía y sólo se actualiza, ni para los contactos que la plataforma crea para sus propias notificaciones. En importaciones grandes el límite de volumen de la cuenta puede descartar parte de los eventos.\"},\n {\"type\":\"contact.stage_changed\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un contacto cambió de etapa en un tablero.\\n\\nSe envía un evento por cada contacto que cambia de etapa en un tablero por etapas. `kind` es entry (entra al tablero, `from_stage` es null), move (pasa de una etapa a otra), exit (sale del tablero, `to_stage` es null) o stage_deleted (se reubica porque su etapa se borró; el nombre de la etapa borrada es null). No se envía si el contacto se coloca en la etapa en la que ya estaba.\"},\n {\"type\":\"contact.tag_added\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un contacto recibió una etiqueta.\\n\\nSe envía un evento por cada contacto y etiqueta agregados, también en operaciones en bloque; no se envía si el contacto ya tenía la etiqueta. `source` indica el origen: manual, flow, bulk, import, sync, walink o ai. En operaciones en bloque grandes el límite de volumen de la cuenta puede descartar parte de los eventos.\"},\n {\"type\":\"contact.tag_removed\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un contacto perdió una etiqueta.\\n\\nSe envía un evento por cada contacto y etiqueta quitados, también en operaciones en bloque; no se envía si el contacto no tenía la etiqueta. No se envía al borrar la etiqueta, al borrar o fusionar contactos ni al desvincular etiquetas de un tablero. `source` indica el origen: manual, flow o bulk. En operaciones en bloque grandes el límite de volumen de la cuenta puede descartar parte de los eventos.\"},\n {\"type\":\"conversation.assigned\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Una conversación quedó asignada a una persona del equipo o a un agente de IA.\\n\\nSe envía cuando una conversación queda asignada a una persona del equipo (`assignee.type` = `human`) o a un agente de IA (`assignee.type` = `ai`), por cualquier camino. `assignee` trae el tipo y el nombre, nunca un identificador. No se envía al desasignar, ni cuando se vuelve a enviar el mismo asignado.\"},\n {\"type\":\"conversation.closed\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Una conversación pasó a cerrada.\\n\\nSe envía cuando una conversación pasa de abierta a cerrada. No se envía si la conversación ya estaba cerrada ni cuando se reabre.\"},\n {\"type\":\"daily_report.generated\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":true,\"description\":\"The daily report of the account was generated (clicks, joins and leaves).\"},\n {\"type\":\"device.connected\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"One of the numbers of the account got connected: by scanning the QR code or by finishing the sign-up of a WhatsApp Cloud number.\"},\n {\"type\":\"device.disconnected\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"One of the numbers of the account disconnected and can no longer send or receive.\"},\n {\"type\":\"flow.completed\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un contacto terminó un flujo de automatización.\\n\\nSe envía una sola vez por cada ejecución de un flujo, cuando termina con éxito. No se envía si la ejecución se cortó, se canceló, quedó bloqueada o falló. `contact` es `null` si la ejecución no tiene un contacto asociado. Un flujo muy usado puede generar muchos eventos seguidos.\"},\n {\"type\":\"flow.failed\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"La ejecución de un flujo para un contacto terminó por un error.\\n\\nSe envía una sola vez por cada ejecución de un flujo que termina por un error, no porque llegó al final. `reason` indica el motivo y toma uno de estos valores: `node_missing` (el paso a ejecutar ya no existe), `unknown_node_type` (el paso es de un tipo no reconocido), `missing_subflow` (el flujo que debía ejecutarse dentro de otro ya no existe), `malformed_node` (el paso tiene una configuración dañada), `loop_detected` (la ejecución dio vueltas sin esperar nada) y `execution_error` (un error inesperado detuvo la ejecución). No se envía si la ejecución se canceló, quedó bloqueada o se cortó porque se editó el flujo o se unieron contactos. `contact` es `null` si la ejecución no tiene un contacto asociado.\"},\n {\"type\":\"group_action.failed\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":true,\"description\":\"An action on a group of a campaign failed.\"},\n {\"type\":\"group_join_request.created\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":true,\"description\":\"Someone asked to join a group that requires approval.\"},\n {\"type\":\"group_join_request.revoked\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":true,\"description\":\"Someone withdrew their request to join a group.\"},\n {\"type\":\"group_participant.joined\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Una persona entró a un grupo de una campaña.\"},\n {\"type\":\"group_participant.left\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Una persona salió de un grupo de una campaña.\"},\n {\"type\":\"group.blocked\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un grupo quedó inoperable: sin administrador conectado, con el link de invitación inválido o suspendido por WhatsApp.\"},\n {\"type\":\"group.created\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Se creó o se importó un grupo dentro de una campaña de la cuenta.\"},\n {\"type\":\"group.full\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":true,\"description\":\"A group went from not full to full.\"},\n {\"type\":\"group.invite_link_down\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"El enlace de invitación de un grupo quedó confirmado caído (WhatsApp respondió que no existe y la renovación no consiguió otro); no se publica por errores transitorios ni por grupos prohibidos o suspendidos, y se publica una sola vez por episodio de bloqueo.\"},\n {\"type\":\"group.invite_link_renewed\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"El enlace de invitación de un grupo cambió por una renovación, automática al detectarse inválido o pedida por el usuario; en v0 no se publican los cambios que detecta la sincronización ni el enlace inicial al crear el grupo.\"},\n {\"type\":\"group.message_received\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":true,\"description\":\"Someone wrote in a group of one of your numbers. Not emitted for the messages of your own numbers.\"},\n {\"type\":\"group.reaction_added\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":true,\"description\":\"Someone reacted to a message of a group.\"},\n {\"type\":\"group.recovered\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un grupo que estaba bloqueado volvió a operar.\"},\n {\"type\":\"mac.expiring\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"Some monthly active contacts expire in the next 7 days.\"},\n {\"type\":\"mac.usage_100\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"The account used up its monthly active contacts of the cycle; a 24-hour grace period starts.\"},\n {\"type\":\"mac.usage_80\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"The account reached 80% of its monthly active contacts of the cycle.\"},\n {\"type\":\"message.received\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un contacto le escribió a un número de WhatsApp de la cuenta.\"},\n {\"type\":\"message.status_changed\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":true,\"description\":\"The delivery status of a message you sent with the API changed. One notice per transition, never one that goes back; `queued` is not reported. It must be asked for explicitly in `events`.\"},\n {\"type\":\"pipeline.finished\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Terminó un pipeline de operaciones sobre grupos, con su resultado agregado.\"},\n {\"type\":\"poll.voted\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un participante votó en una encuesta enviada a un grupo, o cambió su voto.\"},\n {\"type\":\"scheduled_message.finished\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un envío programado terminó, con su resultado agregado.\"},\n {\"type\":\"scheduled_message.group_delivery_failed\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un envío programado falló en un grupo concreto, con el motivo desagregado.\"},\n {\"type\":\"scheduled_message.response_received\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Alguien respondió a un envío programado votando una encuesta o respondiendo a un evento.\"},\n {\"type\":\"subscription.cancellation_confirmed\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"The cancellation of the subscription was confirmed (Stripe subscriptions only).\"},\n {\"type\":\"subscription.dormant_ending\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"The dormant-account period is about to end.\"},\n {\"type\":\"subscription.expiring\",\"domains\":[\"accounts\"],\"status\":\"planned\",\"pending\":true,\"description\":\"The subscription is about to expire. Planned: not emitted yet.\"},\n {\"type\":\"subscription.reactivated\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"The scheduled cancellation of the subscription was reverted (Stripe subscriptions only).\"},\n {\"type\":\"subscription.trial_ending\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"The trial period is about to end.\"},\n {\"type\":\"template.status_changed\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Una plantilla cambió de estado de aprobación en Meta.\\n\\n`template` identifica la plantilla igual que `GET /templates` (`id`, `uid`, `name`, `category`). `previous_status` y `status` son los estados tal como los devuelve la API (por ejemplo `PENDING`, `APPROVED`, `REJECTED`, `PAUSED`); `previous_status` es `null` si la plantilla no tenía estado. `reason` trae la observación de rechazo (traducida como en la API y limitada a 500 caracteres) cuando el cambio es un rechazo informado al crear la plantilla, y es `null` en el resto. No se emite si Meta reenvía el estado que la plantilla ya tenía. Si una misma plantilla de Meta figura en varias cuentas, cada cuenta recibe su propio evento.\"},\n {\"type\":\"webhook.test\",\"domains\":[\"conversations\",\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Evento de prueba enviado desde la ruta de prueba de una suscripción.\"},\n {\"type\":\"whatsapp_form.completed\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":true,\"description\":\"A contact completed a form you sent them.\"},\n] as const satisfies readonly WebhookEventInfo[];\n\n/** A webhook event type known to the spec. */\nexport type WebhookEventType = (typeof webhookEvents)[number]['type'];\n\n/**\n * The `data` of each event. When the spec only has an example, the type is inferred from it:\n * keys in the example are required and `null` values are `unknown`.\n */\nexport interface WebhookEventDataMap {\n /** `account.blocked` (live, pending of the spec; typed from: example). The account was blocked by usage: the 24-hour grace period after using up the monthly active contacts ended. */\n \"account.blocked\": {\n reason: string;\n grace_started_at: string;\n grace_expired_at: string;\n };\n /** `ai_quota.low_balance` (planned, pending of the spec; typed from: no example or schema yet). The AI message quota is about to run out. Planned: not emitted yet. */\n \"ai_quota.low_balance\": Record<string, unknown>;\n /** `ai_quota.topup_failed` (planned, pending of the spec; typed from: no example or schema yet). An AI quota top-up could not be processed. Planned: not emitted yet. */\n \"ai_quota.topup_failed\": Record<string, unknown>;\n /** `ai_quota.topup_succeeded` (planned, pending of the spec; typed from: no example or schema yet). An AI quota top-up was credited. Planned: not emitted yet. */\n \"ai_quota.topup_succeeded\": Record<string, unknown>;\n /** `billing.payment_failed` (live, pending of the spec; typed from: example). A charge of the subscription could not be processed (Stripe subscriptions only). */\n \"billing.payment_failed\": {\n amount_cents: number;\n currency: string;\n };\n /** `billing.plan_blocked` (planned, pending of the spec; typed from: no example or schema yet). The plan was blocked by an unprocessed charge. Planned: not emitted yet. */\n \"billing.plan_blocked\": Record<string, unknown>;\n /** `billing.upcoming_charge` (live, pending of the spec; typed from: example). The next charge of the subscription is coming up (Stripe subscriptions only). */\n \"billing.upcoming_charge\": {\n charge_date: string;\n amount_cents: number;\n currency: string;\n };\n /** `broadcast.finished` (live; typed from: example). Una campaña llegó a su estado final (enviada, fallida o con fallos parciales), con sus conteos. `status` es `success`, `failed` o `partially_failed`. `reason` dice por qué terminó: `completed` (se enviaron todas las páginas), `cancelled` (se cerró una campaña pausada), `template_rejected` (Meta rechazó la plantilla, o su categoría cambió, mientras la campaña esperaba), `approval_expired` (la plantilla no se aprobó a tiempo), `mac_lockout` (la cuenta alcanzó su límite de contactos activos), `no_recipients` (la audiencia quedó vacía) o `error` (el envío no pudo despacharse). `totals` son los conteos del envío: `processed` (destinatarios procesados), `failed` y `skipped_unreachable` (destinatarios que el canal no puede alcanzar); valen 0 si la campaña terminó antes de enviar. Se emite una sola vez por campaña. */\n \"broadcast.finished\": {\n broadcast: {\n id: number;\n name: string;\n };\n status: string;\n reason: string;\n totals: {\n processed: number;\n failed: number;\n skipped_unreachable: number;\n };\n };\n /** `broadcast.paused` (live; typed from: example). Una campaña se pausó sola, por ejemplo porque bajó la calidad del número. `reason` es `quality_degraded` (la calidad del número bajó respecto de la del inicio, o llegó a RED) o `quality_unreadable` (no se pudo leer la calidad en tres controles seguidos). `quality` y `quality_baseline` son la calidad de Meta leída en el control y la del inicio del envío (`GREEN`, `YELLOW`, `RED`), o `null` si no se pudo leer. Sólo las campañas con envío inteligente se pausan solas. Reanudar la campaña y que se pause otra vez emite otro evento. */\n \"broadcast.paused\": {\n broadcast: {\n id: number;\n name: string;\n };\n reason: string;\n quality: string;\n quality_baseline: string;\n };\n /** `campaign.no_groups_available` (live, pending of the spec; typed from: example). A campaign has no groups to send the people who come through its link to. */\n \"campaign.no_groups_available\": {\n campaign: {\n uuid: string;\n name: string;\n };\n reason: string;\n };\n /** `campaign.status_changed` (live; typed from: example). Una campaña se activó o se pausó. */\n \"campaign.status_changed\": {\n campaign: {\n uuid: string;\n name: string;\n };\n from: string;\n to: string;\n };\n /** `contact.created` (live; typed from: example). Se creó un contacto nuevo en la cuenta. Se envía un evento por cada contacto nuevo, sea cual sea el canal: un mensaje entrante, la creación manual, una importación o la API. No se envía cuando el contacto ya existía y sólo se actualiza, ni para los contactos que la plataforma crea para sus propias notificaciones. En importaciones grandes el límite de volumen de la cuenta puede descartar parte de los eventos. */\n \"contact.created\": {\n contact: {\n id: number;\n name: string;\n phone: string;\n email: string;\n };\n };\n /** `contact.stage_changed` (live; typed from: example). Un contacto cambió de etapa en un tablero. Se envía un evento por cada contacto que cambia de etapa en un tablero por etapas. `kind` es entry (entra al tablero, `from_stage` es null), move (pasa de una etapa a otra), exit (sale del tablero, `to_stage` es null) o stage_deleted (se reubica porque su etapa se borró; el nombre de la etapa borrada es null). No se envía si el contacto se coloca en la etapa en la que ya estaba. */\n \"contact.stage_changed\": {\n contact: {\n id: number;\n name: string;\n phone: string;\n };\n board: {\n id: number;\n name: string;\n };\n kind: string;\n from_stage: {\n id: number;\n name: string;\n position: number;\n };\n to_stage: {\n id: number;\n name: string;\n position: number;\n };\n };\n /** `contact.tag_added` (live; typed from: example). Un contacto recibió una etiqueta. Se envía un evento por cada contacto y etiqueta agregados, también en operaciones en bloque; no se envía si el contacto ya tenía la etiqueta. `source` indica el origen: manual, flow, bulk, import, sync, walink o ai. En operaciones en bloque grandes el límite de volumen de la cuenta puede descartar parte de los eventos. */\n \"contact.tag_added\": {\n contact: {\n id: number;\n name: string;\n phone: string;\n };\n tag: {\n id: number;\n name: string;\n };\n source: string;\n };\n /** `contact.tag_removed` (live; typed from: example). Un contacto perdió una etiqueta. Se envía un evento por cada contacto y etiqueta quitados, también en operaciones en bloque; no se envía si el contacto no tenía la etiqueta. No se envía al borrar la etiqueta, al borrar o fusionar contactos ni al desvincular etiquetas de un tablero. `source` indica el origen: manual, flow o bulk. En operaciones en bloque grandes el límite de volumen de la cuenta puede descartar parte de los eventos. */\n \"contact.tag_removed\": {\n contact: {\n id: number;\n name: string;\n phone: string;\n };\n tag: {\n id: number;\n name: string;\n };\n source: string;\n };\n /** `conversation.assigned` (live; typed from: example). Una conversación quedó asignada a una persona del equipo o a un agente de IA. Se envía cuando una conversación queda asignada a una persona del equipo (`assignee.type` = `human`) o a un agente de IA (`assignee.type` = `ai`), por cualquier camino. `assignee` trae el tipo y el nombre, nunca un identificador. No se envía al desasignar, ni cuando se vuelve a enviar el mismo asignado. */\n \"conversation.assigned\": {\n contact: {\n id: number;\n name: string;\n phone: string;\n };\n assignee: {\n type: string;\n name: string;\n };\n };\n /** `conversation.closed` (live; typed from: example). Una conversación pasó a cerrada. Se envía cuando una conversación pasa de abierta a cerrada. No se envía si la conversación ya estaba cerrada ni cuando se reabre. */\n \"conversation.closed\": {\n contact: {\n id: number;\n name: string;\n phone: string;\n };\n };\n /** `daily_report.generated` (live, pending of the spec; typed from: example). The daily report of the account was generated (clicks, joins and leaves). */\n \"daily_report.generated\": {\n period: {\n date: string;\n timezone: string;\n };\n clicks: number;\n joins: number;\n leaves: number;\n conversion_rate: number;\n };\n /** `device.connected` (live, pending of the spec; typed from: schema). One of the numbers of the account got connected: by scanning the QR code or by finishing the sign-up of a WhatsApp Cloud number. */\n \"device.connected\": {\n device: {\n id: number;\n name: string | null;\n /** Digits only, without `+`. */\n number: string | null;\n };\n connected_at: string;\n };\n /** `device.disconnected` (live, pending of the spec; typed from: schema). One of the numbers of the account disconnected and can no longer send or receive. */\n \"device.disconnected\": {\n device: {\n id: number;\n name: string | null;\n /** Digits only, without `+`. */\n number: string | null;\n };\n disconnected_at: string;\n };\n /** `flow.completed` (live; typed from: example). Un contacto terminó un flujo de automatización. Se envía una sola vez por cada ejecución de un flujo, cuando termina con éxito. No se envía si la ejecución se cortó, se canceló, quedó bloqueada o falló. `contact` es `null` si la ejecución no tiene un contacto asociado. Un flujo muy usado puede generar muchos eventos seguidos. */\n \"flow.completed\": {\n flow: {\n id: number;\n name: string;\n };\n contact: {\n id: number;\n name: string;\n phone: string;\n };\n };\n /** `flow.failed` (live; typed from: example). La ejecución de un flujo para un contacto terminó por un error. Se envía una sola vez por cada ejecución de un flujo que termina por un error, no porque llegó al final. `reason` indica el motivo y toma uno de estos valores: `node_missing` (el paso a ejecutar ya no existe), `unknown_node_type` (el paso es de un tipo no reconocido), `missing_subflow` (el flujo que debía ejecutarse dentro de otro ya no existe), `malformed_node` (el paso tiene una configuración dañada), `loop_detected` (la ejecución dio vueltas sin esperar nada) y `execution_error` (un error inesperado detuvo la ejecución). No se envía si la ejecución se canceló, quedó bloqueada o se cortó porque se editó el flujo o se unieron contactos. `contact` es `null` si la ejecución no tiene un contacto asociado. */\n \"flow.failed\": {\n flow: {\n id: number;\n name: string;\n };\n contact: {\n id: number;\n name: string;\n phone: string;\n };\n reason: string;\n };\n /** `group_action.failed` (live, pending of the spec; typed from: schema). An action on a group of a campaign failed. */\n \"group_action.failed\": {\n campaign: ({\n uuid: string;\n name: string | null;\n }) | null;\n pipeline: ({\n uuid: string;\n name: string | null;\n }) | null;\n group: ({\n uid: string;\n name: string | null;\n }) | null;\n action: {\n /** `null` for the actions of a campaign. */\n uuid: string | null;\n type: string;\n };\n reason: string;\n };\n /** `group_join_request.created` (live, pending of the spec; typed from: schema). Someone asked to join a group that requires approval. */\n \"group_join_request.created\": {\n group: {\n uid: string;\n name: string | null;\n };\n participant: {\n identity: string;\n identity_type: \"phone\" | \"whatsapp_user\";\n name: string | null;\n };\n };\n /** `group_join_request.revoked` (live, pending of the spec; typed from: schema). Someone withdrew their request to join a group. */\n \"group_join_request.revoked\": {\n group: {\n uid: string;\n name: string | null;\n };\n participant: {\n identity: string;\n identity_type: \"phone\" | \"whatsapp_user\";\n name: string | null;\n };\n };\n /** `group_participant.joined` (live; typed from: example). Una persona entró a un grupo de una campaña. */\n \"group_participant.joined\": {\n group: {\n uid: string;\n name: string;\n };\n campaign: {\n uuid: string;\n };\n participant: {\n identity: string;\n identity_type: string;\n name: string;\n };\n };\n /** `group_participant.left` (live; typed from: example). Una persona salió de un grupo de una campaña. */\n \"group_participant.left\": {\n group: {\n uid: string;\n name: string;\n };\n campaign: {\n uuid: string;\n };\n participant: {\n identity: string;\n identity_type: string;\n name: string;\n };\n };\n /** `group.blocked` (live; typed from: example). Un grupo quedó inoperable: sin administrador conectado, con el link de invitación inválido o suspendido por WhatsApp. */\n \"group.blocked\": {\n group: {\n uid: string;\n name: string;\n };\n campaign: {\n uuid: string;\n };\n reason: string;\n };\n /** `group.created` (live; typed from: example). Se creó o se importó un grupo dentro de una campaña de la cuenta. */\n \"group.created\": {\n group: {\n uid: string;\n name: string;\n type: string;\n };\n campaign: {\n uuid: string;\n name: string;\n };\n source: string;\n };\n /** `group.full` (live, pending of the spec; typed from: example). A group went from not full to full. */\n \"group.full\": {\n group: {\n uid: string;\n name: string;\n type: string;\n };\n campaign: {\n uuid: string;\n name: string;\n };\n trigger: string;\n participants: number;\n };\n /** `group.invite_link_down` (live; typed from: example). El enlace de invitación de un grupo quedó confirmado caído (WhatsApp respondió que no existe y la renovación no consiguió otro); no se publica por errores transitorios ni por grupos prohibidos o suspendidos, y se publica una sola vez por episodio de bloqueo. */\n \"group.invite_link_down\": {\n group: {\n uid: string;\n name: string;\n type: string;\n };\n campaign: {\n uuid: string;\n name: string;\n };\n reason: string;\n renewal_attempted: boolean;\n };\n /** `group.invite_link_renewed` (live; typed from: example). El enlace de invitación de un grupo cambió por una renovación, automática al detectarse inválido o pedida por el usuario; en v0 no se publican los cambios que detecta la sincronización ni el enlace inicial al crear el grupo. */\n \"group.invite_link_renewed\": {\n group: {\n uid: string;\n name: string;\n type: string;\n };\n campaign: {\n uuid: string;\n name: string;\n };\n invite_link: string;\n previous_invite_link: string;\n trigger: string;\n recovered: boolean;\n };\n /** `group.message_received` (live, pending of the spec; typed from: schema). Someone wrote in a group of one of your numbers. Not emitted for the messages of your own numbers. */\n \"group.message_received\": {\n group: {\n uid: string;\n name: string | null;\n };\n message: {\n uid: string;\n type: string;\n /** Only with `type: text`. */\n text: string | null;\n caption: string | null;\n media_url: string | null;\n mime_type: string | null;\n file_name: string | null;\n quoted_uid: string | null;\n };\n participant: {\n identity: string;\n identity_type: \"phone\" | \"whatsapp_user\";\n name: string | null;\n };\n };\n /** `group.reaction_added` (live, pending of the spec; typed from: schema). Someone reacted to a message of a group. */\n \"group.reaction_added\": {\n group: {\n uid: string;\n name: string | null;\n };\n message: {\n uid: string;\n };\n participant: {\n identity: string;\n identity_type: \"phone\" | \"whatsapp_user\";\n name: string | null;\n };\n reaction: string;\n };\n /** `group.recovered` (live; typed from: example). Un grupo que estaba bloqueado volvió a operar. */\n \"group.recovered\": {\n group: {\n uid: string;\n name: string;\n };\n campaign: {\n uuid: string;\n };\n reason: string;\n };\n /** `mac.expiring` (live, pending of the spec; typed from: example). Some monthly active contacts expire in the next 7 days. */\n \"mac.expiring\": {\n contacts_expiring: number;\n expires_at: string;\n };\n /** `mac.usage_100` (live, pending of the spec; typed from: example). The account used up its monthly active contacts of the cycle; a 24-hour grace period starts. */\n \"mac.usage_100\": {\n used: number;\n limit: number;\n percentage: number;\n cycle_started_at: string;\n grace_expires_at: string;\n };\n /** `mac.usage_80` (live, pending of the spec; typed from: example). The account reached 80% of its monthly active contacts of the cycle. */\n \"mac.usage_80\": {\n used: number;\n limit: number;\n percentage: number;\n cycle_started_at: string;\n };\n /** `message.received` (live; typed from: example + schema). Un contacto le escribió a un número de WhatsApp de la cuenta. */\n \"message.received\": {\n message: {\n id: number;\n type: \"text\" | \"image\" | \"video\" | \"document\" | \"sticker\" | \"contact\" | \"audio\" | \"note\" | \"action\" | \"invalid\" | \"interactive\" | \"location\" | \"voice_call\" | \"video_call\" | \"event\" | \"button\" | \"template\" | \"notification\" | \"option_list\" | \"template_button_reply\" | \"poll\" | \"whatsapp_form\" | \"call_permission_request\" | \"call_permission_reply\";\n text: string;\n media: unknown;\n };\n contact: {\n id: number;\n name: string;\n phone: string;\n };\n receiver: {\n phone: string;\n };\n };\n /** `message.status_changed` (live, pending of the spec; typed from: schema). The delivery status of a message you sent with the API changed. One notice per transition, never one that goes back; `queued` is not reported. It must be asked for explicitly in `events`. */\n \"message.status_changed\": {\n /** The `id` of the message in the history of the contact. */\n message_id: number;\n contact_id: number;\n /** The number of your account that sent the message. */\n device_id: number | null;\n status: \"sent\" | \"delivered\" | \"read\" | \"failed\";\n previous_status: \"sent\" | \"delivered\" | \"read\" | \"failed\" | null;\n /** Only when `status` is `failed`. */\n error?: components[\"schemas\"][\"PendingMessageError\"];\n occurred_at: string;\n /** The `client_reference` you sent with the message, or `null`. */\n client_reference: string | null;\n };\n /** `pipeline.finished` (live; typed from: example). Terminó un pipeline de operaciones sobre grupos, con su resultado agregado. */\n \"pipeline.finished\": {\n campaign: {\n uuid: string;\n };\n pipeline: {\n uuid: string;\n name: string;\n };\n outcome: string;\n actions: {\n total: number;\n succeeded: number;\n failed: number;\n skipped: number;\n cancelled: number;\n };\n };\n /** `poll.voted` (live; typed from: example). Un participante votó en una encuesta enviada a un grupo, o cambió su voto. */\n \"poll.voted\": {\n poll: {\n uid: string;\n };\n group: {\n uid: string;\n };\n scheduled_message: {\n uuid: string;\n };\n participant: {\n identity: string;\n identity_type: string;\n name: unknown;\n };\n options: string[];\n };\n /** `scheduled_message.finished` (live; typed from: example). Un envío programado terminó, con su resultado agregado. */\n \"scheduled_message.finished\": {\n scheduled_message: {\n uuid: string;\n name: string;\n };\n outcome: string;\n groups: {\n total: number;\n failed: number;\n partially_failed: number;\n };\n occurrence: number;\n };\n /** `scheduled_message.group_delivery_failed` (live; typed from: example). Un envío programado falló en un grupo concreto, con el motivo desagregado. */\n \"scheduled_message.group_delivery_failed\": {\n scheduled_message: {\n uuid: string;\n };\n group: {\n uid: string;\n name: string;\n };\n reason: string;\n partial: boolean;\n occurrence: number;\n };\n /** `scheduled_message.response_received` (live; typed from: example). Alguien respondió a un envío programado votando una encuesta o respondiendo a un evento. */\n \"scheduled_message.response_received\": {\n scheduled_message: {\n uuid: string;\n };\n group: {\n uid: string;\n };\n participant: {\n identity: string;\n identity_type: string;\n name: string;\n };\n response: {\n type: string;\n options: string[];\n rsvp: unknown;\n };\n };\n /** `subscription.cancellation_confirmed` (live, pending of the spec; typed from: example). The cancellation of the subscription was confirmed (Stripe subscriptions only). */\n \"subscription.cancellation_confirmed\": {\n access_until: string;\n };\n /** `subscription.dormant_ending` (live, pending of the spec; typed from: example). The dormant-account period is about to end. */\n \"subscription.dormant_ending\": {\n charge_date: string;\n amount_cents: number;\n currency: string;\n };\n /** `subscription.expiring` (planned, pending of the spec; typed from: no example or schema yet). The subscription is about to expire. Planned: not emitted yet. */\n \"subscription.expiring\": Record<string, unknown>;\n /** `subscription.reactivated` (live, pending of the spec; typed from: example). The scheduled cancellation of the subscription was reverted (Stripe subscriptions only). */\n \"subscription.reactivated\": {\n renews_at: string;\n };\n /** `subscription.trial_ending` (live, pending of the spec; typed from: example). The trial period is about to end. */\n \"subscription.trial_ending\": {\n trial_ends_at: string;\n };\n /** `template.status_changed` (live; typed from: example). Una plantilla cambió de estado de aprobación en Meta. `template` identifica la plantilla igual que `GET /templates` (`id`, `uid`, `name`, `category`). `previous_status` y `status` son los estados tal como los devuelve la API (por ejemplo `PENDING`, `APPROVED`, `REJECTED`, `PAUSED`); `previous_status` es `null` si la plantilla no tenía estado. `reason` trae la observación de rechazo (traducida como en la API y limitada a 500 caracteres) cuando el cambio es un rechazo informado al crear la plantilla, y es `null` en el resto. No se emite si Meta reenvía el estado que la plantilla ya tenía. Si una misma plantilla de Meta figura en varias cuentas, cada cuenta recibe su propio evento. */\n \"template.status_changed\": {\n template: {\n id: number;\n uid: string;\n name: string;\n category: string;\n };\n previous_status: string;\n status: string;\n reason: unknown;\n };\n /** `webhook.test` (live; typed from: example). Evento de prueba enviado desde la ruta de prueba de una suscripción. */\n \"webhook.test\": {\n subscription: string;\n sent_at: string;\n };\n /** `whatsapp_form.completed` (live, pending of the spec; typed from: schema). A contact completed a form you sent them. */\n \"whatsapp_form.completed\": {\n form: {\n /** The form (`family_id`). */\n id: number;\n name: string;\n version_id: number;\n };\n message_id: number | null;\n contact_id: number | null;\n device_id: number | null;\n answers: ({\n key: string;\n label: string | null;\n value: boolean | number | string | string[] | null;\n })[];\n occurred_at: string;\n };\n}\n"]}
1
+ {"version":3,"sources":["../src/core/api-promise.ts","../src/core/errors.ts","../src/core/pagination.ts","../src/core/error-codes.ts","../src/generated/routes.ts","../src/core/retry.ts","../src/core/url.ts","../src/resources/base.ts","../src/resources/connect-links.ts","../src/resources/contacts.ts","../src/resources/conversations.ts","../src/resources/custom-fields.ts","../src/resources/devices.ts","../src/resources/forms.ts","../src/resources/groups.ts","../src/resources/messages.ts","../src/resources/tags.ts","../src/resources/templates.ts","../src/webhooks/signature.ts","../src/webhooks/events.ts","../src/resources/webhooks.ts","../src/version.ts","../src/client.ts","../src/generated/events.ts"],"names":["isRecord","createHmac","timingSafeEqual","error"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * The promise every call returns: `await` it for the body, or call `withResponse()` to also get the\n * HTTP response and its `X-Request-Id`.\n */\n\n/** Header the API sets on every response, success or error: a UUID per request. */\nexport const REQUEST_ID_HEADER = 'x-request-id';\n\n/** The id of a request (`X-Request-Id`), or `undefined` when the response has none. */\nexport function requestIdOf(headers: Headers): string | undefined {\n const value = headers.get(REQUEST_ID_HEADER);\n return value !== null && value.trim() !== '' ? value.trim() : undefined;\n}\n\n/** A body together with the response it came in. */\nexport interface APIResponse<T> {\n data: T;\n /** The HTTP response. Its body was already read: use `data`. */\n response: Response;\n /** `X-Request-Id` of the response. Quote it when you report a problem. */\n requestId: string | undefined;\n}\n\n/**\n * A `Promise` of the response body with one extra method:\n *\n * ```ts\n * const { data, requestId } = await funnelchat.contacts.retrieve(2001).withResponse();\n * ```\n */\nexport class APIPromise<T> extends Promise<T> {\n readonly #response: Promise<APIResponse<T>>;\n #data: Promise<T> | undefined;\n\n constructor(response: Promise<APIResponse<T>>) {\n // The executor value is never observed: then/catch/finally read #response instead.\n super((resolve) => resolve(undefined as T));\n this.#response = response;\n }\n\n // Derived promises (`.then(...)`) are plain Promises, not APIPromises.\n static override get [Symbol.species]() {\n return Promise;\n }\n\n /** The body, the `Response` and the `X-Request-Id`. */\n withResponse(): Promise<APIResponse<T>> {\n return this.#response;\n }\n\n #body(): Promise<T> {\n this.#data ??= this.#response.then((result) => result.data);\n return this.#data;\n }\n\n override then<R1 = T, R2 = never>(\n onfulfilled?: ((value: T) => R1 | PromiseLike<R1>) | null,\n onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null,\n ): Promise<R1 | R2> {\n return this.#body().then(onfulfilled, onrejected);\n }\n\n override catch<R = never>(onrejected?: ((reason: unknown) => R | PromiseLike<R>) | null): Promise<T | R> {\n return this.#body().catch(onrejected);\n }\n\n override finally(onfinally?: (() => void) | null): Promise<T> {\n return this.#body().finally(onfinally);\n }\n}\n","/**\n * Errors thrown by the SDK.\n *\n * FunnelchatError base class of everything the SDK throws\n * ├── APIError the API answered with a non-2xx status\n * │ ├── BadRequestError 400\n * │ ├── AuthenticationError 401\n * │ ├── PermissionDeniedError 403\n * │ ├── NotFoundError 404\n * │ ├── ConflictError 409\n * │ ├── UnsupportedMediaTypeError 415\n * │ ├── UnprocessableEntityError 422\n * │ ├── RateLimitError 429\n * │ └── InternalServerError 5xx\n * ├── APIConnectionError no response (network error)\n * │ └── APIConnectionTimeoutError\n * ├── APIUserAbortError the caller aborted the request with its own AbortSignal\n * └── WebhookVerificationError a webhook delivery failed signature verification\n */\n\nimport { requestIdOf } from './api-promise.js';\nimport type { KnownErrorCode } from './error-codes.js';\n\n/** Base class of every error thrown by the SDK. */\nexport class FunnelchatError extends Error {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message, options);\n this.name = new.target.name;\n }\n}\n\n/** Validation details of a Laravel `422`: field name -> messages. */\nexport type FieldErrors = Record<string, string[]>;\n\nexport interface APIErrorInit {\n status: number;\n body: unknown;\n headers: Headers;\n method: string;\n url: string;\n}\n\n/**\n * The API answered with a non-2xx status.\n *\n * - `status`: the HTTP status.\n * - `code`: the stable `error` code of the body (`window_closed`, `rate_limited`,\n * `route_not_available`…; see `SEND_ERROR_CODES` and `ACCESS_ERROR_CODES`), or `undefined` when\n * the body has none (for example a Laravel validation `422`, which carries `errors` instead).\n * - `message`: the `message` of the body, meant for people. Decide by `status` and `code`.\n * - `retryAfter`: seconds from the `Retry-After` header, when present.\n * - `requestId`: the `X-Request-Id` of the response. Quote it when you report a problem.\n */\nexport class APIError extends FunnelchatError {\n readonly status: number;\n /** The `error` of the body. The known codes autocomplete; the API can send others. */\n readonly code: KnownErrorCode | (string & {}) | undefined;\n readonly retryAfter: number | undefined;\n /** `X-Request-Id` of the response: the API sets it on every response, errors included. */\n readonly requestId: string | undefined;\n /** Per-field validation messages of a `422`, when the API sends them. */\n readonly errors: FieldErrors | undefined;\n /** The parsed body (or the raw text when it is not JSON). */\n readonly body: unknown;\n readonly headers: Headers;\n readonly method: string;\n /** URL of the request, without the query string. */\n readonly url: string;\n\n constructor(init: APIErrorInit) {\n const body = init.body;\n const record = isRecord(body) ? body : undefined;\n const code = typeof record?.error === 'string' && record.error !== '' ? record.error : undefined;\n const apiMessage = typeof record?.message === 'string' && record.message !== '' ? record.message : undefined;\n const fallback = typeof body === 'string' && body.trim() !== '' && body.length <= 300 ? body.trim() : undefined;\n super(apiMessage ?? code ?? fallback ?? `The API answered ${init.status}.`);\n this.status = init.status;\n this.code = code;\n this.retryAfter = parseRetryAfter(init.headers.get('retry-after'));\n this.requestId = requestIdOf(init.headers);\n this.errors = isRecord(record?.errors) ? (record.errors as FieldErrors) : undefined;\n this.body = body;\n this.headers = init.headers;\n this.method = init.method;\n this.url = init.url;\n }\n\n /** Builds the subclass that matches the status. */\n static from(init: APIErrorInit): APIError {\n const { status } = init;\n if (status === 400) return new BadRequestError(init);\n if (status === 401) return new AuthenticationError(init);\n if (status === 403) return new PermissionDeniedError(init);\n if (status === 404) return new NotFoundError(init);\n if (status === 409) return new ConflictError(init);\n if (status === 415) return new UnsupportedMediaTypeError(init);\n if (status === 422) return new UnprocessableEntityError(init);\n if (status === 429) return new RateLimitError(init);\n if (status >= 500) return new InternalServerError(init);\n return new APIError(init);\n }\n}\n\nexport class BadRequestError extends APIError {}\nexport class AuthenticationError extends APIError {}\n/** `403`: the key lacks the permission, or the route is not open to keys (`route_not_available`). */\nexport class PermissionDeniedError extends APIError {}\nexport class NotFoundError extends APIError {}\nexport class ConflictError extends APIError {}\n/**\n * `415`: the extension of `file` is not supported and no `file_type` was sent. The body lists\n * `supported_file_types`. Send `file_type` (and `file_name` for a document) with a URL that has no\n * known extension.\n */\nexport class UnsupportedMediaTypeError extends APIError {}\n/**\n * `422`: validation (`errors`, for example `errors.file_type`) or a rule of the send\n * (`window_closed`, `antiblock_*`, `recipient_*`, `provider_unsupported`…).\n */\nexport class UnprocessableEntityError extends APIError {}\n/**\n * `429`: rate limit (`rate_limited`, `daily_cap_exceeded`; `retryAfter` says how many seconds to\n * wait), the monthly active contacts (`mac_lockout_24h`, `mac_limit_reached`) or the open connect\n * links (`too_many_open_links`), which waiting does not fix.\n */\nexport class RateLimitError extends APIError {}\n/**\n * `5xx`. `502 origin_unreachable` and `500 edge_misconfigured` come from the API entry. After a\n * `5xx` on a write, read the state before repeating it: it may have been applied (or repeat a create\n * with the same `idempotencyKey`). `503 meta_connect_disabled`: official numbers cannot be connected\n * by link yet.\n */\nexport class InternalServerError extends APIError {}\n\n/** The request never got a response: DNS, connection refused, reset, TLS… */\nexport class APIConnectionError extends FunnelchatError {\n constructor(message = 'Could not connect to the Funnelchat API.', options?: { cause?: unknown }) {\n super(message, options);\n }\n}\n\n/** The request took longer than `timeoutMs`. */\nexport class APIConnectionTimeoutError extends APIConnectionError {\n constructor(timeoutMs: number, options?: { cause?: unknown }) {\n super(`The Funnelchat API did not answer within ${timeoutMs} ms.`, options);\n }\n}\n\n/** The caller aborted the request with its own `AbortSignal`. Never retried. */\nexport class APIUserAbortError extends FunnelchatError {\n constructor(options?: { cause?: unknown }) {\n super('The request was aborted.', options);\n }\n}\n\nexport type WebhookVerificationFailure =\n | 'missing_secret'\n | 'invalid_body'\n | 'missing_header'\n | 'malformed_header'\n | 'timestamp_out_of_tolerance'\n | 'signature_mismatch'\n | 'invalid_json'\n | 'invalid_event';\n\n/** A webhook delivery did not pass verification. `reason` says which check failed. */\nexport class WebhookVerificationError extends FunnelchatError {\n readonly reason: WebhookVerificationFailure;\n\n constructor(reason: WebhookVerificationFailure, message: string) {\n super(message);\n this.reason = reason;\n }\n}\n\n/**\n * Seconds to wait from a `Retry-After` header: delta-seconds (`\"30\"`) or an HTTP date.\n * `undefined` when absent or unreadable.\n */\nexport function parseRetryAfter(value: string | null | undefined, now: number = Date.now()): number | undefined {\n if (value === null || value === undefined) return undefined;\n const trimmed = value.trim();\n if (trimmed === '') return undefined;\n if (/^\\d+(\\.\\d+)?$/.test(trimmed)) return Number(trimmed);\n const date = Date.parse(trimmed);\n if (Number.isNaN(date)) return undefined;\n return Math.max(0, Math.ceil((date - now) / 1000));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","/**\n * Pagination over the list routes of the API. Three shapes exist and all are handled:\n *\n * - page numbers (Laravel): `{ data, links, meta: { current_page, last_page, … } }`, next with `page`;\n * - cursors: `{ data, links, meta: { next_cursor, … } }`, next with `cursor`;\n * - plain arrays: one page with everything.\n *\n * `list()` methods return a {@link PagePromise}: `await` it for the first page, or iterate it with\n * `for await` to walk every item of every page.\n */\n\nimport type { APIResponse } from './api-promise.js';\n\n/** Fetches one page given the query of that page. */\nexport type PageFetcher = (query: Record<string, unknown>) => Promise<APIResponse<unknown>>;\n\nexport class Page<T> implements AsyncIterable<T> {\n /** Items of this page. */\n readonly data: T[];\n /** The full response body of this page (with `meta` and `links` when the route sends them). */\n readonly body: unknown;\n /** `X-Request-Id` of the response of this page. */\n readonly requestId: string | undefined;\n /** The HTTP response of this page. Its body was already read: use `body`. */\n readonly response: Response;\n readonly #fetchPage: PageFetcher;\n readonly #query: Record<string, unknown>;\n\n constructor(fetchPage: PageFetcher, query: Record<string, unknown>, result: APIResponse<unknown>) {\n this.#fetchPage = fetchPage;\n this.#query = query;\n this.body = result.data;\n this.requestId = result.requestId;\n this.response = result.response;\n this.data = extractItems<T>(result.data);\n }\n\n /**\n * The query keys that ask for the next page (`{ page }` or `{ cursor }`), or `null` on the last\n * page. An empty page is always the last one.\n */\n nextPageQuery(): Record<string, string | number> | null {\n if (this.data.length === 0) return null;\n const next = nextPageQuery(this.body);\n if (next === null) return null;\n const unchanged = Object.entries(next).every(([key, value]) => String(this.#query[key]) === String(value));\n return unchanged ? null : next;\n }\n\n hasNextPage(): boolean {\n return this.nextPageQuery() !== null;\n }\n\n /** Fetches the next page. Throws when there is none: check {@link hasNextPage} first. */\n async getNextPage(): Promise<Page<T>> {\n const next = this.nextPageQuery();\n if (next === null) throw new Error('There are no more pages.');\n const query = { ...this.#query, ...next };\n if ('cursor' in next) delete query.page;\n return new Page<T>(this.#fetchPage, query, await this.#fetchPage(query));\n }\n\n /** Walks this page and the following ones, page by page. */\n async *iterPages(): AsyncGenerator<Page<T>, void, undefined> {\n yield this;\n let next = this.hasNextPage() ? await this.getNextPage() : null;\n while (next !== null) {\n yield next;\n next = next.hasNextPage() ? await next.getNextPage() : null;\n }\n }\n\n /** Walks every item of this page and the following ones. */\n async *[Symbol.asyncIterator](): AsyncGenerator<T, void, undefined> {\n for await (const page of this.iterPages()) yield* page.data;\n }\n}\n\n/**\n * A lazy first page: nothing is requested until it is awaited or iterated.\n * `await list()` gives the first {@link Page}; `for await (const item of list())` gives every item.\n */\nexport class PagePromise<T> implements PromiseLike<Page<T>>, AsyncIterable<T> {\n readonly #load: () => Promise<Page<T>>;\n #promise: Promise<Page<T>> | undefined;\n\n constructor(fetchPage: PageFetcher, query: Record<string, unknown>) {\n this.#load = async () => new Page<T>(fetchPage, query, await fetchPage(query));\n }\n\n #page(): Promise<Page<T>> {\n this.#promise ??= this.#load();\n return this.#promise;\n }\n\n then<R1 = Page<T>, R2 = never>(\n onfulfilled?: ((value: Page<T>) => R1 | PromiseLike<R1>) | null,\n onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null,\n ): Promise<R1 | R2> {\n return this.#page().then(onfulfilled, onrejected);\n }\n\n catch<R = never>(onrejected?: ((reason: unknown) => R | PromiseLike<R>) | null): Promise<Page<T> | R> {\n return this.#page().catch(onrejected);\n }\n\n async *[Symbol.asyncIterator](): AsyncGenerator<T, void, undefined> {\n yield* await this.#page();\n }\n}\n\nfunction extractItems<T>(body: unknown): T[] {\n if (Array.isArray(body)) return body as T[];\n if (isRecord(body) && Array.isArray(body.data)) return body.data as T[];\n return [];\n}\n\nfunction toInt(value: unknown): number | null {\n if (typeof value === 'number' && Number.isInteger(value)) return value;\n if (typeof value === 'string' && /^\\d+$/.test(value)) return Number(value);\n return null;\n}\n\n/** The query of the next page according to a response body, or `null`. */\nexport function nextPageQuery(body: unknown): Record<string, string | number> | null {\n if (!isRecord(body)) return null;\n for (const holder of [body.meta, body]) {\n if (!isRecord(holder)) continue;\n if ('next_cursor' in holder) {\n return typeof holder.next_cursor === 'string' && holder.next_cursor !== '' ? { cursor: holder.next_cursor } : null;\n }\n const current = toInt(holder.current_page);\n const last = toInt(holder.last_page);\n if (current !== null && last !== null) return current < last ? { page: current + 1 } : null;\n }\n const links = isRecord(body.links) ? body.links : undefined;\n const nextUrl = links?.next ?? body.next_page_url;\n if (typeof nextUrl === 'string' && nextUrl !== '') {\n const params = new URL(nextUrl, 'https://placeholder.invalid').searchParams;\n const cursor = params.get('cursor');\n if (cursor) return { cursor };\n const page = toInt(params.get('page'));\n if (page !== null) return { page };\n }\n return null;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n","/**\n * The stable `error` codes of the API (`APIError.code`), with their HTTP status. Decide by `status`\n * and `code`, never by `message`: its text and language change by area.\n *\n * Sources (production, 22-10): platform-gate v0.8.0 as pinned by accounts v1.4.24; api-edge v0.3.0\n * (src/index.ts); conversations v1.18.10 (Message/Services/ApiSendGuard.php,\n * Message/Support/ApiKeySendResponse.php, WhatsappForm/Support/FormSendPreflight.php). The spec\n * does not document most of them yet; when it does, this list can be generated. The codes of\n * creating and connecting numbers come from contract 1022-alta-de-numeros v0.1 (23-10-2026, with\n * its amendment from accounts feat/alta-de-numeros-api 52d49b319), not from production yet.\n */\n\n/** Errors of the API entry and of the key gate, on any route. */\nexport const ACCESS_ERROR_CODES = {\n /** 401: missing or invalid API key. */\n unauthenticated: 401,\n /** 403: the key lacks the permission the route needs (`message` names it). */\n permission_denied: 403,\n /** 403: the route is not open to API keys (or is turned off). */\n route_not_available: 403,\n /** 404: the path does not exist in the public API. Answered by the entry, before any area. */\n route_not_found: 404,\n /** 429, with `Retry-After`: the daily call cap of the key in that area. */\n daily_cap_exceeded: 429,\n /** 500: the entry is not configured to reach the area. Our problem: report it with the `X-Request-Id`. */\n edge_misconfigured: 500,\n /**\n * 502: the entry could not reach the area. There is no guarantee the area did not get the call:\n * after a write, read the state before repeating it.\n */\n origin_unreachable: 502,\n /** 503, with `Retry-After`: the gate could not evaluate the call and let nothing through. Safe to retry. */\n gate_unavailable: 503,\n} as const;\n\n/** Rejections of a send with an API key: nothing was sent and nothing was stored. */\nexport const SEND_ERROR_CODES = {\n /** 429, with `Retry-After`: the number's pace (per second, or per minute to the same contact). */\n rate_limited: 429,\n /** 429: the account is in the 24-hour lockout after using up its monthly active contacts (MAC). Not worth retrying. */\n mac_lockout_24h: 429,\n /** 429: the account used up its monthly active contacts (MAC). Not worth retrying. */\n mac_limit_reached: 429,\n /** 422: free text outside the 24-hour window on a WhatsApp Cloud number. Send a template. */\n window_closed: 422,\n /** 422: the same content sent too many times to a contact that did not answer. */\n antiblock_duplicate_content: 422,\n /** 422: too many messages in a row to a contact that did not answer. */\n antiblock_unanswered_limit: 422,\n /** 422: the `phone` / `whatsapp_id` of the body is not the contact of the route. */\n recipient_mismatch: 422,\n /** 422: the contact is a group, a broadcast list or a channel. */\n recipient_unsupported: 422,\n /** 422: the number cannot send this (see `capabilities` of the number). */\n provider_unsupported: 422,\n /** 422: the number is not connected or cannot send now. */\n device_unavailable: 422,\n /** 422: the message could not be registered for sending. */\n not_sent: 422,\n /** 422: the contact cannot be reached on WhatsApp (forms). */\n recipient_unreachable: 422,\n /** 422: a template variable points to a field that does not exist (`placeholders`, `count`). */\n template_unresolved_placeholder: 422,\n /** 404: the template is not one this account can send. */\n template_not_found: 404,\n /** 404: the form does not exist. */\n form_not_found: 404,\n /** 422: the form is not published. */\n form_not_published: 422,\n /** 422: the form is not published on that number. */\n form_not_on_number: 422,\n /** 422: the number cannot send forms. */\n number_not_eligible: 422,\n} as const;\n\n/**\n * Rejections of creating a number (`devices.create`), asking for its QR (`devices.qr`) or creating,\n * reading or revoking a connect link: nothing was created. The quota of the plan is the same as in\n * the panel. A code that comes with two statuses has the one of the create here; the other is noted.\n */\nexport const NUMBER_ERROR_CODES = {\n /** 403: the plan of the account does not include numbers. */\n numbers_not_included: 403,\n /** 403: the account already uses every number of its plan (`limit`, `used`, `pending_device_ids` in the body). */\n number_limit_reached: 403,\n /** 403: the account cannot connect numbers now. */\n connect_not_allowed: 403,\n /** 403: `devices.qr` of a number whose payment is due. */\n payment_required: 403,\n /**\n * 409: the account already has a QR number waiting to be scanned (at most one): its `device_id`\n * comes in the body. Show that one's QR, or delete it, instead of creating another.\n */\n pending_number_exists: 409,\n /** 422 (409 on `devices.qr`): QR can only be added to an official number that is in coexistence. */\n qr_requires_coexistence: 422,\n /** 422: the number already has that connection method; the body brings its `device_id`. */\n method_already_present: 422,\n /** 422: `same_number_as` or `device_id` is not a number of the account that can take it. */\n invalid_reference_device: 422,\n /** 422: a connect link with `device_id` of a number that connects another way than `type`. */\n connection_type_mismatch: 422,\n /** 422 (409 on `devices.qr`): the number is suspended because the plan has fewer numbers than the account uses. */\n number_suspended_by_plan: 422,\n /** 422: the body is not valid; `errors` says which fields. */\n invalid_request: 422,\n /** 409: `devices.qr` of a trial number that is blocked. */\n trial_number_blocked: 409,\n /** 409: `devices.qr` of a number that is turned off. */\n device_inactive: 409,\n /** 409: `devices.qr` when no more QR sessions can be started now. */\n provisioning_quota_exceeded: 409,\n /** 409: revoking a connect link that is no longer `pending`. */\n link_not_pending: 409,\n /** 429: the account has 20 connect links open. Revoke some, or wait for them to end. Not worth retrying. */\n too_many_open_links: 429,\n /** 500 (502 on `devices.qr`): the WhatsApp provider failed. */\n provider_error: 500,\n /** 503: official numbers (`type: 'meta'`) cannot be connected by link yet. QR links work. Not worth retrying. */\n meta_connect_disabled: 503,\n /** 403: the connect page was opened with an API key or a session. The page is for your customer, without credentials. */\n credentials_not_allowed: 403,\n} as const;\n\n/** Rejections of a create sent with `idempotencyKey`. */\nexport const IDEMPOTENCY_ERROR_CODES = {\n /** 422: the key was already used with another body. Use a new key for a new resource. */\n idempotency_key_mismatch: 422,\n /** 422: the key is not 1 to 255 characters. */\n invalid_idempotency_key: 422,\n /** 409: the first call with that key, or another operation on the number, is still running. Read the state, or repeat it later. */\n operation_in_progress: 409,\n} as const;\n\nexport type AccessErrorCode = keyof typeof ACCESS_ERROR_CODES;\n/** An error code of a send rejected by the WhatsApp rules (`APIError.code`). */\nexport type SendErrorCode = keyof typeof SEND_ERROR_CODES;\n/** An error code of creating a number or a connect link (`APIError.code`). */\nexport type NumberErrorCode = keyof typeof NUMBER_ERROR_CODES;\nexport type IdempotencyErrorCode = keyof typeof IDEMPOTENCY_ERROR_CODES;\n/** Every `error` code the SDK knows. The API can send others: treat `code` as a `string`. */\nexport type KnownErrorCode = AccessErrorCode | SendErrorCode | NumberErrorCode | IdempotencyErrorCode;\n\nconst has = (table: object, code: string | undefined): boolean => code !== undefined && Object.prototype.hasOwnProperty.call(table, code);\n\n/** Whether an `APIError.code` is a rejection of a send: nothing was sent and nothing was stored. */\nexport function isSendRuleError(code: string | undefined): code is SendErrorCode {\n return has(SEND_ERROR_CODES, code);\n}\n\nconst QUOTA_CODES: ReadonlySet<string> = new Set([\n 'numbers_not_included',\n 'number_limit_reached',\n 'pending_number_exists',\n 'qr_requires_coexistence',\n 'method_already_present',\n]);\n\n/** Whether an `APIError.code` is a rejection by the number quota of the plan (the same as the panel's). */\nexport function isNumberQuotaError(\n code: string | undefined,\n): code is 'numbers_not_included' | 'number_limit_reached' | 'pending_number_exists' | 'qr_requires_coexistence' | 'method_already_present' {\n return code !== undefined && QUOTA_CODES.has(code);\n}\n\n/**\n * Codes that a retry would only repeat: a `429` for the monthly active contacts or for the open\n * connect links is not a pace, and `503 meta_connect_disabled` is a switch, not an outage; so they\n * are never retried automatically.\n */\nexport const NOT_RETRYABLE_CODES: ReadonlySet<string> = new Set(['mac_lockout_24h', 'mac_limit_reached', 'too_many_open_links', 'meta_connect_disabled']);\n","/**\n * GENERATED FILE — do not edit. Run `npm run generate`.\n * Source: spec/funnelchat.json (sha256 8bbbae569b4cab52…) + spec/pending.json.\n */\n\n/** One operation of the public API. `pending` = taken from spec/pending.json, not from the snapshot. */\nexport interface RouteInfo {\n readonly method: 'GET' | 'PUT' | 'POST' | 'DELETE' | 'PATCH';\n readonly path: string;\n readonly operationId: string | null;\n readonly domain: string | null;\n readonly permission: string | null;\n readonly tag: string | null;\n readonly summary: string | null;\n readonly pending: boolean;\n}\n\n/** Every operation of the spec (264), sorted by path. */\nexport const routes: readonly RouteInfo[] = [\n {\"method\":\"GET\",\"path\":\"/api/v1/agents\",\"operationId\":\"user.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"User\",\"summary\":\"Listar agentes\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/agents/{user}\",\"operationId\":\"user.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"User\",\"summary\":\"Ver un agente\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/alerts/campaigns\",\"operationId\":\"alertCampaign.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"AlertCampaign\",\"summary\":\"Listar las campañas para alertas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/alerts/catalog\",\"operationId\":\"alertCatalog.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"AlertCatalog\",\"summary\":\"Ver el catálogo de alertas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/alerts/daily-report\",\"operationId\":\"alertDailyReport.show\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"AlertDailyReport\",\"summary\":\"Ver el reporte diario\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/alerts/daily-report\",\"operationId\":\"alertDailyReport.update\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertDailyReport\",\"summary\":\"Configurar el reporte diario\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/alerts/destinations\",\"operationId\":\"alertDestination.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"AlertDestination\",\"summary\":\"Listar los destinos de alertas\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/alerts/destinations\",\"operationId\":\"alertDestination.store\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertDestination\",\"summary\":\"Crear un destino de alertas\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/alerts/destinations/{id}\",\"operationId\":\"alertDestination.destroy\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertDestination\",\"summary\":\"Eliminar un destino de alertas\",\"pending\":false},\n {\"method\":\"PATCH\",\"path\":\"/api/v1/alerts/destinations/{id}\",\"operationId\":\"alertDestination.update\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertDestination\",\"summary\":\"Actualizar un destino de alertas\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/alerts/destinations/{id}/otp\",\"operationId\":\"alertOtp.send\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertOtp\",\"summary\":\"Enviar un código de verificación\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/alerts/destinations/{id}/otp/verify\",\"operationId\":\"alertOtp.verify\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertOtp\",\"summary\":\"Verificar el código\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/alerts/destinations/{id}/settings\",\"operationId\":\"alertSetting.upsert\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertSetting\",\"summary\":\"Activar o desactivar una alerta\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/alerts/destinations/{id}/test\",\"operationId\":\"alertWebhookTest.test\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertWebhookTest\",\"summary\":\"Probar un destino webhook\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/alerts/quiet-hours\",\"operationId\":\"alertQuietHour.show\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"AlertQuietHour\",\"summary\":\"Ver el horario de silencio\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/alerts/quiet-hours\",\"operationId\":\"alertQuietHour.update\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"AlertQuietHour\",\"summary\":\"Configurar el horario de silencio\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/broadcasts\",\"operationId\":\"broadcast.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Broadcast\",\"summary\":\"Listar difusiones\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/broadcasts/{broadcast}\",\"operationId\":\"broadcast.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Broadcast\",\"summary\":\"Eliminar una difusión\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/broadcasts/{broadcast}\",\"operationId\":\"broadcast.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Broadcast\",\"summary\":\"Ver una difusión\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/broadcasts/{broadcast}/cancel\",\"operationId\":\"broadcast.cancel\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Broadcast\",\"summary\":\"Cancelar una difusión\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/broadcasts/{broadcast}/contacts\",\"operationId\":\"broadcast.broadcastContacts\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Broadcast\",\"summary\":\"Listar los contactos de una difusión\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/broadcasts/{broadcast}/cost\",\"operationId\":\"broadcast.cost\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Broadcast\",\"summary\":\"Ver el costo de una difusión\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/broadcasts/{broadcast}/messages\",\"operationId\":\"broadcast.broadcastMessages\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Broadcast\",\"summary\":\"Listar los mensajes de una difusión\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/broadcasts/{broadcast}/statistics\",\"operationId\":\"broadcast.statistics\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Broadcast\",\"summary\":\"Ver las estadísticas de una difusión\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/broadcasts/contacts\",\"operationId\":\"broadcast.contacts\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Broadcast\",\"summary\":\"Buscar contactos para una difusión\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/broadcasts/contacts-count\",\"operationId\":\"broadcast.contactsCount\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Broadcast\",\"summary\":\"Contar contactos para una difusión\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/broadcasts/cost-tiers\",\"operationId\":\"broadcast.costTiers\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Broadcast\",\"summary\":\"Ver los tramos de costo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/broadcasts/folders\",\"operationId\":\"broadcastFolder.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Broadcast\",\"summary\":\"Listar carpetas de difusiones\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/broadcasts/folders\",\"operationId\":\"broadcastFolder.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Broadcast\",\"summary\":\"Crear una carpeta de difusiones\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/broadcasts/folders/{broadcastFolder}\",\"operationId\":\"broadcastFolder.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Broadcast\",\"summary\":\"Eliminar una carpeta de difusiones\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/broadcasts/folders/{broadcastFolder}\",\"operationId\":\"broadcastFolder.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Broadcast\",\"summary\":\"Actualizar una carpeta de difusiones\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/broadcasts/move-to-folder\",\"operationId\":\"broadcast.moveToFolder\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Broadcast\",\"summary\":\"Mover difusiones a una carpeta\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns\",\"operationId\":\"campaign.index\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Campañas\",\"summary\":\"Listar campañas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}\",\"operationId\":\"campaign.show\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Campañas\",\"summary\":\"Ver una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/actions\",\"operationId\":\"campaign.actions\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Listar las acciones de sesión de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/actions/{action}/groups\",\"operationId\":\"groupManagement.actionGroup\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Listar los grupos alcanzados por una acción\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/available-groups\",\"operationId\":\"campaign.availableGroups\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Listar los grupos que se pueden sumar a una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/campaign-participants\",\"operationId\":\"campaign.campaignParticipants\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Participantes\",\"summary\":\"Listar los participantes con su grupo actual\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/conditionals\",\"operationId\":\"campaignConditional.index\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Campañas\",\"summary\":\"Ver las condicionales de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/groups\",\"operationId\":\"campaign.groups\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Listar los grupos de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/operation-plans\",\"operationId\":\"operationPlan.index\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Listar los planes de operación de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/operation-plans/{plan}\",\"operationId\":\"operationPlan.show\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Ver un plan de operación\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/operation-plans/config\",\"operationId\":\"operationPlan.config\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Ver la configuración de los planes de operación\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/participant-events\",\"operationId\":\"campaign.participantEvents\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Participantes\",\"summary\":\"Listar entradas y salidas de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/participants\",\"operationId\":\"campaign.participants\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Participantes\",\"summary\":\"Listar los participantes de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/pipelines\",\"operationId\":\"campaign.indexPipelines\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Listar los pipelines de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/pipelines/{pipeline}\",\"operationId\":\"campaign.showPipeline\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos de una campaña y operaciones\",\"summary\":\"Ver un pipeline\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/webhooks\",\"operationId\":\"campaignWebhook.index\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Webhooks de campaña (legado)\",\"summary\":\"Listar los webhooks de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/campaigns/{campaign}/webhooks/logs\",\"operationId\":\"campaignWebhook.logs\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Webhooks de campaña (legado)\",\"summary\":\"Listar las entregas de los webhooks de una campaña\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/connect-links\",\"operationId\":\"pendingConnectLink.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"ConnectLink\",\"summary\":\"List connect links\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/connect-links\",\"operationId\":\"pendingConnectLink.store\",\"domain\":\"accounts\",\"permission\":\"accounts:operate\",\"tag\":\"ConnectLink\",\"summary\":\"Create a connect link\",\"pending\":true},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/connect-links/{link}\",\"operationId\":\"pendingConnectLink.destroy\",\"domain\":\"accounts\",\"permission\":\"accounts:operate\",\"tag\":\"ConnectLink\",\"summary\":\"Revoke a connect link\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/connect-links/{link}\",\"operationId\":\"pendingConnectLink.show\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"ConnectLink\",\"summary\":\"Read a connect link\",\"pending\":true},\n {\"method\":\"PUT\",\"path\":\"/api/v1/contact-flows/{contactFlowId}/cancel\",\"operationId\":\"flow.cancelContactFlow\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Flow\",\"summary\":\"Cancelar un flujo en curso\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contact-flows/{contactId}\",\"operationId\":\"flow.contactFlowHistory\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Flow\",\"summary\":\"Listar los flujos en curso de un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts\",\"operationId\":\"contact.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Contact\",\"summary\":\"Listar contactos\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts\",\"operationId\":\"contact.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Contact\",\"summary\":\"Crear un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}\",\"operationId\":\"contact.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Contact\",\"summary\":\"Ver un contacto\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/contacts/{contact}\",\"operationId\":\"contact.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Contact\",\"summary\":\"Actualizar un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}/custom-fields\",\"operationId\":\"contact.customFields\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Contact\",\"summary\":\"Listar los campos personalizados de un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}/flows\",\"operationId\":\"contactAutomation.flows\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"ContactAutomation\",\"summary\":\"Listar los flujos de un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}/kanban-stages\",\"operationId\":\"kanbanStage.contactStages\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"KanbanStage\",\"summary\":\"Ver las etapas de un contacto en los tableros\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}/lead-score\",\"operationId\":\"contactLeadScore.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"ContactLeadScore\",\"summary\":\"Ver el lead score de un contacto\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/lead-score/adjustments\",\"operationId\":\"leadScoreSettings.adjust\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"LeadScoreSettings\",\"summary\":\"Ajustar el lead score de un contacto\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/message\",\"operationId\":\"conversation.sendMessage\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"Conversation\",\"summary\":\"Enviar un mensaje a un contacto\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/message/contact-card\",\"operationId\":\"contactCard.store\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"ContactCard\",\"summary\":\"Enviar una tarjeta de contacto\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/message/event\",\"operationId\":\"interactiveMessage.storeEvent\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"InteractiveMessage\",\"summary\":\"Enviar una invitación a un evento\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/message/form\",\"operationId\":\"pendingForms.send\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"Message\",\"summary\":\"Send a form to a contact\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/message/poll\",\"operationId\":\"interactiveMessage.storePoll\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"InteractiveMessage\",\"summary\":\"Enviar una encuesta\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}/messages/{message}\",\"operationId\":\"pendingMessage.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Message\",\"summary\":\"Read a message by id\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/messages/{message}/forward\",\"operationId\":\"forwardMessage.store\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"ForwardMessage\",\"summary\":\"Reenviar un mensaje\",\"pending\":true},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/contacts/{contact}/messages/{message}/reaction\",\"operationId\":\"messageReaction.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"MessageReaction\",\"summary\":\"Quitar una reacción\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/contacts/{contact}/messages/{message}/reaction\",\"operationId\":\"messageReaction.update\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"MessageReaction\",\"summary\":\"Reaccionar a un mensaje\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}/meta-window\",\"operationId\":\"contact.metaWindow\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Contact\",\"summary\":\"Ver la ventana de 24 horas de un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}/notes\",\"operationId\":\"contactNote.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"ContactNote\",\"summary\":\"Listar las notas de un contacto\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/notes\",\"operationId\":\"contactNote.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"ContactNote\",\"summary\":\"Agregar una nota a un contacto\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/contacts/{contact}/notes/{note}\",\"operationId\":\"contactNote.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"ContactNote\",\"summary\":\"Eliminar una nota\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/{contact}/pause\",\"operationId\":\"contactAutomation.pause\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"ContactAutomation\",\"summary\":\"Pausar un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contact}/tags\",\"operationId\":\"contact.tags\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Contact\",\"summary\":\"Listar las etiquetas de un contacto\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/contacts/{contact}/update\",\"operationId\":\"conversation.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Conversation\",\"summary\":\"Actualizar la conversación de un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/contacts/{contactId}/messages\",\"operationId\":\"conversation.getLatestMessages\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Conversation\",\"summary\":\"Listar los mensajes de un contacto\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/attach-custom-field\",\"operationId\":\"contact.attachCustomField\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Contact\",\"summary\":\"Asignar un campo personalizado a contactos\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/delete\",\"operationId\":\"contact.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Contact\",\"summary\":\"Eliminar contactos\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/detach-custom-field\",\"operationId\":\"contact.detachCustomField\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Contact\",\"summary\":\"Quitar un campo personalizado de contactos\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/contacts/update-or-create\",\"operationId\":\"contact.updateOrCreate\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Contact\",\"summary\":\"Crear o actualizar un contacto\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/conversations\",\"operationId\":\"conversation.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Conversation\",\"summary\":\"Listar conversaciones\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/conversations/count/all\",\"operationId\":\"conversation.countAll\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Conversation\",\"summary\":\"Contar todas las conversaciones\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/conversations/count/closed\",\"operationId\":\"conversation.countClosed\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Conversation\",\"summary\":\"Contar conversaciones cerradas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/conversations/count/open\",\"operationId\":\"conversation.countOpen\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Conversation\",\"summary\":\"Contar conversaciones abiertas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/conversations/count/unread\",\"operationId\":\"conversation.countUnread\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Conversation\",\"summary\":\"Contar conversaciones sin leer\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/conversations/mark-all-read\",\"operationId\":\"conversation.markAllAsRead\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Conversation\",\"summary\":\"Marcar todas como leídas\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/conversations/mark-all-unread\",\"operationId\":\"conversation.markAllAsUnread\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Conversation\",\"summary\":\"Marcar todas como no leídas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/custom-domains\",\"operationId\":\"customDomain.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"CustomDomain\",\"summary\":\"Listar dominios propios\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/custom-domains\",\"operationId\":\"customDomain.store\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"CustomDomain\",\"summary\":\"Registrar un dominio propio\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/custom-domains/{customDomain}\",\"operationId\":\"customDomain.destroy\",\"domain\":\"accounts\",\"permission\":\"accounts:operate\",\"tag\":\"CustomDomain\",\"summary\":\"Eliminar un dominio propio\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/custom-domains/{customDomain}/switch-validation\",\"operationId\":\"customDomain.switchValidationMethod\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"CustomDomain\",\"summary\":\"Cambiar el método de validación SSL\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/custom-domains/{customDomain}/verify\",\"operationId\":\"customDomain.verify\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"CustomDomain\",\"summary\":\"Verificar un dominio propio\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/custom-fields\",\"operationId\":\"customField.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"CustomField\",\"summary\":\"Listar campos personalizados\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/custom-fields\",\"operationId\":\"customField.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"CustomField\",\"summary\":\"Crear un campo personalizado\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/custom-fields/{customField}\",\"operationId\":\"customField.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"CustomField\",\"summary\":\"Ver un campo personalizado\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/custom-fields/{customField}\",\"operationId\":\"customField.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"CustomField\",\"summary\":\"Actualizar un campo personalizado\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/custom-fields/delete\",\"operationId\":\"customField.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"CustomField\",\"summary\":\"Eliminar campos personalizados\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices\",\"operationId\":\"device.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Listar números\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/devices\",\"operationId\":\"pendingDevice.store\",\"domain\":\"accounts\",\"permission\":\"accounts:operate\",\"tag\":\"Device\",\"summary\":\"Create a number connected by QR code\",\"pending\":true},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/devices/{device}\",\"operationId\":\"device.destroy\",\"domain\":\"accounts\",\"permission\":\"accounts:operate\",\"tag\":\"Device\",\"summary\":\"Eliminar un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}\",\"operationId\":\"device.show\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Ver un número\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/devices/{device}\",\"operationId\":\"device.update\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"Device\",\"summary\":\"Actualizar un número\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/ad-groups\",\"operationId\":\"group.adGroups\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Listar los grupos de anuncios de un número\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/devices/{device}/capi/dataset\",\"operationId\":\"capiConnection.dataset\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"CapiConnection\",\"summary\":\"Configurar el dataset de Conversions API\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/capi/test\",\"operationId\":\"capiConnection.test\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"CapiConnection\",\"summary\":\"Probar la conexión con Conversions API\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/channels\",\"operationId\":\"group.channels\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Listar los canales de un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/chats\",\"operationId\":\"device.chats\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Listar los chats de un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/check-phone\",\"operationId\":\"device.checkPhone\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Verificar si un teléfono tiene WhatsApp\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/devices/{device}/clean\",\"operationId\":\"device.clean\",\"domain\":\"accounts\",\"permission\":\"accounts:operate\",\"tag\":\"Device\",\"summary\":\"Limpiar un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/connection-history\",\"operationId\":\"deviceConnectionEvent.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"DeviceConnectionEvent\",\"summary\":\"Ver el historial de conexión\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/contacts\",\"operationId\":\"contact.contactsByDevice\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Contact\",\"summary\":\"Listar los contactos de un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/disconnect-survey\",\"operationId\":\"deviceDisconnectSurvey.show\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"DeviceDisconnectSurvey\",\"summary\":\"Ver la encuesta de desconexión\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/devices/{device}/disconnect-survey\",\"operationId\":\"deviceDisconnectSurvey.store\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"DeviceDisconnectSurvey\",\"summary\":\"Responder la encuesta de desconexión\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/devices/{device}/extension-token\",\"operationId\":\"device.extensionToken\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"Device\",\"summary\":\"Pedir un token para la extensión de WhatsApp Web\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/groups\",\"operationId\":\"group.groups\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Listar los grupos que administra un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/health\",\"operationId\":\"deviceHealth.show\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"DeviceHealth\",\"summary\":\"Ver la salud de un número\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/devices/{device}/health/refresh\",\"operationId\":\"deviceHealth.refresh\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"DeviceHealth\",\"summary\":\"Actualizar la salud de un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/logs\",\"operationId\":\"deviceLogs.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"DeviceLogs\",\"summary\":\"Listar los registros de un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/logs/health\",\"operationId\":\"deviceLogs.health\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"DeviceLogs\",\"summary\":\"Ver la señal de salud de los registros\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/me\",\"operationId\":\"device.me\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Ver el perfil de WhatsApp de un número\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/devices/{device}/message-queue\",\"operationId\":\"device.deleteMessageQueue\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"Device\",\"summary\":\"Eliminar mensajes de la cola\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/message-queue\",\"operationId\":\"device.messageQueue\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Ver la cola de mensajes\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/devices/{device}/message-queue/all\",\"operationId\":\"device.clearQueue\",\"domain\":\"accounts\",\"permission\":\"accounts:operate\",\"tag\":\"Device\",\"summary\":\"Vaciar la cola de mensajes\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/message-queue/count\",\"operationId\":\"device.getQueueCount\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Contar los mensajes en la cola\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/open-conversations\",\"operationId\":\"device.openConversations\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Ver qué teléfonos tienen conversación abierta\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/qr\",\"operationId\":\"pendingDevice.qr\",\"domain\":\"accounts\",\"permission\":\"accounts:operate\",\"tag\":\"Device\",\"summary\":\"The QR code to connect a number\",\"pending\":true},\n {\"method\":\"PUT\",\"path\":\"/api/v1/devices/{device}/reset\",\"operationId\":\"device.reset\",\"domain\":\"accounts\",\"permission\":\"accounts:operate\",\"tag\":\"Device\",\"summary\":\"Reiniciar la sesión de un número\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/status\",\"operationId\":\"device.status\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Device\",\"summary\":\"Ver el estado de conexión\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/devices/{device}/templates/{template}\",\"operationId\":\"messageTemplate.delete\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"MessageTemplate\",\"summary\":\"Eliminar una plantilla de un número\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/devices/{device}/templates/{template}/send-template\",\"operationId\":\"messageTemplate.send\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"MessageTemplate\",\"summary\":\"Enviar una plantilla\",\"pending\":true},\n {\"method\":\"PUT\",\"path\":\"/api/v1/devices/{device}/update-webhook-received\",\"operationId\":\"device.updateWebhookReceived\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"Device\",\"summary\":\"Configurar el webhook de mensajes recibidos\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/devices/{device}/update-webhook-received-and-delivery\",\"operationId\":\"device.updateWebhookReceivedAndDelivery\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"Device\",\"summary\":\"Configurar el webhook de recibidos y entregas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/username\",\"operationId\":\"deviceUsername.show\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"DeviceUsername\",\"summary\":\"Ver el nombre de usuario\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/devices/{device}/username\",\"operationId\":\"deviceUsername.store\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"DeviceUsername\",\"summary\":\"Configurar el nombre de usuario\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/{device}/username/suggestions\",\"operationId\":\"deviceUsername.suggestions\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"DeviceUsername\",\"summary\":\"Sugerir nombres de usuario\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/capi/datasets\",\"operationId\":\"capiConnection.datasets\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"CapiConnection\",\"summary\":\"Listar los datasets de Conversions API\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/devices/logs\",\"operationId\":\"deviceFleetLogs.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"DeviceFleetLogs\",\"summary\":\"Listar los registros de todos los números\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/flows\",\"operationId\":\"flow.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Flow\",\"summary\":\"Listar flujos\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/flows/{flow}\",\"operationId\":\"flow.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Flow\",\"summary\":\"Ver un flujo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/flows/{flow}/active-contacts\",\"operationId\":\"flow.activeContacts\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Flow\",\"summary\":\"Contar los contactos activos de un flujo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/flows/{flow}/active-contacts-list\",\"operationId\":\"flow.activeContactsList\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Flow\",\"summary\":\"Listar los contactos activos de un flujo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/flows/{flow}/flow-contacts\",\"operationId\":\"flow.flowContactsList\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Flow\",\"summary\":\"Listar los contactos de un flujo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/flows/{flow}/nodes\",\"operationId\":\"flow.nodes\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Flow\",\"summary\":\"Listar los nodos de un flujo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/folders\",\"operationId\":\"folder.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Folder\",\"summary\":\"Listar carpetas\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/folders\",\"operationId\":\"folder.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Folder\",\"summary\":\"Crear una carpeta\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/folders/{folder}\",\"operationId\":\"folder.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Folder\",\"summary\":\"Eliminar una carpeta\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/folders/{folder}\",\"operationId\":\"folder.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Folder\",\"summary\":\"Ver una carpeta\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/folders/{folder}\",\"operationId\":\"folder.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Folder\",\"summary\":\"Actualizar una carpeta\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms\",\"operationId\":\"pendingForms.list\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"List forms\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/forms\",\"operationId\":\"pendingForms.create\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Create a form from a template\",\"pending\":true},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/forms/{id}\",\"operationId\":\"pendingForms.delete\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Delete a draft\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms/{id}\",\"operationId\":\"pendingForms.retrieve\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"One version of a form\",\"pending\":true},\n {\"method\":\"PUT\",\"path\":\"/api/v1/forms/{id}\",\"operationId\":\"pendingForms.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Save the definition of a draft\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms/{id}/numbers\",\"operationId\":\"pendingForms.numbers\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"The numbers of the form\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/forms/{id}/numbers\",\"operationId\":\"pendingForms.addNumber\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Publish it on another number too\",\"pending\":true},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/forms/{id}/numbers/{deviceId}\",\"operationId\":\"pendingForms.removeNumber\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Take it off a number\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/forms/{id}/numbers/retry\",\"operationId\":\"pendingForms.retryNumbers\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Retry the numbers that failed\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/forms/{id}/publish\",\"operationId\":\"pendingForms.publish\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Publish on Meta\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/forms/{id}/sync\",\"operationId\":\"pendingForms.sync\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Upload the draft to Meta without publishing it\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/forms/{id}/versions\",\"operationId\":\"pendingForms.createVersion\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"WhatsappForm\",\"summary\":\"Open a new version (draft) of a published form\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms/families/{familyId}/definition\",\"operationId\":\"pendingForms.definition\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"The current definition of a form\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms/families/{familyId}/metrics\",\"operationId\":\"pendingForms.metrics\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"The funnel of a form: sent, opened, completed\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms/families/{familyId}/responses\",\"operationId\":\"pendingForms.responses\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"The answers of a form\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms/families/{familyId}/responses/{runId}\",\"operationId\":\"pendingForms.response\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"One answer\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms/families/{familyId}/versions\",\"operationId\":\"pendingForms.versions\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"The versions of a form\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/forms/templates\",\"operationId\":\"pendingForms.templates\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"WhatsappForm\",\"summary\":\"Templates to start a form\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/groups\",\"operationId\":\"group.index\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Listar grupos\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/groups/{group}\",\"operationId\":\"group.show\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Ver un grupo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/groups/{group}/actions\",\"operationId\":\"group.actions\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Listar las acciones de sesión sobre un grupo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/groups/{group}/messages\",\"operationId\":\"group.messages\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Listar los mensajes enviados a un grupo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/groups/{group}/participant-events\",\"operationId\":\"group.participantEvents\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Participantes\",\"summary\":\"Listar entradas y salidas de un grupo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/groups/{group}/scheduled-messages\",\"operationId\":\"group.scheduledMessages\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Listar los envíos programados que incluyen un grupo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/groups/{groupUid}/metadata\",\"operationId\":\"groupMetadata.show\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Grupos\",\"summary\":\"Ver los datos actuales de un grupo en WhatsApp\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/groups/participants\",\"operationId\":\"group.participants\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Participantes\",\"summary\":\"Listar los participantes de un grupo\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/kanban-settings\",\"operationId\":\"kanbanSetting.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"KanbanSetting\",\"summary\":\"Listar tableros\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/kanban-settings\",\"operationId\":\"kanbanSetting.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanSetting\",\"summary\":\"Crear un tablero\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}\",\"operationId\":\"kanbanSetting.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanSetting\",\"summary\":\"Eliminar un tablero\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}\",\"operationId\":\"kanbanSetting.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"KanbanSetting\",\"summary\":\"Ver un tablero\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}\",\"operationId\":\"kanbanSetting.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanSetting\",\"summary\":\"Actualizar un tablero\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/bulk-move\",\"operationId\":\"kanbanStage.bulkMove\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanStage\",\"summary\":\"Mover contactos de etapa en bloque\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/bulk-remove\",\"operationId\":\"kanbanStage.bulkRemove\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanStage\",\"summary\":\"Sacar contactos del tablero en bloque\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/members\",\"operationId\":\"kanbanSetting.members\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"KanbanSetting\",\"summary\":\"Ver los miembros de un tablero\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/move-contact\",\"operationId\":\"kanbanStage.moveContact\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanStage\",\"summary\":\"Mover un contacto de etapa\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/remove-contact\",\"operationId\":\"kanbanStage.removeContact\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanStage\",\"summary\":\"Sacar un contacto del tablero\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/stages\",\"operationId\":\"kanbanStage.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanStage\",\"summary\":\"Crear una etapa\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/stages/{stage}\",\"operationId\":\"kanbanStage.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanStage\",\"summary\":\"Eliminar una etapa\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/stages/{stage}\",\"operationId\":\"kanbanStage.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanStage\",\"summary\":\"Actualizar una etapa\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/stages/{stage}/contacts\",\"operationId\":\"kanbanStage.contacts\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"KanbanStage\",\"summary\":\"Listar los contactos de una etapa\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/kanban-settings/{kanbanSetting}/stages/reorder\",\"operationId\":\"kanbanStage.reorder\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"KanbanStage\",\"summary\":\"Reordenar las etapas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/lead-score/distribution\",\"operationId\":\"leadScoreDistribution.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"LeadScoreDistribution\",\"summary\":\"Ver la distribución del lead score\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/lead-score/events\",\"operationId\":\"leadScoreEventIngest.ingest\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"LeadScoreEventIngest\",\"summary\":\"Registrar un evento de lead score\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/lead-score/settings\",\"operationId\":\"leadScoreSettings.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"LeadScoreSettings\",\"summary\":\"Ver la configuración del lead score\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/lead-score/settings\",\"operationId\":\"leadScoreSettings.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"LeadScoreSettings\",\"summary\":\"Actualizar la configuración del lead score\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/mac/contacts\",\"operationId\":\"mac.contacts\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Mac\",\"summary\":\"Listar los contactos que cuentan como MAC\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/mac/contacts/history\",\"operationId\":\"mac.contactsHistory\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Mac\",\"summary\":\"Ver el historial de MACs\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/mac/status\",\"operationId\":\"mac.status\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Mac\",\"summary\":\"Ver el consumo de MACs\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/me\",\"operationId\":null,\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"Account\",\"summary\":\"Ver mi cuenta\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/me/whatsapp-costs\",\"operationId\":\"whatsappCost.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"WhatsappCost\",\"summary\":\"Ver los costos de WhatsApp\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/message/send-message\",\"operationId\":\"message.sendMessage\",\"domain\":\"conversations\",\"permission\":\"conversations:send\",\"tag\":\"Message\",\"summary\":\"Enviar un mensaje\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/payments/products/{platform}\",\"operationId\":\"paymentProduct.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"PaymentProduct\",\"summary\":\"Listar los productos de una plataforma de pagos\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/quick-replies\",\"operationId\":\"quickReply.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"QuickReply\",\"summary\":\"Listar respuestas rápidas\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/quick-replies\",\"operationId\":\"quickReply.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"QuickReply\",\"summary\":\"Crear una respuesta rápida\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/quick-replies/{quickReply}\",\"operationId\":\"quickReply.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"QuickReply\",\"summary\":\"Eliminar una respuesta rápida\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/quick-replies/{quickReply}\",\"operationId\":\"quickReply.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"QuickReply\",\"summary\":\"Ver una respuesta rápida\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/quick-replies/{quickReply}\",\"operationId\":\"quickReply.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"QuickReply\",\"summary\":\"Actualizar una respuesta rápida\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/sales\",\"operationId\":\"salesDashboard.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"SalesDashboard\",\"summary\":\"Listar ventas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/sales/by-platform\",\"operationId\":\"salesDashboard.byPlatform\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"SalesDashboard\",\"summary\":\"Ver las ventas por plataforma\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/sales/funnel\",\"operationId\":\"salesDashboard.funnel\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"SalesDashboard\",\"summary\":\"Ver el embudo de ventas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/sales/metrics\",\"operationId\":\"salesDashboard.metrics\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"SalesDashboard\",\"summary\":\"Ver las métricas de ventas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages\",\"operationId\":\"scheduledMessage.index\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Mensajes programados\",\"summary\":\"Listar envíos programados\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages/{scheduledMessage}\",\"operationId\":\"scheduledMessage.show\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Mensajes programados\",\"summary\":\"Ver un envío programado\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages/{scheduledMessage}/group-messages\",\"operationId\":\"scheduledMessage.groupMessages\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Mensajes programados\",\"summary\":\"Ver el resultado por grupo de un envío\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages/{scheduledMessage}/groups\",\"operationId\":\"scheduledMessage.groups\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Mensajes programados\",\"summary\":\"Listar los grupos destino de un envío\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages/{scheduledMessage}/readed-played-rates\",\"operationId\":\"scheduledMessage.readedAndPlayedRates\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Mensajes programados\",\"summary\":\"Ver las tasas de lectura y reproducción de un envío\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages/{scheduledMessage}/response-tags\",\"operationId\":\"scheduledMessage.responseTags\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Respuestas y carpetas\",\"summary\":\"Listar las etiquetas que se aplican a quien responde\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages/{scheduledMessage}/responses\",\"operationId\":\"scheduledMessage.responses\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Respuestas y carpetas\",\"summary\":\"Listar las respuestas a un envío\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages/{scheduledMessage}/runs\",\"operationId\":\"scheduledMessage.runs\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Mensajes programados\",\"summary\":\"Listar las ocurrencias de un envío recurrente\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/scheduled-messages/folders\",\"operationId\":\"scheduledMessageFolder.index\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Respuestas y carpetas\",\"summary\":\"Listar las carpetas de envíos\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/stats/active-participants\",\"operationId\":\"stats.activeParticipants\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Estadísticas\",\"summary\":\"Ver participantes activos\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/stats/clicks\",\"operationId\":\"stats.clickStats\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Estadísticas\",\"summary\":\"Ver clics en links\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/stats/countries\",\"operationId\":\"stats.countryList\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Estadísticas\",\"summary\":\"Listar países presentes\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/stats/country-metrics\",\"operationId\":\"stats.countryMetrics\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Estadísticas\",\"summary\":\"Ver métricas por país\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/stats/groups\",\"operationId\":\"stats.groupStats\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Estadísticas\",\"summary\":\"Ver grupos por estado\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/stats/participants\",\"operationId\":\"stats.participantStats\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Estadísticas\",\"summary\":\"Ver participantes por período\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/stats/records\",\"operationId\":\"stats.statsRecords\",\"domain\":\"communities\",\"permission\":\"communities:read\",\"tag\":\"Estadísticas\",\"summary\":\"Listar registros de clics\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/tags\",\"operationId\":\"tag.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Tag\",\"summary\":\"Listar etiquetas\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/tags\",\"operationId\":\"tag.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Tag\",\"summary\":\"Crear una etiqueta\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/tags/{tag}\",\"operationId\":\"tag.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Tag\",\"summary\":\"Ver una etiqueta\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/tags/{tag}\",\"operationId\":\"tag.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Tag\",\"summary\":\"Actualizar una etiqueta\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/tags/{tag}/contacts\",\"operationId\":\"tag.contacts\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Tag\",\"summary\":\"Listar los contactos con una etiqueta\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/tags/delete\",\"operationId\":\"tag.destroy\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Tag\",\"summary\":\"Eliminar etiquetas\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/templates\",\"operationId\":\"messageTemplate.templates\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"MessageTemplate\",\"summary\":\"Listar plantillas\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/templates\",\"operationId\":\"messageTemplate.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"MessageTemplate\",\"summary\":\"Crear una plantilla\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/templates/{template}\",\"operationId\":\"messageTemplate.template\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"MessageTemplate\",\"summary\":\"Ver una plantilla\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/templates/{template}\",\"operationId\":\"messageTemplate.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"MessageTemplate\",\"summary\":\"Actualizar una plantilla\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/templates/{template}/quick-reply-buttons\",\"operationId\":\"messageTemplate.quickReplyButtons\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"MessageTemplate\",\"summary\":\"Ver los botones de respuesta rápida de una plantilla\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/tickets\",\"operationId\":\"ticket.index\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Ticket\",\"summary\":\"Listar tickets\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/tickets\",\"operationId\":\"ticket.store\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Ticket\",\"summary\":\"Crear un ticket\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/tickets/{id}\",\"operationId\":\"ticket.show\",\"domain\":\"conversations\",\"permission\":\"conversations:read\",\"tag\":\"Ticket\",\"summary\":\"Ver un ticket\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/tickets/{id}\",\"operationId\":\"ticket.update\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Ticket\",\"summary\":\"Actualizar un ticket\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/tickets/{id}/close\",\"operationId\":\"ticket.closeTicket\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Ticket\",\"summary\":\"Cerrar un ticket\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/tickets/{id}/reopen\",\"operationId\":\"ticket.reOpenTicket\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Ticket\",\"summary\":\"Reabrir un ticket\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/tickets/assign\",\"operationId\":\"ticket.assignTicketToUser\",\"domain\":\"conversations\",\"permission\":\"conversations:write\",\"tag\":\"Ticket\",\"summary\":\"Asignar tickets\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/webhooks\",\"operationId\":\"pendingWebhookSubscription.index\",\"domain\":\"accounts\",\"permission\":\"webhooks:read\",\"tag\":\"Webhooks\",\"summary\":\"List the webhook subscriptions\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/webhooks\",\"operationId\":\"pendingWebhookSubscription.store\",\"domain\":\"accounts\",\"permission\":\"webhooks:write\",\"tag\":\"Webhooks\",\"summary\":\"Create a webhook subscription\",\"pending\":true},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/webhooks/{id}\",\"operationId\":\"pendingWebhookSubscription.destroy\",\"domain\":\"accounts\",\"permission\":\"webhooks:write\",\"tag\":\"Webhooks\",\"summary\":\"Delete a webhook subscription\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/webhooks/{id}\",\"operationId\":\"pendingWebhookSubscription.show\",\"domain\":\"accounts\",\"permission\":\"webhooks:read\",\"tag\":\"Webhooks\",\"summary\":\"Read a webhook subscription\",\"pending\":true},\n {\"method\":\"PUT\",\"path\":\"/api/v1/webhooks/{id}\",\"operationId\":\"pendingWebhookSubscription.update\",\"domain\":\"accounts\",\"permission\":\"webhooks:write\",\"tag\":\"Webhooks\",\"summary\":\"Update a webhook subscription\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/webhooks/{id}/deliveries\",\"operationId\":\"pendingWebhookSubscription.deliveries\",\"domain\":\"accounts\",\"permission\":\"webhooks:read\",\"tag\":\"Webhooks\",\"summary\":\"Read the delivery history\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/webhooks/{id}/rotate-secret\",\"operationId\":\"pendingWebhookSubscription.rotateSecret\",\"domain\":\"accounts\",\"permission\":\"webhooks:write\",\"tag\":\"Webhooks\",\"summary\":\"Generate a new secret\",\"pending\":true},\n {\"method\":\"POST\",\"path\":\"/api/v1/webhooks/{id}/test\",\"operationId\":\"pendingWebhookSubscription.test\",\"domain\":\"accounts\",\"permission\":\"webhooks:write\",\"tag\":\"Webhooks\",\"summary\":\"Send a test event now\",\"pending\":true},\n {\"method\":\"GET\",\"path\":\"/api/v1/webhooks/endpoints\",\"operationId\":\"webhookEndpoint.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"WebhookEndpoint\",\"summary\":\"Listar webhooks\",\"pending\":false},\n {\"method\":\"POST\",\"path\":\"/api/v1/webhooks/endpoints\",\"operationId\":\"webhookEndpoint.store\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"WebhookEndpoint\",\"summary\":\"Crear un webhook\",\"pending\":false},\n {\"method\":\"DELETE\",\"path\":\"/api/v1/webhooks/endpoints/{id}\",\"operationId\":\"webhookEndpoint.destroy\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"WebhookEndpoint\",\"summary\":\"Eliminar un webhook\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/webhooks/endpoints/{id}\",\"operationId\":\"webhookEndpoint.show\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"WebhookEndpoint\",\"summary\":\"Ver un webhook\",\"pending\":false},\n {\"method\":\"PATCH\",\"path\":\"/api/v1/webhooks/endpoints/{id}\",\"operationId\":\"webhookEndpoint.update\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"WebhookEndpoint\",\"summary\":\"Actualizar un webhook\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/webhooks/endpoints/{id}/deliveries\",\"operationId\":\"webhookDelivery.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"WebhookDelivery\",\"summary\":\"Listar entregas de un webhook\",\"pending\":false},\n {\"method\":\"PUT\",\"path\":\"/api/v1/webhooks/endpoints/{id}/events\",\"operationId\":\"webhookEndpointEvent.update\",\"domain\":\"accounts\",\"permission\":\"accounts:write\",\"tag\":\"WebhookEndpointEvent\",\"summary\":\"Elegir los eventos de un webhook\",\"pending\":false},\n {\"method\":\"GET\",\"path\":\"/api/v1/webhooks/events\",\"operationId\":\"webhookEventCatalog.index\",\"domain\":\"accounts\",\"permission\":\"accounts:read\",\"tag\":\"WebhookEventCatalog\",\"summary\":\"Listar tipos de evento\",\"pending\":false},\n];\n","import { routes } from '../generated/routes.js';\n\n/** First backoff delay; it doubles on every retry. */\nexport const INITIAL_RETRY_DELAY_MS = 500;\n/** Ceiling of the exponential backoff. */\nexport const MAX_RETRY_DELAY_MS = 8_000;\n/**\n * A `Retry-After` longer than this is not waited for: the error is thrown right away with its\n * `retryAfter`, so the caller decides (a daily cap can ask for hours).\n */\nexport const MAX_RETRY_AFTER_SECONDS = 60;\n\n/** Methods that give the same result when repeated: they are retried on any transient failure. */\nconst IDEMPOTENT_METHODS = new Set(['GET', 'HEAD', 'OPTIONS', 'PUT', 'DELETE']);\n\n/** A failed attempt: the HTTP status of the error, or `'network'` when no response arrived. */\nexport type FailedAttempt = number | 'network';\n\n/**\n * Whether a failed attempt may be repeated automatically.\n *\n * - `GET`, `PUT` and `DELETE`: on `429`, `5xx` and network errors (timeouts included).\n * - `POST` and `PATCH` (writes): only when the call was certainly not applied, `429` and `503`. A\n * `500`, `502` or `504`, a timeout or a dropped connection can come after the write was applied\n * (a `502 origin_unreachable` does not guarantee the area did not get it), so the error is thrown:\n * read the state before repeating the write.\n */\nexport function isRetryable(method: string, failure: FailedAttempt): boolean {\n if (IDEMPOTENT_METHODS.has(method.toUpperCase())) return failure === 'network' || failure === 429 || failure >= 500;\n return failure === 429 || failure === 503;\n}\n\n/**\n * Milliseconds to wait before retry number `attempt` (0 = first retry), or `null` when the\n * server asked for a wait longer than {@link MAX_RETRY_AFTER_SECONDS}.\n * With `Retry-After` the wait is exactly what the server asked for; without it, exponential\n * backoff with up to 25 % of jitter.\n */\nexport function retryDelayMs(attempt: number, retryAfterSeconds: number | undefined, random: () => number = Math.random): number | null {\n if (retryAfterSeconds !== undefined) {\n if (retryAfterSeconds > MAX_RETRY_AFTER_SECONDS) return null;\n return Math.max(0, Math.ceil(retryAfterSeconds * 1000));\n }\n const base = Math.min(INITIAL_RETRY_DELAY_MS * 2 ** attempt, MAX_RETRY_DELAY_MS);\n return Math.round(base * (1 - 0.25 * random()));\n}\n\nconst placeholder = /\\{[^}]+\\}/g;\nconst escape = (text: string) => text.replace(/[.*+?^$()|[\\]\\\\]/g, '\\\\$&');\n\n/**\n * The send operations of the spec (a `POST` with a `*:send` permission, such as\n * `conversations:send`): they deliver a WhatsApp message and are not idempotent, so they are never\n * retried automatically. Built from the generated route table, so a regeneration keeps the list\n * current.\n */\nconst SEND_POST_PATTERNS: readonly RegExp[] = routes\n .filter((route) => route.method === 'POST' && route.permission?.endsWith(':send'))\n .map((route) => new RegExp(`^${route.path.split(placeholder).map(escape).join('[^/]+')}/?$`));\n\n/** Whether `method` + `pathname` (already interpolated, without query) is a non-idempotent send. */\nexport function isSendRequest(method: string, pathname: string): boolean {\n if (method.toUpperCase() !== 'POST') return false;\n return SEND_POST_PATTERNS.some((pattern) => pattern.test(pathname));\n}\n","/** Query values the SDK can serialize. */\nexport type QueryValue =\n | string\n | number\n | boolean\n | null\n | undefined\n | Date\n | readonly QueryValue[]\n | { readonly [key: string]: QueryValue };\n\n/**\n * Serializes a query object the way Laravel reads it:\n *\n * - arrays as `key[]=a&key[]=b` (a key already written as `key[]` is not doubled);\n * - arrays of objects and nested objects with brackets: `filters[0][mode]=all`;\n * - booleans as `1` / `0` (Laravel's `boolean` rule rejects the strings `true` / `false`);\n * - dates as ISO 8601;\n * - `null` and `undefined` are left out.\n */\nexport function serializeQuery(query: Record<string, unknown> | undefined): string {\n if (!query) return '';\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(query)) append(params, key, value);\n return params.toString();\n}\n\nfunction append(params: URLSearchParams, key: string, value: unknown): void {\n if (value === undefined || value === null) return;\n if (Array.isArray(value)) {\n const scalarKey = key.endsWith('[]') ? key : `${key}[]`;\n const base = key.endsWith('[]') ? key.slice(0, -2) : key;\n value.forEach((item, index) => {\n if (isPlainObject(item) || Array.isArray(item)) append(params, `${base}[${index}]`, item);\n else append(params, scalarKey, item);\n });\n return;\n }\n if (value instanceof Date) {\n params.append(key, value.toISOString());\n return;\n }\n if (isPlainObject(value)) {\n for (const [child, childValue] of Object.entries(value)) append(params, `${key}[${child}]`, childValue);\n return;\n }\n if (typeof value === 'boolean') {\n params.append(key, value ? '1' : '0');\n return;\n }\n params.append(key, String(value));\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * Replaces `{name}` placeholders of a path template with URL-encoded values.\n * Throws when a placeholder has no value, so a request never goes out with `{contact}` in it.\n */\nexport function interpolatePath(template: string, params: Record<string, unknown> | undefined): string {\n return template.replace(/\\{([^}]+)\\}/g, (_, name: string) => {\n const value = params?.[name];\n if (value === undefined || value === null || value === '') {\n throw new TypeError(`Missing path parameter \"${name}\" for ${template}.`);\n }\n return encodeURIComponent(String(value));\n });\n}\n\n/** Joins the base URL and a path (`/api/v1/...`) without doubling or losing slashes. */\nexport function joinUrl(baseUrl: string, path: string, query: string): string {\n const base = baseUrl.replace(/\\/+$/, '');\n const suffix = path.startsWith('/') ? path : `/${path}`;\n if (!query) return `${base}${suffix}`;\n return `${base}${suffix}${suffix.includes('?') ? '&' : '?'}${query}`;\n}\n","import type { Funnelchat } from '../client.js';\nimport type { IdempotentRequestOptions, RequestOptions } from '../core/types.js';\n\n/** Base of every resource: a group of operations of one piece of the API. */\nexport abstract class Resource {\n // A private field behind a getter: the client is not an own enumerable property, so logging or\n // serializing a resource neither recurses into the client nor fails on a circular structure.\n readonly #client: Funnelchat;\n\n constructor(client: Funnelchat) {\n this.#client = client;\n }\n\n protected get client(): Funnelchat {\n return this.#client;\n }\n\n /** The options of a request with `idempotencyKey` turned into the `Idempotency-Key` header. */\n protected idempotent({ idempotencyKey, ...options }: IdempotentRequestOptions = {}): RequestOptions {\n if (idempotencyKey === undefined) return options;\n return { ...options, headers: { ...options.headers, 'Idempotency-Key': idempotencyKey } };\n }\n}\n","import type { Body, IdempotentRequestOptions, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype LinkId = PathParams<'/api/v1/connect-links/{link}', 'GET'>['link'];\n\n/**\n * Connect links (accounts area): a single-use page, on the Funnelchat domain, where your customer\n * connects a WhatsApp number to your account, by QR code (`type: 'qr'`) or as an official number\n * through the Meta sign-up (`type: 'meta'`). The number is created when the page finishes; with\n * `device_id` the link reconnects that number instead, without taking a new slot. The Meta sign-up\n * is not available in production yet: `type: 'meta'` answers `503 meta_connect_disabled` until it is.\n *\n * Reading needs `accounts:read`; creating and revoking, `accounts:operate`. The result arrives three\n * ways: the `device.connected` webhook (with `connect_link_id` and `external_reference`), the\n * `return_url`, or `get`. The other `device.*` events carry the link that last connected the number.\n *\n * Errors of their own (`APIError.code`): the rejections of `devices.create`, `429\n * too_many_open_links` (20 open links per account), `503 meta_connect_disabled`, `422\n * connection_type_mismatch` (`device_id` of a number that connects another way) and `409\n * link_not_pending` (revoking a link that already ended).\n */\nexport class ConnectLinks extends Resource {\n /**\n * `POST /api/v1/connect-links`. `url` is the page to send your customer to: it carries the token\n * and comes only in this response.\n *\n * `provision_us_number` (a US number of the pool, always dedicated) needs `dedicated` in\n * `allowed_connection_types` and does not go with `device_id`: otherwise `422 invalid_request`.\n * A Meta link stays `pending` after a failure of Facebook or Meta, so your customer can try again;\n * the fifth failed attempt turns it `failed`.\n *\n * `country` (only `qr`, not with `device_id`) is the country of the phone that will scan the QR, in\n * two letters: the WhatsApp session is opened from there. The link returns it, lowercase.\n */\n create(body: Body<'/api/v1/connect-links', 'POST'>, options?: IdempotentRequestOptions) {\n return this.client.request('POST', '/api/v1/connect-links', { ...this.idempotent(options), body });\n }\n\n /** `GET /api/v1/connect-links/{link}`: its `status`, and `device_id` and `error_code` once it ends. */\n get(link: LinkId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/connect-links/{link}', { ...options, path: { link } });\n }\n\n /** `GET /api/v1/connect-links`, paginated, newest first: filter by `status` or `external_reference`. */\n list(query?: Query<'/api/v1/connect-links'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/connect-links', { ...options, query });\n }\n\n /** `DELETE /api/v1/connect-links/{link}`: revokes a `pending` link (any other is `409 link_not_pending`). */\n revoke(link: LinkId, options?: RequestOptions) {\n return this.client.request('DELETE', '/api/v1/connect-links/{link}', { ...options, path: { link } });\n }\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype ContactId = PathParams<'/api/v1/contacts/{contact}', 'GET'>['contact'];\ntype DeviceId = PathParams<'/api/v1/devices/{device}/contacts', 'GET'>['device'];\ntype NoteId = PathParams<'/api/v1/contacts/{contact}/notes/{note}', 'DELETE'>['note'];\n\n/** Contacts (conversations area): search, create, update, custom fields, notes and the 24-hour window. */\nexport class Contacts extends Resource {\n /** `GET /api/v1/contacts`, paginated. Filter by `phone` without the `+`. */\n list(query?: Query<'/api/v1/contacts'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/contacts', { ...options, query });\n }\n\n /** `POST /api/v1/contacts`. */\n create(body: Body<'/api/v1/contacts', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/contacts', { ...options, body });\n }\n\n /** `POST /api/v1/contacts/update-or-create`: creates the contact or updates the one with that phone. */\n upsert(body: Body<'/api/v1/contacts/update-or-create', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/contacts/update-or-create', { ...options, body });\n }\n\n /** `GET /api/v1/contacts/{contact}`. */\n retrieve(contact: ContactId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/contacts/{contact}', { ...options, path: { contact } });\n }\n\n /** `PUT /api/v1/contacts/{contact}`. */\n update(contact: ContactId, body: Body<'/api/v1/contacts/{contact}', 'PUT'>, options?: RequestOptions) {\n return this.client.request('PUT', '/api/v1/contacts/{contact}', { ...options, path: { contact }, body });\n }\n\n /** `POST /api/v1/contacts/delete`: deletes the contacts of the body (`contactIds`, or a filter). */\n delete(body: Body<'/api/v1/contacts/delete', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/contacts/delete', { ...options, body });\n }\n\n /** `GET /api/v1/contacts/{contact}/tags`, paginated. */\n listTags(contact: ContactId, query?: Query<'/api/v1/contacts/{contact}/tags'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/contacts/{contact}/tags', { ...options, path: { contact }, query });\n }\n\n /** `GET /api/v1/contacts/{contact}/custom-fields`, paginated. */\n listCustomFields(contact: ContactId, query?: Query<'/api/v1/contacts/{contact}/custom-fields'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/contacts/{contact}/custom-fields', { ...options, path: { contact }, query });\n }\n\n /** `POST /api/v1/contacts/attach-custom-field`: sets a custom field on contacts. */\n attachCustomField(body: Body<'/api/v1/contacts/attach-custom-field', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/contacts/attach-custom-field', { ...options, body });\n }\n\n /** `POST /api/v1/contacts/detach-custom-field`. */\n detachCustomField(body: Body<'/api/v1/contacts/detach-custom-field', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/contacts/detach-custom-field', { ...options, body });\n }\n\n /**\n * `GET /api/v1/contacts/{contact}/meta-window`: whether the 24-hour window with the contact is\n * open on a WhatsApp Cloud number (`is_open`). Outside it, only templates can be sent.\n */\n metaWindow(contact: ContactId, query: Query<'/api/v1/contacts/{contact}/meta-window'>, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/contacts/{contact}/meta-window', { ...options, path: { contact }, query });\n }\n\n /** `GET /api/v1/devices/{device}/contacts`, paginated: the contacts of one number. */\n listByDevice(device: DeviceId, query?: Query<'/api/v1/devices/{device}/contacts'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/devices/{device}/contacts', { ...options, path: { device }, query });\n }\n\n /** `GET /api/v1/contacts/{contact}/notes`, paginated. */\n listNotes(contact: ContactId, query?: Query<'/api/v1/contacts/{contact}/notes'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/contacts/{contact}/notes', { ...options, path: { contact }, query });\n }\n\n /** `POST /api/v1/contacts/{contact}/notes`. */\n createNote(contact: ContactId, body: Body<'/api/v1/contacts/{contact}/notes', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/contacts/{contact}/notes', { ...options, path: { contact }, body });\n }\n\n /** `DELETE /api/v1/contacts/{contact}/notes/{note}`. */\n deleteNote(contact: ContactId, note: NoteId, options?: RequestOptions) {\n return this.client.request('DELETE', '/api/v1/contacts/{contact}/notes/{note}', { ...options, path: { contact, note } });\n }\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype ContactId = PathParams<'/api/v1/contacts/{contact}/update', 'PUT'>['contact'];\n\n/** Conversations (conversations area): the inbox, its counters and the state of each conversation. */\nexport class Conversations extends Resource {\n /** `GET /api/v1/conversations`, paginated by cursor. */\n list(query?: Query<'/api/v1/conversations'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/conversations', { ...options, query });\n }\n\n /** `PUT /api/v1/contacts/{contact}/update`: changes the conversation with a contact (open, assigned…). */\n update(contact: ContactId, body: Body<'/api/v1/contacts/{contact}/update', 'PUT'>, options?: RequestOptions) {\n return this.client.request('PUT', '/api/v1/contacts/{contact}/update', { ...options, path: { contact }, body });\n }\n\n /** `GET /api/v1/conversations/count/unread`. */\n countUnread(query?: Query<'/api/v1/conversations/count/unread'>, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/conversations/count/unread', { ...options, query });\n }\n\n /** `GET /api/v1/conversations/count/open`. */\n countOpen(query?: Query<'/api/v1/conversations/count/open'>, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/conversations/count/open', { ...options, query });\n }\n\n /** `GET /api/v1/conversations/count/closed`. */\n countClosed(query?: Query<'/api/v1/conversations/count/closed'>, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/conversations/count/closed', { ...options, query });\n }\n\n /** `GET /api/v1/conversations/count/all`. */\n countAll(query?: Query<'/api/v1/conversations/count/all'>, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/conversations/count/all', { ...options, query });\n }\n\n /** `POST /api/v1/conversations/mark-all-read`. */\n markAllRead(body?: Body<'/api/v1/conversations/mark-all-read', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/conversations/mark-all-read', { ...options, body });\n }\n\n /** `POST /api/v1/conversations/mark-all-unread`. */\n markAllUnread(body?: Body<'/api/v1/conversations/mark-all-unread', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/conversations/mark-all-unread', { ...options, body });\n }\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype CustomFieldId = PathParams<'/api/v1/custom-fields/{customField}', 'GET'>['customField'];\n\n/** Custom fields of contacts (conversations area). To set a value on a contact, see `contacts.attachCustomField`. */\nexport class CustomFields extends Resource {\n /** `GET /api/v1/custom-fields`, paginated. */\n list(query?: Query<'/api/v1/custom-fields'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/custom-fields', { ...options, query });\n }\n\n /** `POST /api/v1/custom-fields`. */\n create(body: Body<'/api/v1/custom-fields', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/custom-fields', { ...options, body });\n }\n\n /** `GET /api/v1/custom-fields/{customField}`. */\n retrieve(customField: CustomFieldId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/custom-fields/{customField}', { ...options, path: { customField } });\n }\n\n /** `PUT /api/v1/custom-fields/{customField}`. */\n update(customField: CustomFieldId, body: Body<'/api/v1/custom-fields/{customField}', 'PUT'>, options?: RequestOptions) {\n return this.client.request('PUT', '/api/v1/custom-fields/{customField}', { ...options, path: { customField }, body });\n }\n\n /** `POST /api/v1/custom-fields/delete`. */\n delete(body: Body<'/api/v1/custom-fields/delete', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/custom-fields/delete', { ...options, body });\n }\n}\n","import type { PagePromise } from '../core/pagination.js';\nimport type { Body, IdempotentRequestOptions, ListItem, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype DeviceId = PathParams<'/api/v1/devices/{device}', 'GET'>['device'];\ntype Device = ListItem<'/api/v1/devices'>;\n\nconst REQUEST_OPTION_KEYS: ReadonlySet<string> = new Set(['headers', 'timeoutMs', 'maxRetries', 'retrySend', 'signal']);\n\n/** Whether a lone argument is the options of the 0.1.2 signature `list(options)`: only request-option keys. */\nfunction isRequestOptions(value: unknown): value is RequestOptions {\n if (typeof value !== 'object' || value === null) return false;\n const keys = Object.keys(value);\n return keys.length > 0 && keys.every((key) => REQUEST_OPTION_KEYS.has(key));\n}\n\n/** WhatsApp numbers of the account (accounts area). The `id` of a number is the `device_id` used to send. */\nexport class Devices extends Resource {\n /**\n * `GET /api/v1/devices`. Iterate it with `for await`, or `await` it for the first page.\n * `external_reference` keeps only the numbers with that reference (exact match).\n */\n list(query?: Query<'/api/v1/devices'>, options?: RequestOptions): PagePromise<Device>;\n /** @deprecated The 0.1.2 signature, still supported: pass the options second, `list({}, options)`. */\n list(options: RequestOptions): PagePromise<Device>;\n list(queryOrOptions?: Query<'/api/v1/devices'> | RequestOptions, options?: RequestOptions): PagePromise<Device> {\n if (options === undefined && isRequestOptions(queryOrOptions)) return this.client.paginate('/api/v1/devices', { ...queryOrOptions });\n return this.client.paginate('/api/v1/devices', { ...options, query: queryOrOptions as Query<'/api/v1/devices'> | undefined });\n }\n\n /**\n * `POST /api/v1/devices`: creates a number that connects by QR code (`connection: 'qr'`), with\n * `connected: false`. Then show its QR with `qr`, or send your customer a connect link\n * (`connectLinks.create`). Needs `accounts:operate`. It takes a slot of the plan, with the panel's\n * rejections: `403 numbers_not_included`, `403 number_limit_reached`, `422 qr_requires_coexistence`\n * and `422 method_already_present` (`same_number_as` adds QR to a number in coexistence instead).\n * An account has at most one QR number waiting to be scanned: another one is `409\n * pending_number_exists`, with that number's `device_id` in `error.body`. `country` (two letters,\n * such as `'br'`) is the country of the phone that will scan the QR: the WhatsApp session is opened\n * from there.\n */\n create(body: Body<'/api/v1/devices', 'POST'>, options?: IdempotentRequestOptions) {\n return this.client.request('POST', '/api/v1/devices', { ...this.idempotent(options), body });\n }\n\n /**\n * `GET /api/v1/devices/{device}`. `capabilities` says what the number can do by API: message\n * types (`messages`) and the statuses `message.status_changed` reports (`statuses`).\n */\n retrieve(device: DeviceId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/devices/{device}', { ...options, path: { device } });\n }\n\n /**\n * `DELETE /api/v1/devices/{device}`: deletes the number and frees its slot of the plan. An\n * official number stops receiving through Funnelchat but stays registered with Meta; a QR one\n * logs out. Irreversible; needs `accounts:operate`. Sends `device.deleted`.\n */\n delete(device: DeviceId, options?: RequestOptions) {\n return this.client.request('DELETE', '/api/v1/devices/{device}', { ...options, path: { device } });\n }\n\n /** `PUT /api/v1/devices/{device}`: also changes `external_reference`. */\n update(device: DeviceId, body: Body<'/api/v1/devices/{device}', 'PUT'>, options?: RequestOptions) {\n return this.client.request('PUT', '/api/v1/devices/{device}', { ...options, path: { device }, body });\n }\n\n /**\n * `GET /api/v1/devices/{device}/qr`: the QR code to scan, as a PNG data URI (`qr_code`), or `null`\n * once `connected`. Ask for it every `expires_in` seconds (5 with a QR, 3 while the session starts,\n * 0 once connected) and have it scanned right away: WhatsApp changes the code every few seconds and\n * an old one no longer links, so show the latest and never store or forward a QR. Only for QR\n * numbers (an official one is `422 provider_unsupported`); needs\n * `accounts:operate`, since scanning it gives control of a WhatsApp. A number that cannot connect now\n * answers `409` (`trial_number_blocked`, `number_suspended_by_plan`, `device_inactive`…).\n */\n qr(device: DeviceId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/devices/{device}/qr', { ...options, path: { device } });\n }\n\n /** `GET /api/v1/devices/{device}/status`: connection status. */\n status(device: DeviceId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/devices/{device}/status', { ...options, path: { device } });\n }\n\n /** `GET /api/v1/devices/{device}/health`. */\n health(device: DeviceId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/devices/{device}/health', { ...options, path: { device } });\n }\n\n /** `GET /api/v1/devices/{device}/me`: the WhatsApp profile of the number. */\n me(device: DeviceId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/devices/{device}/me', { ...options, path: { device } });\n }\n\n /** `GET /api/v1/devices/{device}/check-phone`: whether a phone has WhatsApp. */\n checkPhone(device: DeviceId, query: Query<'/api/v1/devices/{device}/check-phone'>, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/devices/{device}/check-phone', { ...options, path: { device }, query });\n }\n\n /** `GET /api/v1/devices/{device}/connection-history`, paginated. */\n listConnectionHistory(device: DeviceId, query?: Query<'/api/v1/devices/{device}/connection-history'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/devices/{device}/connection-history', { ...options, path: { device }, query });\n }\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype FormId = PathParams<'/api/v1/forms/{id}', 'GET'>['id'];\ntype FamilyId = PathParams<'/api/v1/forms/families/{familyId}/versions', 'GET'>['familyId'];\ntype RunId = PathParams<'/api/v1/forms/families/{familyId}/responses/{runId}', 'GET'>['runId'];\ntype DeviceId = PathParams<'/api/v1/forms/{id}/numbers/{deviceId}', 'DELETE'>['deviceId'];\n\n/**\n * WhatsApp forms (conversations area): build them, publish them on your numbers and read the\n * answers. Reading needs `conversations:read`; the rest, `conversations:write`.\n *\n * Two ids: `id` is one version of a form; `family_id` is the form itself (every version). You send\n * a form by its `family_id` with `messages.sendForm`, and `whatsapp_form.completed` brings it as\n * `form.id`.\n *\n * Errors of their own (`APIError.code`): `422 LINT` (with `lint`), `409 PUBLISHED`, `409 STALE`\n * (someone saved first: `current` in the body), `502 META` (Meta rejected it: `meta_code`),\n * `422 NUMBER_NOT_ELIGIBLE`, `422 PRIMARY_NUMBER`.\n */\nexport class Forms extends Resource {\n /** `GET /api/v1/forms`, paginated: filter by `q`, `status` or `device_id`. */\n list(query?: Query<'/api/v1/forms'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/forms', { ...options, query });\n }\n\n /** `GET /api/v1/forms/templates`: the starting points `create` accepts as `template_key`. */\n templates(options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/forms/templates', { ...options });\n }\n\n /** `POST /api/v1/forms`: a new draft from a template, on `device_id` (and `device_ids`). */\n create(body: Body<'/api/v1/forms', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/forms', { ...options, body });\n }\n\n /** `GET /api/v1/forms/{id}`: one version, with `lint`, `versions` and `numbers`. */\n retrieve(id: FormId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/forms/{id}', { ...options, path: { id } });\n }\n\n /**\n * `PUT /api/v1/forms/{id}`: saves the `definition` of a draft. Pass the `updated_at` you read as\n * `expected_updated_at` to get `409 STALE` instead of overwriting someone else's change.\n */\n update(id: FormId, body: Body<'/api/v1/forms/{id}', 'PUT'>, options?: RequestOptions) {\n return this.client.request('PUT', '/api/v1/forms/{id}', { ...options, path: { id }, body });\n }\n\n /** `DELETE /api/v1/forms/{id}`: deletes a draft (a published version answers `409 PUBLISHED`). */\n delete(id: FormId, options?: RequestOptions) {\n return this.client.request('DELETE', '/api/v1/forms/{id}', { ...options, path: { id } });\n }\n\n /** `POST /api/v1/forms/{id}/versions`: opens a draft of a published form, or returns the open one (`created: false`). */\n createVersion(id: FormId, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/forms/{id}/versions', { ...options, path: { id } });\n }\n\n /** `POST /api/v1/forms/{id}/sync`: uploads the draft to Meta without publishing it. */\n sync(id: FormId, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/forms/{id}/sync', { ...options, path: { id } });\n }\n\n /** `POST /api/v1/forms/{id}/publish`: publishes the version on its numbers. */\n publish(id: FormId, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/forms/{id}/publish', { ...options, path: { id } });\n }\n\n /** `GET /api/v1/forms/{id}/numbers`: where the form is (or is being) published. */\n numbers(id: FormId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/forms/{id}/numbers', { ...options, path: { id } });\n }\n\n /** `POST /api/v1/forms/{id}/numbers`: publishes it on one more number. */\n addNumber(id: FormId, body: Body<'/api/v1/forms/{id}/numbers', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/forms/{id}/numbers', { ...options, path: { id }, body });\n }\n\n /** `DELETE /api/v1/forms/{id}/numbers/{deviceId}`: takes it off a number (not the primary one). */\n removeNumber(id: FormId, deviceId: DeviceId, options?: RequestOptions) {\n return this.client.request('DELETE', '/api/v1/forms/{id}/numbers/{deviceId}', { ...options, path: { id, deviceId } });\n }\n\n /** `POST /api/v1/forms/{id}/numbers/retry`: retries the numbers whose publication failed. */\n retryNumbers(id: FormId, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/forms/{id}/numbers/retry', { ...options, path: { id } });\n }\n\n /** `GET /api/v1/forms/families/{familyId}/definition`: the current definition of a form, or `data: null`. */\n definition(familyId: FamilyId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/forms/families/{familyId}/definition', { ...options, path: { familyId } });\n }\n\n /** `GET /api/v1/forms/families/{familyId}/versions`: every version of a form. */\n versions(familyId: FamilyId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/forms/families/{familyId}/versions', { ...options, path: { familyId } });\n }\n\n /** `GET /api/v1/forms/families/{familyId}/responses`, paginated: the answers, with their `columns`. */\n listResponses(familyId: FamilyId, query?: Query<'/api/v1/forms/families/{familyId}/responses'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/forms/families/{familyId}/responses', { ...options, path: { familyId }, query });\n }\n\n /** `GET /api/v1/forms/families/{familyId}/responses/{runId}`: one answer. */\n retrieveResponse(familyId: FamilyId, runId: RunId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/forms/families/{familyId}/responses/{runId}', { ...options, path: { familyId, runId } });\n }\n\n /** `GET /api/v1/forms/families/{familyId}/metrics`: the funnel (sent, opened, completed). */\n metrics(familyId: FamilyId, query?: Query<'/api/v1/forms/families/{familyId}/metrics'>, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/forms/families/{familyId}/metrics', { ...options, path: { familyId }, query });\n }\n}\n","import type { PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype GroupId = PathParams<'/api/v1/groups/{group}', 'GET'>['group'];\ntype GroupUid = PathParams<'/api/v1/groups/{groupUid}/metadata', 'GET'>['groupUid'];\ntype DeviceId = PathParams<'/api/v1/devices/{device}/groups', 'GET'>['device'];\n\n/** WhatsApp groups (communities area): read them, their participants, events and messages. Permission `communities:read`. */\nexport class Groups extends Resource {\n /** `GET /api/v1/groups`, paginated. */\n list(query?: Query<'/api/v1/groups'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/groups', { ...options, query });\n }\n\n /** `GET /api/v1/groups/{group}`. */\n retrieve(group: GroupId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/groups/{group}', { ...options, path: { group } });\n }\n\n /** `GET /api/v1/devices/{device}/groups`, paginated (`page`, `pageSize`): the groups of one number. */\n listByDevice(device: DeviceId, query?: Query<'/api/v1/devices/{device}/groups'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/devices/{device}/groups', { ...options, path: { device }, query });\n }\n\n /** `GET /api/v1/groups/{groupUid}/metadata`: live metadata of a group by its WhatsApp uid, read through one number. */\n metadata(groupUid: GroupUid, query: Query<'/api/v1/groups/{groupUid}/metadata'>, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/groups/{groupUid}/metadata', { ...options, path: { groupUid }, query });\n }\n\n /** `GET /api/v1/groups/participants`, paginated: the participants of one group (`groupUid`). */\n listParticipants(query: Query<'/api/v1/groups/participants'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/groups/participants', { ...options, query });\n }\n\n /** `GET /api/v1/groups/{group}/participant-events`, paginated: joins and leaves. */\n listParticipantEvents(group: GroupId, query?: Query<'/api/v1/groups/{group}/participant-events'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/groups/{group}/participant-events', { ...options, path: { group }, query });\n }\n\n /** `GET /api/v1/groups/{group}/messages`, paginated. */\n listMessages(group: GroupId, query?: Query<'/api/v1/groups/{group}/messages'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/groups/{group}/messages', { ...options, path: { group }, query });\n }\n\n /** `GET /api/v1/groups/{group}/scheduled-messages`, paginated. */\n listScheduledMessages(group: GroupId, query?: Query<'/api/v1/groups/{group}/scheduled-messages'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/groups/{group}/scheduled-messages', { ...options, path: { group }, query });\n }\n\n /** `GET /api/v1/groups/{group}/actions`, paginated. */\n listActions(group: GroupId, query?: Query<'/api/v1/groups/{group}/actions'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/groups/{group}/actions', { ...options, path: { group }, query });\n }\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype ContactId = PathParams<'/api/v1/contacts/{contact}/message', 'POST'>['contact'];\ntype MessageId = PathParams<'/api/v1/contacts/{contact}/messages/{message}/forward', 'POST'>['message'];\ntype HistoryContactId = PathParams<'/api/v1/contacts/{contactId}/messages', 'GET'>['contactId'];\ntype ShowPath = '/api/v1/contacts/{contact}/messages/{message}';\ntype SendMessageBody = Body<'/api/v1/contacts/{contact}/message', 'POST'>;\ntype FormContactId = PathParams<'/api/v1/contacts/{contact}/message/form', 'POST'>['contact'];\n\n/** Body of {@link Messages.send}: `contact_id` is optional, it defaults to the contact of the route. */\nexport type SendMessageParams = Omit<SendMessageBody, 'contact_id'> & { contact_id?: SendMessageBody['contact_id'] };\n\n/**\n * Messages to one contact (conversations area): send text, files, buttons and forms, read the\n * history or one message by id, forward, react.\n *\n * Every send answers right away with the registered message, `status: 'queued'`: accepted is not\n * delivered. The rest arrives by `message.status_changed` (with the same `id` as `message_id`) or\n * with {@link Messages.get}.\n *\n * Sending with an API key needs the `conversations:send` permission and is subject to the\n * WhatsApp rules: `422 window_closed`, `422 antiblock_*`, `422 recipient_*`,\n * `422 provider_unsupported`, `429 rate_limited` (with `retryAfter`) and `429 mac_lockout_24h`. A\n * rejected send stores nothing (see `SEND_ERROR_CODES`). Sends are never retried automatically\n * unless you pass `retrySend: true`.\n */\nexport class Messages extends Resource {\n /**\n * `POST /api/v1/contacts/{contact}/message`: text, a file or buttons and lists (`options`).\n * Resolves to `{ message }`: the registered message, with its `id` and `status: 'queued'`.\n *\n * - Send `phone` (or `whatsapp_id`) of the same contact: the API checks it (`422 recipient_mismatch`).\n * - `file` is a URL. When it does not end in a known extension (a signed URL, or one without\n * extension), send `file_type` (`image`, `video`, `audio`, `document`, `sticker`), and\n * `file_name` for a document: otherwise `422 errors.file_type` / `errors.file_name`. An\n * unsupported extension without `file_type` is a `415` ({@link UnsupportedMediaTypeError}).\n * - `client_reference` (1–64 visible ASCII characters) comes back in the history and in\n * `message.status_changed`.\n */\n send(contact: ContactId, body: SendMessageParams, options?: RequestOptions) {\n const fullBody = { ...body, contact_id: body.contact_id ?? contact } as SendMessageBody;\n return this.client.request('POST', '/api/v1/contacts/{contact}/message', { ...options, path: { contact }, body: fullBody });\n }\n\n /**\n * `POST /api/v1/message/send-message`: the same send with `device_id` and `contact_id` in the\n * body and no `phone` check. Resolves to `{ message }`.\n */\n sendDirect(body: Body<'/api/v1/message/send-message', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/message/send-message', { ...options, body });\n }\n\n /**\n * `POST /api/v1/contacts/{contact}/message/form`: sends a published WhatsApp form (`form_id` is\n * the form's `family_id`). Resolves to `{ message }` with `type: 'whatsapp_form'`; the answers\n * arrive by `whatsapp_form.completed`. It is a send: same rules as {@link Messages.send}.\n */\n sendForm(contact: FormContactId, body: Body<'/api/v1/contacts/{contact}/message/form', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/contacts/{contact}/message/form', { ...options, path: { contact }, body });\n }\n\n /**\n * `GET /api/v1/contacts/{contact}/messages/{message}`: one message by the id a send or a webhook\n * gave you (`message_id` of `message.status_changed`). `status` moves from `queued` to `sent`,\n * `delivered`, `read` or `failed` (then `error` says why).\n */\n get(contact: PathParams<ShowPath, 'GET'>['contact'], message: PathParams<ShowPath, 'GET'>['message'], options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/contacts/{contact}/messages/{message}', { ...options, path: { contact, message } });\n }\n\n /** `GET /api/v1/contacts/{contactId}/messages`, paginated by cursor: the history of a contact. */\n list(contactId: HistoryContactId, query?: Query<'/api/v1/contacts/{contactId}/messages'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/contacts/{contactId}/messages', { ...options, path: { contactId }, query });\n }\n\n /**\n * `POST /api/v1/contacts/{contact}/message/contact-card`: sends up to 5 contact cards. Resolves to\n * `{ messages }`, one message per card in the order of `contact_card_ids`.\n */\n sendContactCard(contact: ContactId, body: Body<'/api/v1/contacts/{contact}/message/contact-card', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/contacts/{contact}/message/contact-card', { ...options, path: { contact }, body });\n }\n\n /**\n * `POST /api/v1/contacts/{contact}/messages/{message}/forward`: forwards a message to up to 5\n * contacts. Resolves to one item per destination, in order: `status` (`queued` or `blocked`, with\n * `reason`) and its `message`, or `null` when nothing was registered for that destination.\n */\n forward(\n contact: ContactId,\n message: MessageId,\n body: Body<'/api/v1/contacts/{contact}/messages/{message}/forward', 'POST'>,\n options?: RequestOptions,\n ) {\n return this.client.request('POST', '/api/v1/contacts/{contact}/messages/{message}/forward', {\n ...options,\n path: { contact, message },\n body,\n });\n }\n\n /** `PUT /api/v1/contacts/{contact}/messages/{message}/reaction`: reacts with an emoji. */\n react(\n contact: ContactId,\n message: MessageId,\n body: Body<'/api/v1/contacts/{contact}/messages/{message}/reaction', 'PUT'>,\n options?: RequestOptions,\n ) {\n return this.client.request('PUT', '/api/v1/contacts/{contact}/messages/{message}/reaction', {\n ...options,\n path: { contact, message },\n body,\n });\n }\n\n /** `DELETE /api/v1/contacts/{contact}/messages/{message}/reaction`: removes your reaction. */\n removeReaction(contact: ContactId, message: MessageId, options?: RequestOptions) {\n return this.client.request('DELETE', '/api/v1/contacts/{contact}/messages/{message}/reaction', {\n ...options,\n path: { contact, message },\n });\n }\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype TagId = PathParams<'/api/v1/tags/{tag}', 'GET'>['tag'];\n\n/** Tags (conversations area). */\nexport class Tags extends Resource {\n /** `GET /api/v1/tags`, paginated. */\n list(query?: Query<'/api/v1/tags'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/tags', { ...options, query });\n }\n\n /** `POST /api/v1/tags`. */\n create(body: Body<'/api/v1/tags', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/tags', { ...options, body });\n }\n\n /** `GET /api/v1/tags/{tag}`. */\n retrieve(tag: TagId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/tags/{tag}', { ...options, path: { tag } });\n }\n\n /** `PUT /api/v1/tags/{tag}`. */\n update(tag: TagId, body: Body<'/api/v1/tags/{tag}', 'PUT'>, options?: RequestOptions) {\n return this.client.request('PUT', '/api/v1/tags/{tag}', { ...options, path: { tag }, body });\n }\n\n /** `POST /api/v1/tags/delete`: deletes the tags in `tagIds`. */\n delete(body: Body<'/api/v1/tags/delete', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/tags/delete', { ...options, body });\n }\n\n /** `GET /api/v1/tags/{tag}/contacts`, paginated: the contacts with a tag. */\n listContacts(tag: TagId, query?: Query<'/api/v1/tags/{tag}/contacts'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/tags/{tag}/contacts', { ...options, path: { tag }, query });\n }\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { Resource } from './base.js';\n\ntype TemplateId = PathParams<'/api/v1/templates/{template}', 'GET'>['template'];\ntype SendPath = '/api/v1/devices/{device}/templates/{template}/send-template';\ntype DeviceId = PathParams<SendPath, 'POST'>['device'];\ntype SendTemplateId = PathParams<SendPath, 'POST'>['template'];\ntype DeleteTemplateId = PathParams<'/api/v1/devices/{device}/templates/{template}', 'DELETE'>['template'];\n\n/** WhatsApp message templates (conversations area): list, create, edit, send. */\nexport class Templates extends Resource {\n /** `GET /api/v1/templates`, paginated. */\n list(query?: Query<'/api/v1/templates'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/templates', { ...options, query });\n }\n\n /** `POST /api/v1/templates`: creates a template and submits it to Meta. */\n create(body: Body<'/api/v1/templates', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/templates', { ...options, body });\n }\n\n /** `GET /api/v1/templates/{template}`. */\n retrieve(template: TemplateId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/templates/{template}', { ...options, path: { template } });\n }\n\n /** `PUT /api/v1/templates/{template}`. */\n update(template: TemplateId, body: Body<'/api/v1/templates/{template}', 'PUT'>, options?: RequestOptions) {\n return this.client.request('PUT', '/api/v1/templates/{template}', { ...options, path: { template }, body });\n }\n\n /** `GET /api/v1/templates/{template}/quick-reply-buttons`. */\n quickReplyButtons(template: TemplateId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/templates/{template}/quick-reply-buttons', { ...options, path: { template } });\n }\n\n /**\n * `POST /api/v1/devices/{device}/templates/{template}/send-template`: sends an approved template\n * (the way to write to a contact outside the 24-hour window). `phone` and `contact_id` are\n * required; `template_variables.body` fills the body variables in order.\n *\n * Resolves to `{ message }`, the registered message with `status: 'queued'`. A variable that\n * points to a field that does not exist is a `422 template_unresolved_placeholder` with\n * `placeholders` and `count` in `APIError.body`; a template this account cannot send,\n * `404 template_not_found`. Like every send, it is never retried automatically.\n */\n send(device: DeviceId, template: SendTemplateId, body: Body<SendPath, 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/devices/{device}/templates/{template}/send-template', {\n ...options,\n path: { device, template },\n body,\n });\n }\n\n /** `DELETE /api/v1/devices/{device}/templates/{template}`. */\n delete(device: DeviceId, template: DeleteTemplateId, options?: RequestOptions) {\n return this.client.request('DELETE', '/api/v1/devices/{device}/templates/{template}', { ...options, path: { device, template } });\n }\n}\n","/**\n * Verification of the `X-Funnelchat-Signature` header of a webhook delivery.\n *\n * It replicates exactly the algorithm of the developer portal (`snippets/verificar-firma.js` of\n * developers-portal, contract C3 v4):\n *\n * X-Funnelchat-Signature: t=<unix>,v1=<hex(hmac_sha256(secret, \"<t>.\" + raw body))>\n *\n * - the header is split by `,` and each part by its first `=`; keys and values are trimmed;\n * - `t` must be digits only; there can be several `v1` (any match is enough);\n * - `t` farther than `toleranceSeconds` (300 by default) from the local clock is rejected;\n * - the HMAC uses the full secret as shown (a `whsec_` prefix is part of it) over the raw bytes\n * of the body, and is compared in constant time.\n */\nimport { createHmac, timingSafeEqual } from 'node:crypto';\nimport { WebhookVerificationError, type WebhookVerificationFailure } from '../core/errors.js';\n\n/** Name of the signature header. */\nexport const SIGNATURE_HEADER = 'X-Funnelchat-Signature';\n/** Default tolerance between `t` and the local clock, in seconds. */\nexport const DEFAULT_TOLERANCE_SECONDS = 300;\n\n/** The body exactly as it arrived: never parsed and re-serialized. */\nexport type RawBody = string | Uint8Array | ArrayBuffer;\n\nexport interface VerifyOptions {\n /** Maximum distance between `t` and the local clock, in seconds. Default: 300. */\n toleranceSeconds?: number;\n}\n\ntype CheckResult = { ok: true } | { ok: false; reason: WebhookVerificationFailure; message: string };\n\nconst fail = (reason: WebhookVerificationFailure, message: string): CheckResult => ({ ok: false, reason, message });\n\nfunction toBytes(body: unknown): Buffer | null {\n if (typeof body === 'string') return Buffer.from(body, 'utf8');\n if (Buffer.isBuffer(body)) return body;\n if (body instanceof Uint8Array) return Buffer.from(body.buffer, body.byteOffset, body.byteLength);\n if (body instanceof ArrayBuffer) return Buffer.from(body);\n return null;\n}\n\n/** Runs every check and says which one failed. */\nexport function checkSignature(rawBody: unknown, signatureHeader: unknown, secret: unknown, options: VerifyOptions = {}): CheckResult {\n if (typeof secret !== 'string' || secret === '') {\n return fail('missing_secret', 'Missing the subscription secret.');\n }\n const body = toBytes(rawBody);\n if (body === null) {\n return fail(\n 'invalid_body',\n 'The body must be the raw one (string, Buffer or Uint8Array), exactly as it arrived. With Express, read it with express.raw({ type: \"application/json\" }), not express.json().',\n );\n }\n if (typeof signatureHeader !== 'string' || signatureHeader === '') {\n return fail('missing_header', `Missing the ${SIGNATURE_HEADER} header.`);\n }\n\n let t: string | null = null;\n const signatures: string[] = [];\n for (const part of signatureHeader.split(',')) {\n const i = part.indexOf('=');\n if (i === -1) continue;\n const key = part.slice(0, i).trim();\n const value = part.slice(i + 1).trim();\n if (key === 't') t = value;\n if (key === 'v1') signatures.push(value);\n }\n if (t === null || !/^\\d+$/.test(t) || signatures.length === 0) {\n return fail('malformed_header', `The ${SIGNATURE_HEADER} header is not t=<unix>,v1=<hex>.`);\n }\n\n const tolerance = options.toleranceSeconds ?? DEFAULT_TOLERANCE_SECONDS;\n if (Math.abs(Math.floor(Date.now() / 1000) - Number(t)) > tolerance) {\n return fail('timestamp_out_of_tolerance', `The signature is more than ${tolerance} seconds away from the local clock.`);\n }\n\n const expected = Buffer.from(createHmac('sha256', secret).update(`${t}.`).update(body).digest('hex'), 'utf8');\n const matched = signatures.some((v1) => {\n const candidate = Buffer.from(v1, 'utf8');\n return candidate.length === expected.length && timingSafeEqual(candidate, expected);\n });\n return matched ? { ok: true } : fail('signature_mismatch', 'The signature does not match the body and the secret.');\n}\n\n/**\n * `true` when the delivery is authentic and recent. Same contract as the portal snippet: it never\n * throws, any problem is `false`. Use {@link constructEvent} to know which check failed.\n */\nexport function verify(rawBody: RawBody, signatureHeader: string | null | undefined, secret: string, options?: VerifyOptions): boolean {\n return checkSignature(rawBody, signatureHeader, secret, options).ok;\n}\n\n/** Throws {@link WebhookVerificationError} unless the delivery is authentic and recent. */\nexport function assertSignature(rawBody: RawBody, signatureHeader: string | null | undefined, secret: string, options?: VerifyOptions): void {\n const result = checkSignature(rawBody, signatureHeader, secret, options);\n if (!result.ok) throw new WebhookVerificationError(result.reason, result.message);\n}\n","import { WebhookVerificationError } from '../core/errors.js';\nimport type { WebhookEventDataMap, WebhookEventType } from '../generated/events.js';\nimport type { PendingEventData } from '../pending/events.js';\nimport { assertSignature, type RawBody, type VerifyOptions } from './signature.js';\n\nexport type { WebhookEventType } from '../generated/events.js';\n\n/** The `data` of an event type: the generated type plus the pending-of-the-spec additions. */\nexport type WebhookEventData<T extends WebhookEventType> = WebhookEventDataMap[T] &\n (T extends keyof PendingEventData ? PendingEventData[T] : unknown);\n\n/** The envelope every delivery shares. */\nexport interface WebhookEventEnvelope<T extends string = string, D = unknown> {\n /** Event id (`evt_…`). The same in every retry: use it to deduplicate. */\n id: string;\n type: T;\n /** Version of the `data` format. */\n version: number;\n /** When it happened, ISO 8601 UTC. Read it with a date parser, not by comparing text. */\n occurred_at: string;\n data: D;\n}\n\n/**\n * A verified webhook event, discriminated by `type`:\n *\n * ```ts\n * if (event.type === 'message.received') event.data.contact.phone;\n * ```\n *\n * New event types can arrive before this SDK knows them: answer `2xx` to the ones you do not\n * handle (a `switch` with a `default`).\n */\nexport type WebhookEvent = { [T in WebhookEventType]: WebhookEventEnvelope<T, WebhookEventData<T>> }[WebhookEventType];\n\n/** The event of a given type. */\nexport type WebhookEventOf<T extends WebhookEventType> = Extract<WebhookEvent, { type: T }>;\n\n/**\n * Verifies the signature and returns the parsed event. Throws {@link WebhookVerificationError}\n * (with `reason`) when the signature, the timestamp or the body are not valid.\n *\n * Pass the raw body as it arrived (with Express, `express.raw({ type: 'application/json' })`).\n */\nexport function constructEvent(rawBody: RawBody, signatureHeader: string | null | undefined, secret: string, options?: VerifyOptions): WebhookEvent {\n assertSignature(rawBody, signatureHeader, secret, options);\n const text = typeof rawBody === 'string' ? rawBody : Buffer.from(rawBody instanceof ArrayBuffer ? new Uint8Array(rawBody) : rawBody).toString('utf8');\n let parsed: unknown;\n try {\n parsed = JSON.parse(text);\n } catch {\n throw new WebhookVerificationError('invalid_json', 'The signature is valid but the body is not JSON.');\n }\n if (!isEnvelope(parsed)) {\n throw new WebhookVerificationError('invalid_event', 'The signature is valid but the body is not an event (id, type, data).');\n }\n return parsed as WebhookEvent;\n}\n\nfunction isEnvelope(value: unknown): value is WebhookEventEnvelope {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return false;\n const v = value as Record<string, unknown>;\n return typeof v.id === 'string' && typeof v.type === 'string' && 'data' in v;\n}\n","import type { Body, PathParams, Query, RequestOptions } from '../core/types.js';\nimport { constructEvent } from '../webhooks/events.js';\nimport { verify } from '../webhooks/signature.js';\nimport { Resource } from './base.js';\n\ntype SubscriptionId = PathParams<'/api/v1/webhooks/{id}', 'GET'>['id'];\n\n/**\n * Webhook subscriptions (accounts area) and the verification of deliveries.\n *\n * Reading needs `webhooks:read` and the rest `webhooks:write`; the catalog (`events()`) needs\n * `accounts:read`. A key only sees and manages subscriptions to events of the areas it can read\n * (`conversations:read`, `communities:read`, `accounts:read`): asking for others is a `422` on\n * `events`, and touching a subscription that has them is `403 permission_denied`.\n */\nexport class Webhooks extends Resource {\n /** Same as `Funnelchat.webhooks.verify`. */\n readonly verify = verify;\n /** Same as `Funnelchat.webhooks.constructEvent`. */\n readonly constructEvent = constructEvent;\n\n /** `GET /api/v1/webhooks/events`: the event types you can subscribe to, each with `status`. */\n events(options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/webhooks/events', { ...options });\n }\n\n /** `GET /api/v1/webhooks`: every subscription of the account (at most 50), not only yours. */\n list(options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/webhooks', { ...options });\n }\n\n /** `POST /api/v1/webhooks`: the response brings `secret` once. Store it, and store the `id`. */\n create(body: Body<'/api/v1/webhooks', 'POST'>, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/webhooks', { ...options, body });\n }\n\n /** `GET /api/v1/webhooks/{id}` (without the secret). */\n retrieve(id: SubscriptionId, options?: RequestOptions) {\n return this.client.request('GET', '/api/v1/webhooks/{id}', { ...options, path: { id } });\n }\n\n /** `PUT /api/v1/webhooks/{id}`: replaces `url`, `events`, `description` and `filters`. The secret stays. */\n update(id: SubscriptionId, body: Body<'/api/v1/webhooks/{id}', 'PUT'>, options?: RequestOptions) {\n return this.client.request('PUT', '/api/v1/webhooks/{id}', { ...options, path: { id }, body });\n }\n\n /** `DELETE /api/v1/webhooks/{id}`. */\n delete(id: SubscriptionId, options?: RequestOptions) {\n return this.client.request('DELETE', '/api/v1/webhooks/{id}', { ...options, path: { id } });\n }\n\n /**\n * `POST /api/v1/webhooks/{id}/rotate-secret`: the new secret comes once; the old one stops\n * working. **Not open to API keys** (`403 route_not_available`): rotate it from the panel.\n */\n rotateSecret(id: SubscriptionId, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/webhooks/{id}/rotate-secret', { ...options, path: { id } });\n }\n\n /** `POST /api/v1/webhooks/{id}/test`: delivers one signed `webhook.test` now. Check `succeeded`. */\n test(id: SubscriptionId, options?: RequestOptions) {\n return this.client.request('POST', '/api/v1/webhooks/{id}/test', { ...options, path: { id } });\n }\n\n /** `GET /api/v1/webhooks/{id}/deliveries`, paginated: one row per attempt, newest first. */\n listDeliveries(id: SubscriptionId, query?: Query<'/api/v1/webhooks/{id}/deliveries'>, options?: RequestOptions) {\n return this.client.paginate('/api/v1/webhooks/{id}/deliveries', { ...options, path: { id }, query });\n }\n}\n","/** The SDK version, sent in the `User-Agent`. A test keeps it equal to package.json. */\nexport const VERSION = '0.2.0';\n","import {\n APIConnectionError,\n APIConnectionTimeoutError,\n APIError,\n APIUserAbortError,\n FunnelchatError,\n} from './core/errors.js';\nimport { PagePromise } from './core/pagination.js';\nimport { APIPromise, type APIResponse, requestIdOf } from './core/api-promise.js';\nimport { NOT_RETRYABLE_CODES } from './core/error-codes.js';\nimport { isRetryable, isSendRequest, retryDelayMs } from './core/retry.js';\nimport type {\n ApiPath,\n HttpMethod,\n ListItem,\n MethodsOf,\n OptionsArg,\n PathsWithMethod,\n ResponseBody,\n TypedRequestOptions,\n UntypedRequestOptions,\n} from './core/types.js';\nimport { interpolatePath, joinUrl, serializeQuery } from './core/url.js';\nimport { ConnectLinks } from './resources/connect-links.js';\nimport { Contacts } from './resources/contacts.js';\nimport { Conversations } from './resources/conversations.js';\nimport { CustomFields } from './resources/custom-fields.js';\nimport { Devices } from './resources/devices.js';\nimport { Forms } from './resources/forms.js';\nimport { Groups } from './resources/groups.js';\nimport { Messages } from './resources/messages.js';\nimport { Tags } from './resources/tags.js';\nimport { Templates } from './resources/templates.js';\nimport { Webhooks } from './resources/webhooks.js';\nimport { VERSION } from './version.js';\nimport { constructEvent } from './webhooks/events.js';\nimport { verify } from './webhooks/signature.js';\n\nexport type Environment = 'production' | 'staging';\n\n/** Base URL of each environment: one URL for the whole public API. */\nexport const BASE_URLS: Readonly<Record<Environment, string>> = {\n production: 'https://api.funnelchat.com',\n staging: 'https://api-staging.funnelchat.com',\n};\n\nexport const DEFAULT_TIMEOUT_MS = 30_000;\nexport const DEFAULT_MAX_RETRIES = 2;\n\nexport interface ClientOptions {\n /** `<id>|fc_live_...`. Default: the `FUNNELCHAT_API_KEY` environment variable. */\n apiKey?: string;\n /** Overrides the URL of `environment` (for example a local edge). */\n baseUrl?: string;\n /** Default: `production`. */\n environment?: Environment;\n /** Timeout of each attempt, in milliseconds. Default: 30 000. */\n timeoutMs?: number;\n /** Automatic retries on `429`, `5xx` and network errors. Default: 2. `0` turns them off. */\n maxRetries?: number;\n /** Headers added to every request. */\n defaultHeaders?: Record<string, string>;\n /** A `fetch` implementation. Default: the global one (Node 18+). */\n fetch?: typeof fetch;\n}\n\n/** Signature-verification helpers that need no client (no API key). */\nconst webhookHelpers = { verify, constructEvent } as const;\n\n/**\n * Client of the Funnelchat public API.\n *\n * ```ts\n * const funnelchat = new Funnelchat({ apiKey: process.env.FUNNELCHAT_API_KEY });\n * const devices = await funnelchat.devices.list();\n * ```\n */\nexport class Funnelchat {\n /** `Funnelchat.webhooks.verify(...)` and `Funnelchat.webhooks.constructEvent(...)`, without a client. */\n static readonly webhooks = webhookHelpers;\n static readonly VERSION = VERSION;\n\n readonly baseUrl: string;\n readonly timeoutMs: number;\n readonly maxRetries: number;\n\n readonly contacts: Contacts;\n readonly conversations: Conversations;\n readonly messages: Messages;\n /** WhatsApp forms: build, publish, read the answers. Send one with `messages.sendForm`. */\n readonly forms: Forms;\n readonly templates: Templates;\n readonly tags: Tags;\n readonly customFields: CustomFields;\n readonly groups: Groups;\n readonly devices: Devices;\n /** Single-use pages where your customer connects a WhatsApp number to your account. */\n readonly connectLinks: ConnectLinks;\n /** Webhook subscriptions, plus `verify` and `constructEvent`. */\n readonly webhooks: Webhooks;\n\n // Private fields: the key never shows up in `console.log(client)` or in JSON.\n readonly #apiKey: string;\n readonly #fetch: typeof fetch;\n readonly #defaultHeaders: Record<string, string>;\n\n constructor(options: ClientOptions = {}) {\n const apiKey = options.apiKey ?? readEnv('FUNNELCHAT_API_KEY');\n if (!apiKey) {\n throw new FunnelchatError('Missing API key: pass it as `apiKey` or in the FUNNELCHAT_API_KEY environment variable.');\n }\n const environment = options.environment ?? 'production';\n if (!(environment in BASE_URLS)) {\n throw new FunnelchatError(`Unknown environment: ${String(environment)}. Use \"production\" or \"staging\".`);\n }\n const fetchImpl = options.fetch ?? globalThis.fetch;\n if (typeof fetchImpl !== 'function') {\n throw new FunnelchatError('No fetch available: use Node 18 or later, or pass `fetch` in the options.');\n }\n\n this.#apiKey = apiKey;\n this.#fetch = fetchImpl;\n this.#defaultHeaders = { ...options.defaultHeaders };\n this.baseUrl = (options.baseUrl ?? BASE_URLS[environment]).replace(/\\/+$/, '');\n this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n this.maxRetries = options.maxRetries ?? DEFAULT_MAX_RETRIES;\n\n this.contacts = new Contacts(this);\n this.conversations = new Conversations(this);\n this.messages = new Messages(this);\n this.forms = new Forms(this);\n this.templates = new Templates(this);\n this.tags = new Tags(this);\n this.customFields = new CustomFields(this);\n this.groups = new Groups(this);\n this.devices = new Devices(this);\n this.connectLinks = new ConnectLinks(this);\n this.webhooks = new Webhooks(this);\n }\n\n /** What `JSON.stringify(client)` shows: the configuration, never the key. */\n toJSON(): { baseUrl: string; timeoutMs: number; maxRetries: number } {\n return { baseUrl: this.baseUrl, timeoutMs: this.timeoutMs, maxRetries: this.maxRetries };\n }\n\n /**\n * Calls any route. With a path of the spec (`'/api/v1/contacts/{contact}'`) the path parameters,\n * query, body and response are typed; any other path works untyped.\n *\n * ```ts\n * const contact = await funnelchat.request('GET', '/api/v1/contacts/{contact}', { path: { contact: 2001 } });\n * ```\n */\n request<P extends ApiPath, M extends MethodsOf<P>>(method: M, path: P, ...options: OptionsArg<TypedRequestOptions<P, M>>): APIPromise<ResponseBody<P, M>>;\n request<T = unknown, P extends string = string>(method: HttpMethod, path: P extends ApiPath ? never : P, options?: UntypedRequestOptions): APIPromise<T>;\n request(method: HttpMethod, path: string, options?: object): APIPromise<unknown> {\n return new APIPromise(this.#send(method, path, (options ?? {}) as UntypedRequestOptions));\n }\n\n /**\n * Walks any list route. `await` it for the first page or `for await` it for every item.\n *\n * ```ts\n * for await (const tag of funnelchat.paginate('/api/v1/tags', { query: { perPage: 100 } })) { … }\n * ```\n */\n paginate<P extends PathsWithMethod<'GET'>>(path: P, ...options: OptionsArg<TypedRequestOptions<P, 'GET'>>): PagePromise<ListItem<P>>;\n paginate<T = unknown, P extends string = string>(path: P extends ApiPath ? never : P, options?: UntypedRequestOptions): PagePromise<T>;\n paginate(path: string, options?: object): PagePromise<unknown> {\n const { query, ...rest } = (options ?? {}) as UntypedRequestOptions;\n return new PagePromise<unknown>((pageQuery) => this.#send('GET', path, { ...rest, query: pageQuery }), { ...query });\n }\n\n async #send(method: HttpMethod, template: string, options: UntypedRequestOptions): Promise<APIResponse<unknown>> {\n const verb = method.toUpperCase() as HttpMethod;\n const pathname = interpolatePath(template, options.path);\n const url = joinUrl(this.baseUrl, pathname, serializeQuery(options.query));\n const errorUrl = joinUrl(this.baseUrl, pathname.split('?')[0] ?? pathname, '');\n const maxRetries = Math.max(0, options.maxRetries ?? this.maxRetries);\n // A send is never repeated unless the caller asks; then it follows the rule of every write.\n const retriesAllowed = options.retrySend === true || !isSendRequest(verb, pathname.split('?')[0] ?? pathname);\n const timeoutMs = options.timeoutMs ?? this.timeoutMs;\n const { body, contentType } = encodeBody(options.body);\n const headers: Record<string, string> = {\n Accept: 'application/json',\n 'User-Agent': `funnelchat-node/${VERSION} node/${typeof process !== 'undefined' ? process.version : 'unknown'}`,\n ...(contentType ? { 'Content-Type': contentType } : {}),\n ...this.#defaultHeaders,\n ...options.headers,\n Authorization: `Bearer ${this.#apiKey}`,\n };\n\n for (let attempt = 0; ; attempt++) {\n const canRetry = retriesAllowed && attempt < maxRetries;\n let result: { response: Response; text: string };\n try {\n result = await this.#attempt(verb, url, headers, body, timeoutMs, options.signal);\n } catch (error) {\n if (error instanceof APIConnectionError && canRetry && isRetryable(verb, 'network')) {\n await sleep(retryDelayMs(attempt, undefined) ?? 0, options.signal);\n continue;\n }\n throw error;\n }\n\n const { response, text } = result;\n const parsed = parseBody(response, text);\n if (response.ok) return { data: parsed, response, requestId: requestIdOf(response.headers) };\n\n const error = APIError.from({ status: response.status, body: parsed, headers: response.headers, method: verb, url: errorUrl });\n if (canRetry && isRetryable(verb, response.status) && !NOT_RETRYABLE_CODES.has(error.code ?? '')) {\n const delay = retryDelayMs(attempt, error.retryAfter);\n if (delay !== null) {\n await sleep(delay, options.signal);\n continue;\n }\n }\n throw error;\n }\n }\n\n async #attempt(\n method: HttpMethod,\n url: string,\n headers: Record<string, string>,\n body: BodyInit | undefined,\n timeoutMs: number,\n signal: AbortSignal | undefined,\n ): Promise<{ response: Response; text: string }> {\n if (signal?.aborted) throw new APIUserAbortError({ cause: signal.reason });\n const controller = new AbortController();\n const onAbort = () => controller.abort(signal?.reason);\n signal?.addEventListener('abort', onAbort, { once: true });\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeoutMs);\n\n const classify = (cause: unknown): Error => {\n if (signal?.aborted) return new APIUserAbortError({ cause });\n if (timedOut) return new APIConnectionTimeoutError(timeoutMs, { cause });\n return new APIConnectionError(undefined, { cause });\n };\n\n try {\n let response: Response;\n try {\n response = await this.#fetch(url, { method, headers, body, signal: controller.signal });\n } catch (error) {\n throw classify(error);\n }\n try {\n return { response, text: await response.text() };\n } catch (error) {\n throw classify(error);\n }\n } finally {\n clearTimeout(timer);\n signal?.removeEventListener('abort', onAbort);\n }\n }\n}\n\nfunction readEnv(name: string): string | undefined {\n if (typeof process === 'undefined' || !process.env) return undefined;\n const value = process.env[name];\n return value && value.trim() !== '' ? value.trim() : undefined;\n}\n\nfunction encodeBody(body: unknown): { body: BodyInit | undefined; contentType: string | undefined } {\n if (body === undefined) return { body: undefined, contentType: undefined };\n if (typeof FormData !== 'undefined' && body instanceof FormData) return { body, contentType: undefined };\n if (body instanceof URLSearchParams) return { body, contentType: undefined };\n if (typeof body === 'string') return { body, contentType: 'application/json' };\n return { body: JSON.stringify(body), contentType: 'application/json' };\n}\n\n/** The decoded body: JSON when it parses, the text otherwise, `null` when there is none (a `204`). */\nfunction parseBody(response: Response, text: string): unknown {\n if (text === '') return null;\n const type = response.headers.get('content-type') ?? '';\n if (type.includes('json') || /^\\s*[[{]/.test(text)) {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n }\n return text;\n}\n\nfunction sleep(ms: number, signal: AbortSignal | undefined): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new APIUserAbortError({ cause: signal.reason }));\n return;\n }\n const onAbort = () => {\n clearTimeout(timer);\n reject(new APIUserAbortError({ cause: signal?.reason }));\n };\n const timer = setTimeout(() => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n }, ms);\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n}\n","/**\n * GENERATED FILE — do not edit. Run `npm run generate`.\n * Source: spec/funnelchat.json (sha256 8bbbae569b4cab52…) + spec/pending.json.\n */\nimport type { components } from './openapi.js';\n\n/** One entry of the webhook event catalog. `pending` = taken from spec/pending.json. */\nexport interface WebhookEventInfo {\n readonly type: string;\n readonly domains: readonly string[];\n /** `live`: emitted today. `planned`: you can subscribe, but nothing is emitted yet. */\n readonly status: 'live' | 'planned';\n readonly pending: boolean;\n readonly description: string | null;\n}\n\n/** Every webhook event type known to the spec (55). */\nexport const webhookEvents = [\n {\"type\":\"account.blocked\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"The account was blocked by usage: the 24-hour grace period after using up the monthly active contacts ended.\"},\n {\"type\":\"ai_quota.low_balance\",\"domains\":[\"accounts\"],\"status\":\"planned\",\"pending\":true,\"description\":\"The AI message quota is about to run out. Planned: not emitted yet.\"},\n {\"type\":\"ai_quota.topup_failed\",\"domains\":[\"accounts\"],\"status\":\"planned\",\"pending\":true,\"description\":\"An AI quota top-up could not be processed. Planned: not emitted yet.\"},\n {\"type\":\"ai_quota.topup_succeeded\",\"domains\":[\"accounts\"],\"status\":\"planned\",\"pending\":true,\"description\":\"An AI quota top-up was credited. Planned: not emitted yet.\"},\n {\"type\":\"billing.payment_failed\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"A charge of the subscription could not be processed (Stripe subscriptions only).\"},\n {\"type\":\"billing.plan_blocked\",\"domains\":[\"accounts\"],\"status\":\"planned\",\"pending\":true,\"description\":\"The plan was blocked by an unprocessed charge. Planned: not emitted yet.\"},\n {\"type\":\"billing.upcoming_charge\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"The next charge of the subscription is coming up (Stripe subscriptions only).\"},\n {\"type\":\"broadcast.finished\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Una campaña llegó a su estado final (enviada, fallida o con fallos parciales), con sus conteos.\\n\\n`status` es `success`, `failed` o `partially_failed`. `reason` dice por qué terminó: `completed` (se enviaron todas las páginas), `cancelled` (se cerró una campaña pausada), `template_rejected` (Meta rechazó la plantilla, o su categoría cambió, mientras la campaña esperaba), `approval_expired` (la plantilla no se aprobó a tiempo), `mac_lockout` (la cuenta alcanzó su límite de contactos activos), `no_recipients` (la audiencia quedó vacía) o `error` (el envío no pudo despacharse). `totals` son los conteos del envío: `processed` (destinatarios procesados), `failed` y `skipped_unreachable` (destinatarios que el canal no puede alcanzar); valen 0 si la campaña terminó antes de enviar. Se emite una sola vez por campaña.\"},\n {\"type\":\"broadcast.paused\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Una campaña se pausó sola, por ejemplo porque bajó la calidad del número.\\n\\n`reason` es `quality_degraded` (la calidad del número bajó respecto de la del inicio, o llegó a RED) o `quality_unreadable` (no se pudo leer la calidad en tres controles seguidos). `quality` y `quality_baseline` son la calidad de Meta leída en el control y la del inicio del envío (`GREEN`, `YELLOW`, `RED`), o `null` si no se pudo leer. Sólo las campañas con envío inteligente se pausan solas. Reanudar la campaña y que se pause otra vez emite otro evento.\"},\n {\"type\":\"campaign.no_groups_available\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":true,\"description\":\"A campaign has no groups to send the people who come through its link to.\"},\n {\"type\":\"campaign.status_changed\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Una campaña se activó o se pausó.\"},\n {\"type\":\"contact.created\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Se creó un contacto nuevo en la cuenta.\\n\\nSe envía un evento por cada contacto nuevo, sea cual sea el canal: un mensaje entrante, la creación manual, una importación o la API. No se envía cuando el contacto ya existía y sólo se actualiza, ni para los contactos que la plataforma crea para sus propias notificaciones. En importaciones grandes el límite de volumen de la cuenta puede descartar parte de los eventos.\"},\n {\"type\":\"contact.stage_changed\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un contacto cambió de etapa en un tablero.\\n\\nSe envía un evento por cada contacto que cambia de etapa en un tablero por etapas. `kind` es entry (entra al tablero, `from_stage` es null), move (pasa de una etapa a otra), exit (sale del tablero, `to_stage` es null) o stage_deleted (se reubica porque su etapa se borró; el nombre de la etapa borrada es null). No se envía si el contacto se coloca en la etapa en la que ya estaba.\"},\n {\"type\":\"contact.tag_added\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un contacto recibió una etiqueta.\\n\\nSe envía un evento por cada contacto y etiqueta agregados, también en operaciones en bloque; no se envía si el contacto ya tenía la etiqueta. `source` indica el origen: manual, flow, bulk, import, sync, walink o ai. En operaciones en bloque grandes el límite de volumen de la cuenta puede descartar parte de los eventos.\"},\n {\"type\":\"contact.tag_removed\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un contacto perdió una etiqueta.\\n\\nSe envía un evento por cada contacto y etiqueta quitados, también en operaciones en bloque; no se envía si el contacto no tenía la etiqueta. No se envía al borrar la etiqueta, al borrar o fusionar contactos ni al desvincular etiquetas de un tablero. `source` indica el origen: manual, flow o bulk. En operaciones en bloque grandes el límite de volumen de la cuenta puede descartar parte de los eventos.\"},\n {\"type\":\"conversation.assigned\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Una conversación quedó asignada a una persona del equipo o a un agente de IA.\\n\\nSe envía cuando una conversación queda asignada a una persona del equipo (`assignee.type` = `human`) o a un agente de IA (`assignee.type` = `ai`), por cualquier camino. `assignee` trae el tipo y el nombre, nunca un identificador. No se envía al desasignar, ni cuando se vuelve a enviar el mismo asignado.\"},\n {\"type\":\"conversation.closed\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Una conversación pasó a cerrada.\\n\\nSe envía cuando una conversación pasa de abierta a cerrada. No se envía si la conversación ya estaba cerrada ni cuando se reabre.\"},\n {\"type\":\"daily_report.generated\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":true,\"description\":\"The daily report of the account was generated (clicks, joins and leaves).\"},\n {\"type\":\"device.connected\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"One of the numbers of the account got connected: by scanning the QR code, by finishing the sign-up of a WhatsApp Cloud number, or through a connect link.\"},\n {\"type\":\"device.deleted\",\"domains\":[\"accounts\"],\"status\":\"planned\",\"pending\":true,\"description\":\"A number of the account was deleted: its slot of the plan is free again.\"},\n {\"type\":\"device.disconnected\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"One of the numbers of the account disconnected and can no longer send or receive: a QR session that closed or was protected from a shadow ban, an official number that failed its re-registration, or one disconnected from the panel.\"},\n {\"type\":\"device.health_changed\",\"domains\":[\"accounts\"],\"status\":\"planned\",\"pending\":true,\"description\":\"The health of an official number changed (what Meta lets it do). Emitted only when the overall state changes.\"},\n {\"type\":\"flow.completed\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un contacto terminó un flujo de automatización.\\n\\nSe envía una sola vez por cada ejecución de un flujo, cuando termina con éxito. No se envía si la ejecución se cortó, se canceló, quedó bloqueada o falló. `contact` es `null` si la ejecución no tiene un contacto asociado. Un flujo muy usado puede generar muchos eventos seguidos.\"},\n {\"type\":\"flow.failed\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"La ejecución de un flujo para un contacto terminó por un error.\\n\\nSe envía una sola vez por cada ejecución de un flujo que termina por un error, no porque llegó al final. `reason` indica el motivo y toma uno de estos valores: `node_missing` (el paso a ejecutar ya no existe), `unknown_node_type` (el paso es de un tipo no reconocido), `missing_subflow` (el flujo que debía ejecutarse dentro de otro ya no existe), `malformed_node` (el paso tiene una configuración dañada), `loop_detected` (la ejecución dio vueltas sin esperar nada) y `execution_error` (un error inesperado detuvo la ejecución). No se envía si la ejecución se canceló, quedó bloqueada o se cortó porque se editó el flujo o se unieron contactos. `contact` es `null` si la ejecución no tiene un contacto asociado.\"},\n {\"type\":\"group_action.failed\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":true,\"description\":\"An action on a group of a campaign failed.\"},\n {\"type\":\"group_join_request.created\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":true,\"description\":\"Someone asked to join a group that requires approval.\"},\n {\"type\":\"group_join_request.revoked\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":true,\"description\":\"Someone withdrew their request to join a group.\"},\n {\"type\":\"group_participant.joined\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Una persona entró a un grupo de una campaña.\"},\n {\"type\":\"group_participant.left\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Una persona salió de un grupo de una campaña.\"},\n {\"type\":\"group.blocked\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un grupo quedó inoperable: sin administrador conectado, con el link de invitación inválido o suspendido por WhatsApp.\"},\n {\"type\":\"group.created\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Se creó o se importó un grupo dentro de una campaña de la cuenta.\"},\n {\"type\":\"group.full\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":true,\"description\":\"A group went from not full to full.\"},\n {\"type\":\"group.invite_link_down\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"El enlace de invitación de un grupo quedó confirmado caído (WhatsApp respondió que no existe y la renovación no consiguió otro); no se publica por errores transitorios ni por grupos prohibidos o suspendidos, y se publica una sola vez por episodio de bloqueo.\"},\n {\"type\":\"group.invite_link_renewed\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"El enlace de invitación de un grupo cambió por una renovación, automática al detectarse inválido o pedida por el usuario; en v0 no se publican los cambios que detecta la sincronización ni el enlace inicial al crear el grupo.\"},\n {\"type\":\"group.message_received\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":true,\"description\":\"Someone wrote in a group of one of your numbers. Not emitted for the messages of your own numbers.\"},\n {\"type\":\"group.reaction_added\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":true,\"description\":\"Someone reacted to a message of a group.\"},\n {\"type\":\"group.recovered\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un grupo que estaba bloqueado volvió a operar.\"},\n {\"type\":\"mac.expiring\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"Some monthly active contacts expire in the next 7 days.\"},\n {\"type\":\"mac.usage_100\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"The account used up its monthly active contacts of the cycle; a 24-hour grace period starts.\"},\n {\"type\":\"mac.usage_80\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"The account reached 80% of its monthly active contacts of the cycle.\"},\n {\"type\":\"message.received\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un contacto le escribió a un número de WhatsApp de la cuenta.\"},\n {\"type\":\"message.status_changed\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":true,\"description\":\"The delivery status of a message you sent with the API changed. One notice per transition, never one that goes back; `queued` is not reported. It must be asked for explicitly in `events`.\"},\n {\"type\":\"pipeline.finished\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Terminó un pipeline de operaciones sobre grupos, con su resultado agregado.\"},\n {\"type\":\"poll.voted\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un participante votó en una encuesta enviada a un grupo, o cambió su voto.\"},\n {\"type\":\"scheduled_message.finished\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un envío programado terminó, con su resultado agregado.\"},\n {\"type\":\"scheduled_message.group_delivery_failed\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Un envío programado falló en un grupo concreto, con el motivo desagregado.\"},\n {\"type\":\"scheduled_message.response_received\",\"domains\":[\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Alguien respondió a un envío programado votando una encuesta o respondiendo a un evento.\"},\n {\"type\":\"subscription.cancellation_confirmed\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"The cancellation of the subscription was confirmed (Stripe subscriptions only).\"},\n {\"type\":\"subscription.dormant_ending\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"The dormant-account period is about to end.\"},\n {\"type\":\"subscription.expiring\",\"domains\":[\"accounts\"],\"status\":\"planned\",\"pending\":true,\"description\":\"The subscription is about to expire. Planned: not emitted yet.\"},\n {\"type\":\"subscription.reactivated\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"The scheduled cancellation of the subscription was reverted (Stripe subscriptions only).\"},\n {\"type\":\"subscription.trial_ending\",\"domains\":[\"accounts\"],\"status\":\"live\",\"pending\":true,\"description\":\"The trial period is about to end.\"},\n {\"type\":\"template.status_changed\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":false,\"description\":\"Una plantilla cambió de estado de aprobación en Meta.\\n\\n`template` identifica la plantilla igual que `GET /templates` (`id`, `uid`, `name`, `category`). `previous_status` y `status` son los estados tal como los devuelve la API (por ejemplo `PENDING`, `APPROVED`, `REJECTED`, `PAUSED`); `previous_status` es `null` si la plantilla no tenía estado. `reason` trae la observación de rechazo (traducida como en la API y limitada a 500 caracteres) cuando el cambio es un rechazo informado al crear la plantilla, y es `null` en el resto. No se emite si Meta reenvía el estado que la plantilla ya tenía. Si una misma plantilla de Meta figura en varias cuentas, cada cuenta recibe su propio evento.\"},\n {\"type\":\"webhook.test\",\"domains\":[\"conversations\",\"communities\"],\"status\":\"live\",\"pending\":false,\"description\":\"Evento de prueba enviado desde la ruta de prueba de una suscripción.\"},\n {\"type\":\"whatsapp_form.completed\",\"domains\":[\"conversations\"],\"status\":\"live\",\"pending\":true,\"description\":\"A contact completed a form you sent them.\"},\n] as const satisfies readonly WebhookEventInfo[];\n\n/** A webhook event type known to the spec. */\nexport type WebhookEventType = (typeof webhookEvents)[number]['type'];\n\n/**\n * The `data` of each event. When the spec only has an example, the type is inferred from it:\n * keys in the example are required and `null` values are `unknown`.\n */\nexport interface WebhookEventDataMap {\n /** `account.blocked` (live, pending of the spec; typed from: example). The account was blocked by usage: the 24-hour grace period after using up the monthly active contacts ended. */\n \"account.blocked\": {\n reason: string;\n grace_started_at: string;\n grace_expired_at: string;\n };\n /** `ai_quota.low_balance` (planned, pending of the spec; typed from: no example or schema yet). The AI message quota is about to run out. Planned: not emitted yet. */\n \"ai_quota.low_balance\": Record<string, unknown>;\n /** `ai_quota.topup_failed` (planned, pending of the spec; typed from: no example or schema yet). An AI quota top-up could not be processed. Planned: not emitted yet. */\n \"ai_quota.topup_failed\": Record<string, unknown>;\n /** `ai_quota.topup_succeeded` (planned, pending of the spec; typed from: no example or schema yet). An AI quota top-up was credited. Planned: not emitted yet. */\n \"ai_quota.topup_succeeded\": Record<string, unknown>;\n /** `billing.payment_failed` (live, pending of the spec; typed from: example). A charge of the subscription could not be processed (Stripe subscriptions only). */\n \"billing.payment_failed\": {\n amount_cents: number;\n currency: string;\n };\n /** `billing.plan_blocked` (planned, pending of the spec; typed from: no example or schema yet). The plan was blocked by an unprocessed charge. Planned: not emitted yet. */\n \"billing.plan_blocked\": Record<string, unknown>;\n /** `billing.upcoming_charge` (live, pending of the spec; typed from: example). The next charge of the subscription is coming up (Stripe subscriptions only). */\n \"billing.upcoming_charge\": {\n charge_date: string;\n amount_cents: number;\n currency: string;\n };\n /** `broadcast.finished` (live; typed from: example). Una campaña llegó a su estado final (enviada, fallida o con fallos parciales), con sus conteos. `status` es `success`, `failed` o `partially_failed`. `reason` dice por qué terminó: `completed` (se enviaron todas las páginas), `cancelled` (se cerró una campaña pausada), `template_rejected` (Meta rechazó la plantilla, o su categoría cambió, mientras la campaña esperaba), `approval_expired` (la plantilla no se aprobó a tiempo), `mac_lockout` (la cuenta alcanzó su límite de contactos activos), `no_recipients` (la audiencia quedó vacía) o `error` (el envío no pudo despacharse). `totals` son los conteos del envío: `processed` (destinatarios procesados), `failed` y `skipped_unreachable` (destinatarios que el canal no puede alcanzar); valen 0 si la campaña terminó antes de enviar. Se emite una sola vez por campaña. */\n \"broadcast.finished\": {\n broadcast: {\n id: number;\n name: string;\n };\n status: string;\n reason: string;\n totals: {\n processed: number;\n failed: number;\n skipped_unreachable: number;\n };\n };\n /** `broadcast.paused` (live; typed from: example). Una campaña se pausó sola, por ejemplo porque bajó la calidad del número. `reason` es `quality_degraded` (la calidad del número bajó respecto de la del inicio, o llegó a RED) o `quality_unreadable` (no se pudo leer la calidad en tres controles seguidos). `quality` y `quality_baseline` son la calidad de Meta leída en el control y la del inicio del envío (`GREEN`, `YELLOW`, `RED`), o `null` si no se pudo leer. Sólo las campañas con envío inteligente se pausan solas. Reanudar la campaña y que se pause otra vez emite otro evento. */\n \"broadcast.paused\": {\n broadcast: {\n id: number;\n name: string;\n };\n reason: string;\n quality: string;\n quality_baseline: string;\n };\n /** `campaign.no_groups_available` (live, pending of the spec; typed from: example). A campaign has no groups to send the people who come through its link to. */\n \"campaign.no_groups_available\": {\n campaign: {\n uuid: string;\n name: string;\n };\n reason: string;\n };\n /** `campaign.status_changed` (live; typed from: example). Una campaña se activó o se pausó. */\n \"campaign.status_changed\": {\n campaign: {\n uuid: string;\n name: string;\n };\n from: string;\n to: string;\n };\n /** `contact.created` (live; typed from: example). Se creó un contacto nuevo en la cuenta. Se envía un evento por cada contacto nuevo, sea cual sea el canal: un mensaje entrante, la creación manual, una importación o la API. No se envía cuando el contacto ya existía y sólo se actualiza, ni para los contactos que la plataforma crea para sus propias notificaciones. En importaciones grandes el límite de volumen de la cuenta puede descartar parte de los eventos. */\n \"contact.created\": {\n contact: {\n id: number;\n name: string;\n phone: string;\n email: string;\n };\n };\n /** `contact.stage_changed` (live; typed from: example). Un contacto cambió de etapa en un tablero. Se envía un evento por cada contacto que cambia de etapa en un tablero por etapas. `kind` es entry (entra al tablero, `from_stage` es null), move (pasa de una etapa a otra), exit (sale del tablero, `to_stage` es null) o stage_deleted (se reubica porque su etapa se borró; el nombre de la etapa borrada es null). No se envía si el contacto se coloca en la etapa en la que ya estaba. */\n \"contact.stage_changed\": {\n contact: {\n id: number;\n name: string;\n phone: string;\n };\n board: {\n id: number;\n name: string;\n };\n kind: string;\n from_stage: {\n id: number;\n name: string;\n position: number;\n };\n to_stage: {\n id: number;\n name: string;\n position: number;\n };\n };\n /** `contact.tag_added` (live; typed from: example). Un contacto recibió una etiqueta. Se envía un evento por cada contacto y etiqueta agregados, también en operaciones en bloque; no se envía si el contacto ya tenía la etiqueta. `source` indica el origen: manual, flow, bulk, import, sync, walink o ai. En operaciones en bloque grandes el límite de volumen de la cuenta puede descartar parte de los eventos. */\n \"contact.tag_added\": {\n contact: {\n id: number;\n name: string;\n phone: string;\n };\n tag: {\n id: number;\n name: string;\n };\n source: string;\n };\n /** `contact.tag_removed` (live; typed from: example). Un contacto perdió una etiqueta. Se envía un evento por cada contacto y etiqueta quitados, también en operaciones en bloque; no se envía si el contacto no tenía la etiqueta. No se envía al borrar la etiqueta, al borrar o fusionar contactos ni al desvincular etiquetas de un tablero. `source` indica el origen: manual, flow o bulk. En operaciones en bloque grandes el límite de volumen de la cuenta puede descartar parte de los eventos. */\n \"contact.tag_removed\": {\n contact: {\n id: number;\n name: string;\n phone: string;\n };\n tag: {\n id: number;\n name: string;\n };\n source: string;\n };\n /** `conversation.assigned` (live; typed from: example). Una conversación quedó asignada a una persona del equipo o a un agente de IA. Se envía cuando una conversación queda asignada a una persona del equipo (`assignee.type` = `human`) o a un agente de IA (`assignee.type` = `ai`), por cualquier camino. `assignee` trae el tipo y el nombre, nunca un identificador. No se envía al desasignar, ni cuando se vuelve a enviar el mismo asignado. */\n \"conversation.assigned\": {\n contact: {\n id: number;\n name: string;\n phone: string;\n };\n assignee: {\n type: string;\n name: string;\n };\n };\n /** `conversation.closed` (live; typed from: example). Una conversación pasó a cerrada. Se envía cuando una conversación pasa de abierta a cerrada. No se envía si la conversación ya estaba cerrada ni cuando se reabre. */\n \"conversation.closed\": {\n contact: {\n id: number;\n name: string;\n phone: string;\n };\n };\n /** `daily_report.generated` (live, pending of the spec; typed from: example). The daily report of the account was generated (clicks, joins and leaves). */\n \"daily_report.generated\": {\n period: {\n date: string;\n timezone: string;\n };\n clicks: number;\n joins: number;\n leaves: number;\n conversion_rate: number;\n };\n /** `device.connected` (live, pending of the spec; typed from: schema). One of the numbers of the account got connected: by scanning the QR code, by finishing the sign-up of a WhatsApp Cloud number, or through a connect link. */\n \"device.connected\": {\n device: components[\"schemas\"][\"PendingWebhookDevice\"];\n connected_at: string;\n /** The connect link of this connection, or `null` when it did not come from a link. */\n connect_link_id?: number | null;\n };\n /** `device.deleted` (planned, pending of the spec; typed from: schema). A number of the account was deleted: its slot of the plan is free again. */\n \"device.deleted\": {\n device: components[\"schemas\"][\"PendingWebhookDevice\"];\n deleted_at: string;\n /** The connect link that last connected the number, or `null`. */\n connect_link_id?: number | null;\n };\n /** `device.disconnected` (live, pending of the spec; typed from: schema). One of the numbers of the account disconnected and can no longer send or receive: a QR session that closed or was protected from a shadow ban, an official number that failed its re-registration, or one disconnected from the panel. */\n \"device.disconnected\": {\n device: components[\"schemas\"][\"PendingWebhookDevice\"];\n disconnected_at: string;\n reason?: \"qr_logged_out\" | \"meta_account_not_registered\" | \"shadow_ban_protection\" | \"provider_error\" | \"unknown\" | \"disconnected_by_user\";\n /** The connect link that last connected the number, or `null`. */\n connect_link_id?: number | null;\n };\n /** `device.health_changed` (planned, pending of the spec; typed from: schema). The health of an official number changed (what Meta lets it do). Emitted only when the overall state changes. */\n \"device.health_changed\": {\n device: components[\"schemas\"][\"PendingWebhookDevice\"];\n previous_state: \"available\" | \"limited\" | \"blocked\" | \"unknown\";\n state: \"available\" | \"limited\" | \"blocked\" | \"unknown\";\n changed_at: string;\n /** The connect link that last connected the number, or `null`. */\n connect_link_id?: number | null;\n };\n /** `flow.completed` (live; typed from: example). Un contacto terminó un flujo de automatización. Se envía una sola vez por cada ejecución de un flujo, cuando termina con éxito. No se envía si la ejecución se cortó, se canceló, quedó bloqueada o falló. `contact` es `null` si la ejecución no tiene un contacto asociado. Un flujo muy usado puede generar muchos eventos seguidos. */\n \"flow.completed\": {\n flow: {\n id: number;\n name: string;\n };\n contact: {\n id: number;\n name: string;\n phone: string;\n };\n };\n /** `flow.failed` (live; typed from: example). La ejecución de un flujo para un contacto terminó por un error. Se envía una sola vez por cada ejecución de un flujo que termina por un error, no porque llegó al final. `reason` indica el motivo y toma uno de estos valores: `node_missing` (el paso a ejecutar ya no existe), `unknown_node_type` (el paso es de un tipo no reconocido), `missing_subflow` (el flujo que debía ejecutarse dentro de otro ya no existe), `malformed_node` (el paso tiene una configuración dañada), `loop_detected` (la ejecución dio vueltas sin esperar nada) y `execution_error` (un error inesperado detuvo la ejecución). No se envía si la ejecución se canceló, quedó bloqueada o se cortó porque se editó el flujo o se unieron contactos. `contact` es `null` si la ejecución no tiene un contacto asociado. */\n \"flow.failed\": {\n flow: {\n id: number;\n name: string;\n };\n contact: {\n id: number;\n name: string;\n phone: string;\n };\n reason: string;\n };\n /** `group_action.failed` (live, pending of the spec; typed from: schema). An action on a group of a campaign failed. */\n \"group_action.failed\": {\n campaign: ({\n uuid: string;\n name: string | null;\n }) | null;\n pipeline: ({\n uuid: string;\n name: string | null;\n }) | null;\n group: ({\n uid: string;\n name: string | null;\n }) | null;\n action: {\n /** `null` for the actions of a campaign. */\n uuid: string | null;\n type: string;\n };\n reason: string;\n };\n /** `group_join_request.created` (live, pending of the spec; typed from: schema). Someone asked to join a group that requires approval. */\n \"group_join_request.created\": {\n group: {\n uid: string;\n name: string | null;\n };\n participant: {\n identity: string;\n identity_type: \"phone\" | \"whatsapp_user\";\n name: string | null;\n };\n };\n /** `group_join_request.revoked` (live, pending of the spec; typed from: schema). Someone withdrew their request to join a group. */\n \"group_join_request.revoked\": {\n group: {\n uid: string;\n name: string | null;\n };\n participant: {\n identity: string;\n identity_type: \"phone\" | \"whatsapp_user\";\n name: string | null;\n };\n };\n /** `group_participant.joined` (live; typed from: example). Una persona entró a un grupo de una campaña. */\n \"group_participant.joined\": {\n group: {\n uid: string;\n name: string;\n };\n campaign: {\n uuid: string;\n };\n participant: {\n identity: string;\n identity_type: string;\n name: string;\n };\n };\n /** `group_participant.left` (live; typed from: example). Una persona salió de un grupo de una campaña. */\n \"group_participant.left\": {\n group: {\n uid: string;\n name: string;\n };\n campaign: {\n uuid: string;\n };\n participant: {\n identity: string;\n identity_type: string;\n name: string;\n };\n };\n /** `group.blocked` (live; typed from: example). Un grupo quedó inoperable: sin administrador conectado, con el link de invitación inválido o suspendido por WhatsApp. */\n \"group.blocked\": {\n group: {\n uid: string;\n name: string;\n };\n campaign: {\n uuid: string;\n };\n reason: string;\n };\n /** `group.created` (live; typed from: example). Se creó o se importó un grupo dentro de una campaña de la cuenta. */\n \"group.created\": {\n group: {\n uid: string;\n name: string;\n type: string;\n };\n campaign: {\n uuid: string;\n name: string;\n };\n source: string;\n };\n /** `group.full` (live, pending of the spec; typed from: example). A group went from not full to full. */\n \"group.full\": {\n group: {\n uid: string;\n name: string;\n type: string;\n };\n campaign: {\n uuid: string;\n name: string;\n };\n trigger: string;\n participants: number;\n };\n /** `group.invite_link_down` (live; typed from: example). El enlace de invitación de un grupo quedó confirmado caído (WhatsApp respondió que no existe y la renovación no consiguió otro); no se publica por errores transitorios ni por grupos prohibidos o suspendidos, y se publica una sola vez por episodio de bloqueo. */\n \"group.invite_link_down\": {\n group: {\n uid: string;\n name: string;\n type: string;\n };\n campaign: {\n uuid: string;\n name: string;\n };\n reason: string;\n renewal_attempted: boolean;\n };\n /** `group.invite_link_renewed` (live; typed from: example). El enlace de invitación de un grupo cambió por una renovación, automática al detectarse inválido o pedida por el usuario; en v0 no se publican los cambios que detecta la sincronización ni el enlace inicial al crear el grupo. */\n \"group.invite_link_renewed\": {\n group: {\n uid: string;\n name: string;\n type: string;\n };\n campaign: {\n uuid: string;\n name: string;\n };\n invite_link: string;\n previous_invite_link: string;\n trigger: string;\n recovered: boolean;\n };\n /** `group.message_received` (live, pending of the spec; typed from: schema). Someone wrote in a group of one of your numbers. Not emitted for the messages of your own numbers. */\n \"group.message_received\": {\n group: {\n uid: string;\n name: string | null;\n };\n message: {\n uid: string;\n type: string;\n /** Only with `type: text`. */\n text: string | null;\n caption: string | null;\n media_url: string | null;\n mime_type: string | null;\n file_name: string | null;\n quoted_uid: string | null;\n };\n participant: {\n identity: string;\n identity_type: \"phone\" | \"whatsapp_user\";\n name: string | null;\n };\n };\n /** `group.reaction_added` (live, pending of the spec; typed from: schema). Someone reacted to a message of a group. */\n \"group.reaction_added\": {\n group: {\n uid: string;\n name: string | null;\n };\n message: {\n uid: string;\n };\n participant: {\n identity: string;\n identity_type: \"phone\" | \"whatsapp_user\";\n name: string | null;\n };\n reaction: string;\n };\n /** `group.recovered` (live; typed from: example). Un grupo que estaba bloqueado volvió a operar. */\n \"group.recovered\": {\n group: {\n uid: string;\n name: string;\n };\n campaign: {\n uuid: string;\n };\n reason: string;\n };\n /** `mac.expiring` (live, pending of the spec; typed from: example). Some monthly active contacts expire in the next 7 days. */\n \"mac.expiring\": {\n contacts_expiring: number;\n expires_at: string;\n };\n /** `mac.usage_100` (live, pending of the spec; typed from: example). The account used up its monthly active contacts of the cycle; a 24-hour grace period starts. */\n \"mac.usage_100\": {\n used: number;\n limit: number;\n percentage: number;\n cycle_started_at: string;\n grace_expires_at: string;\n };\n /** `mac.usage_80` (live, pending of the spec; typed from: example). The account reached 80% of its monthly active contacts of the cycle. */\n \"mac.usage_80\": {\n used: number;\n limit: number;\n percentage: number;\n cycle_started_at: string;\n };\n /** `message.received` (live; typed from: example + schema). Un contacto le escribió a un número de WhatsApp de la cuenta. */\n \"message.received\": {\n message: {\n id: number;\n type: \"text\" | \"image\" | \"video\" | \"document\" | \"sticker\" | \"contact\" | \"audio\" | \"note\" | \"action\" | \"invalid\" | \"interactive\" | \"location\" | \"voice_call\" | \"video_call\" | \"event\" | \"button\" | \"template\" | \"notification\" | \"option_list\" | \"template_button_reply\" | \"poll\" | \"whatsapp_form\" | \"call_permission_request\" | \"call_permission_reply\";\n text: string;\n media: unknown;\n };\n contact: {\n id: number;\n name: string;\n phone: string;\n };\n receiver: {\n phone: string;\n };\n };\n /** `message.status_changed` (live, pending of the spec; typed from: schema). The delivery status of a message you sent with the API changed. One notice per transition, never one that goes back; `queued` is not reported. It must be asked for explicitly in `events`. */\n \"message.status_changed\": {\n /** The `id` of the message in the history of the contact. */\n message_id: number;\n contact_id: number;\n /** The number of your account that sent the message. */\n device_id: number | null;\n status: \"sent\" | \"delivered\" | \"read\" | \"failed\";\n previous_status: \"sent\" | \"delivered\" | \"read\" | \"failed\" | null;\n /** Only when `status` is `failed`. */\n error?: components[\"schemas\"][\"PendingMessageError\"];\n occurred_at: string;\n /** The `client_reference` you sent with the message, or `null`. */\n client_reference: string | null;\n };\n /** `pipeline.finished` (live; typed from: example). Terminó un pipeline de operaciones sobre grupos, con su resultado agregado. */\n \"pipeline.finished\": {\n campaign: {\n uuid: string;\n };\n pipeline: {\n uuid: string;\n name: string;\n };\n outcome: string;\n actions: {\n total: number;\n succeeded: number;\n failed: number;\n skipped: number;\n cancelled: number;\n };\n };\n /** `poll.voted` (live; typed from: example). Un participante votó en una encuesta enviada a un grupo, o cambió su voto. */\n \"poll.voted\": {\n poll: {\n uid: string;\n };\n group: {\n uid: string;\n };\n scheduled_message: {\n uuid: string;\n };\n participant: {\n identity: string;\n identity_type: string;\n name: unknown;\n };\n options: string[];\n };\n /** `scheduled_message.finished` (live; typed from: example). Un envío programado terminó, con su resultado agregado. */\n \"scheduled_message.finished\": {\n scheduled_message: {\n uuid: string;\n name: string;\n };\n outcome: string;\n groups: {\n total: number;\n failed: number;\n partially_failed: number;\n };\n occurrence: number;\n };\n /** `scheduled_message.group_delivery_failed` (live; typed from: example). Un envío programado falló en un grupo concreto, con el motivo desagregado. */\n \"scheduled_message.group_delivery_failed\": {\n scheduled_message: {\n uuid: string;\n };\n group: {\n uid: string;\n name: string;\n };\n reason: string;\n partial: boolean;\n occurrence: number;\n };\n /** `scheduled_message.response_received` (live; typed from: example). Alguien respondió a un envío programado votando una encuesta o respondiendo a un evento. */\n \"scheduled_message.response_received\": {\n scheduled_message: {\n uuid: string;\n };\n group: {\n uid: string;\n };\n participant: {\n identity: string;\n identity_type: string;\n name: string;\n };\n response: {\n type: string;\n options: string[];\n rsvp: unknown;\n };\n };\n /** `subscription.cancellation_confirmed` (live, pending of the spec; typed from: example). The cancellation of the subscription was confirmed (Stripe subscriptions only). */\n \"subscription.cancellation_confirmed\": {\n access_until: string;\n };\n /** `subscription.dormant_ending` (live, pending of the spec; typed from: example). The dormant-account period is about to end. */\n \"subscription.dormant_ending\": {\n charge_date: string;\n amount_cents: number;\n currency: string;\n };\n /** `subscription.expiring` (planned, pending of the spec; typed from: no example or schema yet). The subscription is about to expire. Planned: not emitted yet. */\n \"subscription.expiring\": Record<string, unknown>;\n /** `subscription.reactivated` (live, pending of the spec; typed from: example). The scheduled cancellation of the subscription was reverted (Stripe subscriptions only). */\n \"subscription.reactivated\": {\n renews_at: string;\n };\n /** `subscription.trial_ending` (live, pending of the spec; typed from: example). The trial period is about to end. */\n \"subscription.trial_ending\": {\n trial_ends_at: string;\n };\n /** `template.status_changed` (live; typed from: example). Una plantilla cambió de estado de aprobación en Meta. `template` identifica la plantilla igual que `GET /templates` (`id`, `uid`, `name`, `category`). `previous_status` y `status` son los estados tal como los devuelve la API (por ejemplo `PENDING`, `APPROVED`, `REJECTED`, `PAUSED`); `previous_status` es `null` si la plantilla no tenía estado. `reason` trae la observación de rechazo (traducida como en la API y limitada a 500 caracteres) cuando el cambio es un rechazo informado al crear la plantilla, y es `null` en el resto. No se emite si Meta reenvía el estado que la plantilla ya tenía. Si una misma plantilla de Meta figura en varias cuentas, cada cuenta recibe su propio evento. */\n \"template.status_changed\": {\n template: {\n id: number;\n uid: string;\n name: string;\n category: string;\n };\n previous_status: string;\n status: string;\n reason: unknown;\n };\n /** `webhook.test` (live; typed from: example). Evento de prueba enviado desde la ruta de prueba de una suscripción. */\n \"webhook.test\": {\n subscription: string;\n sent_at: string;\n };\n /** `whatsapp_form.completed` (live, pending of the spec; typed from: schema). A contact completed a form you sent them. */\n \"whatsapp_form.completed\": {\n form: {\n /** The form (`family_id`). */\n id: number;\n name: string;\n version_id: number;\n };\n message_id: number | null;\n contact_id: number | null;\n device_id: number | null;\n answers: ({\n key: string;\n label: string | null;\n value: boolean | number | string | string[] | null;\n })[];\n occurred_at: string;\n };\n}\n"]}