Get the XML of a document
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/documents/example/xml"), 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/documents/example/xml"
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/documents/example/xml")) .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/documents/example/xml';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/documents/example/xml \ --header 'Authorization: Bearer <token>'The most advanced XML available: the authorized XML once the SRI authorized the document, else the signed XML, else the unsigned XML Flashpi built. The Flashpi-Xml-Kind header says which one (authorized, signed or unsigned). Any API key can read (read_only included); an issuer-scoped key only sees its issuer. Test keys see test documents and live keys live documents.
Authorizations
Sección titulada «Authorizations»Parameters
Sección titulada «Parameters»Path Parameters
Sección titulada «Path Parameters»Header Parameters
Sección titulada «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
Sección titulada «Responses»The XML document.
Headers
Sección titulada «Headers»authorized, signed or unsigned.
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
Sección titulada «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"}Not_found: no such document, or a test document whose files were deleted (the files of test documents are kept 90 days after they are stored; the detail says so).
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"}