Referencia de la API GraphQL

Todo Revclic es accesible a través de una única API GraphQL orientada a clientes. Esta referencia documenta cada consulta, mutación y tipo del esquema. La API está autenticada: cada petición debe presentar un token Bearer.

Punto de acceso

https://api.revclic.com/

Método

POST

Autenticación

Token Bearer (JWT)

Formato

application/json

Envía una petición HTTP POST al punto de acceso, con un cuerpo JSON que contenga el campo query (y opcionalmente variables), y una cabecera Authorization con tu token Bearer.

curl -X POST https://api.revclic.com/ \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <token>" \
  -d '{"query": "{ me { id email } }"}'

Obtén un token mediante la mutación signin (o signup) y preséntalo en la cabecera Authorization: Bearer <token> de cada petición.

Consultas

health

health: String!

Devuelve String!

me

me: User

Devuelve User

users

users(page: Int = 1, perPage: Int, search: String, status: String, sort: String = "id_desc"): UserPage!

Argumentos

pageInt = 1
perPageInt
searchString
statusString
sortString = "id_desc"

Devuelve UserPage!

user

user(id: ID!): User

Argumentos

idID!

Devuelve User

mySessions

mySessions(currentRefreshToken: String): [RefreshToken!]!

Argumentos

currentRefreshTokenString

Devuelve [RefreshToken!]!

myMerchants

myMerchants: [Merchant!]!

Devuelve [Merchant!]!

merchants

merchants(page: Int = 1, perPage: Int, search: String, status: String, sort: String = "id_desc"): MerchantPage!

Argumentos

pageInt = 1
perPageInt
searchString
statusString
sortString = "id_desc"

Devuelve MerchantPage!

merchant

merchant(id: ID!): Merchant

Argumentos

idID!

Devuelve Merchant

merchantProducts

merchantProducts(merchantId: ID!, page: Int = 1, perPage: Int): ProductPage!

Argumentos

merchantIdID!
pageInt = 1
perPageInt

Devuelve ProductPage!

merchantDomains

merchantDomains(merchantId: ID!): [MerchantDomain!]!

Argumentos

merchantIdID!

Devuelve [MerchantDomain!]!

merchantVouchers

merchantVouchers(merchantId: ID!): [MerchantVoucher!]!

Argumentos

merchantIdID!

Devuelve [MerchantVoucher!]!

productCategories

productCategories(locale: Locale! = FR): [PublicProductCategory!]!

Argumentos

localeLocale! = FR

Devuelve [PublicProductCategory!]!

searchProducts

searchProducts(query: String, locale: Locale! = FR, categoryId: ID, limit: Int = 20, offset: Int = 0): [ProductSearchResult!]!

Argumentos

queryString
localeLocale! = FR
categoryIdID
limitInt = 20
offsetInt = 0

Devuelve [ProductSearchResult!]!

merchantCategories

merchantCategories(locale: Locale! = FR): [MerchantCategory!]!

Argumentos

localeLocale! = FR

Devuelve [MerchantCategory!]!

merchantTransactions

merchantTransactions(merchantId: ID!, page: Int = 1, startDate: String, endDate: String): TransactionPage!

Argumentos

merchantIdID!
pageInt = 1
startDateString
endDateString

Devuelve TransactionPage!

merchantTransaction

merchantTransaction(merchantId: ID!, transactionId: ID!): Transaction

Argumentos

merchantIdID!
transactionIdID!

Devuelve Transaction

transactionStats

transactionStats(merchantId: ID!, from: String, to: String, rewardStatus: String, type: String, excludeBots: Boolean = true): TransactionStats!

Argumentos

merchantIdID!
fromString
toString
rewardStatusString
typeString
excludeBotsBoolean = true

Devuelve TransactionStats!

merchantInvoices

merchantInvoices(merchantId: ID!, page: Int = 1, status: String): InvoicePage!

Argumentos

merchantIdID!
pageInt = 1
statusString

Devuelve InvoicePage!

merchantContracts

merchantContracts(merchantId: ID!): [MerchantContract!]!

Argumentos

merchantIdID!

Devuelve [MerchantContract!]!

phonePrefixes

phonePrefixes: [PhonePrefix!]!

Devuelve [PhonePrefix!]!

logs

logs(page: Int = 1, type: String, actorType: String, userId: ID, startDate: String, endDate: String, order: String = "desc"): LogPage!

Argumentos

pageInt = 1
typeString
actorTypeString
userIdID
startDateString
endDateString
orderString = "desc"

Devuelve LogPage!

logFacets

logFacets(facet: String = "type"): [String!]!

Argumentos

facetString = "type"

Devuelve [String!]!

notifications

notifications(page: Int = 1, unreadOnly: Boolean): NotificationPage!

Argumentos

pageInt = 1
unreadOnlyBoolean

Devuelve NotificationPage!

unreadNotificationCount

unreadNotificationCount: Int!

Devuelve Int!

mercureSubscription

mercureSubscription: MercureSubscription

Devuelve MercureSubscription

unusedRecoveryCodeCount

unusedRecoveryCodeCount: Int!

Devuelve Int!

merchantStatuses

merchantStatuses: [EnumValue!]!

Devuelve [EnumValue!]!

merchantDomainStatuses

merchantDomainStatuses: [EnumValue!]!

Devuelve [EnumValue!]!

notificationEvents

notificationEvents: [EnumValue!]!

Devuelve [EnumValue!]!

notificationChannels

notificationChannels: [EnumValue!]!

Devuelve [EnumValue!]!

productPricingTypes

productPricingTypes: [EnumValue!]!

Devuelve [EnumValue!]!

transactionStatuses

transactionStatuses: [EnumValue!]!

Devuelve [EnumValue!]!

transactionRewards

transactionRewards: [EnumValue!]!

Devuelve [EnumValue!]!

basketItemStatuses

basketItemStatuses: [EnumValue!]!

Devuelve [EnumValue!]!

invoiceStatuses

invoiceStatuses: [EnumValue!]!

Devuelve [EnumValue!]!

paymentMethods

paymentMethods: [EnumValue!]!

Devuelve [EnumValue!]!

userStatuses

userStatuses: [EnumValue!]!

Devuelve [EnumValue!]!

locales

locales: [EnumValue!]!

Devuelve [EnumValue!]!

featureFlags

featureFlags: [EnumValue!]!

Devuelve [EnumValue!]!

Mutaciones

signup

signup(email: String!, password: String!, firstName: String, lastName: String, challengeToken: String): AuthPayload!

Argumentos

emailString!
passwordString!
firstNameString
lastNameString
challengeTokenString

Devuelve AuthPayload!

verifyEmail

verifyEmail(token: String!): Boolean!

Argumentos

tokenString!

Devuelve Boolean!

requestPasswordReset

requestPasswordReset(email: String!, challengeToken: String): Boolean!

Argumentos

emailString!
challengeTokenString

Devuelve Boolean!

resetPassword

resetPassword(token: String!, newPassword: String!): Boolean!

Argumentos

tokenString!
newPasswordString!

Devuelve Boolean!

signin

signin(email: String!, password: String!): SigninResult!

Argumentos

emailString!
passwordString!

Devuelve SigninResult!

verifyTwoFactor

verifyTwoFactor(challengeToken: String!, code: String!): AuthPayload!

Argumentos

challengeTokenString!
codeString!

Devuelve AuthPayload!

refreshToken

refreshToken(refreshToken: String!): AuthPayload!

Argumentos

refreshTokenString!

Devuelve AuthPayload!

logout

logout(refreshToken: String!): Boolean!

Argumentos

refreshTokenString!

Devuelve Boolean!

setupTwoFactor

setupTwoFactor: TwoFactorSetup!

Devuelve TwoFactorSetup!

enableTwoFactor

enableTwoFactor(secret: String!, code: String!): TwoFactorRecoveryCodes!

Argumentos

secretString!
codeString!

Devuelve TwoFactorRecoveryCodes!

disableTwoFactor

disableTwoFactor(code: String!): Boolean!

Argumentos

codeString!

Devuelve Boolean!

regenerateRecoveryCodes

regenerateRecoveryCodes(password: String!, code: String!): TwoFactorRecoveryCodes!

Argumentos

passwordString!
codeString!

Devuelve TwoFactorRecoveryCodes!

updateAccount

updateAccount(firstName: String!, lastName: String!, locale: Locale!): User!

Argumentos

firstNameString!
lastNameString!
localeLocale!

Devuelve User!

changePassword

changePassword(currentPassword: String!, newPassword: String!): Boolean!

Argumentos

currentPasswordString!
newPasswordString!

Devuelve Boolean!

updateNotificationPreferences

updateNotificationPreferences(preferences: [String!]!): User!

Argumentos

preferences[String!]!

Devuelve User!

updateAccountFeatures

updateAccountFeatures(featureFlags: [String!]!): User!

Argumentos

featureFlags[String!]!

Devuelve User!

revokeSession

revokeSession(id: ID!): Boolean!

Argumentos

idID!

Devuelve Boolean!

generatePersonalToken

generatePersonalToken(password: String!): AuthPayload!

Argumentos

passwordString!

Devuelve AuthPayload!

updateUser

updateUser(id: ID!, input: UpdateUserInput!): User!

Argumentos

idID!
inputUpdateUserInput!

Devuelve User!

createMerchant

createMerchant(input: CreateMerchantInput!): Merchant!

Argumentos

inputCreateMerchantInput!

Devuelve Merchant!

updateMerchant

updateMerchant(id: ID!, input: UpdateMerchantInput!): Merchant!

Argumentos

idID!
inputUpdateMerchantInput!

Devuelve Merchant!

createProduct

createProduct(merchantId: ID!, input: CreateProductInput!): Product!

Argumentos

merchantIdID!
inputCreateProductInput!

Devuelve Product!

updateProduct

updateProduct(id: ID!, input: UpdateProductInput!): Product!

Argumentos

idID!
inputUpdateProductInput!

Devuelve Product!

deleteProduct

deleteProduct(id: ID!): ItemDeleted!

Argumentos

idID!

Devuelve ItemDeleted!

addMerchantDomain

addMerchantDomain(merchantId: ID!, host: String!): MerchantDomain!

Argumentos

merchantIdID!
hostString!

Devuelve MerchantDomain!

verifyMerchantDomain

verifyMerchantDomain(id: ID!): MerchantDomain!

Argumentos

idID!

Devuelve MerchantDomain!

deleteMerchantDomain

deleteMerchantDomain(id: ID!): ItemDeleted!

Argumentos

idID!

Devuelve ItemDeleted!

createMerchantVoucher

createMerchantVoucher(merchantId: ID!, input: MerchantVoucherInput!): MerchantVoucher!

Argumentos

merchantIdID!
inputMerchantVoucherInput!

Devuelve MerchantVoucher!

updateMerchantVoucher

updateMerchantVoucher(id: ID!, input: MerchantVoucherInput!): MerchantVoucher!

Argumentos

idID!
inputMerchantVoucherInput!

Devuelve MerchantVoucher!

deleteMerchantVoucher

deleteMerchantVoucher(id: ID!): ItemDeleted!

Argumentos

idID!

Devuelve ItemDeleted!

createTransaction

createTransaction(merchantId: ID!, input: CreateTransactionInput!): Transaction!

Argumentos

merchantIdID!
inputCreateTransactionInput!

Devuelve Transaction!

updateTransaction

updateTransaction(merchantId: ID!, transactionId: ID!, input: UpdateTransactionInput!): Transaction!

Argumentos

merchantIdID!
transactionIdID!
inputUpdateTransactionInput!

Devuelve Transaction!

requestContractSigningCode

requestContractSigningCode(merchantId: ID!, contractId: ID!, phonePrefix: String!, phoneNumber: String!): ContractCodeResult!

Argumentos

merchantIdID!
contractIdID!
phonePrefixString!
phoneNumberString!

Devuelve ContractCodeResult!

validateContractSigningCode

validateContractSigningCode(merchantId: ID!, contractId: ID!, code: String!): Boolean!

Argumentos

merchantIdID!
contractIdID!
codeString!

Devuelve Boolean!

signContract

signContract(merchantId: ID!, contractId: ID!, code: String!, acceptContract: Boolean!): Boolean!

Argumentos

merchantIdID!
contractIdID!
codeString!
acceptContractBoolean!

Devuelve Boolean!

markNotificationRead

markNotificationRead(id: ID!): Boolean!

Argumentos

idID!

Devuelve Boolean!

markAllNotificationsRead

markAllNotificationsRead: Boolean!

Devuelve Boolean!

submitContactRequest

submitContactRequest(input: ContactRequestInput!): Boolean!

Argumentos

inputContactRequestInput!

Devuelve Boolean!

Tipos

AuthPayload

type AuthPayload {
  token: String!
  refreshToken: String!
  user: User!
}

BasketItem

type BasketItem {
  id: ID!
  gtin: String!
  name: String
  price: String!
  quantity: Int!
  commissionRate: String!
  status: EnumValue!
}

BillingAddress

type BillingAddress {
  companyName: String
  firstName: String
  lastName: String
  linePrimary: String
  lineSecondary: String
  city: String
  state: String
  postalCode: String
  country: String
}

ContractCodeResult

type ContractCodeResult {
  expiresAt: String!
}

EnumValue

type EnumValue {
  code: String!
  label: String!
}

InvoicePage

type InvoicePage {
  items: [MerchantInvoice!]!
  currentPage: Int!
  totalResults: Int!
  totalPages: Int!
}

ItemDeleted

type ItemDeleted {
  id: ID!
  typeName: String!
}

Log

type Log {
  id: ID!
  type: String!
  userId: ID
  actorType: String!
  actorId: ID
  actorIpAddress: String
  actorUserAgent: String
  data: String!
  createdAt: String!
}

LogPage

type LogPage {
  items: [Log!]!
  currentPage: Int!
  totalResults: Int!
  totalPages: Int!
}

Merchant

type Merchant {
  id: ID!
  name: String!
  status: EnumValue!
  description: Translations!
  activityIntroduction: String
  websiteUrl: String
  logoUrl: String
  countries: [String!]!
  activityTypes: [String!]!
  billingAddress: BillingAddress!
  disableInvoicing: Boolean!
  owner: MerchantOwner
  createdAt: String!
  categoryIds: [ID!]!
  categories: [MerchantCategory!]!
}

MerchantCategory

type MerchantCategory {
  id: ID!
  name: String!
  label: String!
}

MerchantContract

type MerchantContract {
  id: ID!
  contractId: ID!
  title: String!
  version: String!
  fileUrl: String!
  fileHash: String!
  submittedAt: String!
  signed: Boolean!
  signedAt: String
  signerPhonePrefix: String
  signerPhoneNumber: String
  codeSentAt: String
}

MerchantDomain

type MerchantDomain {
  id: ID!
  merchantId: ID!
  host: String!
  status: EnumValue!
  verificationToken: String!
  txtRecordName: String!
  txtRecordValue: String!
  verifiedAt: String
  createdAt: String!
}

MerchantInvoice

type MerchantInvoice {
  id: ID!
  amount: String!
  dueDate: String!
  paymentMethod: EnumValue
  paymentDate: String
  status: EnumValue!
  externalInvoiceId: String
  pdfUrl: String
  createdAt: String!
}

MerchantOwner

type MerchantOwner {
  email: String!
  name: String!
}

MerchantPage

type MerchantPage {
  items: [Merchant!]!
  currentPage: Int!
  totalResults: Int!
  totalPages: Int!
}

MerchantVoucher

type MerchantVoucher {
  id: ID!
  merchantId: ID!
  code: String!
  usageConditions: String!
  validFrom: String
  validUntil: String
  createdAt: String!
  updatedAt: String!
}

MercureSubscription

type MercureSubscription {
  hubUrl: String!
  token: String!
  topic: String!
}

Notification

type Notification {
  id: ID!
  event: EnumValue!
  context: String!
  hasBeenRead: Boolean!
  notifiedAt: String!
}

NotificationPage

type NotificationPage {
  items: [Notification!]!
  currentPage: Int!
  totalResults: Int!
  totalPages: Int!
}

PhonePrefix

type PhonePrefix {
  code: String!
  prefix: String!
}

Product

type Product {
  id: ID!
  name: Translations!
  description: Translations!
  price: String!
  pricingType: EnumValue!
  imageUrls: [String!]!
  url: String
  originalName: String
  requiresTranslation: Boolean!
  targetedMarkets: [String!]!
  categoryIds: [ID!]!
  merchantId: ID!
}

ProductPage

type ProductPage {
  items: [Product!]!
  currentPage: Int!
  totalResults: Int!
  totalPages: Int!
}

ProductSearchResult

type ProductSearchResult {
  id: ID!
  name: String!
  description: String
  price: String!
  pricingType: EnumValue!
  imageUrls: [String!]!
  url: String
  merchant: ProductSearchResultMerchant!
  categories: [PublicProductCategory!]!
}

ProductSearchResultMerchant

type ProductSearchResultMerchant {
  id: ID!
  name: String!
  websiteUrl: String
  logoUrl: String
}

PublicProductCategory

type PublicProductCategory {
  id: ID!
  name: String!
  label: String!
}

RefreshToken

type RefreshToken {
  id: ID!
  device: String
  ipAddress: String
  location: String
  label: String
  current: Boolean!
  createdAt: String!
}

SigninResult

type SigninResult {
  twoFactorRequired: Boolean!
  challengeToken: String
  auth: AuthPayload
}

Transaction

type Transaction {
  id: ID!
  redirectId: ID
  merchantName: String!
  basketPrice: String!
  totalCommission: String!
  status: EnumValue!
  reward: EnumValue!
  basketItemCount: Int!
  basketItems: [BasketItem!]!
  createdAt: String!
  updatedAt: String!
}

TransactionDailyStat

type TransactionDailyStat {
  date: String!
  count: Int!
  revenue: String!
  reward: String!
  redirects: Int!
}

TransactionPage

type TransactionPage {
  items: [Transaction!]!
  currentPage: Int!
  totalResults: Int!
  totalPages: Int!
}

TransactionStats

type TransactionStats {
  count: Int!
  acceptedCount: Int!
  acceptanceRate: Float!
  revenue: String!
  reward: String!
  redirectsCount: Int!
  conversionRate: Float!
  series: [TransactionDailyStat!]!
}

Translations

type Translations {
  fr: String
  es: String
}

TwoFactorRecoveryCodes

type TwoFactorRecoveryCodes {
  recoveryCodes: [String!]!
}

TwoFactorSetup

type TwoFactorSetup {
  secret: String!
  qrCodeUri: String!
}

User

type User {
  id: ID!
  email: String!
  firstName: String
  lastName: String
  roles: [String!]!
  featureFlags: [String!]!
  notificationPreferences: [String!]!
  emailVerified: Boolean!
  twoFactorEnabled: Boolean!
  locale: EnumValue!
  status: EnumValue!
  createdAt: String!
}

UserPage

type UserPage {
  items: [User!]!
  currentPage: Int!
  totalResults: Int!
  totalPages: Int!
}

Tipos de entrada

BillingAddressInput

input BillingAddressInput {
  companyName: String
  firstName: String
  lastName: String
  linePrimary: String
  lineSecondary: String
  city: String
  state: String
  postalCode: String
  country: String
}

ContactRequestInput

input ContactRequestInput {
  name: String!
  email: String!
  company: String
  phone: String
  message: String!
  turnstileToken: String
}

CreateBasketItemInput

input CreateBasketItemInput {
  name: String
  gtin: String!
  price: String!
  quantity: Int!
  commissionRate: String!
  status: String
}

CreateMerchantInput

input CreateMerchantInput {
  name: String!
  description: TranslationsInput
  activityIntroduction: String
  websiteUrl: String
  logoUrl: String
  countries: [String!]
  activityTypes: [String!]
  billingAddress: BillingAddressInput
  categoryIds: [ID!]
}

CreateProductInput

input CreateProductInput {
  name: TranslationsInput!
  description: TranslationsInput
  price: String!
  pricingType: ProductPricingType
  imageUrls: [String!]
  url: String
  originalName: String
  requiresTranslation: Boolean
  targetedMarkets: [String!]
  categoryIds: [ID!]
}

CreateTransactionInput

input CreateTransactionInput {
  redirectId: ID
  basketItems: [CreateBasketItemInput!]!
}

MerchantVoucherInput

input MerchantVoucherInput {
  code: String!
  usageConditions: String!
  validFrom: String
  validUntil: String
}

TranslationsInput

input TranslationsInput {
  fr: String
  es: String
}

UpdateBasketItemInput

input UpdateBasketItemInput {
  id: ID!
  status: String!
}

UpdateMerchantInput

input UpdateMerchantInput {
  name: String
  description: TranslationsInput
  activityIntroduction: String
  websiteUrl: String
  logoUrl: String
  countries: [String!]
  activityTypes: [String!]
  billingAddress: BillingAddressInput
  categoryIds: [ID!]
  status: String
  disableInvoicing: Boolean
}

UpdateProductInput

input UpdateProductInput {
  name: TranslationsInput
  description: TranslationsInput
  price: String
  pricingType: ProductPricingType
  imageUrls: [String!]
  url: String
  originalName: String
  requiresTranslation: Boolean
  targetedMarkets: [String!]
  categoryIds: [ID!]
}

UpdateTransactionInput

input UpdateTransactionInput {
  basketItems: [UpdateBasketItemInput!]!
}

UpdateUserInput

input UpdateUserInput {
  firstName: String
  lastName: String
  email: String
  locale: String
  emailVerified: Boolean
  featureFlags: [String!]
  status: String
  notificationPreferences: [String!]
}

Enumeraciones

Locale

enum Locale {
  FR
  ES
}

ProductPricingType

enum ProductPricingType {
  ONE_TIME_PURCHASE
  SUBSCRIPTION_PER_MONTH
  SUBSCRIPTION_PER_YEAR
}

Escalares

BooleanFloatIDIntString