Painel de um vendedor
const url = 'https://developers.nexo.winningsales.com.br/v1/indicators/reps/example';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://developers.nexo.winningsales.com.br/v1/indicators/reps/example \ --header 'Authorization: Bearer <token>'O vendedor contra o time e contra o próprio mês anterior: meta com commit e upside, maiores negócios abertos, comparações por métrica, funil por fase e por etapa do CRM, buracos do funil e motivos de perda. O vendedor só abre o próprio painel. Os números são calculados depois de cada sincronização do CRM e a cada hora: nada é calculado na chamada.
Authorizations
Seção intitulada “Authorizations”Parameters
Seção intitulada “Parameters”Path Parameters
Seção intitulada “Path Parameters”Id do dono no CRM, de GET /v1/indicators/reps
Query Parameters
Seção intitulada “Query Parameters”Pipeline (funnel) in analysis. Absent = every funnel, the number of today. A pipeline out of analysis answers the same numbers of “every funnel” with funnelScope.pipelineId null.
Pipeline (funnel) in analysis. Absent = every funnel, the number of today. A pipeline out of analysis answers the same numbers of “every funnel” with funnelScope.pipelineId null.
Responses
Seção intitulada “Responses”Painel do vendedor
object
object
CRM owner id
Owner name from the CRM
True when the CRM owner is linked to the user who asks: a lead or admin who also sells
No_goal = no goal this month; below_goal = realized + declared commit below the goal; null = nothing to flag
Task discipline of the rep in the current period, for the lead to compare across the team without a ranking
object
Count over the DealTasks table, with its base: done + missed + cancelled + rescheduled + open in the period; no note by AI, no ranking
Tasks marked as done in the period
Tasks missed: the day turned and it was not done
Tasks the rep cancelled
Tasks the rep moved to another day
Tasks that closed by themselves because the signal was gone; they do not count against the rep
The same cut, only for “cobrar o cliente” tasks
object
“Cobrar o cliente” tasks (buyer_commitment_due, buyer_deadline_passed) counted against the rep in the period
Of those, done
Of those, missed
Current = this month so far; recent = the last three closed months
object
The window the numbers refer to
object
Requested period
First day, in the company time zone (YYYY-MM-DD)
Last day, in the company time zone (YYYY-MM-DD)
Months covered
False for the current month, still moving
The window the numbers refer to
object
Requested period
First day, in the company time zone (YYYY-MM-DD)
Last day, in the company time zone (YYYY-MM-DD)
Months covered
False for the current month, still moving
Today in the company time zone, YYYY-MM-DD
When the numbers were computed; null means not computed yet
Below this base a number is shown with its base and never compared
A difference below this share of the team number reads as “na média”
Goal, realized, commit and upside of the rep this month
object
Currency of the goal and of the forecast
Goal of the rep this month; null without goal
Won this month
Realized ÷ goal in %
Open deals the rep declared as commit, closing this month
Open deals the rep declared as upside (best case), closing this month
(realized + commit) ÷ goal in %: where the month ends if the commit closes
Declared = categories the rep set in the CRM; weighted = the plan has no categories, weighted by stage probability
Open deals without close date whose estimated date falls this month; a separate band, never in commit or upside
Realized per business day, with or without a goal: what the screen shows instead of the goal when there is none
object
Business days (Monday to Friday) from the start of the period up to today
Business days in the whole period
Realized ÷ business days (Monday to Friday), in cents; null without business days
The previous month for comparison; only for the current period
object
First day of the previous month, YYYY-MM-DD
Last day of the previous month, YYYY-MM-DD
Won in the previous month, same scope and currency
Business days of the previous month
Realized ÷ business days (Monday to Friday), in cents; null without business days
Realized per business day against the previous month, in % above (+) or below (−); null without both
Open deals of the rep now
object
Open deals now
Open pipeline, per currency
object
ISO currency of the deals summed here
Sum in cents
Open deals that fire at least one risk rule of the CRM
object
Open deals
Their amount, per currency
object
ISO currency of the deals summed here
Sum in cents
The five largest open deals by amount
object
Deal id
Deal name in the CRM
Deal amount; null when the CRM has none
Currency of the amount
Stage name as the CRM calls it
Close date in the CRM, YYYY-MM-DD, company time zone
Next activity day in the CRM, YYYY-MM-DD; null when none is scheduled
Last activity day in the CRM, YYYY-MM-DD; null when there is none
Days since the last activity; null when there is none
Risk rules this deal fires; empty when none
Why the deal is at risk, citing the source; null when no rule fires
Estimated close date, YYYY-MM-DD, only when the CRM has none; never written to the CRM
True when estimatedCloseDate is set: show it labeled as estimated
Temperature read from the conversations; null when there is no reading yet
object
Temperature of the deal, 0 to 100
Band of the score
Diagnosis read from the conversations, the heaviest one; null when there is no reading that explains it
object
Diagnosis code
What the conversations show, in the words of the reading
Reference to the excerpt that backs the reading; this endpoint does not carry the text itself — it comes from GET /conversations/{channel}/{conversationId}/excerpts
object
Channel of the conversation that backs the excerpt
Id of the conversation; use it to link to the conversation or fetch its excerpts
References of the excerpts inside the conversation
When the excerpt happened
True when more than half of the open deals of the rep fire noNextActivity
Open deals of the rep without real activity past the deadline of the stage
object
Open deals that fire noNextActivity
Open deals
Count ÷ open in %, null without open deals
The five largest stalled deals of the rep by amount
object
Deal id
Deal name in the CRM
CRM owner id; null for deals without owner
Owner name from the CRM
Deal amount; null when the CRM has none
Currency of the amount
The rule with the largest weight, the one the “why” column shows
Every rule the deal fired
Chance of closing used in the impact, 0 to 1: the declared forecast category first, measured in the company history (wins ÷ decided deals of that category in the last 12 months, minimumBase decided) and only below that base the external Winning number; then the measured history of the stage, then the stage probability configured in the CRM, then the fixed Winning chain
Weight of the rule used in the impact
Amount × chance × weight: what orders the list
Close date in the CRM, YYYY-MM-DD, company time zone
How many times the close date changed
Days since the last activity in the CRM; null when there is none
Why the deal is at risk, in pt-BR, citing the source (e.g. “última reunião há 12 dias, nada agendado, prazo da etapa 6 dias”)
Real activity of the deal behind noNextActivity; null on numbers computed before it existed
object
Latest real activity: crm = last contact or activity recorded in the CRM; meeting = last meeting linked to the deal; stage_change = entry in the current stage; created = nothing recorded since the deal was created
Day of that activity, YYYY-MM-DD, company time zone
Days since that activity
Deadline of the stage in days, between 3 and 30
Stage = median days deals stay in this stage; pipeline = median cycle to win of the pipeline × 1.5; ceiling = no measured cycle, 30 days
Deals the deadline was measured on; 0 for ceiling
Next scheduled activity (CRM field or future meeting), YYYY-MM-DD; null when nothing is scheduled
Where the next activity comes from
Estimated close date, YYYY-MM-DD, only when the CRM has none; never written to the CRM
True when estimatedCloseDate is set: show it labeled as estimated
Diagnosis read from the conversations, the heaviest one; null when there is no reading that explains it
object
Diagnosis code
What the conversations show, in the words of the reading
Reference to the excerpt that backs the reading; this endpoint does not carry the text itself — it comes from GET /conversations/{channel}/{conversationId}/excerpts
object
Channel of the conversation that backs the excerpt
Id of the conversation; use it to link to the conversation or fetch its excerpts
References of the excerpts inside the conversation
When the excerpt happened
The rep against the team average, one card per metric; ICP enters when the declared ICP exists
object
Conversion = won ÷ decided; cycleToWin = mean days from creation to win; wonTicket = amount won ÷ wins with amount; followUp = second meeting booked up to 7 days after the first; noShow = no-show ÷ meetings with outcome; noNextActivity = open deals without next activity, or with it overdue; whatsappFirstReply = median minutes from the client’s first unanswered WhatsApp message to the rep’s first reply; withinIcp = value of open deals classified as inside the declared ICP ÷ value of open deals classified (inside + partial + outside)
How to read value and difference
Direction of the metric
Current = this month so far; recent = the last three closed months (periods.recent); now = a snapshot of the open pipeline
Currency of a money metric; null when the wins mix currencies or for other units
The rep
object
The number: % for rates, days for cycles, cents for money, minutes for whatsappFirstReply; null when there is nothing to measure
Numerator of a rate (e.g. won); null for averages
How many deals, meetings or WhatsApp first replies the number is measured on
False below minimumBase: show the number with its base, never compared
The whole team, the same number the home page shows: the rep included, deals without owner too
object
The number: % for rates, days for cycles, cents for money, minutes for whatsappFirstReply; null when there is nothing to measure
Numerator of a rate (e.g. won); null for averages
How many deals, meetings or WhatsApp first replies the number is measured on
False below minimumBase: show the number with its base, never compared
Coverage of the CRM field behind the number, for the rep; for no-show, filled/total are meetings with the outcome filled ÷ past meetings; for withinIcp, filled/total are open deals with a profile class and a value ÷ open deals
object
Meetings with the outcome filled, or open deals with a profile class and a value
Past meetings in the window, or the open deals of the rep
Filled ÷ total in %
Even = difference below sameAsTeamRatio of the team number; small_base = rep or team below minimumBase, not compared; no_data = nothing measured on one side
Rep − team in the unit of the metric (points for percent)
(rep − team) ÷ team, as a ratio; null when the team is zero or missing
Conversion of each canonical phase this month, rep against team
object
Canonical phase
Phase label
Label of the phase that follows, or Ganho
object
Deals that entered the phase this month
Of those, deals that went to a later phase or were won
Of those, deals that did not advance and were lost
Advanced ÷ entered in %, null below minimumBase
object
Deals that entered the phase this month
Of those, deals that went to a later phase or were won
Of those, deals that did not advance and were lost
Advanced ÷ entered in %, null below minimumBase
Seller rate − team rate, in points; null when either rate is not declared
True when the rep is 5 points or more below the team in this phase
Conversion of each real CRM stage this month, rep against team, in CRM order; one entry per pipeline in analysis, respecting ?pipelineId (one funnel at a time, as in the home page)
object
Pipeline id
Pipeline name as the CRM calls it
False when no deal of the team entered an open stage of the pipeline in the period
Distinct deals of the team that entered any open stage of the pipeline in the period
Of those, deals of the team won
Every open stage of the pipeline, in CRM order; won and lost stages are not steps
object
CRM stage id
Stage name as the CRM calls it
object
Deals that entered the stage this month
Of those, deals that went to a later open stage of the same pipeline or were won
Of those, deals that did not advance and were lost
Advanced ÷ (advanced + stopped) in %, one decimal; null below minimumBase
object
Deals that entered the stage this month
Of those, deals that went to a later open stage of the same pipeline or were won
Of those, deals that did not advance and were lost
Advanced ÷ (advanced + stopped) in %, one decimal; null below minimumBase
The rep own passage in the last 12 closed months, or the Winning reference of the canonical phase of the stage when the rep history is below minimumBase; null without either
object
Reference conversion of the passage, in %, one decimal
Advanced + stopped of the stage in the history window; below minimumBase when the source is winning
History = the same passage in the company, last 12 closed months, same owners; winning = the Winning reference of the canonical phase of the stage, only when the history is below minimumBase: label it as such
Rep rate − team rate, in points, one decimal; null when either rate is not declared
True when the rep is 5 points or more below the team in this stage
What each hole of the funnel above (against the team) costs, and the best single fix
object
Currency of ticket, valueInCents and extraValueInCents
One entry per hole of funnel (against the team, or the rep own previous month)
object
Canonical phase of the passage below the reference
Phase label
Label of the phase that follows, or Ganho
Deals that stopped at this passage in the month, the rep
Of those, how many would have advanced at the reference rate (team, or the rep own previous month)
Team conversion to won from the following phase, last 12 closed months, in %; null below minimumBase
Null when neither the rep nor the funnel have 8 wins in the last 12 months
object
Average amount of a win, used to price the hole
Wins the average is measured on
Rep = the rep own 12 months of wins; funnel = the whole funnel 12 months, used when the rep has less than 8 wins
Recovered × nextHistoryRate × ticket: what closing this hole is worth, “se voltasse à referência” — never a goal projection. null without nextHistoryRate or ticket
Null when the passage has no habit mapped to it
object
The measured habit that most relates to this passage, from a fixed, versioned table — never a model
Null without any hole
object
Canonical phase of the worst hole, the only one simulated
Phase label
Label of the phase that follows, or Ganho
Criado → ganho today
object
Won ÷ entered the funnel, in %; null below minimumBase
Deals won in the period
Deals that entered the funnel in the period
Criado → ganho if this one passage reached the reference; a single simulation, one passage at a time
object
Won ÷ entered the funnel, in %; null below minimumBase
Deals won in the period
Deals that entered the funnel in the period
Wins added by fixing only this passage
Value of those extra wins, same formula as valueInCents
The rep against their own previous closed month, the “meu mês anterior” ruler
object
False when the rep has less than one closed month of data; comparisons, funnel and verdict are empty
The window the numbers refer to
object
Requested period
First day, in the company time zone (YYYY-MM-DD)
Last day, in the company time zone (YYYY-MM-DD)
Months covered
False for the current month, still moving
Same shape as comparisons, but the “team” side carries the rep own previous closed month instead of the team; for the cards whose window is “recent” (three closed months), it is the three closed months before those
object
Conversion = won ÷ decided; cycleToWin = mean days from creation to win; wonTicket = amount won ÷ wins with amount; followUp = second meeting booked up to 7 days after the first; noShow = no-show ÷ meetings with outcome; noNextActivity = open deals without next activity, or with it overdue; whatsappFirstReply = median minutes from the client’s first unanswered WhatsApp message to the rep’s first reply; withinIcp = value of open deals classified as inside the declared ICP ÷ value of open deals classified (inside + partial + outside)
How to read value and difference
Direction of the metric
Current = this month so far; recent = the last three closed months (periods.recent); now = a snapshot of the open pipeline
Currency of a money metric; null when the wins mix currencies or for other units
The rep
object
The number: % for rates, days for cycles, cents for money, minutes for whatsappFirstReply; null when there is nothing to measure
Numerator of a rate (e.g. won); null for averages
How many deals, meetings or WhatsApp first replies the number is measured on
False below minimumBase: show the number with its base, never compared
The whole team, the same number the home page shows: the rep included, deals without owner too
object
The number: % for rates, days for cycles, cents for money, minutes for whatsappFirstReply; null when there is nothing to measure
Numerator of a rate (e.g. won); null for averages
How many deals, meetings or WhatsApp first replies the number is measured on
False below minimumBase: show the number with its base, never compared
Coverage of the CRM field behind the number, for the rep; for no-show, filled/total are meetings with the outcome filled ÷ past meetings; for withinIcp, filled/total are open deals with a profile class and a value ÷ open deals
object
Meetings with the outcome filled, or open deals with a profile class and a value
Past meetings in the window, or the open deals of the rep
Filled ÷ total in %
Even = difference below sameAsTeamRatio of the team number; small_base = rep or team below minimumBase, not compared; no_data = nothing measured on one side
Rep − team in the unit of the metric (points for percent)
(rep − team) ÷ team, as a ratio; null when the team is zero or missing
Same shape as funnel, but “team” carries the rep own previous month; hole means 5 points or more below it
object
Canonical phase
Phase label
Label of the phase that follows, or Ganho
object
Deals that entered the phase this month
Of those, deals that went to a later phase or were won
Of those, deals that did not advance and were lost
Advanced ÷ entered in %, null below minimumBase
object
Deals that entered the phase this month
Of those, deals that went to a later phase or were won
Of those, deals that did not advance and were lost
Advanced ÷ entered in %, null below minimumBase
Seller rate − team rate, in points; null when either rate is not declared
True when the rep is 5 points or more below the team in this phase
Rule-based sentence, pt-BR, e.g. “melhorou em 5 das 6 passagens contra agosto; a maior queda é Proposta → Negociação, de 74% para 68%”; null without any passage with base on both months
What each hole against the previous month costs, same shape as the top-level holes
object
Currency of ticket, valueInCents and extraValueInCents
One entry per hole of funnel (against the team, or the rep own previous month)
object
Canonical phase of the passage below the reference
Phase label
Label of the phase that follows, or Ganho
Deals that stopped at this passage in the month, the rep
Of those, how many would have advanced at the reference rate (team, or the rep own previous month)
Team conversion to won from the following phase, last 12 closed months, in %; null below minimumBase
Null when neither the rep nor the funnel have 8 wins in the last 12 months
object
Average amount of a win, used to price the hole
Wins the average is measured on
Rep = the rep own 12 months of wins; funnel = the whole funnel 12 months, used when the rep has less than 8 wins
Recovered × nextHistoryRate × ticket: what closing this hole is worth, “se voltasse à referência” — never a goal projection. null without nextHistoryRate or ticket
Null when the passage has no habit mapped to it
object
The measured habit that most relates to this passage, from a fixed, versioned table — never a model
Null without any hole
object
Canonical phase of the worst hole, the only one simulated
Phase label
Label of the phase that follows, or Ganho
Criado → ganho today
object
Won ÷ entered the funnel, in %; null below minimumBase
Deals won in the period
Deals that entered the funnel in the period
Criado → ganho if this one passage reached the reference; a single simulation, one passage at a time
object
Won ÷ entered the funnel, in %; null below minimumBase
Deals won in the period
Deals that entered the funnel in the period
Wins added by fixing only this passage
Value of those extra wins, same formula as valueInCents
Why the rep lost deals in the last three closed months, as recorded in the CRM, with coverage
object
Deals lost with close date in the period
Of those, deals with the loss reason filled
Of those, deals without a loss reason; they stay out of items
WithReason ÷ lost in %, null below minimumBase
Loss reasons, most frequent first, at most eight; share is over withReason
object
Value as the team typed it in the CRM; spellings that differ only in case, accents or spaces count together
Lost deals with this value
Count ÷ the filled base of the list in %, null below minimumBase
Lost deals whose reason is beyond the eight listed
Competitor the deals were lost to; null when no CRM field is mapped as competitor or the period has no activity at all
object
Lost deals with the competitor field filled
Filled ÷ lost in %, null below minimumBase
Competitors, most frequent first, at most eight
object
Value as the team typed it in the CRM; spellings that differ only in case, accents or spaces count together
Lost deals with this value
Count ÷ the filled base of the list in %, null below minimumBase
Lost deals whose competitor is beyond the eight listed
Owners among the selected ones with losses in the period, most losses without reason first
object
CRM owner id
Owner name from the CRM
Deals this owner lost in the period
Of those, deals without a loss reason
WithoutReason ÷ lost in %, null below minimumBase
Where in the funnel the deals died, crossed with the loss reason of the CRM, one row per open stage in CRM order
object
Lost deals of the scope in the period; same as losses.lost
Of those, the ones with a registered loss stage
Of the ones with a registered stage, the ones with the loss reason filled
One entry per funnel in analysis, even with lost 0; most losses first, ties by the CRM pipeline order
object
Pipeline id
Pipeline name as the CRM calls it
Losses attributed to this funnel, sum of the count of its stages below
One row per open stage of this funnel, in CRM order, even with count 0; the unregistered-stage row comes last
object
CRM stage where the deal died; null is the “Etapa não registrada” row, always last
Stage name from the CRM, or exactly “Etapa não registrada”
Lost deals whose loss stage is this one
Amount lost per currency, largest first; empty when none of these losses has a value
object
ISO currency of the deals summed here
Sum in cents
Of these losses, the ones without a value in the CRM
Count ÷ lost of the funnel in %, null when count is below minimumBase
Of these losses, the ones with the loss reason filled
WithReason ÷ count in %, null below minimumBase
Loss reasons of this stage, most frequent first, at most eight; share is over withReason
object
Value as the team typed it in the CRM; spellings that differ only in case, accents or spaces count together
Lost deals with this value
Count ÷ the filled base of the list in %, null below minimumBase
Losses of this stage whose reason is beyond the eight listed
Share of the team in the same stage, for the rep panel and any owner-filtered view; null when the view is already the whole team or the team is below minimumBase in the stage
Task discipline of the rep in the current period: a count over DealTasks, with its base
object
Count over the DealTasks table, with its base: done + missed + cancelled + rescheduled + open; auto_closed is not in it
Tasks marked as done
Tasks missed: the day turned and it was not done
Tasks cancelled by the rep
Tasks moved to another day
Tasks still open
Tasks that closed by themselves because the signal was gone; not in total, not against the rep
Cancelled tasks tallied by the reason the rep chose
object
The same buckets, only for “cobrar o cliente” tasks (buyer_commitment_due and buyer_deadline_passed)
object
Count over the DealTasks table, with its base: done + missed + cancelled + rescheduled + open; auto_closed is not in it
Tasks marked as done
Tasks missed: the day turned and it was not done
Tasks cancelled by the rep
Tasks moved to another day
Tasks still open
Tasks that closed by themselves because the signal was gone; not in total, not against the rep
Follow-ups: the next step agreed with the client, done by the date
object
Commitment and collection tasks (commitment_due, buyer_commitment_due, buyer_deadline_passed) done or closed by themselves because the client acted, on their original day
The same, but only after the rep moved the task to another day
Expired without being done
Cancelled by the rep; not in the base of the rate
Period this count covers
object
First day of the period counted, YYYY-MM-DD, company time zone
Last day of the period counted, YYYY-MM-DD, company time zone
Example
{ "rep": { "attention": "no_goal" }, "portfolio": { "largest": [ { "rules": [ "closeDateOverdue" ], "temperature": { "band": "cold" }, "diagnosis": { "code": "absent_decision_maker" }, "evidence": { "channel": "meeting" } } ], "stalledLargest": [ { "rule": "closeDateOverdue", "rules": [ "closeDateOverdue" ], "activity": { "source": "crm", "deadlineBasis": "stage", "nextSource": "crm" }, "diagnosis": { "code": "absent_decision_maker" }, "evidence": { "channel": "meeting" } } ] }, "comparisons": [ { "metric": "conversion", "unit": "percent", "window": "current", "verdict": "better" } ], "stageFunnels": [ { "steps": [ { "reference": { "source": "history" } } ] } ], "holes": { "items": [ { "ticket": { "source": "rep" } } ] }, "previous": { "comparisons": [ { "metric": "conversion", "unit": "percent", "window": "current", "verdict": "better" } ], "holes": { "items": [ { "ticket": { "source": "rep" } } ] } }}Token ausente, inválido, expirado ou revogado
object
Stable machine-readable error code (e.g. identity.email_already_in_use)
Error class name
HTTP status code
Human-readable message, safe to display to end users
Correlation id — send it to support to locate the full trail
Structured details safe for the frontend (field errors, ids)
object
Example
{ "type": "public_api.invalid_credential", "title": "InvalidCredentialError", "status": 401, "detail": "Token de acesso inválido, expirado ou revogado. Crie um novo token de acesso no Nexo.", "requestId": "019fcae7-3e54-755a-8458-bdb605b324bb"}Papel, escopo do token ou plano não permitem a operação
object
Stable machine-readable error code (e.g. identity.email_already_in_use)
Error class name
HTTP status code
Human-readable message, safe to display to end users
Correlation id — send it to support to locate the full trail
Structured details safe for the frontend (field errors, ids)
object
Example
{ "type": "public_api.insufficient_scope", "title": "InsufficientScopeError", "status": 403, "detail": "Este token não tem o escopo conversations:read, exigido por esta operação. Gere um token com esse escopo.", "requestId": "019fcae7-3e54-755a-8458-bdb605b324bb", "meta": { "operation": "conversations.reading", "scope": "conversations:read" }}Dono sem dados, não é pessoa, ou não é o vendedor que pede
object
Stable machine-readable error code (e.g. identity.email_already_in_use)
Error class name
HTTP status code
Human-readable message, safe to display to end users
Correlation id — send it to support to locate the full trail
Structured details safe for the frontend (field errors, ids)
object
Example
{ "type": "indicators.rep_not_found", "title": "RepNotFoundError", "status": 404, "detail": "Vendedor sem negócios nos funis em análise neste mês, ou marcado como \"não é pessoa\".", "requestId": "0192a8f4-4d4c-7c5e-9e0f-2b7a1d3c9e41", "meta": { "ownerId": "0192a8f4-5b1e-7d2a-8c3f-6e9d2a1b7c04" }}Limite de chamadas da empresa ou do token atingido
object
Stable machine-readable error code (e.g. identity.email_already_in_use)
Error class name
HTTP status code
Human-readable message, safe to display to end users
Correlation id — send it to support to locate the full trail
Structured details safe for the frontend (field errors, ids)
object
Example
{ "type": "public_api.rate_limited", "title": "PublicRateLimitedError", "status": 429, "detail": "Muitas chamadas em pouco tempo. Tente de novo em 12 segundos.", "requestId": "019fcae7-3e54-755a-8458-bdb605b324bb", "meta": { "class": "content", "limitedBy": "company", "limit": 120, "windowSeconds": 60, "retryAfterSeconds": 12 }}