openapi: 3.2.0 info: contact: email: support@getanyapi.com description: 'Any API, one wallet, USD, no subscriptions. Each API is a single discovered operation: send the normalized input, get a normalized result. Prices and payment outcomes are reported in USD; each operation documents the settlement policy for its enabled payment rails.' title: Any Person Enrichment API version: 1.0.0 x-guidance: 'Use each operation''s published method and path with its normalized JSON input (see the operation requestBody). Before setting a client or tool timeout, GET /v1/apis/{sku} and inspect its trailing-30-day latency p50/p95/p99 and sample; p99 is an observation, not a maximum. To pay: send your AnyAPI key (Authorization: Bearer, billed from your USD wallet). For operations that advertise an inline rail, pay per call inline with x402 - call with no key, receive HTTP 402 with a PAYMENT-REQUIRED header, then retry with the PAYMENT-SIGNATURE header (base, no account needed); or pay per call inline with MPP (Machine Payments Protocol) - call with no key, receive HTTP 402 with a WWW-Authenticate: Payment challenge, then retry with the Authorization: Payment header (tempo, no account needed). x402 settles after execution; execution failure is reported as released; mpp settles before execution; execution failure is reported as charged_undelivered.' servers: - url: https://api.getanyapi.com security: - bearerAuth: [] - apiKeyAuth: [] tags: - name: Person Enrichment x-group: Person_enrichment paths: /v1/run/person_enrichment.aviato: post: description: 'Enrich a person from an Aviato or LinkedIn identifier, LinkedIn URL, or email. **Price:** \$84.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** one lane serves this API today, so a failed attempt has nowhere to fail over to. Payment outcome follows the selected rail''s settlement policy. **Catalog:** Person Enrichment - Aviato pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every Person_enrichment endpoint.' operationId: person_enrichment_aviato parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: linkedinURL: https://www.linkedin.com/in/dharmesh schema: additionalProperties: false anyOf: - required: - id - required: - linkedinID - required: - linkedinEntityId - required: - linkedinURL - required: - twitterID - required: - crunchbaseID - required: - angelListID - required: - signalNfxID - required: - polyworkID - required: - email example: linkedinURL: https://www.linkedin.com/in/dharmesh properties: angelListID: minLength: 1 type: string crunchbaseID: minLength: 1 type: string email: format: email type: string id: minLength: 1 type: string linkedinEntityId: minLength: 1 type: string linkedinID: minLength: 1 type: string linkedinURL: format: uri type: string polyworkID: minLength: 1 type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer require: items: type: string type: array signalNfxID: minLength: 1 type: string twitterID: minLength: 1 type: string title: Person Enrichment - Aviato input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: description: The enriched person, or null when nothing matched. oneOf: - type: 'null' - properties: about: description: Profile about/summary text. type: string aviatoId: description: Aviato's own person identifier. Send it back as this SKU's id input to re-enrich the same person. type: string certifications: description: Certifications listed on the profile. items: properties: companyId: description: Aviato's company identifier for the issuer. type: string companyName: description: Company that issued the certification. type: string expiresUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. type: number issuedUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. type: number name: description: Certification name. type: string url: description: URL of the certification or its issuer. type: string type: object type: array country: description: Country the person is located in. type: string crunchbaseUrl: description: Crunchbase profile URL. type: string degrees: description: Degrees earned. items: properties: degree: description: Degree awarded, e.g. B.S. type: string entityType: description: Aviato's record class for this entry, e.g. "company" or "school". type: string fieldOfStudy: description: Field of study the degree is in. type: string personEducationId: description: Aviato's education-record identifier this degree was awarded for. It matches an educationId in the education array. type: string personId: description: Aviato's person identifier this degree belongs to. Same value as the top-level aviatoId. type: string school: description: School that awarded the degree. type: string schoolId: description: Aviato's identifier for the school. type: string schoolLinkedinHandle: description: School's LinkedIn vanity handle. type: string schoolLinkedinNumericId: description: LinkedIn's own numeric identifier for the school on this record. type: string schoolLocation: description: Where the school is located. type: string type: object type: array education: description: Schools attended. items: properties: educationId: description: Aviato's identifier for this education record. type: string educationLinkedinNumericId: description: LinkedIn's own numeric identifier for this education entry. type: string endedUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. type: number entityType: description: Aviato's record class for this entry, e.g. "company" or "school". type: string personId: description: Aviato's person identifier this education record belongs to. Same value as the top-level aviatoId. type: string school: description: School name. type: string schoolFullName: description: School name on Aviato's school record. Duplicates the school field. type: string schoolId: description: Aviato's identifier for the school. type: string schoolLinkedinHandle: description: School's LinkedIn vanity handle. type: string schoolLinkedinNumericId: description: LinkedIn's own numeric identifier for the school on this record. type: string schoolLocation: description: Where the school is located. type: string startedUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. type: number subject: description: Subject studied. type: string type: object type: array emailAvailable: description: True when an email address is known for this person. type: boolean entityType: description: Aviato's record type for this result. It is always person on this SKU, so it repeats what the endpoint already promises. type: string experience: description: Work history, one entry per company, most recent first. items: properties: companyAngelListUrl: description: Employer's AngelList profile URL. type: string companyCanonicalName: description: Employer name on Aviato's company record. Usually identical to companyName, but it can differ when the company was renamed or acquired. type: string companyContactUrl: description: Employer's contact page as Aviato records it. Aviato sometimes returns a malformed value here that runs two host names together into one path, and we pass it through as returned rather than guessing the intended link. type: string companyCountry: description: Employer's country. type: string companyCrunchbaseUrl: description: Employer's Crunchbase profile URL. type: string companyDescription: description: What the employer does. type: string companyFacebookUrl: description: Employer's Facebook page URL. type: string companyGoldenUrl: description: Employer's Golden knowledge-base profile URL. type: string companyId: description: Aviato's company identifier for the employer. type: string companyIndustries: description: Employer's industries in Aviato's taxonomy. items: type: string type: array companyLinkedinIndustries: description: Employer's industries as LinkedIn labels them. items: type: string type: array companyLinkedinNumericId: description: LinkedIn's own numeric identifier for the company on this record. type: string companyLinkedinUrl: description: Employer's LinkedIn company page URL. type: string companyLocality: description: Employer's city. type: string companyName: description: Employer name. type: string companyPitchbookUrl: description: Employer's PitchBook profile URL. type: string companyRecordId: description: Identifier on the nested Aviato company record. Same value as companyId. type: string companyRegion: description: Employer's state or region. type: string companyTwitterUrl: description: Employer's Twitter/X profile URL. type: string companyWebsiteUrl: description: Employer's website URL. type: string endedUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. type: number entityType: description: Aviato's record class for this entry, e.g. "company" or "school". type: string personId: description: Aviato's person identifier this experience belongs to. Same value as the top-level aviatoId. type: string positions: description: Roles held at this employer. items: properties: department: description: Department the role sits in, e.g. EXECUTIVE. type: string description: description: Role description as written on the profile. type: string employmentType: description: Employment type, e.g. Full-time. type: string endedUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. type: number location: description: Where the role was based. type: string seniorityScore: description: Seniority score for the role; higher is more senior. type: integer startedUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. type: number title: description: Job title. type: string type: object type: array startedUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. type: number type: object type: array facebookUrl: description: Facebook profile URL. type: string firstName: description: Person's first name. type: string gender: description: Gender recorded for the person. type: string goldenUrl: description: Golden knowledge-base profile URL for the person. type: string headline: description: LinkedIn headline. type: string highlights: description: Career highlight labels, e.g. employeeDuringIPO. items: type: string type: array investedIndustries: description: 'Industries the person has invested in, as Aviato returns them. Deliberately untyped: the field is empty in every response we have captured, so the value passes through without a shape guarantee.' investedRounds: description: Funding-round stages the person has invested in. items: type: string type: array investorCategories: description: 'Investor categories Aviato assigns to the person. Deliberately untyped: the field is empty in every response we have captured, so the value passes through without a shape guarantee.' investorSummary: description: One-sentence investor summary of the person. type: string investorType: description: Investor classification, e.g. angel or investment_partner. type: string languages: description: Languages listed on the profile. items: properties: name: description: Language name. type: string proficiency: description: Proficiency level, e.g. NATIVE_OR_BILINGUAL. type: string type: object type: array lastName: description: Person's last name. type: string latitude: description: Latitude of the person's city. type: number linkedinConnections: description: Number of LinkedIn connections. minimum: 0 type: integer linkedinEntityId: description: LinkedIn's opaque member URN identifier. Accepted back as this SKU's linkedinEntityId input. type: string linkedinFollowers: description: Number of LinkedIn followers. minimum: 0 type: integer linkedinHandle: description: LinkedIn vanity handle, the last path segment of the profile URL. type: string linkedinJoinedUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. type: number linkedinNumericId: description: LinkedIn's numeric member identifier, as a string. type: string linkedinOpenProfile: description: True when the profile is an Open Profile, so anyone may message it. type: boolean linkedinPremium: description: True when the profile holds a LinkedIn Premium subscription. type: boolean linkedinUrl: description: LinkedIn profile URL. type: string locality: description: City the person is located in. type: string location: description: Location as a single display string, e.g. Boston, Massachusetts, United States. type: string locationDetails: description: The person's location broken into place tiers, each with Aviato's place identifier, name, place type and geometry. properties: continent: description: Continent tier of the person's location. properties: areaSquareDegrees: description: Area of the place in square degrees. type: number boundingBox: description: Bounding box of the place as minLon,minLat,maxLon,maxLat. type: string latitude: description: Latitude of the place centre. type: number longitude: description: Longitude of the place centre. type: number name: description: Place name for this tier. type: string placeId: description: Aviato's place identifier for this tier. type: string placeType: description: Aviato's label for this tier, for example locality. type: string type: object country: description: Country tier of the person's location. Its name duplicates the top-level country field. properties: areaSquareDegrees: description: Area of the place in square degrees. type: number boundingBox: description: Bounding box of the place as minLon,minLat,maxLon,maxLat. type: string latitude: description: Latitude of the place centre. type: number longitude: description: Longitude of the place centre. type: number name: description: Place name for this tier. type: string placeId: description: Aviato's place identifier for this tier. type: string placeType: description: Aviato's label for this tier, for example locality. type: string type: object county: description: County tier of the person's location. properties: areaSquareDegrees: description: Area of the place in square degrees. type: number boundingBox: description: Bounding box of the place as minLon,minLat,maxLon,maxLat. type: string latitude: description: Latitude of the place centre. type: number longitude: description: Longitude of the place centre. type: number name: description: Place name for this tier. type: string placeId: description: Aviato's place identifier for this tier. type: string placeType: description: Aviato's label for this tier, for example locality. type: string type: object localAdmin: description: Local administrative area tier of the person's location, such as the town or city government area. properties: areaSquareDegrees: description: Area of the place in square degrees. type: number boundingBox: description: Bounding box of the place as minLon,minLat,maxLon,maxLat. type: string latitude: description: Latitude of the place centre. type: number longitude: description: Longitude of the place centre. type: number name: description: Place name for this tier. type: string placeId: description: Aviato's place identifier for this tier. type: string placeType: description: Aviato's label for this tier, for example locality. type: string type: object locality: description: City tier of the person's location. Its name duplicates the top-level locality field, and its latitude and longitude duplicate the top-level latitude and longitude. properties: areaSquareDegrees: description: Area of the place in square degrees. type: number boundingBox: description: Bounding box of the place as minLon,minLat,maxLon,maxLat. type: string latitude: description: Latitude of the place centre. type: number longitude: description: Longitude of the place centre. type: number name: description: Place name for this tier. type: string placeId: description: Aviato's place identifier for this tier. type: string placeType: description: Aviato's label for this tier, for example locality. type: string type: object region: description: State or region tier of the person's location. Its name duplicates the top-level region field. properties: areaSquareDegrees: description: Area of the place in square degrees. type: number boundingBox: description: Bounding box of the place as minLon,minLat,maxLon,maxLat. type: string latitude: description: Latitude of the place centre. type: number longitude: description: Longitude of the place centre. type: number name: description: Place name for this tier. type: string placeId: description: Aviato's place identifier for this tier. type: string placeType: description: Aviato's label for this tier, for example locality. type: string type: object type: object locationIds: description: Aviato's place identifiers for the location tiers in locationDetails, broadest first. items: type: integer type: array longitude: description: Longitude of the person's city. type: number name: description: Person's full name. type: string personalEmailAvailable: description: True when a personal email address is known for this person. type: boolean region: description: State or region the person is located in. type: string skills: description: Skills listed on the profile. items: type: string type: array twitterUrl: description: Twitter/X profile URL. type: string updatedUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. type: number websiteUrl: description: Personal or company website URL. type: string workEmailAvailable: description: True when a work email address is known for this person. type: boolean required: - name type: object found: description: False when no person matched the requested identifier. type: boolean required: - found - data title: Person Enrichment - Aviato output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: Person Enrichment - Aviato tags: - Person Enrichment x-mint: href: /api-reference/person-enrichment/aviato x-payment-info: price: amount: '0.084000' currency: USD mode: fixed protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: amount: '0.084000' currency: USD minimumUsd: '0.001000' mode: fixed quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: amount: '0.084000' currency: USD minimumUsd: null mode: fixed quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/person_enrichment.bettercontact: post: description: 'Run one contact through BetterContact''s email waterfall from a name plus company domain or a LinkedIn URL, and get the winning address with its deliverability verdict, the provider that found it, and the employer record. Only a matched contact is billable. **Price:** \$82.80 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** one lane serves this API today, so a failed attempt has nowhere to fail over to. Payment outcome follows the selected rail''s settlement policy. **Catalog:** Person Enrichment - BetterContact pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every Person_enrichment endpoint.' operationId: person_enrichment_bettercontact parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: companyDomain: stripe.com firstName: Patrick lastName: Collison linkedinUrl: https://www.linkedin.com/in/patrickcollison schema: additionalProperties: false anyOf: - required: - companyDomain - required: - company - required: - linkedinUrl example: companyDomain: stripe.com firstName: Patrick lastName: Collison linkedinUrl: https://www.linkedin.com/in/patrickcollison properties: company: description: Employer name, for when you have no domain. minLength: 1 type: string companyDomain: description: Employer domain, e.g. stripe.com. The strongest company signal for the waterfall. minLength: 1 type: string customFields: additionalProperties: true description: Arbitrary identifiers echoed back on the result, for joining the answer to your own records. type: object firstName: description: Contact's first name. minLength: 1 type: string lastName: description: Contact's last name. minLength: 1 type: string linkedinUrl: description: Contact's LinkedIn profile URL, which raises the match rate. format: uri type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer required: - firstName - lastName title: Person Enrichment - BetterContact input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: description: The matched contact, or null when the waterfall found none. oneOf: - type: 'null' - properties: city: description: City. type: string company: description: The contact's employer. properties: about: description: Company about text. type: string addressCity: description: Address city. type: string addressCountry: description: Address country. type: string addressState: description: Address state or region. type: string addressStreet: description: Street address. type: string addressZipcode: description: Address postal code. type: string companyId: description: BetterContact's own company identifier. type: string countryCode: description: ISO 3166-1 alpha-2 country code. type: string crunchbaseUrl: description: Company Crunchbase profile URL. format: uri type: string description: description: Company description. type: string directionsUrl: description: Map directions URL for the office. format: uri type: string domain: description: Company domain. type: string employees: description: Employees BetterContact counts. type: integer employeesOnLinkedin: description: Employees LinkedIn shows for the company. type: integer followers: description: LinkedIn follower count. type: integer founded: description: Year the company was founded. type: integer headquarters: description: Headquarters as one display string. type: string headquartersAddress: description: Headquarters street address. type: string headquartersCity: description: Headquarters city. type: string headquartersCountry: description: Headquarters country. type: string image: description: Company logo URL. format: uri type: string industryCode: description: Industry classification code. type: string legalId: description: Company registration number. type: string legalName: description: Registered legal name. type: string linkedinId: description: Company LinkedIn numeric id. type: string linkedinUrl: description: Company LinkedIn page URL. format: uri type: string name: description: Company name. type: string organizationType: description: Organization type. type: string phone: description: Company switchboard number. type: string size: description: Employee headcount band. type: string website: description: Company website URL. format: uri type: string type: object connections: description: LinkedIn connection count. type: integer contactId: description: BetterContact's own contact identifier. type: string country: description: Country. type: string countryCode: description: ISO 3166-1 alpha-2 country code. type: string currentCompany: description: Current employer as BetterContact names it. type: string doNotContact: description: True when the contact is on a do-not-contact list. type: boolean email: description: The email address the waterfall settled on. type: string emailProvider: description: Mailbox provider behind the address, e.g. Google. type: string emailStatus: description: Deliverability verdict for the address, e.g. valid, catch_all_safe, catch_all_not_safe, undeliverable, not_found. type: string enriched: description: True when the waterfall matched a contact. A false answer is a legitimate miss and is not billed. type: boolean firstName: description: First name. type: string followers: description: LinkedIn follower count. type: integer fullName: description: Contact's full name. type: string gender: description: Gender recorded for the contact. type: string image: description: Contact's profile picture URL. format: uri type: string jobTitle: description: Current job title. type: string lastName: description: Last name. type: string linkedinId: description: Contact's LinkedIn numeric id. type: string linkedinUrl: description: Contact's LinkedIn profile URL. format: uri type: string location: description: Location as one display string. type: string postalCode: description: Postal code. type: string provider: description: Which data source in the waterfall produced the address. type: string required: - enriched type: object found: description: False when the waterfall matched no contact. type: boolean required: - found - data title: Person Enrichment - BetterContact output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: Person Enrichment - BetterContact tags: - Person Enrichment x-mint: href: /api-reference/person-enrichment/bettercontact x-payment-info: price: amount: '0.082800' currency: USD mode: fixed protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: amount: '0.082800' currency: USD minimumUsd: '0.001000' mode: fixed quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: amount: '0.082800' currency: USD minimumUsd: null mode: fixed quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/person_enrichment.fullenrich_bulk: post: description: 'Run FullEnrich''s waterfall on up to 99 people in one call and get back work emails, personal emails and mobile numbers, each with a deliverability status, alongside the full LinkedIn-grade profile and employer record for everyone matched. Only the contacts it matches are returned, and only those are billed. **Price:** billed per result - \$100.80 per 1,000 results, capped at \$9,979.20 per 1,000 requests. **Routing:** one lane serves this API today, so a failed attempt has nowhere to fail over to. Payment outcome follows the selected rail''s settlement policy. **Catalog:** Bulk Person Enrichment - FullEnrich pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every Person_enrichment endpoint.' operationId: person_enrichment_fullenrich_bulk parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: contacts: - custom: row: '1' domain: stripe.com enrich_fields: - contact.emails - contact.personal_emails first_name: Patrick last_name: Collison - company_name: Figma custom: row: '2' enrich_fields: - contact.emails first_name: Dylan last_name: Field linkedin_url: https://www.linkedin.com/in/dylanfield schema: additionalProperties: false example: contacts: - custom: row: '1' domain: stripe.com enrich_fields: - contact.emails - contact.personal_emails first_name: Patrick last_name: Collison - company_name: Figma custom: row: '2' enrich_fields: - contact.emails first_name: Dylan last_name: Field linkedin_url: https://www.linkedin.com/in/dylanfield properties: contacts: description: People to enrich, up to 99 per call. You are charged only for the contacts the waterfall resolves, though the funds held cover every contact you submit until the call settles. Each entry is passed to FullEnrich exactly as you write it, which is why these keys are snake_case while the rest of the API is camelCase. Give a name plus an employer (company_name or domain), or a linkedin_url, or both - more identity means a better hit rate. items: additionalProperties: false anyOf: - required: - first_name - last_name - required: - linkedin_url properties: company_name: description: Employer name. Use this when you do not have the domain. minLength: 1 type: string custom: additionalProperties: type: string description: Your own tags for this entry, echoed back on the matching output row so you can join results to your records. type: object domain: description: Employer's website domain, e.g. stripe.com. The strongest employer signal. minLength: 1 type: string enrich_fields: description: 'What to look for: contact.emails for work addresses, contact.personal_emails for personal ones. Required, and at least one entry. Mobile numbers are not offered here because they cost roughly ten times an email and this SKU is priced per resolved contact at the email rate.' items: enum: - contact.emails - contact.personal_emails type: string minItems: 1 type: array uniqueItems: true first_name: description: Person's first name. Pair it with last_name. minLength: 1 type: string last_name: description: Person's last name. Pair it with first_name. minLength: 1 type: string linkedin_url: description: LinkedIn profile URL. On its own this is enough to identify the person. minLength: 1 type: string required: - enrich_fields type: object maxItems: 99 minItems: 1 type: array preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer required: - contacts title: Bulk Person Enrichment - FullEnrich input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: contacts: description: One row per contact the waterfall resolved, in the order you sent them. Contacts it could not resolve are left out and are not billed, so match your rows back by the tags you set in custom, or by name and company. items: properties: companyDomain: description: Company domain as you supplied it. type: string companyName: description: Company name as you supplied it. type: string custom: additionalProperties: type: string description: The tags you attached to this entry, echoed back so you can join rows to your own records. type: object email: description: Best work email FullEnrich found for this person. type: string emailStatus: description: Deliverability verdict for that address, e.g. DELIVERABLE or HIGH_PROBABILITY. type: string firstName: description: First name. type: string fullName: description: Full name. type: string lastName: description: Last name. type: string personalEmails: description: Personal addresses found, each with its own deliverability verdict. items: properties: email: description: Best work email FullEnrich found for this person. type: string status: description: Deliverability verdict. type: string type: object type: array profile: description: 'The person behind the match: identity, location, current role and employer, history, education, languages and skills. Absent when nothing matched.' properties: city: description: City the person is in. type: string company: description: The person's current employer, with FullEnrich's full firmographic record. properties: companyId: description: FullEnrich's own company identifier. type: string companyType: description: Ownership type, e.g. Public Company, Privately Held. type: string description: description: Profile summary text. type: string domain: description: Primary company domain. type: string foundedYear: description: Year the company was founded. Zero when FullEnrich holds none. type: integer headcount: description: Employees FullEnrich currently counts. type: integer headcountRange: description: Employee headcount band, e.g. 5001-10000. type: string headquarters: description: Headquarters address. properties: city: description: City the person is in. type: string country: description: Country name. type: string countryCode: description: ISO 3166-1 alpha-2 country code. type: string line1: description: First address line. type: string line2: description: Second address line, carrying city, region, postal code and country. type: string region: description: State or region. type: string type: object image: description: Company logo URL. type: string industry: description: Main industry. type: string linkedinFollowers: description: LinkedIn follower count. type: integer linkedinHandle: description: LinkedIn vanity handle. type: string linkedinId: description: LinkedIn numeric member id. type: string linkedinUrl: description: LinkedIn profile URL. type: string name: description: Company name. type: string offices: description: Every other office FullEnrich holds for the company. items: properties: line1: description: First address line. type: string line2: description: Second address line, carrying city, region, postal code and country. type: string type: object type: array specialties: description: Specialties the company lists for itself. items: type: string type: array website: description: Company website URL. type: string type: object country: description: Country name. type: string countryCode: description: ISO 3166-1 alpha-2 country code. type: string description: description: Profile summary text. type: string educations: description: Education history. items: properties: degree: description: Degree earned. type: string endUtc: description: UTC epoch timestamp in seconds (Unix time) study ended. Multiply by 1000 for a JS Date in milliseconds. type: number schoolName: description: School name. type: string startUtc: description: UTC epoch timestamp in seconds (Unix time) the role started. Multiply by 1000 for a JS Date in milliseconds. type: number type: object type: array employmentHistory: description: Every role on the record, current and past. items: properties: companyDomain: description: Company domain as you supplied it. type: string companyName: description: Company name as you supplied it. type: string isCurrent: description: True while the role is current. type: boolean jobTitle: description: Job title. type: string seniority: description: Seniority band. type: string startUtc: description: UTC epoch timestamp in seconds (Unix time) the role started. Multiply by 1000 for a JS Date in milliseconds. type: number type: object type: array firstName: description: First name. type: string fullName: description: Full name. type: string headline: description: LinkedIn headline. type: string isCurrent: description: True while the role is current. type: boolean jobStartUtc: description: UTC epoch timestamp in seconds (Unix time) the current role started. Multiply by 1000 for a JS Date in milliseconds. type: number jobTitle: description: Job title. type: string languages: description: Languages the person speaks. items: properties: language: description: Language name. type: string proficiency: description: Proficiency band, e.g. FULL_PROFESSIONAL. type: string type: object type: array lastName: description: Last name. type: string linkedinHandle: description: LinkedIn vanity handle. type: string linkedinId: description: LinkedIn numeric member id. type: string linkedinUrl: description: LinkedIn profile URL. type: string profileId: description: FullEnrich's own person identifier. type: string region: description: State or region. type: string seniority: description: Seniority band. type: string skills: description: Skills the person lists. items: type: string type: array type: object workEmails: description: Every work address found, best first, each with its own deliverability verdict. items: properties: email: description: Best work email FullEnrich found for this person. type: string status: description: Deliverability verdict. type: string type: object type: array type: object type: array required: - contacts type: object found: description: False when nothing was resolved, in which case there is nothing to bill. type: boolean required: - found - data title: Bulk Person Enrichment - FullEnrich output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: Bulk Person Enrichment - FullEnrich tags: - Person Enrichment x-mint: href: /api-reference/person-enrichment/fullenrich-bulk x-payment-info: price: currency: USD max: '9.979200' min: '0.000000' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '9.979200' min: '0.001000' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '9.979200' min: '0.000000' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/person_enrichment.fullenrich_reverse_email: post: description: 'Turn up to 99 email addresses into the people behind them: name, headline, location, LinkedIn profile, current title and seniority, full employment history, education, languages and skills, plus the employer record. Only the addresses it resolves are returned, and only those are billed. **Price:** billed per result - \$100.80 per 1,000 results, capped at \$9,979.20 per 1,000 requests. **Routing:** one lane serves this API today, so a failed attempt has nowhere to fail over to. Payment outcome follows the selected rail''s settlement policy. **Catalog:** Reverse Email Lookup - FullEnrich pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every Person_enrichment endpoint.' operationId: person_enrichment_fullenrich_reverse_email parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: contacts: - custom: row: '1' email: dfield@figma.com - custom: row: '2' email: patrick@stripe.com schema: additionalProperties: false example: contacts: - custom: row: '1' email: dfield@figma.com - custom: row: '2' email: patrick@stripe.com properties: contacts: description: Addresses to look up, up to 99 per call. You are charged only for the addresses that resolve to a person, though the funds held cover every address you submit until the call settles. Each entry is an object so you can tag it; the address itself goes in email. items: additionalProperties: false properties: custom: additionalProperties: type: string description: Your own tags for this entry, echoed back on the matching output row so you can join results to your records. type: object email: description: The address to look up. minLength: 3 type: string required: - email type: object maxItems: 99 minItems: 1 type: array preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer required: - contacts title: Reverse Email Lookup - FullEnrich input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: oneOf: - type: 'null' - additionalProperties: false properties: contacts: description: One row per address resolved to a person, in the order you sent them. Addresses that resolved to nobody are left out and are not billed; queriedEmail on each row tells you which address it answers. items: properties: custom: additionalProperties: type: string description: The tags you attached to this entry, echoed back so you can join rows to your own records. type: object profile: description: 'The person behind the match: identity, location, current role and employer, history, education, languages and skills. Absent when nothing matched.' properties: city: description: City the person is in. type: string company: description: The person's current employer, with FullEnrich's full firmographic record. properties: companyId: description: FullEnrich's own company identifier. type: string companyType: description: Ownership type, e.g. Public Company, Privately Held. type: string description: description: Profile summary text. type: string domain: description: Primary company domain. type: string foundedYear: description: Year the company was founded. Zero when FullEnrich holds none. type: integer headcount: description: Employees FullEnrich currently counts. type: integer headcountRange: description: Employee headcount band, e.g. 5001-10000. type: string headquarters: description: Headquarters address. properties: city: description: City the person is in. type: string country: description: Country name. type: string countryCode: description: ISO 3166-1 alpha-2 country code. type: string line1: description: First address line. type: string line2: description: Second address line, carrying city, region, postal code and country. type: string region: description: State or region. type: string type: object image: description: Company logo URL. type: string industry: description: Main industry. type: string linkedinFollowers: description: LinkedIn follower count. type: integer linkedinHandle: description: LinkedIn vanity handle. type: string linkedinId: description: LinkedIn numeric member id. type: string linkedinUrl: description: LinkedIn profile URL. type: string name: description: Company name. type: string offices: description: Every other office FullEnrich holds for the company. items: properties: line1: description: First address line. type: string line2: description: Second address line, carrying city, region, postal code and country. type: string type: object type: array specialties: description: Specialties the company lists for itself. items: type: string type: array website: description: Company website URL. type: string type: object country: description: Country name. type: string countryCode: description: ISO 3166-1 alpha-2 country code. type: string description: description: Profile summary text. type: string educations: description: Education history. items: properties: degree: description: Degree earned. type: string endUtc: description: UTC epoch timestamp in seconds (Unix time) study ended. Multiply by 1000 for a JS Date in milliseconds. type: number schoolName: description: School name. type: string startUtc: description: UTC epoch timestamp in seconds (Unix time) the role started. Multiply by 1000 for a JS Date in milliseconds. type: number type: object type: array employmentHistory: description: Every role on the record, current and past. items: properties: companyDomain: description: Company domain as you supplied it. type: string companyName: description: Company name as you supplied it. type: string isCurrent: description: True while the role is current. type: boolean jobTitle: description: Job title. type: string seniority: description: Seniority band. type: string startUtc: description: UTC epoch timestamp in seconds (Unix time) the role started. Multiply by 1000 for a JS Date in milliseconds. type: number type: object type: array firstName: description: First name. type: string fullName: description: Full name. type: string headline: description: LinkedIn headline. type: string isCurrent: description: True while the role is current. type: boolean jobStartUtc: description: UTC epoch timestamp in seconds (Unix time) the current role started. Multiply by 1000 for a JS Date in milliseconds. type: number jobTitle: description: Job title. type: string languages: description: Languages the person speaks. items: properties: language: description: Language name. type: string proficiency: description: Proficiency band, e.g. FULL_PROFESSIONAL. type: string type: object type: array lastName: description: Last name. type: string linkedinHandle: description: LinkedIn vanity handle. type: string linkedinId: description: LinkedIn numeric member id. type: string linkedinUrl: description: LinkedIn profile URL. type: string profileId: description: FullEnrich's own person identifier. type: string region: description: State or region. type: string seniority: description: Seniority band. type: string skills: description: Skills the person lists. items: type: string type: array type: object queriedEmail: description: The address you asked about, echoed back. type: string type: object type: array required: - contacts type: object found: description: False when nothing was resolved, in which case there is nothing to bill. type: boolean required: - found - data title: Reverse Email Lookup - FullEnrich output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: Reverse Email Lookup - FullEnrich tags: - Person Enrichment x-mint: href: /api-reference/person-enrichment/fullenrich-reverse-email x-payment-info: price: currency: USD max: '9.979200' min: '0.000000' mode: dynamic protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: currency: USD max: '9.979200' min: '0.001000' minimumUsd: '0.001000' mode: dynamic quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: currency: USD max: '9.979200' min: '0.000000' minimumUsd: null mode: dynamic quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/person_enrichment.lusha: post: description: 'Enrich one person into work email, direct dial, job title and employer firmographics from a LinkedIn URL, an email, or a name plus company. **Price:** \$84.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** one lane serves this API today, so a failed attempt has nowhere to fail over to. Payment outcome follows the selected rail''s settlement policy. **Catalog:** Person Enrichment - Lusha pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every Person_enrichment endpoint.' operationId: person_enrichment_lusha parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: linkedinUrl: https://www.linkedin.com/in/tim-zheng schema: additionalProperties: false anyOf: - required: - linkedinUrl - required: - email - required: - firstName - lastName - companyDomain - required: - firstName - lastName - companyName example: linkedinUrl: https://www.linkedin.com/in/tim-zheng properties: companyDomain: description: Employer domain, e.g. apollo.io. Secondary identifier for a name-based lookup. minLength: 1 type: string companyName: description: Employer name. Secondary identifier for a name-based lookup; companyDomain matches more reliably. minLength: 1 type: string email: description: Known email address, used to resolve the person's identity. format: email type: string firstName: description: First name. Send with lastName plus companyName or companyDomain. minLength: 1 type: string lastName: description: Last name. Send with firstName plus companyName or companyDomain. minLength: 1 type: string linkedinUrl: description: LinkedIn profile URL (linkedin.com/in/...). Highest match rate. format: uri type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer refreshJobInfo: description: Force a fresh job title and employer lookup instead of the cached one. type: boolean revealEmails: description: Reveal email addresses. Defaults to true upstream. type: boolean revealPhones: description: Reveal phone numbers. Defaults to true upstream. type: boolean signals: description: Include buying-intent signals in the response. type: boolean title: Person Enrichment - Lusha input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: description: The enriched person, or null when nothing matched. oneOf: - type: 'null' - properties: company: description: The person's current employer. properties: city: description: Headquarters city. type: string companyId: description: Lusha's own company identifier. type: string country: description: Headquarters country. type: string description: description: Company description. type: string domain: description: Primary company domain. type: string emailDomain: description: Domain the company's work email addresses use. type: string employeeRange: description: Employee headcount band as [min, max]. items: type: integer type: array facebookUrl: description: Company Facebook page URL. format: uri type: string fqdn: description: Fully qualified host for the company website. type: string image: description: Company logo URL. format: uri type: string linkedinUrl: description: Company LinkedIn page URL. format: uri type: string mainIndustry: description: Top-level industry. type: string naicsCodes: description: NAICS classification codes for the company. items: properties: code: description: NAICS code. type: string description: description: What the NAICS code covers. type: string required: - code type: object type: array name: description: Company name. type: string revenueRange: description: Annual revenue band in USD as [min, max]. items: type: integer type: array sicCodes: description: SIC classification codes for the company. items: properties: code: description: SIC code. type: string description: description: What the SIC code covers. type: string required: - code type: object type: array state: description: Headquarters state or region. type: string subIndustry: description: Sub-industry. type: string technologies: description: Technologies Lusha detects in the company's stack. items: type: string type: array website: description: Company website URL. format: uri type: string xUrl: description: Company X (Twitter) profile URL. format: uri type: string type: object contactTags: description: Tags Lusha attaches to the contact. items: type: string type: array departments: description: Departments Lusha assigns the current role, e.g. General Management. items: type: string type: array email: description: Best email address Lusha holds, the first entry of emails. type: string emails: description: Every email address Lusha holds for the person. items: properties: confidence: description: Lusha's confidence grade for the address, e.g. A+. type: string email: description: Email address. type: string type: description: Address kind, e.g. work or personal. type: string updatedUtc: description: UTC epoch timestamp in seconds (Unix time) the address was last confirmed. Multiply by 1000 for a JS Date in milliseconds. type: number required: - email type: object type: array firstName: description: Person's first name. type: string fullName: description: Person's full name. type: string jobStartUtc: description: UTC epoch timestamp in seconds (Unix time) the person started the current role. Multiply by 1000 for a JS Date in milliseconds. type: number jobTitle: description: Current job title. type: string lastName: description: Person's last name. type: string linkedinConnections: description: LinkedIn connection count. type: integer linkedinFollowers: description: LinkedIn follower count. type: integer linkedinUrl: description: LinkedIn profile URL. format: uri type: string location: description: Where the person is located. properties: city: description: City. type: string continent: description: Continent name. type: string country: description: Country name. type: string countryCode: description: ISO 3166-1 alpha-2 country code. type: string isEuContact: description: True when Lusha classifies the contact as EU-resident. type: boolean state: description: State or region. type: string stateCode: description: State or region code. type: string type: object personId: description: Lusha's own person identifier. type: string phone: description: Best phone number Lusha holds, the first entry of phones. type: string phones: description: Every phone number Lusha holds for the person. items: properties: doNotCall: description: True when the number is on a do-not-call list. type: boolean number: description: Phone number in international format. type: string type: description: Line kind, e.g. mobile or direct. type: string required: - number type: object type: array previousJobTitle: description: Job title of the previous role Lusha holds. type: string seniority: description: Seniority band for the current role, e.g. Founder. type: string updatedUtc: description: UTC epoch timestamp in seconds (Unix time) the record was last refreshed. Multiply by 1000 for a JS Date in milliseconds. type: number required: - fullName type: object found: description: False when Lusha holds no person for the requested identifiers. type: boolean required: - found - data title: Person Enrichment - Lusha output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: Person Enrichment - Lusha tags: - Person Enrichment x-mint: href: /api-reference/person-enrichment/lusha x-payment-info: price: amount: '0.084000' currency: USD mode: fixed protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: amount: '0.084000' currency: USD minimumUsd: '0.001000' mode: fixed quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: amount: '0.084000' currency: USD minimumUsd: null mode: fixed quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/person_enrichment.peopledatalabs: post: description: 'Enrich one person into work email, personal emails, mobile phone, full work history, education and employer firmographics from any identifier People Data Labs can match on. **Price:** \$240.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** one lane serves this API today, so a failed attempt has nowhere to fail over to. Payment outcome follows the selected rail''s settlement policy. **Catalog:** Person Enrichment - People Data Labs pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every Person_enrichment endpoint.' operationId: person_enrichment_peopledatalabs parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: profile: https://www.linkedin.com/in/dharmesh schema: additionalProperties: false anyOf: - required: - profile - required: - email - required: - phone - required: - emailHash - required: - linkedinId - required: - pdlId - required: - name - required: - firstName - lastName example: profile: https://www.linkedin.com/in/dharmesh properties: birthDate: description: Known birth date, to disambiguate a name match. type: string company: description: Company name, website or social URL where the person has worked. type: string country: description: Country to match on. type: string dataInclude: description: Comma-separated People Data Labs fields to include, or a leading - list to exclude. Projection changes the payload only; it does not reduce what the call costs. type: string email: description: Any email address the person has used. format: email type: string emailHash: description: SHA-256 or MD5 hash of an email address, for privacy-preserving matching. type: string firstName: description: First name. Send with lastName plus company, school or location. type: string includeIfMatched: description: Report which of the sent identifiers actually matched. type: boolean lastName: description: Last name. Send with firstName plus company, school or location. type: string linkedinId: description: LinkedIn numeric member id (PDL calls this lid). type: string locality: description: City or locality to match on. type: string location: description: Free-form location string, e.g. brookline, massachusetts, united states. type: string middleName: description: Middle name. type: string minLikelihood: description: Minimum People Data Labs likelihood score a match must reach to count as found. Omitted, this SKU sends 6; the People Data Labs default is 2. maximum: 10 minimum: 1 type: integer name: description: Full name, as an alternative to firstName plus lastName. type: string pdlId: description: People Data Labs persistent person id, as returned by this SKU's pdlId output. type: string phone: description: Phone number in international form, e.g. +16176695906. type: string postalCode: description: Postal or ZIP code to match on. type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer profile: description: Social profile URL the person has used, e.g. a LinkedIn, Twitter, Facebook or GitHub profile. The strongest single identifier. type: string region: description: State or region to match on. type: string required: description: People Data Labs boolean expression over top-level fields that a match must satisfy, e.g. personal_emails or (emails and phone_numbers). type: string school: description: School the person attended, used to disambiguate a name match. type: string streetAddress: description: Street address to match on. type: string titlecase: description: Return text in title case instead of People Data Labs' lowercase default. type: boolean title: Person Enrichment - People Data Labs input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: description: The enriched person, or null when nothing matched. oneOf: - type: 'null' - properties: activityScore: description: People Data Labs' qualitative score for how recently the profile showed activity. type: string birthDate: description: Date of birth as People Data Labs reports it, YYYY-MM-DD. type: string birthYear: description: Year of birth. type: integer company: description: The person's current employer. properties: addressLine2: description: Second line of the headquarters address. type: string companyId: description: People Data Labs company id. type: string continent: description: Headquarters continent. type: string country: description: Headquarters country. type: string facebookUrl: description: Company Facebook page URL. format: uri type: string founded: description: Year the company was founded. type: integer geo: description: Headquarters coordinates as "lat,lon". type: string industry: description: Company industry. type: string industryV2: description: Company industry on People Data Labs' newer taxonomy. type: string linkedinId: description: Company LinkedIn numeric id. type: string linkedinUrl: description: Company LinkedIn page URL. format: uri type: string locality: description: Headquarters city. type: string locationName: description: Headquarters location as one display string. type: string metro: description: Headquarters metro area. type: string name: description: Company name. type: string postalCode: description: Headquarters postal code. type: string region: description: Headquarters state or region. type: string size: description: Employee headcount band, e.g. 5001-10000. type: string streetAddress: description: Headquarters street address. type: string twitterUrl: description: Company X (Twitter) profile URL. format: uri type: string website: description: Company website domain. type: string type: object countries: description: Every country associated with the person. items: type: string type: array datasetVersion: description: Version of the People Data Labs dataset this record came from. type: string education: description: Education history. items: properties: degrees: description: Degrees earned. items: type: string type: array endDate: description: When study ended. type: string gpa: description: Grade point average, when the person published one. type: number majors: description: Majors studied. items: type: string type: array minors: description: Minors studied. items: type: string type: array schoolId: description: People Data Labs school id. type: string schoolLinkedinUrl: description: School LinkedIn page URL. format: uri type: string schoolLocationName: description: School location as one display string. type: string schoolName: description: School name. type: string schoolType: description: School type, e.g. post-secondary institution. type: string schoolWebsite: description: School website domain. type: string startDate: description: 'When study started: YYYY, YYYY-MM or YYYY-MM-DD.' type: string type: object type: array emails: description: Every email address held for the person, with its kind. items: properties: address: description: Email address. type: string type: description: Address kind, e.g. professional or personal. type: string required: - address type: object type: array experience: description: Work history, most relevant first. items: properties: companyFounded: description: Year the employer was founded. type: integer companyId: description: People Data Labs company id for the employer. type: string companyIndustry: description: Employer industry. type: string companyLinkedinUrl: description: Employer LinkedIn page URL. format: uri type: string companyLocationName: description: Employer headquarters as one display string. type: string companyName: description: Employer name. type: string companySize: description: Employer headcount band. type: string companyWebsite: description: Employer website domain. type: string endDate: description: When the role ended, absent while the role is current. type: string isPrimary: description: True for the role People Data Labs treats as current. type: boolean locationNames: description: Where the role was based. items: type: string type: array startDate: description: 'When the role started: YYYY, YYYY-MM or YYYY-MM-DD.' type: string title: description: Job title held. type: string titleClass: description: Normalized title class. type: string titleLevels: description: Seniority levels for the title. items: type: string type: array titleRole: description: Normalized role for the title. type: string titleSubRole: description: Normalized sub-role for the title. type: string type: object type: array facebookId: description: Facebook numeric id. type: string facebookUrl: description: Facebook profile URL. format: uri type: string facebookUsername: description: Facebook handle. type: string firstName: description: First name. type: string fullName: description: Person's full name. type: string githubUrl: description: GitHub profile URL. format: uri type: string githubUsername: description: GitHub handle. type: string industry: description: Industry the person works in. type: string interests: description: Interests the person lists. items: type: string type: array jobChangedUtc: description: UTC epoch timestamp in seconds (Unix time) the person last changed jobs. Multiply by 1000 for a JS Date in milliseconds. type: number jobStartDate: description: 'When the current role started, as People Data Labs reports it: YYYY, YYYY-MM or YYYY-MM-DD.' type: string jobTitle: description: Current job title. type: string jobTitleClass: description: Normalized title class, e.g. research_and_development. type: string jobTitleLevels: description: Seniority levels for the current title, e.g. cxo, owner. items: type: string type: array jobTitleRole: description: Normalized role for the current title, e.g. engineering. type: string jobTitleSubRole: description: Normalized sub-role for the current title. type: string jobVerifiedUtc: description: UTC epoch timestamp in seconds (Unix time) the current role was last verified. Multiply by 1000 for a JS Date in milliseconds. type: number lastInitial: description: Last initial. type: string lastName: description: Last name. type: string linkedinId: description: LinkedIn numeric member id. type: string linkedinUrl: description: LinkedIn profile URL. format: uri type: string linkedinUsername: description: LinkedIn vanity handle. type: string location: description: Where the person lives. properties: addressLine2: description: Second line of the address. type: string continent: description: Continent. type: string country: description: Country. type: string geo: description: Coordinates as "lat,lon". type: string locality: description: City. type: string metro: description: Metro area. type: string name: description: Location as one display string. type: string postalCode: description: Postal code. type: string region: description: State or region. type: string streetAddress: description: Street address. type: string updatedUtc: description: UTC epoch timestamp in seconds (Unix time) the location was last updated. Multiply by 1000 for a JS Date in milliseconds. type: number type: object locationNames: description: Every location People Data Labs has associated with the person. items: type: string type: array middleInitial: description: Middle initial. type: string middleName: description: Middle name. type: string mobilePhone: description: Mobile phone number in international form. type: string pdlId: description: People Data Labs persistent person id. Send it back as this SKU's pdlId input. type: string personalEmails: description: Personal email addresses. items: type: string type: array phoneNumbers: description: Every phone number held for the person. items: type: string type: array profileScore: description: People Data Labs' qualitative score for how complete the profile is. type: string profiles: description: Every social profile linked to the person. items: properties: network: description: Network name, e.g. linkedin, github, twitter. type: string profileId: description: Network's own id for the profile. type: string url: description: Profile URL. format: uri type: string username: description: Handle on that network. type: string required: - network type: object type: array recommendedPersonalEmail: description: The personal address People Data Labs recommends reaching the person at. type: string regions: description: Every region associated with the person. items: type: string type: array sex: description: Sex recorded for the person. type: string skills: description: Skills the person lists. items: type: string type: array streetAddresses: description: Every street address associated with the person. items: properties: addressLine2: description: Second line of the address. type: string continent: description: Continent. type: string country: description: Country. type: string geo: description: Coordinates as "lat,lon". type: string locality: description: City. type: string metro: description: Metro area. type: string name: description: Address location as one display string. type: string postalCode: description: Postal code. type: string region: description: State or region. type: string streetAddress: description: Street address. type: string type: object type: array twitterUrl: description: X (Twitter) profile URL. format: uri type: string twitterUsername: description: X (Twitter) handle. type: string workEmail: description: Best work email address. type: string required: - fullName type: object found: description: False when People Data Labs matched no person above the likelihood threshold. type: boolean required: - found - data title: Person Enrichment - People Data Labs output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: Person Enrichment - People Data Labs tags: - Person Enrichment x-mint: href: /api-reference/person-enrichment/peopledatalabs x-payment-info: price: amount: '0.240000' currency: USD mode: fixed protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: amount: '0.240000' currency: USD minimumUsd: '0.001000' mode: fixed quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: amount: '0.240000' currency: USD minimumUsd: null mode: fixed quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/person_enrichment.prospeo: post: description: 'Enrich one person into work email, mobile phone, full job history and employer firmographics from a LinkedIn URL, an email, or a name plus company domain. **Price:** \$66.00 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** one lane serves this API today, so a failed attempt has nowhere to fail over to. Payment outcome follows the selected rail''s settlement policy. **Catalog:** Person Enrichment - Prospeo pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every Person_enrichment endpoint.' operationId: person_enrichment_prospeo parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: linkedinUrl: https://www.linkedin.com/in/dharmesh schema: additionalProperties: false anyOf: - required: - linkedinUrl - required: - email - required: - personId - required: - firstName - lastName - companyWebsite - required: - firstName - lastName - companyName - required: - fullName - companyWebsite - required: - fullName - companyName example: linkedinUrl: https://www.linkedin.com/in/dharmesh properties: companyLinkedinUrl: description: Employer LinkedIn page URL, for a more precise match. format: uri type: string companyName: description: Employer name. Avoid sending it alone; many companies share a name. minLength: 1 type: string companyWebsite: description: Employer domain, e.g. stripe.com. Preferred over companyName. minLength: 1 type: string email: description: Known email address, used as the sole identity seed for a reverse lookup. format: email type: string enrichMobile: description: Reveal the mobile number. Without it the number comes back masked. type: boolean firstName: description: First name. Send with lastName plus companyWebsite for the best hit rate. minLength: 1 type: string fullName: description: Full name, as an alternative to firstName plus lastName. minLength: 1 type: string lastName: description: Last name. minLength: 1 type: string linkedinUrl: description: LinkedIn profile URL. The most accurate identifier, alone or with a name. format: uri type: string onlyVerifiedEmail: description: Return a match only when Prospeo has a verified email for it. Defaults to false. type: boolean onlyVerifiedMobile: description: Return a match only when Prospeo has a verified mobile for it. type: boolean personId: description: Prospeo person id from an earlier People Search - Prospeo call. minLength: 1 type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer title: Person Enrichment - Prospeo input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: description: The enriched person, or null when nothing matched. oneOf: - type: 'null' - properties: company: description: The person's current employer, with Prospeo's full firmographic record. properties: attributes: description: What Prospeo detects about how the company sells. properties: hasDemo: description: The website offers a demo. type: boolean hasDownloadable: description: The website offers a download. type: boolean hasFreeTrial: description: The website offers a free trial. type: boolean hasMobileApps: description: The company publishes mobile apps. type: boolean hasOnlineReviews: description: The company has online reviews. type: boolean hasPricing: description: The website publishes pricing. type: boolean isB2b: description: The company sells to businesses. type: boolean type: object companyId: description: Prospeo's own company identifier. Send it back as this SKU's companyId input. type: string crunchbaseUrl: description: Company Crunchbase profile URL. format: uri type: string description: description: Company description as the company writes it. type: string descriptionAi: description: Prospeo's own AI-written company summary. type: string descriptionSeo: description: Meta description from the company's website. type: string domain: description: Primary company domain. type: string emailTech: description: How the company's email is hosted. properties: domain: description: Domain the company's email addresses use. type: string mxProvider: description: Mail provider behind the domain's MX records. type: string type: object employeeCount: description: Employees Prospeo currently counts. type: integer employeeCountOnProspeo: description: Employees of this company that Prospeo holds a profile for. type: integer employeeRange: description: Employee headcount band, e.g. 10000+. type: string facebookUrl: description: Company Facebook page URL. format: uri type: string founded: description: Year the company was founded. type: integer funding: description: Funding history. properties: events: description: One entry per funding round. items: properties: amount: description: Amount raised in USD. type: number amountPrinted: description: Amount raised as a display string. type: string link: description: Source URL for the round. format: uri type: string raisedUtc: description: UTC epoch timestamp in seconds (Unix time) the round closed. Multiply by 1000 for a JS Date in milliseconds. type: number stage: description: Round stage, e.g. Series E-J. type: string type: object type: array latestStage: description: Most recent funding stage. type: string latestUtc: description: UTC epoch timestamp in seconds (Unix time) of the most recent round. Multiply by 1000 for a JS Date in milliseconds. type: number rounds: description: Number of funding rounds raised. type: integer totalRaised: description: Total capital raised, in USD. type: number totalRaisedPrinted: description: Total capital raised as a display string. type: string type: object image: description: Company logo URL. format: uri type: string industry: description: Company industry. type: string instagramUrl: description: Company Instagram profile URL. format: uri type: string jobPostings: description: Open roles Prospeo currently sees for the company. properties: activeCount: description: Open roles currently posted. type: integer activeTitles: description: Titles of the open roles. items: type: string type: array type: object keywords: description: Keywords Prospeo assigns the company. items: type: string type: array linkedinId: description: Company LinkedIn numeric id. type: string linkedinUrl: description: Company LinkedIn page URL. format: uri type: string location: description: Company headquarters. properties: city: description: City. type: string country: description: Country name. type: string countryCode: description: ISO 3166-1 alpha-2 country code. type: string rawAddress: description: Headquarters address as one display string. type: string state: description: State or region. type: string type: object naicsCodes: description: NAICS classification codes for the company. items: type: string type: array name: description: Company name. type: string otherWebsites: description: Other domains the company owns. items: type: string type: array phoneHq: description: Headquarters switchboard number. properties: country: description: Country the number belongs to. type: string countryCode: description: ISO 3166-1 alpha-2 code for that country. type: string international: description: Number in international format. type: string national: description: Number in national format. type: string phone: description: Phone number as Prospeo stores it. type: string type: object revenueRange: description: Annual revenue band in USD. properties: max: description: Upper bound in USD. type: number min: description: Lower bound in USD. type: number type: object revenueRangePrinted: description: Annual revenue band as a display string. type: string sicCodes: description: SIC classification codes for the company. items: type: string type: array technologies: description: Technologies Prospeo detects in the company's stack. items: type: string type: array twitterUrl: description: Company X (Twitter) profile URL. format: uri type: string type: description: Ownership type, e.g. Private, Public, Non Profit. type: string website: description: Company website URL. format: uri type: string youtubeUrl: description: Company YouTube channel URL. format: uri type: string type: object email: description: Work email address. Prospeo returns the address only once it is revealed; status says why it is absent otherwise. properties: email: description: The email address, when Prospeo revealed one. type: string revealed: description: True when the address below is the full value rather than a masked preview. type: boolean status: description: Prospeo's verdict for the address, e.g. VERIFIED or UNAVAILABLE. type: string type: object firstName: description: First name. type: string freeEnrichment: description: True when Prospeo served this record from cache and did not charge for it. type: boolean fullName: description: Person's full name. type: string headline: description: LinkedIn headline. type: string jobChangeDetectedUtc: description: UTC epoch timestamp in seconds (Unix time) Prospeo last detected a job change. Multiply by 1000 for a JS Date in milliseconds. type: number jobHistory: description: Every role Prospeo holds for the person, most recent first. items: properties: companyId: description: Prospeo company id for the employer. type: string companyName: description: Employer name. type: string current: description: True while the role is current. type: boolean departments: description: Departments Prospeo assigns the role. items: type: string type: array durationMonths: description: How long the role has run, in months. type: integer endMonth: description: Month the role ended, absent while current. type: integer endYear: description: Year the role ended, absent while current. type: integer jobKey: description: Prospeo's identifier for this role. type: string seniority: description: Seniority band, e.g. C-Suite, Manager, Entry. type: string startMonth: description: Month the role started, 1 to 12. type: integer startYear: description: Year the role started. type: integer title: description: Job title held. type: string type: object type: array jobKey: description: Prospeo's identifier for the current role. type: string jobTitle: description: Current job title. type: string lastName: description: Last name. type: string linkedinMemberId: description: LinkedIn numeric member id. type: string linkedinUrl: description: LinkedIn profile URL. format: uri type: string location: description: Where the person is located. properties: city: description: City. type: string country: description: Country name. type: string countryCode: description: ISO 3166-1 alpha-2 country code. type: string state: description: State or region. type: string timeZone: description: IANA time zone, e.g. America/New_York. type: string timeZoneOffset: description: Current offset from UTC in hours. type: number type: object mobile: description: Mobile phone number. Digits are masked until the number is revealed; send enrichMobile to reveal it. properties: country: description: Country the number belongs to. type: string countryCode: description: ISO 3166-1 alpha-2 code for that country. type: string international: description: Number in international format. type: string mobile: description: The number as Prospeo stores it. type: string national: description: Number in national format. type: string revealed: description: True when the digits below are the full number rather than a masked preview. type: boolean status: description: Prospeo's verdict for the number, e.g. VERIFIED or UNAVAILABLE. type: string type: object personId: description: Prospeo's own person identifier. Send it back as this SKU's personId input. type: string skills: description: Skills the person lists. items: type: string type: array required: - fullName type: object found: description: False when Prospeo matched nothing. type: boolean required: - found - data title: Person Enrichment - Prospeo output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: Person Enrichment - Prospeo tags: - Person Enrichment x-mint: href: /api-reference/person-enrichment/prospeo x-payment-info: price: amount: '0.066000' currency: USD mode: fixed protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: amount: '0.066000' currency: USD minimumUsd: '0.001000' mode: fixed quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: amount: '0.066000' currency: USD minimumUsd: null mode: fixed quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution /v1/run/person_enrichment.quickenrich: post: description: 'Turn a work email into the person behind it: name, title, LinkedIn, and their employer''s firmographics. Coverage is strongest for small and local businesses. **Price:** \$7.20 per 1,000 requests (flat per request - same cost regardless of results returned). **Routing:** one lane serves this API today, so a failed attempt has nowhere to fail over to. Payment outcome follows the selected rail''s settlement policy. **Catalog:** Person Enrichment - QuickEnrich pricing and uptime - live USD price, lane routing, and measured 30-day uptime. Every Person_enrichment endpoint.' operationId: person_enrichment_quickenrich parameters: - description: Optional. Comma-separated keys (dotted paths like `author.name` descend into nested objects) to keep on each result item. Keys are matched relative to each result item after the `data`/`items` envelope is unwrapped, not against the top-level response envelope, so use `jq` to reshape the whole envelope. Shrinks the response without changing cost. in: query name: fields required: false schema: type: string - description: Optional. Cap the number of result rows returned; a `_truncated` note reports how many were withheld so you can page via the API's own `limit`. Does not change cost. in: query name: max_items required: false schema: minimum: 0 type: integer - description: Optional. Return only a structural outline (top-level keys, item counts, and per-field byte sizes) instead of the full data. Does not change cost. in: query name: summary required: false schema: type: boolean - description: 'Optional. A jq expression applied to the result envelope; its output replaces `output` (multiple outputs collect into an array). Reshape freely, e.g. `jq=.data | {title, description, md: .markdown[:3500]}`. Runs sandboxed with a 250ms / 2MB budget; on failure the full result is returned with a `jqError`. Does not change cost.' in: query name: jq required: false schema: type: string - description: Optional. The most you are willing to pay for this one request, in US dollars (for example 0.05). Any route that would charge more than this is not used, so a request only ever runs on something you can afford. If nothing is available at or below your amount, the request is refused before it runs, nothing is charged, and the message tells you the cheapest price per request so you can raise it. Leave it out to accept the normal price. in: query name: max_cost_usd required: false schema: type: string - description: Optional wallet idempotency key, scoped to this customer for 24 hours. When the gateway honors the key, this synchronous in-process execution can continue after the caller disconnects, bounded by its execution deadline. A completed replayable result charges normally exactly once and can be replayed without another provider run or charge. A pending duplicate returns 409 idempotency_in_progress; reuse with different request semantics returns 409 idempotency_conflict. in: header name: Idempotency-Key required: false schema: maxLength: 255 minLength: 1 type: string requestBody: content: application/json: example: email: wprice@southmemphisfence.com schema: additionalProperties: false example: email: wprice@southmemphisfence.com properties: email: description: Exact work email address to look up. format: email maxLength: 255 type: string preferLatencyUnderMs: description: 'Optional; omit it and routing is unchanged, with the cheapest source serving. Prefer sources whose typical response time (median over the trailing 30 days, as published on this endpoint''s lane health) is under this many milliseconds; among those, the cheapest serves. This can raise your price: when the cheapest source misses the target, a faster and dearer one serves, and you are quoted and charged its price. If no source is that fast the request is still served, by whichever source offers the best speed for its price - it is never refused for being slow. Sources we have not timed are tried last. This is a preference, not a guarantee: the median describes past requests and is not a ceiling on this one, and it excludes any wait this request itself asks for. On a paginated walk it applies to the first page only: later pages stay with the source that page chose, at the price it was quoted.' minimum: 1 type: integer required: - email title: Person Enrichment - QuickEnrich input type: object required: true responses: '200': content: application/json: schema: properties: costUsd: description: USD charged on the original run. On a replay this value is echoed for parity; the replay itself is free. type: number hint: description: 'Optional one-line nudge, absent when there is nothing to say. `large_result:` suggests the fields/max_items/summary/jq controls for a big response. `paging_unavailable:` means this result came from a source that cannot return a `nextCursor`, so it may be INCOMPLETE and cannot be continued - re-run with `requireCursor: true` to be served only by a source that can page, which may cost more per request.' type: string items: description: Number of result rows returned. For per-result SKUs the per-item cost is charged against this count; for input-priced SKUs the charge is per submitted input, independent of this count. type: integer jqError: description: Present only when a `jq` expression failed; `output` then carries the full unshaped result and this explains why the reshape did not apply. type: string output: anyOf: - additionalProperties: false properties: data: description: Normalized record, or null when the request matched nothing. oneOf: - type: 'null' - properties: address: description: Street address on the employer record. type: string city: description: City on the employer record. type: string companyDomain: description: Employer website domain. type: string companyEmployeeCount: description: Employer headcount band, e.g. "20 - 99". Upstream band vocabulary; "Not Available" means the band is unknown. type: string companyIndustry: description: Employer industry label. type: string companyLinkedinUrl: description: Employer LinkedIn company URL. type: string companyName: description: Employer name. type: string companyPhone: description: Employer main phone line. type: string companyRevenue: description: Employer revenue band, e.g. "1 - 2.5 Million". Upstream band vocabulary; "Not Available" means the band is unknown. type: string country: description: ISO 3166-1 alpha-2 country code on the employer record. type: string email: description: Work email address. type: string emailDomain: description: Domain the work email resolves to. type: string emailVerifiedUtc: description: UTC epoch timestamp in seconds (Unix time). Multiply by 1000 for a JS Date in milliseconds. type: number firstName: description: Person's first name. type: string lastName: description: Person's last name. type: string linkedinUrl: description: Person's LinkedIn profile URL. type: string phone: description: Direct business phone line held for the person. Mostly desk lines; read phoneType before treating it as a mobile. type: string phoneType: description: Line type reported upstream, e.g. "mobile" or "landline". type: string postalCode: description: Postal code on the employer record. type: string region: description: State or region code on the employer record. type: string title: description: Person's job title. type: string required: - firstName type: object found: description: Whether the address matched a person. type: boolean required: - found - data title: Person Enrichment - QuickEnrich output type: object - type: 'null' description: Normalized output, or null when the replay payload was not retained. provider: description: Always "AnyAPI". type: string replayed: description: True when this response replays the durable result of an earlier run without billing or upstream execution. type: boolean resultId: description: Opaque handle to the full unshaped result, cached ~15 min. Re-shape it for free (fields/max_items/summary/jq) via GET /v1/results/{id}, no re-billing. Absent when the result was too large to cache. type: string required: - output - provider - costUsd - items - replayed type: object description: Normalized result. headers: Idempotency-Replayed: description: Present only when the request carried an Idempotency-Key this gateway honored. "false" means the key was claimed and the run executed freshly; "true" means it replayed a prior identical run and was NOT charged again. Absent means either no key was sent or this gateway does not honor keys, so a retry could be charged twice. schema: enum: - 'false' - 'true' type: string PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string Payment-Receipt: description: Inline mpp payment receipt. schema: type: string X-PAYMENT-RESPONSE: description: Inline x402 payment receipt. schema: type: string '400': content: application/json: schema: $ref: '#/components/schemas/Error' description: Input did not match the schema, or the upstream rejected the request. '401': content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key. '402': content: application/json: schema: oneOf: - $ref: '#/components/schemas/PaymentRequiredError' - $ref: '#/components/schemas/TrialCapReached' application/problem+json: schema: properties: challengeId: minLength: 1 type: string status: const: 402 type: integer required: - status - challengeId type: object description: Insufficient wallet balance or spend cap, or an inline-payment challenge. Agent trials receive a trial_cap_reached continuation with a live RFC 8628 device authorization. headers: PAYMENT-REQUIRED: description: Inline x402 payment challenge. schema: type: string WWW-Authenticate: description: Inline mpp payment challenge. schema: type: string '404': content: application/json: schema: $ref: '#/components/schemas/Error' description: Unknown SKU, or the upstream had no matching resource. '409': content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Idempotency collision. Codes: idempotency_in_progress means retry after the Retry-After delay; idempotency_conflict means use a new key for different request semantics; idempotency_needs_review means stop retrying and contact AnyAPI support with X-Anyapi-Request-Id.' '422': content: application/json: schema: $ref: '#/components/schemas/Error' description: The request was well formed but this API cannot serve the requested target site; the body's `alternatives` array lists the AnyAPI APIs that can. '429': content: application/json: schema: $ref: '#/components/schemas/Error' description: The upstream was rate limited; inspect `payment` when present before deciding whether to retry. '500': content: application/json: schema: $ref: '#/components/schemas/Error' description: An internal error prevented completion. Inspect payment when present before retrying. '502': content: application/json: schema: $ref: '#/components/schemas/Error' description: Every provider failed with a server/transport error, or inline payment settlement could not be confirmed; inspect `payment` when present before retrying. security: - bearerAuth: [] - apiKeyAuth: [] - {} summary: Person Enrichment - QuickEnrich tags: - Person Enrichment x-mint: href: /api-reference/person-enrichment/quickenrich x-payment-info: price: amount: '0.007200' currency: USD mode: fixed protocols: - x402: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact - mpp: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rails: - headers: challenge: - PAYMENT-REQUIRED credential: - PAYMENT-SIGNATURE - X-PAYMENT receipt: - PAYMENT-RESPONSE - X-PAYMENT-RESPONSE pricing: amount: '0.007200' currency: USD minimumUsd: '0.001000' mode: fixed quoteBasis: floor protocol: asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' network: eip155:8453 payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' scheme: exact rail: x402 settlement: onExecutionFailure: released onUnknownFinalization: indeterminate timing: after_execution - headers: challenge: - WWW-Authenticate credential: - Authorization receipt: - Payment-Receipt pricing: amount: '0.007200' currency: USD minimumUsd: null mode: fixed quoteBasis: funded_ceiling protocol: asset: '0x20c000000000000000000000b9537d11c60e8b50' currency: USD intent: charge method: tempo network: tempo payTo: '0x754BD2A6799e766B1E2b9f1Ae7fBdC0CeD96ef13' rail: tempo scheme: exact rail: mpp settlement: onExecutionFailure: charged_undelivered onVerificationError: indeterminate timing: before_execution components: schemas: AgentUpgrade: properties: authorizationServer: format: uri type: string clientId: type: string device: $ref: '#/components/schemas/DeviceUpgrade' scope: type: string required: - authorizationServer - scope type: object Payment: properties: costUsd: description: Known USD payment amount for this request. minimum: 0 type: number rail: minLength: 1 type: string settlementState: enum: - charged_undelivered - indeterminate type: string required: - rail - settlementState - costUsd type: object Error: properties: code: description: Stable machine-readable error code when the endpoint defines one. type: string error: description: Customer-safe error message. type: string payment: $ref: '#/components/schemas/Payment' requestId: description: This run's AnyAPI request id, the same value as the X-Anyapi-Request-Id response header. Quote it to support. Absent on endpoints that do not execute a run. format: uuid type: string required: - error type: object PaymentRequiredError: allOf: - $ref: '#/components/schemas/Error' - properties: error: not: const: trial_cap_reached type: object DeviceUpgrade: properties: deviceCode: type: string expiresIn: minimum: 0 type: integer grantType: type: string interval: minimum: 1 type: integer tokenEndpoint: format: uri type: string userCode: type: string verificationUri: format: uri type: string verificationUriComplete: format: uri type: string required: - verificationUriComplete - verificationUri - userCode - deviceCode - tokenEndpoint - grantType - interval - expiresIn type: object TrialCapReached: properties: error: const: trial_cap_reached type: string message: description: Human-relayable continuation instructions, including an executable token poll. type: string upgrade: $ref: '#/components/schemas/AgentUpgrade' required: - error - message - upgrade type: object securitySchemes: apiKeyAuth: description: Your AnyAPI key. in: header name: X-API-Key type: apiKey x-default: YOUR_ANYAPI_KEY bearerAuth: description: Your AnyAPI key as a Bearer token. scheme: bearer type: http x-default: YOUR_ANYAPI_KEY