messages

One message, full representation

GET/v1/messages/{id}

Always the full representation. Accepts no query parameters (not even view): any parameter returns 400 bad_request.

Authentication: CF-Access-Client-Id + CF-Access-Client-Secret. Operation id getMessage.

Parameters

NameInTypeDescription
id requiredpathIdMessage id (32 lowercase hex characters). example 9b1e4c7a2d5f8e0b3a6c9d2e5f8a1b4c

Request example

Shell
curl -s https://api.mint.xcorp.cc/v1/messages/9b1e4c7a2d5f8e0b3a6c9d2e5f8a1b4c \
  -H "CF-Access-Client-Id: $MINT_ID" \
  -H "CF-Access-Client-Secret: $MINT_SECRET"

Responses

200The full message.

Headers

x-records-newintegerDistinct messages in this response charged now (first delivery this month). Sent on every response once your client is identified; 0 on routes that do not charge.
x-budget-remainingintegerDistinct messages left in this month's budget, after this response. Sent on every response once your client is identified.
x-request-idstringRequest id. Quote it when contacting support.

Body application/json

Schema: FullMessage

FieldTypeDescription
idId
institutionstringInstitution slug (see /v1/institutions).
dateDate
seqintegerOrder of the message within its date and institution. It replaces the send time, which this API does not provide. minimum 0
titlestring
channelChannel
tagsarray of stringTag names.
summarystring | nullSummary written by XCORP.
transactionalboolean
tonestring | null
urgencystring | null
productnull | objectMain product, from /v1/products.
product.idinteger
product.namestring
product_textstring | nullProduct as written in the catalog entry.
extra_productsarray of stringNames of other products in the message.
ctastring | nullCall to action.
valid_untilnull | DateOffer validity date, if stated.
personalizedboolean | null
formatstring | null
partnerstring | null
ratestring | nullRate as written in the creative.
rate_cdinumber | nullRate as a percentage of CDI, when applicable.
languagestring | null
imagesintegerNumber of images; fetch with /v1/messages/{id}/images/{n}. minimum 0
contentContent

Example: A full message

JSON
{
  "id": "9b1e4c7a2d5f8e0b3a6c9d2e5f8a1b4c",
  "institution": "nubank",
  "date": "2026-11-08",
  "seq": 3,
  "title": "Ganhe cashback no Pix no crédito",
  "channel": "push",
  "tags": [
    "Cashback",
    "Pix"
  ],
  "summary": "Offers 2% cashback on Pix paid with the credit card until month end.",
  "transactional": false,
  "tone": "promocional",
  "urgency": "media",
  "product": {
    "id": 42,
    "name": "Cartão de crédito"
  },
  "product_text": "Cartão de crédito",
  "extra_products": [
    "Pix"
  ],
  "cta": "Aproveite",
  "valid_until": "2026-11-30",
  "personalized": false,
  "format": "texto",
  "partner": null,
  "rate": null,
  "rate_cdi": null,
  "language": "pt",
  "images": 1,
  "content": {
    "source": "third_party_untrusted",
    "text": "Pix no crédito com 2% de cashback. Válido até 30/11."
  }
}
400Invalid, unknown or repeated parameter (bad_request, with detail = {param, why}), date before the window (window, first accepted date in detail.first_date) or invalid cursor (bad_cursor: tampered, expired, from another credential, other filters or another day; restart without cursor). BadRequest

Body application/json

Schema: Error

FieldTypeDescription
errorstring one of "bad_request", "window", "bad_cursor", "forbidden", "disabled", "access_ended", "not_found", "method_not_allowed", "rate_limited", "internal"
messagestringWhat happened and what to do, in English.
detail optionalanyExtra information: {"param", "why"} for every bad_request, {"first_date"} for window, {"limit"} for rate_limited.

Example

JSON
{
  "error": "window",
  "message": "Dates before 2026-10-09 are outside the 30-day window. Use since/from on or after that date; for older trends use /v1/stats.",
  "detail": {
    "first_date": "2026-10-09"
  }
}
403No valid credential (forbidden), access disabled (disabled) or access period over (access_ended). Do not retry; contact XCORP. Forbidden

Body application/json

Schema: Error

FieldTypeDescription
errorstring one of "bad_request", "window", "bad_cursor", "forbidden", "disabled", "access_ended", "not_found", "method_not_allowed", "rate_limited", "internal"
messagestringWhat happened and what to do, in English.
detail optionalanyExtra information: {"param", "why"} for every bad_request, {"first_date"} for window, {"limit"} for rate_limited.

Example

JSON
{
  "error": "access_ended",
  "message": "Your access period has ended. Contact XCORP."
}
404Message does not exist, is outside the window or is not visible to you; or an unknown institution, tag or product in a filter. All these cases look the same. NotFound

Body application/json

Schema: Error

FieldTypeDescription
errorstring one of "bad_request", "window", "bad_cursor", "forbidden", "disabled", "access_ended", "not_found", "method_not_allowed", "rate_limited", "internal"
messagestringWhat happened and what to do, in English.
detail optionalanyExtra information: {"param", "why"} for every bad_request, {"first_date"} for window, {"limit"} for rate_limited.

Example

JSON
{
  "error": "not_found",
  "message": "Not found. Messages exist here only for the last 30 days; check ids and slugs against the catalogs."
}
405Only GET is allowed (HEAD and OPTIONS too return 405). MethodNotAllowed

Headers

allow"GET"Allowed methods: GET.

Body application/json

Schema: Error

FieldTypeDescription
errorstring one of "bad_request", "window", "bad_cursor", "forbidden", "disabled", "access_ended", "not_found", "method_not_allowed", "rate_limited", "internal"
messagestringWhat happened and what to do, in English.
detail optionalanyExtra information: {"param", "why"} for every bad_request, {"first_date"} for window, {"limit"} for rate_limited.

Example

JSON
{
  "error": "method_not_allowed",
  "message": "This API is read-only. Use GET."
}
429A limit of your access plan was reached. detail.limit is minute (requests per minute), day (requests per day), images (images per day) or budget (distinct messages per month). Wait retry-after seconds. Your limits: /v1/usage. RateLimited

Headers

retry-afterintegerSeconds to wait before retrying.
x-request-idstringRequest id. Quote it when contacting support.

Body application/json

Schema: Error

FieldTypeDescription
errorstring one of "bad_request", "window", "bad_cursor", "forbidden", "disabled", "access_ended", "not_found", "method_not_allowed", "rate_limited", "internal"
messagestringWhat happened and what to do, in English.
detail optionalanyExtra information: {"param", "why"} for every bad_request, {"first_date"} for window, {"limit"} for rate_limited.

Example

JSON
{
  "error": "rate_limited",
  "message": "Too many requests per minute. Wait for retry-after seconds, then continue.",
  "detail": {
    "limit": "minute"
  }
}
500Unexpected error (internal). Retry later; quote x-request-id to support. Internal

Headers

x-request-idstringRequest id. Quote it when contacting support.

Body application/json

Schema: Error

FieldTypeDescription
errorstring one of "bad_request", "window", "bad_cursor", "forbidden", "disabled", "access_ended", "not_found", "method_not_allowed", "rate_limited", "internal"
messagestringWhat happened and what to do, in English.
detail optionalanyExtra information: {"param", "why"} for every bad_request, {"first_date"} for window, {"limit"} for rate_limited.

Example

JSON
{
  "error": "internal",
  "message": "Unexpected error. Retry later and quote x-request-id if it persists."
}
503Service temporarily disabled for all clients (disabled). Retry after retry-after seconds. Disabled

Headers

retry-afterintegerSeconds to wait before retrying.
x-request-idstringRequest id. Quote it when contacting support.

Body application/json

Schema: Error

FieldTypeDescription
errorstring one of "bad_request", "window", "bad_cursor", "forbidden", "disabled", "access_ended", "not_found", "method_not_allowed", "rate_limited", "internal"
messagestringWhat happened and what to do, in English.
detail optionalanyExtra information: {"param", "why"} for every bad_request, {"first_date"} for window, {"limit"} for rate_limited.

Example

JSON
{
  "error": "disabled",
  "message": "The service is temporarily disabled. Try again later."
}