List events
using System.Net.Http.Headers;var client = new HttpClient();var request = new HttpRequestMessage{ Method = HttpMethod.Get, RequestUri = new Uri("https://api.flashpi.com.ec/v1/events?limit=20&type=invoice.authorized"), Headers = { { "Authorization", "Bearer <token>" }, },};using (var response = await client.SendAsync(request)){ response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body);}package main
import ( "fmt" "net/http" "io")
func main() {
url := "https://api.flashpi.com.ec/v1/events?limit=20&type=invoice.authorized"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(res) fmt.Println(string(body))
}HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://api.flashpi.com.ec/v1/events?limit=20&type=invoice.authorized")) .header("Authorization", "Bearer <token>") .method("GET", HttpRequest.BodyPublishers.noBody()) .build();HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());System.out.println(response.body());const url = 'https://api.flashpi.com.ec/v1/events?limit=20&type=invoice.authorized';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://api.flashpi.com.ec/v1/events?limit=20&type=invoice.authorized' \ --header 'Authorization: Bearer <token>'Newest first; the same objects the webhooks deliver. Any API key can read the events of its mode; an issuer-scoped key only those of its issuer.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Maximum number of items to return.
The pagination.nextCursor of the previous page. Omit it for the first page.
Only events of this type.
Only events of this issuer.
Only events of this document.
Only events of this certificate.
Header Parameters
Section titled “Header Parameters”Language of error messages and of the localized texts of resources (SRI messages, failures, certificate rejections): Spanish when the entry with the highest q-value is es or es- plus a region (es-EC, es-419), English otherwise. Errors state it in Content-Language.
Your own ID for the request (letters, digits and -_.:/+=), echoed back in the X-Correlation-Id response header and logged next to the request ID. An invalid value gets 400 invalid_correlation_id.
Responses
Section titled “Responses”A page of events, newest first.
object
An event about a document (its tax outcome, RIDE or email): data is the Document as the API returned it when the event happened (texts in English).
object
Mode of the resource.
An SRI document of any type.
object
Mode of the API key that issued it: test (SRI pruebas) or live.
Tax status: processing (being signed and sent), pending_sri (waiting for the SRI), authorized, rejected, failed or voided.
Establishment-emission point-sequential.
The 49-digit access key, also the authorization number.
Version of the SRI XML.
Totals computed by Flashpi. Invoices have every field but withheld; purchase settlements and credit notes have no tip; debit notes have no discount nor tip; withholding receipts only have withheld.
object
Sum of the line subtotals.
Sum of the line discounts.
A tax total, grouped per tax and rate.
object
VAT: the rate (15, 0, exempt, …). ICE: the percentage.
ICE: the TABLA 18 code.
Taxable base.
Tax amount.
Tip.
Total (credited amount of a credit note, total of a debit note).
Total withheld.
The SRI authorization.
object
Authorization number (the access key), once authorized.
The RIDE (printed PDF), generated once the document is authorized.
object
Email delivery, separate from the tax status: sent only once the document is authorized, when it was requested and there is a recipient.
object
Whether the email was requested.
not_requested (opted out), skipped (no recipient), queued (sent once authorized), then sent, delivered, bounced, complained or failed.
One email to one recipient.
object
Why the email failed or bounced, as a code: for example rejected, timeout, invalid_address, bounce_permanent, bounce_suppressed (the address is on the suppression list of Flashpi’s email provider after an earlier bounce or complaint), complaint, account_email_limit_reached (the account’s emails of the day were used up; nothing was sent), platform_email_limit_reached (Flashpi’s emails of the day across all accounts were used up; nothing was sent), email_sending_paused (the account’s emails of the mode are paused; nothing was sent), platform_email_sending_paused (Flashpi paused the emails of its email provider for every account after too many bounces or complaints; nothing was sent), test_recipient_not_allowed (a test document whose recipient is not a verified member of the account’s team; nothing was sent: download the RIDE and the XML to send them) or invalid_domain (the recipient’s domain does not exist or receives no mail: no MX, A or AAAA record, or a null MX; nothing was sent).
Warnings about the recipient’s address, computed when the document is read: empty when nothing looks wrong.
Something about the email that looks wrong. A warning never stops or changes the email.
object
recipient_domain_typo: the recipient’s domain looks like a typo of a common mail domain (for example gmial.com for gmail.com). The email is still sent to the address as given; nothing changes it.
Follows Accept-Language (English or Spanish).
The address with the suggested domain.
Messages of the last SRI answer, mapped to Flashpi codes (the reasons of a rejection, or warnings of an authorization). Texts follow Accept-Language (English or Spanish).
A message of the SRI, mapped by Flashpi.
object
Flashpi error code.
An event about a .p12 certificate: data is the Certificate as the API returned it when the event happened (texts in English).
object
Mode of the resource.
An issuer’s .p12 signing certificate. Flashpi checks the upload asynchronously (processing, then accepted or rejected); the file and its password are never returned.
object
Mode of the API key that uploaded it. A certificate of the issuer onboarding serves every mode (allModes): it shows the mode of the API key that reads it.
Whether it serves every mode (test and live): a certificate uploaded through the issuer onboarding (POST /v1/issuer-onboardings). False for one uploaded for one mode.
Whether it signs documents now: accepted, within its validity and not blocked.
Subject distinguished name.
Distinguished name of the certification authority that issued it.
SHA-256 of the certificate, hex.
The RUC found in the certificate, when its authority writes one.
Whether the certification authority revoked the certificate. good: verified not revoked. pending: could not be verified yet; it still signs until blockAt and is checked again hourly. blocked: still unverified after 7 days, or its chain is no longer trusted (blockedReason); it does not sign. revoked: never signs again.
object
Pending only: when it stops signing if still unverified.
An event about the account’s email sending: data is the AccountEmailSending as the API returned it when the event happened (texts in English).
object
Mode of the resource.
Whether the account’s buyer emails of one mode go out. Flashpi pauses them when the last 7 days have at least 3 hard bounces and 3 % of the emails sent, or at least 2 complaints and 0.05 % (they protect the email provider’s reputation that every customer shares). While paused, documents are still issued and authorized; their emails fail with email_sending_paused and resends answer 409 email_sending_paused. Only Flashpi’s staff resume them.
object
Set while paused: bounce_rate (hard bounces), complaint_rate (complaints) or staff (Flashpi’s staff paused them).
The buyer emails the account sent in the last 7 days in this mode (since Flashpi’s staff last resumed them, when that is later).
object
Where the counted period starts.
Emails the email provider accepted.
Of those, hard bounces (bounce_permanent: the address or the domain does not exist).
Of those, emails the recipient marked as spam.
Position of a page in a list.
object
Cursor of the next page (send it as cursor), or null on the last page.
Whether there are more items after this page.
Example
{ "data": [ { "id": "01a14082-3c1d-7f0e-8b2a-6d5e4f3a2b10", "type": "invoice.authorized", "environment": "test", "data": { "id": "01a13fdf-9620-77a7-a18e-0b13542f5fed", "type": "invoice", "environment": "test", "status": "processing", "establishment": "001", "emissionPoint": "001", "sequential": 123, "number": "001-001-000000123", "accessKey": "1510202601179000000000110010010000001234152637411", "issueDate": "2026-10-15", "xmlVersion": "2.1.0", "counterparty": { "id": "1790000000001", "name": "Supermercados La Pradera S.A." }, "totals": { "subtotal": "60.31", "discount": "0.75", "taxes": [ { "type": "vat", "rate": "15", "code": "3031", "taxableBase": "57.50", "amount": "8.63" } ], "tip": "0.00", "total": "68.94", "withheld": "62.50" }, "authorization": { "number": null, "authorizedAt": null }, "ride": { "status": "pending", "template": "modern", "generatedAt": null }, "email": { "requested": true, "status": "not_requested", "deliveries": [ { "recipient": "compras@example.com", "status": "queued", "error": null } ], "warnings": [ { "code": "recipient_domain_typo", "message": "The recipient's email address may be mistyped: did you mean compras@gmail.com?", "suggestedRecipient": "compras@gmail.com" } ] }, "sriMessages": [ { "code": "calculation_mismatch", "message": "The SRI found differences in the calculations.", "severity": "error" } ], "failure": { "code": "certificate_required", "message": "The issuer has no accepted signing certificate for this mode. Upload its .p12 certificate and issue the document again." } } } ]}Headers
Section titled “Headers”Flashpi’s ID of the request, a UUIDv7 (also requestId in errors). Include it when you contact support.
authentication_required: no Authorization: Bearer header. invalid_api_key: the key is malformed, unknown or revoked.
RFC 9457 problem details, in the language of Content-Language (en, or es with Accept-Language: es). Some codes add extension members, listed below; others may appear.
object
URI of the problem type: the page that documents code, in the language of the response (https://flashpi.com.ec/docs/en/errors/{code} in English, https://flashpi.com.ec/docs/errors/{code} with Accept-Language: es). It changes with the language, so branch on code, never on type.
Localized summary of the type.
HTTP status code.
Localized explanation of this occurrence.
Path of the request.
Stable machine-readable error code, the same in every language. Branch on it, never on type, title or detail. New codes may be added: handle an unknown one by its HTTP status.
Field-level errors (may be empty).
object
Path of the invalid field.
Stable machine-readable reason. New codes may be added: treat an unknown one like invalid_value.
Localized message.
Request ID (UUIDv7); include it when contacting support.
idempotency_key_reused: the document the Idempotency-Key already created.
The daily limit that was reached (email_resend_limit_reached, account_email_limit_reached, demo_issuer_quota_exceeded).
When the daily limit resets: the next midnight in Ecuador (the three codes above and platform_email_limit_reached). Retry-After gives the same in seconds.
ride_not_available: the status of the RIDE.
document_not_authorized: the status of the document.
email_sending_paused: the mode whose email sending is paused.
total_mismatch: the expectedTotal you sent.
total_mismatch: the total Flashpi computed.
Example
{ "type": "https://flashpi.com.ec/docs/en/errors/validation_failed", "title": "Validation failed", "status": 422, "detail": "One or more fields are invalid. See errors for details.", "instance": "/v1/invoices", "code": "validation_failed", "errors": [ { "field": "customer.id", "code": "required", "message": "This field is required." } ], "requestId": "017f22e2-79b0-7cc3-98c4-dc0c0c07398f", "rideStatus": "pending", "documentStatus": "processing", "environment": "test", "expectedTotal": "112.00", "computedTotal": "111.99"}Headers
Section titled “Headers”RFC 6750 challenge: Bearer realm="flashpi", plus error="invalid_token" with invalid_api_key.
The API key cannot perform this operation: key_scope_mismatch, key_read_only or ip_not_allowed; or its account is suspended (account_suspended).
RFC 9457 problem details, in the language of Content-Language (en, or es with Accept-Language: es). Some codes add extension members, listed below; others may appear.
object
URI of the problem type: the page that documents code, in the language of the response (https://flashpi.com.ec/docs/en/errors/{code} in English, https://flashpi.com.ec/docs/errors/{code} with Accept-Language: es). It changes with the language, so branch on code, never on type.
Localized summary of the type.
HTTP status code.
Localized explanation of this occurrence.
Path of the request.
Stable machine-readable error code, the same in every language. Branch on it, never on type, title or detail. New codes may be added: handle an unknown one by its HTTP status.
Field-level errors (may be empty).
object
Path of the invalid field.
Stable machine-readable reason. New codes may be added: treat an unknown one like invalid_value.
Localized message.
Request ID (UUIDv7); include it when contacting support.
idempotency_key_reused: the document the Idempotency-Key already created.
The daily limit that was reached (email_resend_limit_reached, account_email_limit_reached, demo_issuer_quota_exceeded).
When the daily limit resets: the next midnight in Ecuador (the three codes above and platform_email_limit_reached). Retry-After gives the same in seconds.
ride_not_available: the status of the RIDE.
document_not_authorized: the status of the document.
email_sending_paused: the mode whose email sending is paused.
total_mismatch: the expectedTotal you sent.
total_mismatch: the total Flashpi computed.
Example
{ "type": "https://flashpi.com.ec/docs/en/errors/validation_failed", "title": "Validation failed", "status": 422, "detail": "One or more fields are invalid. See errors for details.", "instance": "/v1/invoices", "code": "validation_failed", "errors": [ { "field": "customer.id", "code": "required", "message": "This field is required." } ], "requestId": "017f22e2-79b0-7cc3-98c4-dc0c0c07398f", "rideStatus": "pending", "documentStatus": "processing", "environment": "test", "expectedTotal": "112.00", "computedTotal": "111.99"}Validation_failed: invalid filter, limit or cursor.
RFC 9457 problem details, in the language of Content-Language (en, or es with Accept-Language: es). Some codes add extension members, listed below; others may appear.
object
URI of the problem type: the page that documents code, in the language of the response (https://flashpi.com.ec/docs/en/errors/{code} in English, https://flashpi.com.ec/docs/errors/{code} with Accept-Language: es). It changes with the language, so branch on code, never on type.
Localized summary of the type.
HTTP status code.
Localized explanation of this occurrence.
Path of the request.
Stable machine-readable error code, the same in every language. Branch on it, never on type, title or detail. New codes may be added: handle an unknown one by its HTTP status.
Field-level errors (may be empty).
object
Path of the invalid field.
Stable machine-readable reason. New codes may be added: treat an unknown one like invalid_value.
Localized message.
Request ID (UUIDv7); include it when contacting support.
idempotency_key_reused: the document the Idempotency-Key already created.
The daily limit that was reached (email_resend_limit_reached, account_email_limit_reached, demo_issuer_quota_exceeded).
When the daily limit resets: the next midnight in Ecuador (the three codes above and platform_email_limit_reached). Retry-After gives the same in seconds.
ride_not_available: the status of the RIDE.
document_not_authorized: the status of the document.
email_sending_paused: the mode whose email sending is paused.
total_mismatch: the expectedTotal you sent.
total_mismatch: the total Flashpi computed.
Example
{ "type": "https://flashpi.com.ec/docs/en/errors/validation_failed", "title": "Validation failed", "status": 422, "detail": "One or more fields are invalid. See errors for details.", "instance": "/v1/invoices", "code": "validation_failed", "errors": [ { "field": "customer.id", "code": "required", "message": "This field is required." } ], "requestId": "017f22e2-79b0-7cc3-98c4-dc0c0c07398f", "rideStatus": "pending", "documentStatus": "processing", "environment": "test", "expectedTotal": "112.00", "computedTotal": "111.99"}